Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions dag/gunbc/roadmap_authority.dag
Original file line number Diff line number Diff line change
Expand Up @@ -705,10 +705,10 @@ fn declared_roadmap_nodes() -> List<RoadmapNode> {
headline: "Answer names that live in another file, and derive what each file depends on",
boundary: "Work out, for a name whose answer lives in another file, which declaration answers it, then derive from those answers what the file depends on. Keep two separate results: for every mention, which declaration answered it; and for the file, the set of distinct files it depends on. Repeated mentions of one target collapse only in the second.",
displaced_cost: "What a file depends on is written out by hand today, so it can disagree with what the file actually refers to. Hundreds of files were patched by hand to keep the two in step — work that should never have existed, because what a file depends on follows from what it refers to.",
first_slice: "Write the closing check for this row first, then answer one name across a file boundary and derive that file's dependencies from the answers alone.",
first_slice: "Write the closing check for this row first. Lane progress is only the bound closing witness going red to green — substrate-only PRs do not advance this row. Then answer one name across a file boundary and derive that file's dependencies from the answers alone.",
red_control: "Two mentions of one target give one dependency but stay two separate records of which mention produced it; and no dependency appears that no name asked for.",
out_of_scope: "No hand-written dependency statements, no falling back to searching everything currently loaded, and no discarding which particular mention produced which dependency. The same-file rules belong to the previous row.",
handback: "One file's dependencies derived from its answers alone, matching what was written by hand, with both results kept separate and the closing check written and bound."
out_of_scope: "No hand-written dependency statements, no falling back to searching everything currently loaded, and no discarding which particular mention produced which dependency. The same-file rules belong to the previous row. Substrate-only merges — exposure authority, collision-free assembly, fixture-proven projection carriers without ordinary-loader production — are prerequisites, not row completion.",
handback: "The bound closing witness greens on ordinary loaded compilation production, not on fixture-only carriers alone. One file's dependencies derived from its answers alone, matching what was written by hand, with both results kept separate."
)
),
active_sized(
Expand Down Expand Up @@ -1938,6 +1938,12 @@ data entry_graph_union_construction_acceptance_note: String = "CLOSED NO-GO (ope

data namespace_binding_kernel_acceptance_note: String = "STATUS RECONCILIATION, NOT NEW WORK (operator ruling 2026-08-01). PR #7508 merged the supplied-candidate binding kernel, so the IMPLEMENTATION dependency for namespace-reference-derived-closure was resolved, but no acceptance receipt existed — leaving the roadmap saying its own prerequisite was unaccepted while the code depended on it. Two different truths for the same fact, which is exactly what node_is_startable reads, so P2a was being worked on while not honestly startable under the roadmap's own definition. The digest 2eba4715cdef42eb is the POST-#7530 value: #7530 rewrote this node's boundary, red_control and out_of_scope to cut authority from retirement, and roadmap_criteria_digest covers brief plus red_control plus handback, so the pre-amendment digest is stale by construction. It was DERIVED BY EXECUTION rather than transcribed — node_criteria_digest was run against the live node on this tree, not copied from a prior receipt or computed by hand. The red control names the malformed-transport refusal because that is the first arm #7530's amended row requires; the sibling arms (absent versus wrong-role identity distinct, duplicate supplied identity refused, wrong-category excluded, zero/one/two giving unbound/bound/ambiguous, exact declaration identity surviving, canonical fold invoked once) all execute in the same witness module and were green on the exact-head run that merged #7508."

data unreachable_patterns_construction_residue_note: String = "CONSTRUCTION RESIDUE declared by merged #6777 (emit: deny unreachable_patterns). Authority: src/v1/stage0_crates.dag unreachable_patterns_deny_note — validation landed; construction fix (group arms sharing an outer constructor into a nested match in freemonoid_match_arm_for) remains follow-on emitter work per that note, not landed on main. Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (live on main): v1.gunbc.occurrence_binding_parser_walk declaration_exposure_from_containment — containment.ancestors match with depth-two Cons nesting: Empty => ModuleExposure; Cons { tail: Empty } => ModuleExposure; Cons { tail: Cons { head: _, tail: _ } } => LexicalExposure via occurrence_containment_parent_scope or ModuleExposure fallback.\n\nLOCALIZATION: v1_gunbc_occurrence_binding_parser_walk occurrence_containment_parent_scope in the same generated file lowers correctly (empty ancestors -> None, else -> Some(...)), so this is not a blanket FreeMonoid lowering failure: single-arm-per-outer-constructor lowering is correct in the one observed case. The defect is specific to multiple match arms sharing an outer constructor: freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second arm sharing the outer variant label but carrying a different discriminator body is silently dropped.\n\nB0 WORKAROUND (substrate not on main): N3-B0 exposure-authority adds std.occurrence_binding_candidates declaration_exposure_namespace_structural_root — an emit-safe depth-one parent-scope rewrite replacing a depth-two nested FreeMonoid match the emitter would collapse; deliberate scaffold, not a fix.\n\nDISSOLUTION TRIGGER — That B0 rewrite exists only because freemonoid_match_arm_for drops sibling arms sharing an outer constructor. Once the follow-on construction fix lands and generated output re-verifies, the rewrite may return to the direct nested match. Re-verify against generated output, not source, before dissolving.\n\nGENERATED DISCREPANCY (live on main): v1_gunbc_occurrence_binding_parser_walk declaration_exposure_from_containment — both the __fm.is_empty() branch and the else branch emit identical ModuleExposure { module }, where the source distinguishes empty-ancestor ModuleExposure from nested ModuleExposure/LexicalExposure. Expected after construction fix: three distinct outcomes (empty ancestors -> ModuleExposure; single ancestor -> ModuleExposure; nested ancestors -> LexicalExposure via occurrence_containment_parent_scope, ModuleExposure fallback when parent scope is absent)."

data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (operator ruling 2026-08-07). See unreachable_patterns_construction_residue_note for the #6777 emitter construction residue tracked independently of this lane.\n\nPROGRESS STANDARD: namespace lane progress means A NAMED TERMINAL WITNESS WENT RED TO GREEN. Substrate PRs and repair PRs are necessary but are NOT namespace progress. B0 exposure/assembly and B1 fixture-proven projection carriers do not close namespace-cross-file-provenance; only the bound closing witness greens when OrdinaryLoadedCompilationClosure production lands (B2).\n\nCOMPLETION BOUNDARY: B0 lands one exposure authority and collision-free cross-file assembly substrate. B1 lands the complete clause-(e) projection carrier and discriminating fixture algebra; the N3-B row stays red because the ordinary loaded compilation producer is still absent. B2 lands that producer and greens the bound closing witness. #7770 remains quarry-only — manual extraction source, never a merge target; it closes unmerged once B0/B1/B2 land their extracted content.\n\nLANE SHAPE: B0, then B1; B2 and N3-C are parallel after B1. N3-D aggregate handback follows A-close plus B2 plus N3-C. Mutable fork bases, review state, and session topology live in the dashboard, not here."

data namespace_pool_independence_lane_brief_note: String = "N3-C (namespace-pool-independence) LANE BRIEF — operator ruling 2026-08-07. Undispatched until B1 lands; starts from the cleaned final B1 head, not from B0 and not from an intermediate B1 draft.\n\nCONTRACT: Compare two complete B1 clause-(e) projection results for the same source subject — baseline projection versus perturbed projection with one unrelated loaded file added. Required equality across both: same source subject; same reference occurrence identities; same selected declaration identities; same bound-reference population; same occurrence-level provenance rows; same file dependencies; same exact refusal outcome when applicable.\n\nLOAD-BEARING RED CONTROL: A perturbation that reselects a different declaration inside the same provider file while leaving the file-dependency set unchanged must be REFUSED by the full-carrier comparison. A dependency-set-only comparison passes this case while missing the exact Class B reselection N3-C exists to forbid — the comparison is over the complete ReferenceDerivedDependencyProjection carrier, not the deduplicated file list alone.\n\nDEPENDENCIES: Requires B1 (ReferenceDerivedDependencyProjection plus occurrence-grain provenance). Does not require B2 (ordinary loaded compilation closure producer)."

data namespace_closure_prerequisite_cut_note: String = "THE SIX CAPABILITIES INSIDE namespace-reference-derived-closure ARE NOT SIX NODES, and this cut adds exactly three rows in front of it rather than decomposing it (2026-08-04). Its closing contract, namespace_reference_derived_closure_contract, is a set-difference frontier over six capabilities under three triggers, and every row read Unavailable while the node itself was the only dispatchable thing in the lane. That is a single startable row standing for three separable pieces of work with different substrates, which is the coarse-node hazard namespace_node_recut_note already priced once.\n\nTHE CUT FOLLOWS THE TRIGGERS, because the triggers already record which work each capability waits on. namespace-structural-observations owns the four capabilities under P2aStructuralCandidateProducer7515 — same-parse-tree rules, whose substrate is the merged occurrence-binding parser walk. namespace-cross-file-provenance owns the one under P2aReferenceDependencyProjection7515. namespace-pool-independence owns the one under P2aPoolIndependentDependencyProjection7515.\n\nTHE FIRST TWO ARE PARALLEL, NOT SEQUENTIAL. No dependency runs from the same-file rules to the cross-file projection; they share only the contract they feed. Sequencing them would have idled one worker for no modeled reason. Pool independence DOES depend on cross-file provenance, because a differential needs a projector to perturb.\n\nWHY THE CROSS-FILE ROW IS THE LARGE ONE. The merged parser walk resolves nothing across a file boundary — its own authority note scopes it to authored source through parse_with_table, with transport and module path from the parser. So cross-file target realization sits INSIDE that row rather than upstream of it, and the trigger being named after a merged PR does not mean the capability is discharged.\n\nNO NEW IDENTITY WAS MINTED FOR THE INTEGRATION OR FOR THE CENSUS. namespace-reference-derived-closure keeps its durable identity and now denotes the aggregate handback — all six observations admitted, the expecting-red enrolment retired, its existing check green — so its first_slice moved to say so while its boundary, which still covers all six, did not. namespace-ambiguity-discharge likewise keeps its identity and its existing dependency on the closure node; the census it owns is authoritative only once all six close, never after the same-file rows alone, because a census taken before cross-file answers exist undercounts exactly the candidates that cross a file boundary and inherits the pool coincidence pool-independence exists to remove.\n\nTHE THREE NEW ROWS ARE DELIBERATELY UNBOUND. Each first_slice names authoring its own closing check as its first act, per v1_lane_binding_survey_note: the contract follows the witness, never precedes it. Authoring contracts here to make the rows look startable is the coverage-by-illusion tier that note forbids, and pool-independence could not honestly carry one at all — its differential compares an output shape its own prerequisite has not yet produced."

data scm_prerequisite_acceptance_note: String = "The operator explicitly accepted the three independent R0 models and the separate P−1 evidence carrier, then accepted R1 after merging its three-realization compatibility extraction, and accepted P0 after its layered landing spine and twenty-two executing journey witnesses landed. R1 depends only on the three R0 receipts; P0 consumes both accepted R1 and accepted P−1. These receipts preserve every prerequisite and handback as durable facts. Replacing accepted rows with their child would erase history and violate roadmap_acceptance_receipt_note."
Expand Down
Loading