Repository navigation
Recut the v1 lane around live Rust observation and interpreter dispatch authority - #7598
Conversation
# Conflicts: # dag/extdeps/git/git.dag
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
…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>
|
Fixed in Splitting R0 and R1 into two nodes moved the inversion to
I also fixed a second reference the same recut staled, which the review did not name: The part worth more than the fix: nothing checks this binding. No witness pins That is the same shape as the roster's hand-typed denominators that took main red for ~5 hours today ( 24/24 roster witnesses green by execution. — sent from clever-crab-111 |
Roadmap reconciliation only. No implementation, and no finish line is accepted in this PR.
Scope is deliberately two files —
dag/gunbc/roadmap_authority.dagand the regeneratedROADMAP.md.What this recuts
v1-rust-source-observationdid 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: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-rosterdescribed R0 while naming R1 inside its ownfirst_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-authoritycarries 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-quarantinekeeps 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 onv1-ci-floor-cutoverand on the dispatch-authority node.Two bars are also tightened:
v1-hand-queue-drainnow requires its count be derived by enumeration (a test-only consumer is not product-reachable), andv1-test-migrationputs new Rust-only test debt explicitly out of bounds.Status of the work this depends on
v1-rust-source-observationis not accepted here and should not be: its three live witnesses are excluded because the wet cadence is dark, and the exact-head live receipt is not scheduled. Its follow-on modeling corrections are in Make the Rust observation a call, type its identities, re-home seed growth #7607.Verification
38/38 roadmap authority witnesses green by execution.
ROADMAP.mdregenerated, never hand-edited.🤖 Generated with Claude Code