From 9f797eea8673af6c4941383abc48bcdc3279d8c4 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 04:21:21 +0000 Subject: [PATCH 01/12] Register N3-B lane integration notes and clarify namespace-cross-file-provenance row. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Records EMIT-NESTED-PATTERN-0 as a priority-zero compiler item separate from N3-B waves, documents exact-head base tracking for stacked B0/B1 forks, and states that lane progress requires the bound closing witness to go red-to-green — substrate-only PRs are prerequisites, not row completion. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 8e35996d0df..f2997edcd54 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -705,10 +705,10 @@ fn declared_roadmap_nodes() -> List { 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( @@ -1938,6 +1938,10 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER: std.occurrence_binding_candidates declaration_exposure_from_containment under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }; declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure }. quiet-ferret-512's emit-safe B0 rewrite surfaces the same shape on declaration_exposure_namespace_structural_root (depth-two nested FreeMonoid match).\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs declaration_exposure_from_containment — both the __fm.is_empty() branch and the else branch emit identical ModuleExposure { module }, where the source distinguishes RootExposure (empty ancestors) from nested ModuleExposure/LexicalExposure. Two identical Rust branches where the .dag has two different arms." + +data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head WILL move (emit-safe rewrite + 0/1/2 ancestor-depth generated-realization control). silent-crab-504 B1 #7954 forks from B0's final pushed SHA verbatim in the PR body — not from main, not after merge wait. wise-newt-506 #7951 merges the same B0 head. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\nCURRENT B0 HEAD AT NOTE TIME: f9d8bb539a43b9cccef040eefe5731c58c3018b3 (#7943, 2/2 APPROVED — claude review 49840 and cursor review 49845 on that SHA).\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of #7943 at f9d8bb539a." + 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." From 18be0ca0fa7978fd38c90c832666756bb0667222 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 04:25:22 +0000 Subject: [PATCH 02/12] Correct lane note: remove stale B0 SHA, fix EMIT-NESTED-PATTERN-0 work item id. f9d8bb539a and its approvals are stale pending B0 emit-safe rewrite; record no fork base until quiet-ferret pushes. Fork rule is fork-on-push not fork-on-merge. Cite work item node://adhoc-0febe30d-65d (not malformed duplicate adhoc-b4da0e4d-cf3). Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index f2997edcd54..ed040952ba1 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,9 +1938,9 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER: std.occurrence_binding_candidates declaration_exposure_from_containment under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }; declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure }. quiet-ferret-512's emit-safe B0 rewrite surfaces the same shape on declaration_exposure_namespace_structural_root (depth-two nested FreeMonoid match).\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs declaration_exposure_from_containment — both the __fm.is_empty() branch and the else branch emit identical ModuleExposure { module }, where the source distinguishes RootExposure (empty ancestors) from nested ModuleExposure/LexicalExposure. Two identical Rust branches where the .dag has two different arms." +data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-0febe30d-65d). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER: std.occurrence_binding_candidates declaration_exposure_from_containment under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }; declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure }. quiet-ferret-512's emit-safe B0 rewrite surfaces the same shape on declaration_exposure_namespace_structural_root (depth-two nested FreeMonoid match). Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs declaration_exposure_from_containment — both the __fm.is_empty() branch and the else branch emit identical ModuleExposure { module }, where the source distinguishes RootExposure (empty ancestors) from nested ModuleExposure/LexicalExposure. Two identical Rust branches where the .dag has two different arms." -data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head WILL move (emit-safe rewrite + 0/1/2 ancestor-depth generated-realization control). silent-crab-504 B1 #7954 forks from B0's final pushed SHA verbatim in the PR body — not from main, not after merge wait. wise-newt-506 #7951 merges the same B0 head. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\nCURRENT B0 HEAD AT NOTE TIME: f9d8bb539a43b9cccef040eefe5731c58c3018b3 (#7943, 2/2 APPROVED — claude review 49840 and cursor review 49845 on that SHA).\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of #7943 at f9d8bb539a." +data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 is being rewritten (emit-safe declaration_exposure_namespace_structural_root — depth-one parent-scope matches replacing the depth-two nested match the emitter silently miscompiles — plus 0/1/2 ancestor-depth generated-realization control). Prior head f9d8bb539a and its 2/2 approvals are STALE; do not record a SHA until the rewrite lands. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from B0's final pushed SHA verbatim in the PR body — not from main. loyal-ram-550 will broadcast the real final SHA when quiet-ferret pushes; this note updates then. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." 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." From ad85d40918a70794e0cf6e28362a41376e4c2761 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 04:27:50 +0000 Subject: [PATCH 03/12] Fix emit_nested_pattern_0 reproducer citation to on-main symbols. REPRODUCER cites v1.gunbc.occurrence_binding_parser_walk declaration_exposure_from_containment; B0-only DeclarationExposureGrounding symbols qualified to #7943 (not on main). Addresses review 49944. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index ed040952ba1..eaac0137097 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-0febe30d-65d). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER: std.occurrence_binding_candidates declaration_exposure_from_containment under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }; declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure }. quiet-ferret-512's emit-safe B0 rewrite surfaces the same shape on declaration_exposure_namespace_structural_root (depth-two nested FreeMonoid match). Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs declaration_exposure_from_containment — both the __fm.is_empty() branch and the else branch emit identical ModuleExposure { module }, where the source distinguishes RootExposure (empty ancestors) from nested ModuleExposure/LexicalExposure. Two identical Rust branches where the .dag has two different arms." +data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-0febe30d-65d). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 is being rewritten (emit-safe declaration_exposure_namespace_structural_root — depth-one parent-scope matches replacing the depth-two nested match the emitter silently miscompiles — plus 0/1/2 ancestor-depth generated-realization control). Prior head f9d8bb539a and its 2/2 approvals are STALE; do not record a SHA until the rewrite lands. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from B0's final pushed SHA verbatim in the PR body — not from main. loyal-ram-550 will broadcast the real final SHA when quiet-ferret pushes; this note updates then. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." From ef107f127b7b01235fc5f8e13a3fb2e4187506c5 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 05:02:56 +0000 Subject: [PATCH 04/12] Correct EMIT-NESTED-PATTERN-0 work item id to adhoc-b4da0e4d-cf3. The operator-spawned emitter worker bound to the first created item, not the later well-formed duplicate; cite where the work actually lives. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index eaac0137097..9459cbc3561 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-0febe30d-65d). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 is being rewritten (emit-safe declaration_exposure_namespace_structural_root — depth-one parent-scope matches replacing the depth-two nested match the emitter silently miscompiles — plus 0/1/2 ancestor-depth generated-realization control). Prior head f9d8bb539a and its 2/2 approvals are STALE; do not record a SHA until the rewrite lands. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from B0's final pushed SHA verbatim in the PR body — not from main. loyal-ram-550 will broadcast the real final SHA when quiet-ferret pushes; this note updates then. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." From 1fcb922452738e58c772b6a136b0c0c157e73d17 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 05:07:15 +0000 Subject: [PATCH 05/12] Record B0 #7943 head ce89fc8724 in lane integration note. Broadcast from quiet-ferret-512: emit-safe structural-root exposure rewrite landed with generated-realization control; prior f9d8bb539a stale. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 9459cbc3561..4d4f7b9aa19 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1940,7 +1940,7 @@ data namespace_binding_kernel_acceptance_note: String = "STATUS RECONCILIATION, data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." -data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 is being rewritten (emit-safe declaration_exposure_namespace_structural_root — depth-one parent-scope matches replacing the depth-two nested match the emitter silently miscompiles — plus 0/1/2 ancestor-depth generated-realization control). Prior head f9d8bb539a and its 2/2 approvals are STALE; do not record a SHA until the rewrite lands. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from B0's final pushed SHA verbatim in the PR body — not from main. loyal-ram-550 will broadcast the real final SHA when quiet-ferret pushes; this note updates then. If B0 head moves after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." +data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head ce89fc872410006a6bb91cfbf0fd4ddb0eda5f7f (branch n3-b0-exposure-authority-assembly-substrate, pushed 2026-08-07). Emit-safe declaration_exposure_namespace_structural_root rewrite landed: Absent=>RootExposure, Present+empty=>ModuleExposure, Present+nonempty=>LexicalExposure; WitnessBin generated-realization control namespace_structural_root_exposure_generated_witness (3/3 PASS). Prior head f9d8bb539a and its 2/2 approvals are STALE. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from ce89fc8724 verbatim in the PR body — not from main. If B0 head moves again after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." 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." From 8ce9f1dc23c85d34cadf1b731cb9d2b28a6d17e0 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 06:06:09 +0000 Subject: [PATCH 06/12] Record B0 ce89fc8724 fresh approvals in lane integration note. Dashboard reviews 49990/49997 on current #7943 head; CI floor still pending. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 4d4f7b9aa19..978644b8b16 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1940,7 +1940,7 @@ data namespace_binding_kernel_acceptance_note: String = "STATUS RECONCILIATION, data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." -data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head ce89fc872410006a6bb91cfbf0fd4ddb0eda5f7f (branch n3-b0-exposure-authority-assembly-substrate, pushed 2026-08-07). Emit-safe declaration_exposure_namespace_structural_root rewrite landed: Absent=>RootExposure, Present+empty=>ModuleExposure, Present+nonempty=>LexicalExposure; WitnessBin generated-realization control namespace_structural_root_exposure_generated_witness (3/3 PASS). Prior head f9d8bb539a and its 2/2 approvals are STALE. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from ce89fc8724 verbatim in the PR body — not from main. If B0 head moves again after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." +data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head ce89fc872410006a6bb91cfbf0fd4ddb0eda5f7f (branch n3-b0-exposure-authority-assembly-substrate, pushed 2026-08-07). Emit-safe declaration_exposure_namespace_structural_root rewrite landed: Absent=>RootExposure, Present+empty=>ModuleExposure, Present+nonempty=>LexicalExposure; WitnessBin generated-realization control namespace_structural_root_exposure_generated_witness (3/3 PASS). Prior head f9d8bb539a and its 2/2 approvals are STALE. ce89fc8724 has 2/2 fresh dashboard approvals (claude review 49990, cursor review 49997); CI floor pending at last check. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from ce89fc8724 verbatim in the PR body — not from main. If B0 head moves again after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." 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." From 075a1238e3d639e730285552e91e3251ad840060 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 06:26:09 +0000 Subject: [PATCH 07/12] Strip mutable ledger from N3-B lane notes; add N3-C brief. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove session names, SHAs, PR state, and fork topology from namespace_cross_file_provenance_lane_integration_note — durable completion boundaries and progress standard only. Add namespace_pool_independence_lane_brief_note with the full-carrier pool-perturbation contract and load-bearing RED. Trim operational references from emit_nested_pattern_0_compiler_item_note. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 978644b8b16..8d6403f05fe 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,9 +1938,11 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nB0 #7943 (not on main): quiet-ferret-512's emit-safe rewrite surfaces the same defect class on declaration_exposure_namespace_structural_root under DeclarationExposureGrounding — NamespaceStructuralRootExposure matches containment.ancestors { Empty => RootExposure; Cons => declaration_exposure_module_local_member(...) }, and declaration_exposure_module_local_member nests exposing_scope.ancestors { Empty => ModuleExposure; Cons => LexicalExposure } — depth-one parent-scope matches replacing the depth-two nested FreeMonoid match.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nThe same defect class surfaces on declaration_exposure_namespace_structural_root when depth-one parent-scope matches replace a depth-two nested FreeMonoid match — an emit-safe workaround, not a fix.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." -data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (zesty-stag-660 owns, operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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\nEXACT-HEAD BASE TRACKING: quiet-ferret-512 B0 #7943 head ce89fc872410006a6bb91cfbf0fd4ddb0eda5f7f (branch n3-b0-exposure-authority-assembly-substrate, pushed 2026-08-07). Emit-safe declaration_exposure_namespace_structural_root rewrite landed: Absent=>RootExposure, Present+empty=>ModuleExposure, Present+nonempty=>LexicalExposure; WitnessBin generated-realization control namespace_structural_root_exposure_generated_witness (3/3 PASS). Prior head f9d8bb539a and its 2/2 approvals are STALE. ce89fc8724 has 2/2 fresh dashboard approvals (claude review 49990, cursor review 49997); CI floor pending at last check. Fork rule is fork-on-PUSH, not fork-on-merge: silent-crab-504 B1 #7954 and wise-newt-506 #7951 fork from ce89fc8724 verbatim in the PR body — not from main. If B0 head moves again after either fork, both must merge the new head before review; stale-base reviews are the failure mode.\n\n#7770 FROZEN: session/zesty-stag-660 PR #7770 stays draft, unmerged, regen unfixed — quarry only. zesty-stag-660 owns closure unmerged with pointers once B0/B1/B2 land extracted content. N3-C not dispatched.\n\nB1 SINGLE PR: #7954 is the sole B1 PR (#7968 superseded per loyal-ram-550). Manifest authority: zesty-stag-660 endorsed extraction manifest with four-refusal-homes addendum.\n\nfix/b1-manifest DELETED 2026-08-07 — remote branch removed; was byte-identical duplicate of pre-rewrite #7943." +data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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." From 11d6c014f900ee6806aaa674e369a30177de0b95 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 06:29:13 +0000 Subject: [PATCH 08/12] Qualify B0-only symbol in emit_nested_pattern_0 note. declaration_exposure_namespace_structural_root is not on main; mark it as B0 substrate so the citation stays honest. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 8d6403f05fe..904bcab4250 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nThe same defect class surfaces on declaration_exposure_namespace_structural_root when depth-one parent-scope matches replace a depth-two nested FreeMonoid match — an emit-safe workaround, not a fix.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +data emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nThe same defect class surfaces on declaration_exposure_namespace_structural_root (B0 substrate, not on main) when depth-one parent-scope matches replace a depth-two nested FreeMonoid match — an emit-safe workaround, not a fix.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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." From 61a0be39192d3c9e41a90894595ecd4e0e149a35 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 06:30:46 +0000 Subject: [PATCH 09/12] Reframe emitter note as #6777 construction residue. Rename emit_nested_pattern_0_compiler_item_note to unreachable_patterns_construction_residue_note; cite merged #6777 and stage0_crates unreachable_patterns_deny_note instead of minting a second EMIT-NESTED-PATTERN-0 home. Drop dashboard work-item id and PR comment permalink; keep the verified generated-discrepancy paragraph; localize the defect to shared-outer-constructor arms. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 904bcab4250..41347c9a3f1 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,9 +1938,9 @@ 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 emit_nested_pattern_0_compiler_item_note: String = "PRIORITY-ZERO COMPILER ITEM (operator ruling 2026-08-07, work item node://adhoc-b4da0e4d-cf3). EMIT-NESTED-PATTERN-0: nested constructor patterns must preserve their full discriminator through v1 Rust emission. Pre-existing; NOT namespace scope; runs independently of N3-B waves and must not consume B0's branch.\n\nREPRODUCER (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. Full verified reproducer: https://github.com/gunb-ai/gunbc/pull/7943#issuecomment-5212330104.\n\nThe same defect class surfaces on declaration_exposure_namespace_structural_root (B0 substrate, not on main) when depth-one parent-scope matches replace a depth-two nested FreeMonoid match — an emit-safe workaround, not a fix.\n\nLOCATED CAUSE: src/v1/05_emit_rust.dag freemonoid_match_arm_for selects arms |> filter(variant match) |> first — a second Cons arm sharing the variant label but carrying a different discriminator body is silently dropped.\n\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +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; the remaining fix is to group arms sharing an outer constructor into a nested match. Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (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 FreeMonoid lowering in general is sound. The defect is specific to multiple match arms sharing an outer constructor: src/v1/05_emit_rust.dag 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\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." -data namespace_cross_file_provenance_lane_integration_note: String = "N3-B STACKED LANE INTEGRATION (operator ruling 2026-08-07). See emit_nested_pattern_0_compiler_item_note for the priority-zero emitter defect 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_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)." From 5304086c0dd7affecdebf724cecee7c8d5c1d7df Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 06:52:38 +0000 Subject: [PATCH 10/12] Narrow LOCALIZATION claim to what one observed case supports. Replace the unearned "FreeMonoid lowering in general is sound" generalization with the narrower localization loyal-ram-550 specified: single-arm-per-outer- constructor lowering is correct in the one observed case; the defect remains specific to multiple arms sharing an outer constructor. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 41347c9a3f1..f4d222ed46e 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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; the remaining fix is to group arms sharing an outer constructor into a nested match. Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (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 FreeMonoid lowering in general is sound. The defect is specific to multiple match arms sharing an outer constructor: src/v1/05_emit_rust.dag 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\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +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; the remaining fix is to group arms sharing an outer constructor into a nested match. Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (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: src/v1/05_emit_rust.dag 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\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." 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." From 0b81757a2acf105fac80c05304c141f58b227e5e Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 07:59:36 +0000 Subject: [PATCH 11/12] Record #6777 repair and B0 workaround dissolution trigger. Update unreachable_patterns_construction_residue_note: construction fix landed; GENERATED DISCREPANCY is an observed-then-repaired pair; add B0 declaration_exposure_namespace_structural_root workaround with named dissolution trigger (re-verify generated output before dissolving). Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index f4d222ed46e..585fef8305e 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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; the remaining fix is to group arms sharing an outer constructor into a nested match. Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (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: src/v1/05_emit_rust.dag 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\nGENERATED DISCREPANCY ON MAIN: src/v1/stage0/src/v1_gunbc_occurrence_binding_parser_walk.rs 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. Two identical Rust branches where the .dag has two different arms." +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 landed in src/v1/05_emit_rust.dag freemonoid_match_arm_for (group arms sharing an outer constructor into a nested match). Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (specimen on main before construction fix): 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: The same defect class motivated declaration_exposure_namespace_structural_root's emit-safe depth-one parent-scope rewrite replacing a depth-two nested FreeMonoid match — deliberate scaffold, not a fix.\n\nDISSOLUTION TRIGGER — B0's emit-safe depth-one rewrite of declaration_exposure_namespace_structural_root exists only because the emitter collapsed sibling arms sharing an outer constructor. Once #6777's construction fix is merged, that constraint is gone and the rewrite may return to the direct nested match. Re-verify against generated output, not source, before dissolving.\n\nGENERATED DISCREPANCY (observed, then repaired by #6777 construction fix): On main before the fix, v1_gunbc_occurrence_binding_parser_walk declaration_exposure_from_containment emitted identical ModuleExposure in both branches where the source distinguished empty-ancestor ModuleExposure from nested ModuleExposure/LexicalExposure. After the construction fix, generated output emits three distinct outcomes: empty ancestors -> ModuleExposure; single ancestor -> ModuleExposure; nested ancestors -> LexicalExposure via occurrence_containment_parent_scope (with 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." From 9c79d442175014686a48d8278ccdee9bf1e9de32 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Fri, 7 Aug 2026 08:18:38 +0000 Subject: [PATCH 12/12] Correct #6777 note: validation landed, construction fix still follow-on. Align unreachable_patterns_construction_residue_note with unreachable_patterns_deny_note on main: #6777 denied unreachable_patterns (validation); freemonoid_match_arm_for construction fix is not landed. Qualify declaration_exposure_namespace_structural_root as B0 substrate not on main; discrepancy is live-on-main with expected post-fix shape. Co-authored-by: Cursor --- dag/gunbc/roadmap_authority.dag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dag/gunbc/roadmap_authority.dag b/dag/gunbc/roadmap_authority.dag index 585fef8305e..21677435da5 100644 --- a/dag/gunbc/roadmap_authority.dag +++ b/dag/gunbc/roadmap_authority.dag @@ -1938,7 +1938,7 @@ 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 landed in src/v1/05_emit_rust.dag freemonoid_match_arm_for (group arms sharing an outer constructor into a nested match). Pre-existing; NOT namespace scope; runs independently of N3-B waves.\n\nREPRODUCER (specimen on main before construction fix): 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: The same defect class motivated declaration_exposure_namespace_structural_root's emit-safe depth-one parent-scope rewrite replacing a depth-two nested FreeMonoid match — deliberate scaffold, not a fix.\n\nDISSOLUTION TRIGGER — B0's emit-safe depth-one rewrite of declaration_exposure_namespace_structural_root exists only because the emitter collapsed sibling arms sharing an outer constructor. Once #6777's construction fix is merged, that constraint is gone and the rewrite may return to the direct nested match. Re-verify against generated output, not source, before dissolving.\n\nGENERATED DISCREPANCY (observed, then repaired by #6777 construction fix): On main before the fix, v1_gunbc_occurrence_binding_parser_walk declaration_exposure_from_containment emitted identical ModuleExposure in both branches where the source distinguished empty-ancestor ModuleExposure from nested ModuleExposure/LexicalExposure. After the construction fix, generated output emits three distinct outcomes: empty ancestors -> ModuleExposure; single ancestor -> ModuleExposure; nested ancestors -> LexicalExposure via occurrence_containment_parent_scope (with ModuleExposure fallback when parent scope is absent)." +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."