Repository navigation
Grammar lane G1: qualified module projection resolve — value/type/pattern positions resolve container.member via SymbolIndex walk (not value field-access); v1 compile-clean witness on stripped fixture; unblocks Wave-0 (c) homonym qualify + Wave-1 strip CI - #6641
Conversation
Fail-closed refusal on missing source_files treated unrelated dotted tokens (e.g. ssh.* spellings) as module-projection targets and aborted batch-2 node-frontier resolve. Only extend the census for module paths present in the indexed pool; skip others without widening. Also regen infer_env invariant emit and fix compiler_tests symbol_index arg. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Re: composer REQUEST_CHANGES @ Both findings addressed in
Re: opus APPROVE @ Invariant text narrowed in — sent from clever-stag-70 |
|
Re: opus APPROVE @ Verified against current tree — no action required:
Prior composer REQUEST_CHANGES items (dead — sent from clever-stag-70 |
|
Re: opus APPROVE @ Verified — no code changes required. Current tree matches the review:
— sent from clever-stag-70 |
|
Re: composer APPROVE @ Verified — no code changes required. Line refs match current tree:
— sent from clever-stag-70 |
Single-segment type atoms like Int were incorrectly routed through symbol_index_lookup and rejected on miss, breaking wave1 bare-call end-to-end resolve. Gate try_resolve_qualified_name_node on qualified_name_is_module_projection (container.member+). Co-authored-by: Cursor <cursoragent@cursor.com>
|
Re: opus APPROVE @ Verified against current tree — no code changes required. The review accurately describes the landed fix:
— sent from clever-stag-70 |
Replace hand-rolled QualifiedName coproduct match with the canonical FreeMonoid length already imported in 03_resolve.dag (review 38179). Co-authored-by: Cursor <cursoragent@cursor.com>
|
Re: composer REQUEST_CHANGES @ Valid — fixed in the next commit. Removed — sent from clever-stag-70 |
|
Re: opus APPROVE @ Verified — no code changes required. Current tree matches the review:
— sent from clever-stag-70 |
|
Re: composer APPROVE @ Verified — no code changes required. Current tree matches the review:
— sent from clever-stag-70 |
G1 (#6641) covers type-position qualified refs only; match-arm pattern-position dotted qualify (Closed => ...) still fails to parse post-G1 (same 'expected FatArrow, found Dot' error). Reverting the probe edit pending coordinator decision on pattern-position support.
…nnotations Extend G1 (#6641, type-alias RHS only) to parse and resolve container.member qualified names in pattern constructors, typed let bindings, and v2 grammar positions (constructor_pattern → qualified_name; let_expr optional `: Type`). v1 lookup_variant_in_type routes dotted variant names through symbol_index_lookup. Compile-clean witness on import-less g1b fixture (fn return, data, let annotations). Unblocks Wave-0 (c) homonym qualification. Co-authored-by: Cursor <cursoragent@cursor.com>
…nnotations Extend G1 (#6641, type-alias RHS only) to parse and resolve container.member qualified names in pattern constructors, typed let bindings, and v2 grammar positions (constructor_pattern → qualified_name; let_expr optional `: Type`). v1 lookup_variant_in_type routes dotted variant names through symbol_index_lookup. Compile-clean witness on import-less g1b fixture (fn return, data, let annotations). Unblocks Wave-0 (c) homonym qualification. Co-authored-by: Cursor <cursoragent@cursor.com>
…notations + symbol-index Disj-alias fill (#6669) * Grammar lane G1b: qualified projection in pattern, fn/data/let type annotations Extend G1 (#6641, type-alias RHS only) to parse and resolve container.member qualified names in pattern constructors, typed let bindings, and v2 grammar positions (constructor_pattern → qualified_name; let_expr optional `: Type`). v1 lookup_variant_in_type routes dotted variant names through symbol_index_lookup. Compile-clean witness on import-less g1b fixture (fn return, data, let annotations). Unblocks Wave-0 (c) homonym qualification. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: G1b: extend qualified projection parse+resolve to pattern, fn type-annot * WIP: Finish namespace migration: flip resolver import-scoped→namespace-only, * WIP: Finish namespace migration: flip resolver import-scoped→namespace-only, * WIP: Finish namespace migration: flip resolver import-scoped→namespace-only, * Fix G1b resolve regression on pattern node type annotations. Only resolve ExprLet type_annotation when it is a parse_type_expr node (NoExprData); pattern `node auth: shell.GCloud...()` stores a call expr there and must not be resolved as a type. Remove WIP parse probe fixtures that were breaking batch-2 discovery. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Finish namespace migration: flip resolver import-scoped→namespace-only, * WIP: Finish namespace migration: flip resolver import-scoped→namespace-only, * Address review nits: trim G1b fixture prose notes, clarify last-segment key. Remove unused g1b_fixture_note / g1b_stripped_witness_note data rows (parallel-ledger prose). variant_pattern_coverage_key no longer uses a misleading fold init — empty split returns name, else last segment. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix G1b fixture match exhaustiveness for ProviderEnum TagB. ProviderEnum is TagA | TagB; pattern_consumer must cover both qualified variant arms. Co-authored-by: Cursor <cursoragent@cursor.com> * Regen stage0 after G1b infer/resolve/type changes. CI regen_verify_gate_passes failed because committed stage0 drifted from fresh self-compile after is_type_expr_annotation and disj-variant alias fill landed in .dag. Co-authored-by: Cursor <cursoragent@cursor.com> * Move edit-locus source provenance witnesses to long lane. Floor batch-2 discovery RED on eval budget exceeded (>5s) for two edit_locus_resolver_test witnesses unrelated to G1b diff; re-home per operator fast-lane rule (test/claim/long/ excluded from per-PR discovery). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Brian Searls <briansrls@gunb.ai>
…poisoning surface) The floor's inert_carrier_no_unrostered_or_stale witness reds without it: the LocalAlias fixture it rosters landed in #6641, not #6686 — the roster line was a bundled orthogonal fix (same class as the kept cli_run.rs backfill), not part of the hash-grounding surface. Receipt: local floor on the revert tree, 300 PASS / 1 FAIL (this witness), FAIL clears with the line restored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…poisoning surface) The floor's inert_carrier_no_unrostered_or_stale witness reds without it: the LocalAlias fixture it rosters landed in #6641, not #6686 — the roster line was a bundled orthogonal fix (same class as the kept cli_run.rs backfill), not part of the hash-grounding surface. Receipt: local floor on the revert tree, 300 PASS / 1 FAIL (this witness), FAIL clears with the line restored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…main-red root fix) + fmt-immune crate-layout emitter (#6701) * Unbreak main: revert #6686's v2 hash-grounding surface (cross-root import x #6663 field wall) Partial revert of 4a60303: src/v2/std/node.dag, materialize.dag, materialize_witness_test.dag, inert_carrier.dag, and the DESIGN Sec-3-thread note pair (carrier + generated doc together). Keeps #6686's orthogonal cli_run.rs nfr-roster backfill (reverting it would re-red the falsifier lane). Root cause (proven by execution): #6663's new MissingField presence check resolves a literal's expected type by unqualified name through the flat module type env; #6686's 'import std.types { ContentHash }' in v2.std.node pulls dag-root std.algebra into the typecheck closure of every v2 module importing v2.std.node (704 files), so dag-root Monoid/Semigroup/BooleanAlgebra/ OrderedRing/CommutativeMonoid/CommutativeSemiring/AbelianGroup shadow the v2.std.algebra declarations at 28 literal sites in src/v2/std/{diagnostic,logic,nat,integer}.dag -> ci_floor_plan resolve fails -> every main push red. Neither PR alone was red: zero file overlap, merged 31 minutes apart, and the squash union tree was never CI'd (the PR's only CI run began 8 minutes before #6686 landed). Receipt: on the 60286e0 tree with the same seed binary, reverting exactly this .dag surface takes the plan resolve from 28 missing-required-field errors to green with the floor executing witnesses (control: #6678/#6685 left in tree). Re-land trigger (dissolution): the wall's presence leg consults the resolver's binding (or fails closed on ambiguous names) instead of the flat-env name lookup; the follow-up re-lands these files with that fix, using this exact 28-error tree as the RED control. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Keep #6686's LocalAlias inert-carrier roster line (orthogonal to the poisoning surface) The floor's inert_carrier_no_unrostered_or_stale witness reds without it: the LocalAlias fixture it rosters landed in #6641, not #6686 — the roster line was a bundled orthogonal fix (same class as the kept cli_run.rs backfill), not part of the hash-grounding surface. Receipt: local floor on the revert tree, 300 PASS / 1 FAIL (this witness), FAIL clears with the line restored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * WIP: field-wall env precedence fix (scratch) * WIP2: kernel/container guard + final regen * Fix generated_artifact_drift_gate: make the crate-layout emitter fmt-immune (rustfmt::skip) Batch-4 generated_artifact_drift_gate_passes red on this PR is the first run of that gate since main broke at 60286e0 -- #6677 landed its derived crate-layout artifact during the red window, so no tree ever executed batch 4 against it. Two writers disagreed on one artifact: the wet leg (stage0_crate_layout_emit.dag) emits plain multi-line arrays, while the committed bytes were rustfmt'd (trailing comma, collapsed one-liner). Committed bytes: fmt-clean, drift-red; emitter bytes: drift-clean, fmt-red -- no tree could satisfy both gates. Fix: the emitter stamps #[rustfmt::skip] on both consts, so its output is the fixed point of cargo fmt; artifact regenerated via main_wet. Receipts: wet regen leaves the tree clean, cargo fmt --check -p v1-compiler green, regen_stage0 --verify divergence 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ipline (#6698) * Unbreak main: revert #6686's v2 hash-grounding surface (cross-root import x #6663 field wall) Partial revert of 4a60303: src/v2/std/node.dag, materialize.dag, materialize_witness_test.dag, inert_carrier.dag, and the DESIGN Sec-3-thread note pair (carrier + generated doc together). Keeps #6686's orthogonal cli_run.rs nfr-roster backfill (reverting it would re-red the falsifier lane). Root cause (proven by execution): #6663's new MissingField presence check resolves a literal's expected type by unqualified name through the flat module type env; #6686's 'import std.types { ContentHash }' in v2.std.node pulls dag-root std.algebra into the typecheck closure of every v2 module importing v2.std.node (704 files), so dag-root Monoid/Semigroup/BooleanAlgebra/ OrderedRing/CommutativeMonoid/CommutativeSemiring/AbelianGroup shadow the v2.std.algebra declarations at 28 literal sites in src/v2/std/{diagnostic,logic,nat,integer}.dag -> ci_floor_plan resolve fails -> every main push red. Neither PR alone was red: zero file overlap, merged 31 minutes apart, and the squash union tree was never CI'd (the PR's only CI run began 8 minutes before #6686 landed). Receipt: on the 60286e0 tree with the same seed binary, reverting exactly this .dag surface takes the plan resolve from 28 missing-required-field errors to green with the floor executing witnesses (control: #6678/#6685 left in tree). Re-land trigger (dissolution): the wall's presence leg consults the resolver's binding (or fails closed on ambiguous names) instead of the flat-env name lookup; the follow-up re-lands these files with that fix, using this exact 28-error tree as the RED control. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Keep #6686's LocalAlias inert-carrier roster line (orthogonal to the poisoning surface) The floor's inert_carrier_no_unrostered_or_stale witness reds without it: the LocalAlias fixture it rosters landed in #6641, not #6686 — the roster line was a bundled orthogonal fix (same class as the kept cli_run.rs backfill), not part of the hash-grounding surface. Receipt: local floor on the revert tree, 300 PASS / 1 FAIL (this witness), FAIL clears with the line restored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * WIP: field-wall env precedence fix (scratch) * WIP2: kernel/container guard + final regen * Fix generated_artifact_drift_gate: make the crate-layout emitter fmt-immune (rustfmt::skip) Batch-4 generated_artifact_drift_gate_passes red on this PR is the first run of that gate since main broke at 60286e0 -- #6677 landed its derived crate-layout artifact during the red window, so no tree ever executed batch 4 against it. Two writers disagreed on one artifact: the wet leg (stage0_crate_layout_emit.dag) emits plain multi-line arrays, while the committed bytes were rustfmt'd (trailing comma, collapsed one-liner). Committed bytes: fmt-clean, drift-red; emitter bytes: drift-clean, fmt-red -- no tree could satisfy both gates. Fix: the emitter stamps #[rustfmt::skip] on both consts, so its output is the fixed point of cargo fmt; artifact regenerated via main_wet. Receipts: wet regen leaves the tree clean, cargo fmt --check -p v1-compiler green, regen_stage0 --verify divergence 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * MachineShape construction wall: compile gate + witnesses only. Rebuilt from origin/main per operator recovery: three-file scope only (lens, compile enrollment, claim witnesses). Stacked on #6687 for std.machine_shape / extdeps.gpu.machine_shape subjects — no Phase 1 content copied. Removed unused std.algebra import that poisoned CI resolve. Co-authored-by: Cursor <cursoragent@cursor.com> * machine_shape gate: fail-closed Cons/Empty match (determinism precedent) Replace is_empty + list_head/HeadAbsent absorb arm with Cons/Empty fold match — HeadAbsent silently accepted on invariant violation (§5). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Cursor <cursoragent@cursor.com>
…haustive theorem (#6725) * Unbreak main: revert #6686's v2 hash-grounding surface (cross-root import x #6663 field wall) Partial revert of 4a60303: src/v2/std/node.dag, materialize.dag, materialize_witness_test.dag, inert_carrier.dag, and the DESIGN Sec-3-thread note pair (carrier + generated doc together). Keeps #6686's orthogonal cli_run.rs nfr-roster backfill (reverting it would re-red the falsifier lane). Root cause (proven by execution): #6663's new MissingField presence check resolves a literal's expected type by unqualified name through the flat module type env; #6686's 'import std.types { ContentHash }' in v2.std.node pulls dag-root std.algebra into the typecheck closure of every v2 module importing v2.std.node (704 files), so dag-root Monoid/Semigroup/BooleanAlgebra/ OrderedRing/CommutativeMonoid/CommutativeSemiring/AbelianGroup shadow the v2.std.algebra declarations at 28 literal sites in src/v2/std/{diagnostic,logic,nat,integer}.dag -> ci_floor_plan resolve fails -> every main push red. Neither PR alone was red: zero file overlap, merged 31 minutes apart, and the squash union tree was never CI'd (the PR's only CI run began 8 minutes before #6686 landed). Receipt: on the 60286e0 tree with the same seed binary, reverting exactly this .dag surface takes the plan resolve from 28 missing-required-field errors to green with the floor executing witnesses (control: #6678/#6685 left in tree). Re-land trigger (dissolution): the wall's presence leg consults the resolver's binding (or fails closed on ambiguous names) instead of the flat-env name lookup; the follow-up re-lands these files with that fix, using this exact 28-error tree as the RED control. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Keep #6686's LocalAlias inert-carrier roster line (orthogonal to the poisoning surface) The floor's inert_carrier_no_unrostered_or_stale witness reds without it: the LocalAlias fixture it rosters landed in #6641, not #6686 — the roster line was a bundled orthogonal fix (same class as the kept cli_run.rs backfill), not part of the hash-grounding surface. Receipt: local floor on the revert tree, 300 PASS / 1 FAIL (this witness), FAIL clears with the line restored. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * WIP: field-wall env precedence fix (scratch) * WIP2: kernel/container guard + final regen * Fix generated_artifact_drift_gate: make the crate-layout emitter fmt-immune (rustfmt::skip) Batch-4 generated_artifact_drift_gate_passes red on this PR is the first run of that gate since main broke at 60286e0 -- #6677 landed its derived crate-layout artifact during the red window, so no tree ever executed batch 4 against it. Two writers disagreed on one artifact: the wet leg (stage0_crate_layout_emit.dag) emits plain multi-line arrays, while the committed bytes were rustfmt'd (trailing comma, collapsed one-liner). Committed bytes: fmt-clean, drift-red; emitter bytes: drift-clean, fmt-red -- no tree could satisfy both gates. Fix: the emitter stamps #[rustfmt::skip] on both consts, so its output is the fixed point of cargo fmt; artifact regenerated via main_wet. Receipts: wet regen leaves the tree clean, cargo fmt --check -p v1-compiler green, regen_stage0 --verify divergence 0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Merge-lifecycle interleaving witness: the squash race as a bounded-exhaustive theorem gunbc.merge_lifecycle (new): lifecycle dynamics over the existing gunbc.merge_admission authority — the merge step consumes policy_admits, never restates it. Squash lands the PR onto CURRENT main (squash_result_tree); receipts mint through mint_merge_admission_receipt; latest-receipt-per-PR matches GitHub required-check semantics; the unverified-tip latch fires only where main advances. test.claim.merge_lifecycle_interleaving_witness (new, floor-discovered): the 2026-07-16 #6663 x #6686 main-red as the permanent RED fixture (admitted under the live PerPrGateOnly policy, refused under KeyedReceipt, remedy path lands verified), plus bounded-exhaustive enumeration of all 625 length-4 event interleavings: KeyedReceipt admits zero unverified tips; PerPrGateOnly admits violations (enumerator-teeth control); RequireUpToDateBase (GitHub's strict boolean) still misses the roster axis. Quantifies gunbc.plans.branch_merge_admission_model section 4 over every interleaving instead of two authored scenarios. Additive checkpoint-1 extension: no enforcement flip (merge_freshness_gating_status stays GatingComputedDeferred), no settings change, no seed .rs touched. All 7 claims green by execution via gunbc run --claim-run; whole-tree compile-clean 0 diagnostics. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Wire the merge queue: merge_group trigger, typed end to end extdeps.github.actions gains the MergeGroup WorkflowTrigger variant (cited; nullary — checks_requested is the only documented activity and GitHub's default, so a one-inhabitant types parameter carries no information per the phantom-parameter collapse ruling). The yaml serializer answers it; gunbc.ci_workflow enrolls it in the ci on: list; ci.yml regenerated via generated_artifact_gate main_wet — the artifact diff is exactly one line (merge_group:). Queue runs are already absorbed by the existing seams, noted on the carrier: deploy's main-push guard skips them, the concurrency group falls through pull_request.number to run_id, the merge-admission stamp takes its non-PR arm, and an unresolvable merge-base diff on a queue ref falls through to the full floor (fail-closed, never widening). The trigger is inert until the operator adds the merge_queue rule to the main ruleset (Rulesets write needs the admin grant this integration lacks). Land this FIRST, flip the rule SECOND — the queue realizes gunbc.merge_admission KeyedReceipt on the tree axis, the policy test.claim.merge_lifecycle_interleaving_witness proves total. Whole-tree compile-clean: 0 diagnostics. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Auto-opened by session-dashboard for session
clever-stag-70.Pushing to
session/clever-stag-70advances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan