Skip to content

Recut the v1 lane around live Rust observation and interpreter dispatch authority - #7598

Merged
briansrls merged 25 commits into
mainfrom
session/clever-crab-111
Aug 1, 2026
Merged

briansrls merged 25 commits into
mainfrom
session/clever-crab-111

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 1, 2026 •

Copy link
Copy Markdown
Contributor

Roadmap reconciliation only. No implementation, and no finish line is accepted in this PR.

Scope is deliberately two files — dag/gunbc/roadmap_authority.dag and the regenerated ROADMAP.md.

What this recuts

v1-rust-source-observation did not exist as a node. #7562 delivers the observation mechanism but never added its row, so the dependency edges this lane needs pointed at nothing. The node is added, with two edges:

v1-rust-source-observation → v1-honest-frontier → v1-hand-queue-drain

That ordering is the point of the PR. It prevents hand-queue work from starting before the Rust population it drains is derived — which is how the queue previously became "whatever someone had inspected". A queue cannot be worked before its denominator exists.

The interpreter roster node is split into R0 and R1. v1-interpreter-primitive-roster described R0 while naming R1 inside its own first_slice, which made it un-acceptable: R0 is finished, but the node could not be accepted without appearing to claim an inversion that has not happened.

It keeps its durable identity and is now R0 only — derived-from-dispatch, mechanically preventive for the sites it covers, explicitly not structural, and acceptable at that narrower bar. A new v1-interpreter-primitive-dispatch-authority carries R1: the roster becomes the authority, arm identity and spelling/form lookup are generated from it, and hand Rust supplies only handler bodies behind an exhaustive match whose mismatch fails compilation rather than a test.

The quarantine edge is corrected. v1-interpreter-quarantine keeps two parents — that was never the defect. The defect was that its second parent named R0, and R0 itself admits that a whole new Rust dispatch site remains writable. So the quarantine could have been reached without the primitive denominator ever being closed. It now depends on v1-ci-floor-cutover and on the dispatch-authority node.

Two bars are also tightened: v1-hand-queue-drain now requires its count be derived by enumeration (a test-only consumer is not product-reachable), and v1-test-migration puts new Rust-only test debt explicitly out of bounds.

Status of the work this depends on

Verification

38/38 roadmap authority witnesses green by execution. ROADMAP.md regenerated, never hand-edited.

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 23 commits August 1, 2026 04:55
The publication placement gate refuses any ADDED public path without a Publish
grant. This branch adds dag/gunbc/stage0_rust_host_observation.dag, which had
no grant row, so it would fail the gate even once the main-side gap (#7579)
lands. Adding the row here.

Picked up as program owner: merry-bear-276 was archived with this PR still
open, so the lane owner carries it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	dag/gunbc/publication_grant.dag
#	src/v1/stage0/src/v1_interpreter.rs
This reverts commit b5e47d3.
The finding is correct and the error was mine. The receipt cited
Stage0CargoBinManifestParseRefusal_Display, a symbol that does not exist --
the Rust is an unnamed impl block. That is precisely the fabricated citation
DESIGN.md 3 cite-the-symbol exists to forbid, and its own standing-rule text
names two such defects as the measured cost that produced the rule.

Fixed by citing what actually resolves: the enum plus its real member, via
DeclField NamedField { field_name: "fmt" } on
Stage0CargoBinManifestParseRefusal. The count stays 7 -- the enum and its
Display realization are two distinct declarations distinguished by field, not
a double count.

Also addressed the second half of the finding, that the witness merely asserted
list length. It now checks that every ref has a non-empty module_path and
decl_name AND that each expected symbol is present by name, so renaming a cited
declaration reds the witness instead of silently passing a count.

Every cited symbol grep-verified to resolve:
  Stage0CargoManifestBinParse                cli_run.rs
  Stage0CargoBinManifestParseRefusal         cli_run.rs
  impl Display for that enum (fmt)           cli_run.rs
  stage0_cargo_bin_paths_from_manifest_text  cli_run.rs
  parse_stage0_cargo_manifest_bin_paths      cli_run.rs
  stage0_cargo_manifest_parser_tests         cli_run.rs
  eval_builtin_inner                         v1_interpreter.rs

28/28 hermetic witnesses green.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	dag/gunbc/publication_grant.dag
…bars

Stacked on #7562 because it delivers the mechanism the new node describes.

ADDS THE MISSING NODE. The review asked for the edges
v1-rust-source-observation -> v1-honest-frontier -> v1-hand-queue-drain, but
v1-rust-source-observation did not exist: #7562 lands the mechanism (live
tracked-Rust host observation with typed refusals) without a roadmap row for
it, so both edges pointed at nothing. Added as its own row, the same way
v1-interpreter-primitive-roster was added for #7558, then wired.

SPLITS THE TWO AXES the review called out. Finding every tracked file and
deciding every file it found are different questions with different failures,
so v1-honest-frontier now states them separately: a complete list of undecided
modules and a decided list that missed modules are distinct reds. The new node
carries the same split in its own red_control.

STRENGTHENS THE HAND-QUEUE METRIC. v1-hand-queue-drain now requires the
remaining count be DERIVED by enumerating the observed tracked set, never
counted from the files someone happened to touch -- the understatement that has
now happened twice in this lane. It also rules out counting a file whose only
consumer is a test as product-reachable, which would shorten the queue on paper
without moving the finish line.

ADDS THE NO-NEW-RUST-ONLY-TEST RULE. v1-test-migration now puts a new test
authored only in Rust, with no authority the substrate owns, out of bounds: it
grows the population the node exists to drain, so it counts against the finish
line rather than toward it.

38 roadmap authority witnesses green; generated ROADMAP.md healed by
regeneration, not by hand.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The split that moved three live witnesses out of the scaffold witness file
did not stop the hermetic corpus from failing, because
rust_source_host_observation is a `data` declaration -- importing it
evaluates it. The origin file kept a dead import of that one symbol, so it
still reached git.Inspect.HeadCommit under the hermetic envelope and still
took down the whole discovery batch, on a file whose test bodies no longer
reference the observation at all.

The origin file's only other mention of the name is a quoted string in an
authority-ref comparison, so every by-name reading said the symbol was
legitimately in use. Deleting the import line is the entire fix.

Verified by execution: all 28 witnesses in the origin file now pass under
the hermetic envelope CI uses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The census cited the Display realization as NamedField { field_name: "fmt" }.
That type-checks and greps clean while asserting something false:
Stage0CargoBinManifestParseRefusal has three unit variants and no fields at
all, and `fmt` is a method on a separate `impl std::fmt::Display`, not a
member of the enum.

This is the second revision to shape the citation to fit the carrier rather
than the code -- the first invented Stage0CargoBinManifestParseRefusal_Display
(review 46351), which resolved to nothing. The real obstacle is that
std.decl_ref DeclField offers only WholeDeclaration | NamedField and a
trait-impl method is neither, so respelling around it was a DESIGN section 5
workaround: it concealed a vocabulary gap instead of stopping the line.

Dropped the false row. The citable count is six, and the seventh item is
named in the reason where the statement is at least true, with its dissolve-on
(DeclField gains a trait-impl-method variant). That extension is a corpus-wide
std change -- 161 modules import std.decl_ref and several match DeclField
exhaustively -- so it is deliberately not carried here.

The witness now asserts the citation text alongside the count, so the item
cannot go missing by editing the list alone. Verified by execution: 28/28
green, and a RED control removing the cited impl from the reason reds it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	dag/gunbc/publication_grant.dag
@gunbai-bot gunbai-bot Bot changed the title v1 deletion Recut the v1 lane around live Rust observation and interpreter dispatch authority Aug 1, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 1, 2026 17:31
gunbc-ci-auto-heal and others added 2 commits August 1, 2026 18:42
…ew 46519)

The recut split R0 and R1 into two nodes but left the hand-Rust scaffold's
disposition pointing at the R0 node, while its deletion_condition describes
R1 verbatim. Two authorities named when the same scaffold is discharged --
exactly the single-authority defect the split was supposed to sharpen.

v1_interpreter_roster_seed_scaffold.target_roadmap_node now names
v1-interpreter-primitive-dispatch-authority, which is the node that actually
performs the inversion its deletion_condition describes.

Fixed a second reference the same recut staled: added_hand_rust_accounting_note
said the quarantine depends on v1-interpreter-primitive-roster. It depends on
the dispatch-authority node now, with the roster as that node's prerequisite.

Worth recording: nothing checks this binding. No witness pins
target_roadmap_node against the roadmap's node set, so a scaffold can name a
node that was renamed, split, or never existed and every test still passes.
That is the same shape as the roster's hand-typed denominators -- a derived
mechanism with an unchecked hand-written reference beside it -- and it is why
this drifted silently rather than redding.

24/24 roster witnesses green by execution.

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

gunbai-bot Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

Fixed in cef828c6ea1. Review 46519 is correct and it caught a defect the recut itself introduced.

Splitting R0 and R1 into two nodes moved the inversion to v1-interpreter-primitive-dispatch-authority, but v1_interpreter_roster_seed_scaffold.target_roadmap_node still named v1-interpreter-primitive-roster — while its own deletion_condition describes R1 verbatim ("the .dag roster generates the interpreter's local dispatch identity and lookup, rather than the dispatch generating the roster"). So the scaffold said its discharge is owned by the node that explicitly disclaims doing the inversion, and the roadmap said otherwise. Two authorities for one discharge, which is the §3 defect the split was meant to sharpen rather than create.

target_roadmap_node now names the dispatch-authority node.

I also fixed a second reference the same recut staled, which the review did not name: added_hand_rust_accounting_note still read "which is why v1-interpreter-quarantine now depends on v1-interpreter-primitive-roster". The quarantine depends on the dispatch-authority node now, with the roster as that node's prerequisite. Same drift, one file over.

The part worth more than the fix: nothing checks this binding. No witness pins target_roadmap_node against the roadmap's node set, so a scaffold can name a node that was renamed, split, or never existed and all 24 witnesses still pass — which is precisely why this drifted silently instead of redding, and why it took a reviewer rather than the suite.

That is the same shape as the roster's hand-typed denominators that took main red for ~5 hours today (#7614): a derived mechanism with an unchecked hand-written reference sitting beside it. The derived half tracks reality; the hand-typed half rots; every name-level check passes throughout. I have not added a pinning witness here because the honest version is a cross-module resolution check (scaffold target → roadmap node identity), which is real work and wider than this roadmap-only PR — but it belongs on the same list as the denominator inversion, and I would rather state that than land a second hand-typed constant to guard the first.

24/24 roster witnesses green by execution.

— sent from clever-crab-111

@briansrls
briansrls merged commit 46c5c8f into main Aug 1, 2026
5 checks passed
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