Repository navigation
Delete the cited-symbol census job from CI (operator directive), and declare the rung it drops - #9050
Conversation
…declare the rung it drops WHAT IS REMOVED. The `cited-symbol` job — a second GitHub check-run invoking `claim_executor --required-cited-symbol` over `dag` and `src/v2`, which resolved every authored `DeclarationRef` against live declaration facts and refused a reference whose module, declaration or field was absent or ambiguous. On the last green main it reported `OK every authored reference resolves checked=390`. Operator directive, 2026-08-23, in session chat: "i basically just want to delete the cite census job". The instruction was given twice — first as "delete that, i don't want it in CI", then narrowed after I began scoping a substrate change that had not been asked for. THE EDIT IS IN THE AUTHORITY, NOT THE ARTIFACT. `.github/workflows/witnesses.yml` is generated from `gunbc.witness_floor_workflow` via `gunbc.generated_artifact` `WitnessFloorYamlArtifact`; editing the YAML directly would be drift that the next regen reverts. Removed from the authority: the job, its id, run step, run script, bound steps, step annotations, capability-closure predicate, and the 47-line comment block documenting the second-job rationale; `jobs` becomes `[witness_floor_job()]` and the floor's `needs` becomes `[]`. The orphaned argv producer `gunbc.fabric_witness_run` `cited_symbol_run_command` goes with it, as does the one witness assertion over the deleted predicate. The YAML is regenerated rather than hand-edited: -24 lines, exactly the job and the edge. The deletion asserts `'fn witness_floor_job()' not in removed` before writing, so a mis-anchored range cannot take the floor job with the census job. WHAT IS DELIBERATELY NOT REMOVED, because a wider first reading of the instruction would have broken a live wall. `std.decl_ref` and its 345 uses stay. `DeclarationRef` is the MECHANISM, not the census: `admit_callers` on the sealed `ArgvCommand` mint is one of those uses, and it correctly refused main earlier today (#9031). Deleting the type or its uses would have dissolved a working guarantee while removing a check. The lens `v2.lens.cited_symbol_resolution` and the `--required-cited-symbol` mode also stay, now uninvoked — the same standing as `--behavioral-receipt-*` and `--required-regen-fixed-point`, capabilities that survive at their entry points with no workflow calling them. THE RUNG DROP, DECLARED (DESIGN §4b(3)). PREVIOUS RUNG: mechanically preventable. A gate reliably exposed and blocked an unresolvable authored reference; the invalid state stayed writable. TEMPORARY RUNG: none. The class is now unguarded — a stale `DeclarationRef` is writable and nothing detects it. Review diligence is strictly weaker and is not claimed here as a substitute. REASON: operator directive. Recorded as given rather than reconstructed. BOUNDED POPULATION: the 390 references the last green run checked, plus every reference authored after it. RESTORATION TRIGGER: the lens's own declared dissolve-on — "substrate refuses unwritable DeclarationRef at construction". The operator named the same remedy: "you would just make them a normal compiler error or something". So this census was a §5 validation pass standing where construction was available, and it has carried its own replacement condition since it was written. The replacement is NOT built here. WHAT THE CLASS ACTUALLY WAS, so the restoration is not re-derived from scratch. The lens exists because §3 rules that citations are symbolic — a `file:line` pointer is a second positional naming scheme that rots when anything above the line moves. A symbolic citation is decidable, because resolving a name is the `Node`-tree read the namespace authority already performs. A compile-time refusal would be strictly STRONGER than what is deleted: `decl_facts` deliberately skips test `.dag` files, so today a reference can be true and unresolvable at once and needs a whole `CitationIndexCoverage` disposition to carry that; the compiler has the full module graph and would not need the carrier. The open design question is what a construction check resolves AGAINST — the entry closure (deterministic, but refuses deliberate non-dependency citations) or the whole module graph (matches today's behaviour, but makes the answer depend on what else is loaded, which is the pool-dependence class). That question is not settled here. REMOVING THE JOB ALSO REMOVES AN ORDERING EDGE, named because its reason disappears with it. The floor `needs`-ed this job (operator ruling 2026-08-22) after a measured race: both jobs are byte-identical through checkout, toolchain and build, and when they started together on one self-hosted host both installs wrote the same `/home/ghrunner/.cargo/bin/rustc` — `Text file busy`, ETXTBSY, exit 126, at 1 run in 5. With one job left the collision is unrepresentable rather than rare, so the edge is not needed. But the repair now lives nowhere: a second job added later re-opens it, and the rejected alternative (per-job CARGO_HOME/RUSTUP_HOME, paying a cold build every run) is recorded here so it is not re-litigated from zero. VERIFIED, WITH A CONTROL, BECAUSE "MY EDIT COULD NOT HAVE CAUSED THAT" IS THE ASSUMPTION THAT FAILS HERE. Compiling the touched witness entry returns RC=1 with 53 hard diagnostics — ~52 §4c annotation violations in `dag/test/manual/` and one unresolved `stat_owner_user_name_command` in `gunbc.command_runner`. Neither file is touched here, but this change DELETES A FUNCTION, closures move, and name resolution in this tree is pool-dependent, so a same-binary control was run against unmodified `origin/main` in a detached worktree: branch produced 53 hard no-subject 52 stat_owner 1 control produced 53 hard no-subject 52 stat_owner 1 diagnostic sets: IDENTICAL So both are pre-existing and this change moves neither. Note also that they stand on a GREEN main, which means `dag/test/manual/` is outside the required floor's subject: a directory of §4c violations of exactly the class that refused the whole floor this morning is accumulating where nothing checks it. Not repaired here — named so it is not rediscovered as new. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2
… passage a hand edit stranded Review 55180 on #9050 is right: the PR title committed to declaring the rung, and no declaration was in the diff. §4b(3) wants five things for a lowered rung and this row carries all five -- previous rung (mechanically preventable, measured green at checked=390 on run 32664434197, f498863), temporary rung (mitigatable: review diligence), reason (the operator directive, not a defect finding), bounded population (those 390 references plus everything authored after), and a restoration trigger (the wall re-derived at ingestion on the module whose source carries the citation -- the operator's own "just make them a normal compiler error"). It is a sibling row beside the CI bullet rather than a clause inside it, for the reason the regen row one line up already gives: that paragraph is the most-edited prose in the repository and a declaration wedged into it collides with every unrelated edit. It also declines to claim the surviving --required-cited-symbol flag as a mitigation. The mode still exists and still runs standalone, but no workflow invokes it, and a mode nothing calls guards nothing -- counting it would be the §4b(1) inflation this row exists to avoid. SECOND, UNRELATED, AND NOT MINE: regenerating DESIGN.md would have silently deleted a ~2350-character §4b passage. #8914 (f7de1fb) added "At this rung, ask whether the check's RED is authorable before writing the check" to the GENERATED DESIGN.md and never touched gunbc.design_document -- its stat is DESIGN.md and fleet_reach_endpoint only. The text has been quoted since, and existed nowhere the compiler could see. Nothing caught it: the generated-artifact drift gate is on DESIGN's own unguarded list. Ported back into the authority at its exact anchor rather than restored in the .md, because restoring the .md re-creates the drift and the next regen deletes it again. The receipt that the port is faithful is the regen itself: DESIGN.md comes back 1 insertion / 0 deletions, and the §4b line is byte-identical to origin/main. Also drops the trailing blank line review 55180 flagged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2
|
Both findings addressed in The rung-drop declaration (blocking finding). Correct, and the framing is right: the operator directive licenses the deletion, §4b(3) still demands the declaration land with it. The row now carries all five required things — previous rung mechanically preventable, measured green at Two deliberate choices worth naming, since neither is what the review suggested verbatim:
The trailing blank line. Fixed. One thing I found that is not mine and is not in scope, flagged rather than buried. Regenerating I ported it back into the authority at its exact anchor rather than restoring the — sent from fierce-hawk-734 |
Side-chat review caught a real defect in the row I added one commit ago, and it is the kind this document keeps naming: an exact measurement joined to an open future set, and the sum still labelled bounded. The row read "BOUNDED POPULATION: the 390 authored references that run walked, plus every citation authored after it". The first half is a measurement. The second half is unbounded by construction -- nothing counts a citation authored after the cut and nothing refuses one. Calling their union bounded is the same move §5 forbids when a count copied from the current tree is asked to serve as an oracle, committed inside the one row whose entire job is to be honest about a rung. Split into two facts, and the §4b(3) status stated rather than implied: the bounded-population requirement is NOT satisfied by this drop, so the drop is an operator-approved exception to that clause rather than an instance of it. A row that quietly failed a clause it cites would be worse than one that admits it. The other two pushbacks do not change the row. "Temporary rung: none" would indeed be minting a rung out of an absence, but the row claims mitigatable, which is what DESIGN.md already assigns to exactly this residue twice -- §6 for the deleted inert-lens census and §3 for v1_seed_standing, both "consumed by review diligence, so it sits at mitigatable". And the requested disclosure that main_wet reconciliation is blocked pending a content ruling would now be false: the design passage was ported into the authority rather than reverted in the projection, so that split is closed, not deferred. Regen is 1 insertion / 1 deletion, both this row's line. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2
|
Follow-up review raised three pushbacks against the rung-drop row. One landed and is fixed in 1. "390 plus every future reference is not bounded" — correct, fixed. The row read 2. "Temporary rung: none should not mint a rung named 3. "Disclose that global On the deeper point behind (3) — that regeneration is mechanically faithful to its generator and has no authority to settle a content question — I agree, and that is exactly why I ported instead of letting the deletion ride. Between retain and retire, retain is the arm that changes nothing anyone reads, and the text arrived through an operator-merged PR (#8914), so retiring it would need a justification no one has offered. The verify/actuate split the review proposes for the generated-artifact mechanism is a real design point, but it is a separate change and not this PR's to make. — sent from fierce-hawk-734 |
…ing on CI on a4f3e69 went red with FAILED PHASE parse (52 errors), all 52 on one file this branch does not touch: dag/test/manual/command_runner_local_argv_receipt_test.dag. It is the §4c refusal for an annotation that names no subject -- #8919 left a `//` block at end-of-file with no declaration following it. Main repaired it in 1ed0205 (#9027); this branch was cut before that commit and carried the broken file forward. The floor phase passed. The KNOWN-RED-RUNTIME-ERRORED lines filling the log are reported-not-gating by construction and are not why the run went red -- reading them as the failure would have cost an hour on the wrong subject. Both merge conflicts were GENERATED artifacts -- DESIGN.md and .github/workflows/witnesses.yml -- while all three of their authorities merged clean with zero markers. Resolved by regeneration rather than by hand-editing bytes nobody authored: a hand-resolved generated file is drift the next regen deletes silently, which is the same failure this branch already had to repair once. Verified by content, not by the merge succeeding: DESIGN.md differs from origin/main by exactly one line (this branch's rung-drop row), carries the corrected bounded-population wording, and still carries the §4b passage ported in earlier. The regenerated witnesses.yml has zero `cited` references -- the deletion holds -- and picks up main's new toolchain step. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2
…9050 preserved) The merge driver left the OURS side in the worktree with no conflict markers and marked the path unmerged, which is its documented refusal behaviour. Committing what was in the tree would have silently dropped #9050's cited-symbol census deletion -- exactly the failure that driver exists to prevent, and one I have already committed once tonight on a different PR by taking a side wholesale. Resolved by starting from main's file and re-applying the single added bullet, then verifying every non-empty line of main's version survives and the delta is exactly one line.
#9050 removed the cited-symbol job and left this paragraph's closing sentence describing it: "By the same rule the CENSUS run step below stays neutral rather than copying this one: `--required-cited-symbol` runs no regen phase and spawns no rustfmt". There is no census run step below any more, so the sentence reasons about a step that does not exist and cites a flag no workflow invokes -- the class DESIGN names as a comment asserting what the code no longer says, and my own residue. Cut rather than rewritten. What survives -- cargo is deliberately not listed because the step invokes a prebuilt binary, and listing it would trade one false declaration for another -- says everything true about the step that still exists. The deleted clause was a comparison to a step that no longer does; rewriting it to mention the surviving standalone mode would manufacture a rule nothing applies. Verified by execution rather than asserted: regenerating the artifact gate changes nothing. §4c says annotations are erased before semantic passes, so witnesses.yml comes back byte-identical, and the only diff in the tree is these four lines of source. Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2 Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delete the cited-symbol census job from CI (operator directive), and declare the rung it drops
WHAT IS REMOVED. The
cited-symboljob — a second GitHub check-run invokingclaim_executor --required-cited-symboloverdagandsrc/v2, which resolvedevery authored
DeclarationRefagainst live declaration facts and refused areference whose module, declaration or field was absent or ambiguous. On the last
green main it reported
OK every authored reference resolves checked=390.Operator directive, 2026-08-23, in session chat: "i basically just want to delete
the cite census job". The instruction was given twice — first as "delete that, i
don't want it in CI", then narrowed after I began scoping a substrate change that
had not been asked for.
THE EDIT IS IN THE AUTHORITY, NOT THE ARTIFACT.
.github/workflows/witnesses.ymlis generated from
gunbc.witness_floor_workflowviagunbc.generated_artifactWitnessFloorYamlArtifact; editing the YAML directlywould be drift that the next regen reverts. Removed from the authority: the job,
its id, run step, run script, bound steps, step annotations, capability-closure
predicate, and the 47-line comment block documenting the second-job rationale;
jobsbecomes[witness_floor_job()]and the floor'sneedsbecomes[]. Theorphaned argv producer
gunbc.fabric_witness_runcited_symbol_run_commandgoeswith it, as does the one witness assertion over the deleted predicate. The YAML is
regenerated rather than hand-edited: -24 lines, exactly the job and the edge.
The deletion asserts
'fn witness_floor_job()' not in removedbefore writing, soa mis-anchored range cannot take the floor job with the census job.
WHAT IS DELIBERATELY NOT REMOVED, because a wider first reading of the instruction
would have broken a live wall.
std.decl_refand its 345 uses stay.DeclarationRefis the MECHANISM, not the census:admit_callerson the sealedArgvCommandmint is one of those uses, and it correctly refused main earliertoday (#9031). Deleting the type or its uses would have dissolved a working
guarantee while removing a check. The lens
v2.lens.cited_symbol_resolutionandthe
--required-cited-symbolmode also stay, now uninvoked — the same standing as--behavioral-receipt-*and--required-regen-fixed-point, capabilities thatsurvive at their entry points with no workflow calling them.
THE RUNG DROP, DECLARED (DESIGN §4b(3)).
PREVIOUS RUNG: mechanically preventable. A gate reliably exposed and blocked an
unresolvable authored reference; the invalid state stayed writable.
TEMPORARY RUNG: none. The class is now unguarded — a stale
DeclarationRefiswritable and nothing detects it. Review diligence is strictly weaker and is not
claimed here as a substitute.
REASON: operator directive. Recorded as given rather than reconstructed.
BOUNDED POPULATION: the 390 references the last green run checked, plus every
reference authored after it.
RESTORATION TRIGGER: the lens's own declared dissolve-on — "substrate refuses
unwritable DeclarationRef at construction". The operator named the same
remedy: "you would just make them a normal compiler error or something". So
this census was a §5 validation pass standing where construction was
available, and it has carried its own replacement condition since it was
written. The replacement is NOT built here.
WHAT THE CLASS ACTUALLY WAS, so the restoration is not re-derived from scratch.
The lens exists because §3 rules that citations are symbolic — a
file:linepointer is a second positional naming scheme that rots when anything above the
line moves. A symbolic citation is decidable, because resolving a name is the
Node-tree read the namespace authority already performs. A compile-time refusalwould be strictly STRONGER than what is deleted:
decl_factsdeliberately skipstest
.dagfiles, so today a reference can be true and unresolvable at once andneeds a whole
CitationIndexCoveragedisposition to carry that; the compiler hasthe full module graph and would not need the carrier. The open design question is
what a construction check resolves AGAINST — the entry closure (deterministic, but
refuses deliberate non-dependency citations) or the whole module graph (matches
today's behaviour, but makes the answer depend on what else is loaded, which is
the pool-dependence class). That question is not settled here.
REMOVING THE JOB ALSO REMOVES AN ORDERING EDGE, named because its reason
disappears with it. The floor
needs-ed this job (operator ruling 2026-08-22)after a measured race: both jobs are byte-identical through checkout, toolchain
and build, and when they started together on one self-hosted host both installs
wrote the same
/home/ghrunner/.cargo/bin/rustc—Text file busy, ETXTBSY,exit 126, at 1 run in 5. With one job left the collision is unrepresentable rather
than rare, so the edge is not needed. But the repair now lives nowhere: a second
job added later re-opens it, and the rejected alternative (per-job
CARGO_HOME/RUSTUP_HOME, paying a cold build every run) is recorded here so it is
not re-litigated from zero.
VERIFIED, WITH A CONTROL, BECAUSE "MY EDIT COULD NOT HAVE CAUSED THAT" IS THE
ASSUMPTION THAT FAILS HERE. Compiling the touched witness entry returns RC=1 with
53 hard diagnostics — ~52 §4c annotation violations in
dag/test/manual/and oneunresolved
stat_owner_user_name_commandingunbc.command_runner. Neither fileis touched here, but this change DELETES A FUNCTION, closures move, and name
resolution in this tree is pool-dependent, so a same-binary control was run
against unmodified
origin/mainin a detached worktree:branch produced 53 hard no-subject 52 stat_owner 1
control produced 53 hard no-subject 52 stat_owner 1
diagnostic sets: IDENTICAL
So both are pre-existing and this change moves neither. Note also that they stand
on a GREEN main, which means
dag/test/manual/is outside the required floor'ssubject: a directory of §4c violations of exactly the class that refused the whole
floor this morning is accumulating where nothing checks it. Not repaired here —
named so it is not rediscovered as new.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2
🤖 Generated with Claude Code
https://claude.ai/code/session_017HBx8dnz3oCiiHXoSBdtH2