Skip to content

rename dsl -> dag - #6165

Merged
briansrls merged 4 commits into
mainfrom
session/eager-otter-104
Jul 2, 2026
Merged

briansrls merged 4 commits into
mainfrom
session/eager-otter-104

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session eager-otter-104.
Pushing to session/eager-otter-104 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 2, 2026 21:05
briansrls and others added 2 commits July 2, 2026 21:23
…dmap_authority: keep dag rename + main's enforcement-intent entry)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@briansrls
briansrls merged commit 2749a44 into main Jul 2, 2026
0 of 2 checks passed
@briansrls
briansrls deleted the session/eager-otter-104 branch July 2, 2026 21:31
briansrls added a commit that referenced this pull request Jul 2, 2026
Dissolution-trigger roster paths and runbook entry points now use dag/
so they match the renamed corpus tree.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 2, 2026
…checks. BMC Redfish alive (192.168.1.192, HTTP 200); router shows srv3 OS never on network. PREP everything runnable-by-command; live mount+boot+install is OPERATOR-GATED and the operator is available NOW — coordinate live steps th (#6134)

* Rebase srv3 os-install-actuated prep onto main (#6151 landed).

Replay srv3 bringup modeling on current main: seeded autoinstall ISO,
actuator selection, install media fetch, SOL capture, scope boundaries,
and witnesses. Ground hostnamectl path via fleet_posix_accounts; keep

Co-authored-by: Cursor <cursoragent@cursor.com>
#6151 grounded-principal ci_deploy_access authority intact.

* Assimilate srv3 os-install prep with landed main modeling (#6151, #6146).

Wire NBD serve consumers to seeded ISO path authority; add srv3_seeded_os_install_plan
(NoCloudLocal on-ISO). Ground credential debt on bmc_srv3_admin_secret_ref while
runtime login stays factory-login scaffold. Legacy NoCloudNet solver plan seed gap
remains fail-closed until unattended boot proven by execution.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* Register actuator toolchain ensure on medium_structure_exception_roster.

The concat-built bash ensure runner had a dissolve-on marker but no roster
row, which would leak medium_structure_containment; align with sibling runners.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix off-by-one in workflow approval-before-boot witness.

skip(n).first() is 0-based skip-then-head; operator approval is index 5
and boot-once index 6, not 4 and 5.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix toolchain ensure script concat parse error for srv1 live run.

Nested concat arity and escaped-quote strings broke dsl compile; simplify
websocat ensure for aarch64 actuator host (srv1).

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* Fix websocat ensure concat nesting for dsl compile on srv1.

Prior nested concat left an unclosed paren; mirror apt-tool if/else/fi shape.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix live toolchain ensure: websocat asset name and socat version check.

v1.14.0 publishes websocat_max.aarch64-unknown-linux-musl (not websocat.*);
socat has no --version flag; mkdir /var/lib/gunbc/bin via sudo.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Run BMC login and serve scripts via bash heredoc on srv1.

serialize_bash emits multiline scripts; sh -c only executed the first line,
leaving login response empty.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* Register shell_bash_runner on medium_structure_exception_roster.

The shared bash-heredoc concat helper lacked its own scaffold dissolve-on
marker; consumers were rostered but the transport helper was not.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* Derive BMC login username from credential resolution variant.

srv3_bmcweb_login_body_content_for_resolution ignored its resolution
parameter and always re-read intent.account; match UseFactoryCredential vs
UseRotatedSecretRef so the body tracks the resolved credential path.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Honest scaffolds for nbd RawLine bringup and SOL Redfish authority.

Extend nbd_proxy_serve dissolution marker to name the live-bringup RawLine
regression; wire redfish_serial_interface_authority via transport dispatch
with a witness so the cited DMTF row is not orphaned.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Wrap install-media-fetch and SOL capture in shell_exec_via_bash.

Multiline serialize_bash/concat scripts must not ride bare shell.Exec.Run
(sh -c first-line truncation); match seeded-media and toolchain ensure paths.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* Fix diagnostic observe-script emit and enroll checklist on medium roster.

Escape bash/curl writeout fragments so the .dag parser does not treat
${VAR} and %{http_code} as host interpolations; register the new
shell-runner checklist module on medium_structure_exception_roster.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* WIP: srv3-bringup — finish prefix:os-install-actuated + first subsumption che

* fix: update srv3 paths dsl→dag after main merge (#6165)

Dissolution-trigger roster paths and runbook entry points now use dag/
so they match the renamed corpus tree.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 3, 2026
BASELINE_COMMIT (aeb1739) predates neither the dsl->dag rename
(#6165) — recapture the whole_corpus_semantic_oracle_snapshot fixture
against that commit's tree so the corpus/diagnostic/emit-graph
fingerprints match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 3, 2026
db559b4 predates dsl->dag rename; cold CI cache missed the frozen
corpus and `git archive dag` failed. Archive dsl src/v1 instead.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 3, 2026
…dsl->dag rename (#6191)

* WIP: Fix func_env_semantic_equivalence_test.rs: BASELINE_COMMIT db559b4 p

* Recapture func_env semantic baseline fixture at post-rename commit

BASELINE_COMMIT (aeb1739) predates neither the dsl->dag rename
(#6165) — recapture the whole_corpus_semantic_oracle_snapshot fixture
against that commit's tree so the corpus/diagnostic/emit-graph
fingerprints match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 3, 2026
…eline

rust_tests failed: git archive db559b4 dag — pathspec 'dag' did not
match any files. Baseline commit predates #6165 (dsl → dag rename); use
the historical tree name for archive, cache probe, and corpus roots.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 3, 2026
Prior dashboard failure @ ab2f9d2 was a partial WIP (comment-only); superseded
by 9f66470 which fixes archive/cache/roots to use dsl/ from pre-#6165 baseline.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 3, 2026
…eline

Main landed aeb1739 + dag/ archive (baseline postdates dsl→dag rename).
Supersedes our interim dsl/ workaround on db559b4.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 3, 2026
…d builders (#6173)

* De-fork coproduct_reflection: share live-registry walk and decl record builders

Continue Chunk G after #6163's concept_decl_facts substrate: extract
for_each_live_registry_item for all *_decl_facts_live builtins, plus
fn_arrow_decl_record and data_init_decl_record shared by live evaluators.
fn_item_param_names is now single authority for param extraction.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(coproduct_reflection): cargo fmt for for_each_live_registry_item call sites

CI rust_tests gate failed cargo fmt --check on the single-line
for_each_live_registry_item closures in concept/data_init live evaluators.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: retrigger after 30m runner timeout (no code change)

Prior run 28633571847: rust_tests and ci jobs were cancelled at
timeout-minutes:30 while fmt/clippy passed and nextest/gunbc-ci were
still running — infra timeout under fleet load, not a test failure.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(test): func_env semantic oracle archives dsl/ from pre-rename baseline

rust_tests failed: git archive db559b4 dag — pathspec 'dag' did not
match any files. Baseline commit predates #6165 (dsl → dag rename); use
the historical tree name for archive, cache probe, and corpus roots.

Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: retrigger on 9f66470 (full dsl baseline archive fix)

Prior dashboard failure @ ab2f9d2 was a partial WIP (comment-only); superseded
by 9f66470 which fixes archive/cache/roots to use dsl/ from pre-#6165 baseline.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 5, 2026
…r (QualifiedName, structural ==) + last dsl stragglers (E0 / PR-0b)

The fired subject_roster_string_dissolution_trigger (vocab.dag), executed:
SubjectRoster carried BOTH filesystem scope roots and declaration names as one
List<String> - a state-space conflation with two different comparison
semantics (path-literal vs segment-structural) in one representation.

- vocab.dag: SubjectRoster.entries -> List<QualifiedName> (v2.std.qualified_name
  authority; compared via structural ==, qualified_name_eq); new ScopeRoster
  { roots: List<String> } for tree roots; ScopeNarrowed.missing -> ScopeRoster;
  scope_roster_covers/subject_roster_covers now two fns with the right
  semantics each; trigger row deleted, split note left on the carrier.
- standing_intent: desired_scope -> ScopeRoster; required_subjects grounds
  v1.compiler.infer.build_type_env via qualified_name_from_dotted_string.
- contract/receipts/gate/enforcement_live: claimed_scope -> ScopeRoster;
  discovered_fn_subjects converts at the decl_facts boundary (subject_qn_of,
  same single pass, linear); self_application_for now reads facts directly
  (String prefix pre-conversion, fn-like only - TypeItem no longer counts
  toward self-application, a small honesty gain).
- NEW RED control: permuted_segment_subject_does_not_cover - a QualifiedName
  with the same segments in a different order must NOT satisfy the subjects
  leg (the discriminator List<String> equality could not express).
- self_application_liveness_discriminates gains a TypeItem-prefix control
  (kind filter proven, not just prefix).
- dsl stragglers renamed (operator ask): phase_profile_proof_plan.dag
  dsl/tools -> dag/tools AND phase_profile_claim_executor.rs --source-root
  dsl -> dag. The Rust consumer test was failing on main since #6165
  (source root does not exist: dsl); it now PASSES by execution - the only
  .rs change is that one literal.

Receipts by execution (2026-07-05): 11/11 gate_test (incl. new permuted
control), 10/10 enforcement_live witnesses; enrolled pair 40s/39s (QualifiedName
interning over 14,283 facts is in the noise); pinned 3-red/3-green verdict
unchanged (representation-only, zero leg flips - as planned);
phase_profile_claim_executor 1 passed.

Typechecker note: QualifiedName alias vs FreeMonoid<Symbol> does not unify in
an if-branch JOIN (nominal expectation flows from a record-field into fold
init while the then-branch expands structurally) - worked around by hoisting
the fold out of the record construction; assignment-position coercion is fine.
Same #5552 alias-instantiation residue family.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 5, 2026
…tructural subjects + last dsl stragglers (E0 PR-0b) (#6256)

* WIP: complexity lens enforcement

* WIP: complexity lens enforcement

* Enforcement rosters: split ScopeRoster (tree roots) from SubjectRoster (QualifiedName, structural ==) + last dsl stragglers (E0 / PR-0b)

The fired subject_roster_string_dissolution_trigger (vocab.dag), executed:
SubjectRoster carried BOTH filesystem scope roots and declaration names as one
List<String> - a state-space conflation with two different comparison
semantics (path-literal vs segment-structural) in one representation.

- vocab.dag: SubjectRoster.entries -> List<QualifiedName> (v2.std.qualified_name
  authority; compared via structural ==, qualified_name_eq); new ScopeRoster
  { roots: List<String> } for tree roots; ScopeNarrowed.missing -> ScopeRoster;
  scope_roster_covers/subject_roster_covers now two fns with the right
  semantics each; trigger row deleted, split note left on the carrier.
- standing_intent: desired_scope -> ScopeRoster; required_subjects grounds
  v1.compiler.infer.build_type_env via qualified_name_from_dotted_string.
- contract/receipts/gate/enforcement_live: claimed_scope -> ScopeRoster;
  discovered_fn_subjects converts at the decl_facts boundary (subject_qn_of,
  same single pass, linear); self_application_for now reads facts directly
  (String prefix pre-conversion, fn-like only - TypeItem no longer counts
  toward self-application, a small honesty gain).
- NEW RED control: permuted_segment_subject_does_not_cover - a QualifiedName
  with the same segments in a different order must NOT satisfy the subjects
  leg (the discriminator List<String> equality could not express).
- self_application_liveness_discriminates gains a TypeItem-prefix control
  (kind filter proven, not just prefix).
- dsl stragglers renamed (operator ask): phase_profile_proof_plan.dag
  dsl/tools -> dag/tools AND phase_profile_claim_executor.rs --source-root
  dsl -> dag. The Rust consumer test was failing on main since #6165
  (source root does not exist: dsl); it now PASSES by execution - the only
  .rs change is that one literal.

Receipts by execution (2026-07-05): 11/11 gate_test (incl. new permuted
control), 10/10 enforcement_live witnesses; enrolled pair 40s/39s (QualifiedName
interning over 14,283 facts is in the noise); pinned 3-red/3-green verdict
unchanged (representation-only, zero leg flips - as planned);
phase_profile_claim_executor 1 passed.

Typechecker note: QualifiedName alias vs FreeMonoid<Symbol> does not unify in
an if-branch JOIN (nominal expectation flows from a record-field into fold
init while the then-branch expands structurally) - worked around by hoisting
the fold out of the record construction; assignment-position coercion is fine.
Same #5552 alias-instantiation residue family.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Aug 11, 2026
main has been red since #8129 and every branch that merges it inherits the
red. Two failures, one root cause, and the cause is NOT where it looks.

`unresolved type 'Memory'` fired in dag/product/budget_tree.dag,
dag/gunbc/ci_budget_tree.dag and dag/test/claim/budget_tree_witness_test.dag --
files dating to #6165 that were compiling. The obvious suspect was #8091, which
added 213 lines to dag/std/measure.dag where `Memory` lives. That was a red
herring: measure.dag's `Memory` lines are untouched. #8129 added a SECOND
declaration spelled `Memory` -- a variant of BoardCapability in
dag/product/compute_board/intent.dag -- and adding a name to the flat namespace
is a corpus-wide edit, so `Memory` became ambiguous and every module importing
it from std.measure as a type stopped resolving. The same PR added
`unsatisfied_capabilities` to dag/product/compute_board/composition.dag, where
gunbc.auth.github_credential already declared one, which is the second failure.

THE NEWER NAME YIELDS, per the single-authority rule: `Quantity.Memory` in
std.measure is the older and broader authority with consumers across the tree,
and `unsatisfied_capabilities` in the auth module has five declaration sites and
two consumers in heal_push_plan. So BoardCapability.Memory becomes
MemorySubsystem -- accurate on an axis whose sibling constructor is already
MemoryCapacity -- and the board fold becomes
unsatisfied_board_capabilities. Nine call sites across four files; no behaviour
changes and no emitted seed file mentions either name.

Green by execution: compute_board_readiness, github_app_registry and
budget_tree witnesses all pass here and all three fail on the base.

WHAT THIS DOES NOT DO, stated so the repair is not mistaken for the wall. There
is no mechanism preventing the next PR from doing exactly this again: the class
is a flat-namespace homonym, which is decidable and therefore a construction
wall waiting on the namespace lane's containment authority, not on diligence.
Until that lands, this class recurs whenever two lanes add the same bare name,
and it will keep arriving as an unrelated-looking build break in a third file.

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Aug 28, 2026
…says so first

I committed this file's import edge as "the witness that EXECUTES against
gunbc.auth.credentials" and opened its annotation with the same claim. I never
measured it. Measured now: 0 test fn, so floor discovery folds nothing from it;
no importer, so the support-module pattern that legitimises a zero-test-fn file
does not apply; no live_tree_disposition, so the fail-closed default would
decline it anyway. Eleven plain fn reachable by nothing.

Asserting execution without measuring it is the exact failure this change is
about, committed one level up: the PR's thesis is that a DeclarationRef creates
no edge, so a module cited that way is inert data dressed as an authority, and
I then offered inert evidence as proof of the repair. Found by smart-ram-730.

The prescribed repair is NOT applied, because it would declare something false.
Converting to test fn under SubstrateInputsOnly would enroll assertions whose
leaves are host effects: both roll-ups call gcp_oauth_access_token_via_gcloud,
whose body is shell.GCloud.AuthPrintAccessToken(), and the ADC leaves declare
uses net: std.resources.Network. Run directly, the gcloud leaf answers
Unimplemented { what: "unknown service operation: shell.GCloud.AuthPrintAccessToken" }
-- the call exists and nothing is behind it. Enrolled that way it would be
refused at the hermetic boundary, counted executed, assert nothing, and carry a
_test.dag name so BarrenTestSidecar vouched for it: a silently inert witness
converted into a loudly enrolled one, which is the decoration DESIGN 4b calls
worse than absent. smart-ram-730 verified this and withdrew the prescription.

So the annotation states the NO-ROUTE fact positively and first, rather than by
omission, and names what would actually make it execute -- modeling the gcloud
service operation, or restructuring onto a subject with no host effect. Neither
is done here; both are a different lane from a citation repair.

The import edge stays. It is a fact about REFERENCE, not execution: this module
names those symbols and resolved them through the flat whole-tree namespace, so
it was depended-upon-but-unimported regardless of whether its assertions ever
run.

The file is pre-existing (2749a44, #6165) and carries these properties on
main unchanged; this commit does not fix that and does not claim to.
briansrls pushed a commit that referenced this pull request Aug 28, 2026
…in for (#9453)

* Replace the credential citation with the import edge it was standing in for

gunbc.tailscale_acl_phase2_credential named gunbc.auth.credentials and
gunbc.auth.optional_impersonation in four DeclarationRef rows and asserted the
binding with a string-equality function, while reaching those modules by no
import edge at all. A DeclarationRef is inert data -- no closure follows it --
so the module this carrier depends on for its credentials entered no compile
closure and was typechecked by nothing, and its own defect (a bare shell.GCloud
reference with no edge to extdeps.shell) stood on main behind that silence.

The check was the matching decoration: every clause compared a row's literal
field against the same literal, so its RED was authorable only by editing the
row it read. Permanently green by construction and cited as evidence that the
credential flow bound these authorities.

Construction over validation (DESIGN section 5): the binding is now an import
edge, carried by the same mechanism that typechecks the calls.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* wip: author the rest of the carrier's edges

* Address review 56750: de-duplicate the witness match, make the strategy match exhaustive

The witness restated the predicate's own match beside a call to it. Deleted.

The wildcard arm is replaced by the named GcloudCli arm so a third strategy is a
compile refusal at the operator-policy site rather than a silent false.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Delete the strategy predicate too: it had the property I deleted the others for

tailscale_acl_operator_adc_strategy is a literal data constant, so a predicate
matching it is green by construction and reddenable only by editing the row it
reads -- the exact property for which this change deleted five string
comparisons. Keeping it was inconsistent; it is a change detector, not a check.

The strategy is still carried structurally: it is passed to
gcp_oauth_access_token, so a value that does not inhabit
GcpOAuth2AccessTokenStrategy refuses at that call.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Attach the witness annotation to its declaration

The replaced comment block left a blank line before the following declaration.
Section 4c admits only ATTACHED standalone leading // blocks; an unattached one
refuses, which is why the witness entry started refusing before emit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Restore the live-write scaffold disposition my predicate deletion swallowed

The deletion sliced from the annotation to design_holds, and that span also
contained data tailscale_acl_phase2_live_write_disposition, so the witness
referencing it went red. Restored verbatim from main, with the stale annotation
that described the deleted predicate removed rather than left over it.

The blank-line change in the witness is reverted: it was a wrong diagnosis of
this error, not a fix for it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Rebuild DESIGN.md as main's projection plus this change's paragraph

The merge left DESIGN.md carrying the ours side verbatim, which drops main's
authority-derived content -- what the generated-artifact merge driver warns
about. Rebuilt from main's projection with the same two substitutions applied to
the merged .dag authority, so the projection and its authority agree and main's
new rows survive.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* The witness that EXECUTES against gunbc.auth.credentials records its edge too

test.claim.gcp_oauth_access_token_witness called gcp_oauth_access_token and both
leaf patterns with zero import statements, reaching them through the flat
whole-tree namespace. That is depended-upon-but-unimported by a live consumer
rather than by a prose row -- the same accidental pool coverage this change
repairs in the carrier, in the worse place.

Measured before adding the edge: each of the four names is declared in exactly
one module across dag/ and src/v2, so the candidate set is a singleton and the
import cannot reorder a binding. No claim is made about bare-name resolution
where a name is multiply declared.

Found by crisp-cat-907, verified by swift-badger-524, routed via warm-hawk-909.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* The witness I said EXECUTES does not execute, and the annotation now says so first

I committed this file's import edge as "the witness that EXECUTES against
gunbc.auth.credentials" and opened its annotation with the same claim. I never
measured it. Measured now: 0 test fn, so floor discovery folds nothing from it;
no importer, so the support-module pattern that legitimises a zero-test-fn file
does not apply; no live_tree_disposition, so the fail-closed default would
decline it anyway. Eleven plain fn reachable by nothing.

Asserting execution without measuring it is the exact failure this change is
about, committed one level up: the PR's thesis is that a DeclarationRef creates
no edge, so a module cited that way is inert data dressed as an authority, and
I then offered inert evidence as proof of the repair. Found by smart-ram-730.

The prescribed repair is NOT applied, because it would declare something false.
Converting to test fn under SubstrateInputsOnly would enroll assertions whose
leaves are host effects: both roll-ups call gcp_oauth_access_token_via_gcloud,
whose body is shell.GCloud.AuthPrintAccessToken(), and the ADC leaves declare
uses net: std.resources.Network. Run directly, the gcloud leaf answers
Unimplemented { what: "unknown service operation: shell.GCloud.AuthPrintAccessToken" }
-- the call exists and nothing is behind it. Enrolled that way it would be
refused at the hermetic boundary, counted executed, assert nothing, and carry a
_test.dag name so BarrenTestSidecar vouched for it: a silently inert witness
converted into a loudly enrolled one, which is the decoration DESIGN 4b calls
worse than absent. smart-ram-730 verified this and withdrew the prescription.

So the annotation states the NO-ROUTE fact positively and first, rather than by
omission, and names what would actually make it execute -- modeling the gcloud
service operation, or restructuring onto a subject with no host effect. Neither
is done here; both are a different lane from a citation repair.

The import edge stays. It is a fact about REFERENCE, not execution: this module
names those symbols and resolved them through the flat whole-tree namespace, so
it was depended-upon-but-unimported regardless of whether its assertions ever
run.

The file is pre-existing (2749a44, #6165) and carries these properties on
main unchanged; this commit does not fix that and does not claim to.

* The Unimplemented receipt was measured before the import edge existed, so it described a module this file no longer is

I put a stale measurement into the commit that was correcting a false claim.

The annotation said the gcloud leaf answers Unimplemented { what: "unknown
service operation: shell.GCloud.AuthPrintAccessToken" } and concluded "nothing
is behind it". That reading was real, but it was taken on main at dabe4c5 --
BEFORE this file had import extdeps.shell in its closure -- where the operation
could not resolve at all. Carried across that boundary it described a module
this file is no longer.

Executed with the edge in place, both roll-ups DISPATCH:

  ◐ started shell.GCloud.AuthPrintAccessToken
  cause: TypeError { msg: "failed to execute 'gcloud': No such file or directory (os error 2)" }

and the swapped roll-up first performs two real reads of
~/.config/gcloud/application_default_credentials.json. So the service operation
is modeled and live; these entries execute a process exec and a file read, and
fail only because the runner lacks the binary.

The conclusion the stale receipt was offered for happens to survive unchanged --
SubstrateInputsOnly is false either way, and now for a stronger reason: not
"the leaf is unreachable" but "the leaf demonstrably performs host effects".
That is precisely what made it invisible. A false premise under a correct
conclusion produces no contradiction to trip over, so nothing forced a re-read;
the argument looked sound because it was sound, on the wrong evidence.

Also corrected: "what would make it execute" named modeling the gcloud service
operation. It is already modeled. What is missing is a subject with no host
effect, or a disposition that admits one.

Found by running the two roll-ups rather than re-reading the code -- the same
instrument that produced the stale number, pointed at the current tree.

---------

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant