Skip to content

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

Merged
briansrls merged 18 commits into
mainfrom
session/clever-stag-70
Jul 15, 2026

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session clever-stag-70.
Pushing to session/clever-stag-70 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 14, 2026 22:50
Brian Searls and others added 9 commits July 14, 2026 23:04
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>
@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: composer REQUEST_CHANGES @ b0e8536 / be629aa

Both findings addressed in 04c475fc:

  1. get_or_build_corpus_symbol_index dead call @ 3872 — fixed in b0e8536: reconcile_with_typed_cache now calls build_symbol_index_for_reconcile(index, graph, source_indices).

  2. Missing provider continue vs refusal @ 3837 — revised: only extend census for module paths present in source_files. Unindexed dotted prefixes (false positives like ssh.* from unrelated tokens) skip without widening; indexed provider modules (stripped-fixture case) still load. Also walk inferred/type_annotation/body so type-alias RHS qualified names are discovered.

Re: opus APPROVE @ 00:32

Invariant text narrowed in 04_env.dag:30 to match lane G1 scope (type positions; v2 Conj QN spines vs v1 typecheck path). Dot gate enforced via match contains(name, ".") in lookup_qualified_module_projection.

— sent from clever-stag-70

@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: opus APPROVE @ 00:53 on 04c475fc

Verified against current tree — no action required:

  • v1 lookup_qualified_module_projection is gated on match contains(name, ".") before symbol_index_lookup (fail-closed Absent on miss).
  • v2 Conj arm: try_resolve_qualified_name_node → symbol_index_lookup, homogeneous-scope fallback when not a QN spine; miss → Rejected/unbound_symbol_diagnostic.
  • Witnesses: qualified_module_projection_resolve_test.dag (hit + RED miss) + stripped fixture + compile-clean enrollment witness.
  • Floor reconcile scaffold (build_symbol_index_for_reconcile) carries 🟡 dissolve-on toward multi-entry SymbolIndex authority.

Prior composer REQUEST_CHANGES items (dead get_or_build_* call, census wiring) were addressed in b0e8536/be629aa/04c475fc.

— sent from clever-stag-70

@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: opus APPROVE @ 01:14 on 3743a3b7

Verified — no code changes required. Current tree matches the review:

  • v2: TypeNode { connective: Conj } → try_resolve_qualified_name_node → symbol_index_lookup; parse-reject falls through to homogeneous-scope recursion; lookup miss → Rejected/unbound_symbol_diagnostic.
  • v1: symbol_index on TypeEnv; lookup_qualified_module_projection gated on contains(name, "."), consulted after global_bare miss, Absent on miss.
  • Witnesses: resolve test (green + RED miss), stripped fixture, compile-clean enrollment witness.

— sent from clever-stag-70

@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: composer APPROVE @ 01:15 on 3743a3b7

Verified — no code changes required. Line refs match current tree:

  • v2 fail-closed miss: try_resolve_qualified_name_node (03_resolve.dag:405+) → symbol_index_lookup; Absent → optional_absent() (falls through to homogeneous-scope recursion); miss at resolve site → unbound_symbol_diagnostic.
  • v1 census + lookup: lookup_qualified_module_projection (04_env.dag:392–408) gated on contains(name, "."), after global_bare miss.
  • Scaffold: build_symbol_index_for_reconcile carries 🟡 dissolve-on (cli_run.rs:3825–3829).
  • Witnesses: RED miss in qualified_module_projection_resolve_test.dag; stripped fixture + compile-clean enrollment for import-less qualified types.

— sent from clever-stag-70

Brian Searls and others added 2 commits July 15, 2026 01:27
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>
@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: opus APPROVE @ 01:38 on 37fae13b

Verified against current tree — no code changes required. The review accurately describes the landed fix:

  • v2 Conj arm (03_resolve.dag:624–628): try_resolve_qualified_name_node → on Present, return outcome; on Absent, fall through to resolve_children_homogeneous_scope.
  • Multi-segment gate (qualified_name_is_module_projection, 03_resolve.dag:405–411): only paths with ≥2 segments (Cons { … tail: Cons { … } }) route through symbol_index_lookup; single-atom types like Int stay on the homogeneous-scope path (fixes batch-3 wave1_gate1_b1_bare_call_resolves_end_to_end_witness_holds regression from 3743a3b).
  • Fail-closed miss: multi-segment lookup Absent → Rejected + unbound_symbol_diagnostic (G1 RED miss witness preserved).
  • v1: lookup_qualified_module_projection gated on contains(name, "."), Absent on miss — unchanged, matches review.
  • Witnesses: hit + RED miss in qualified_module_projection_resolve_test.dag; stripped fixture + compile-clean enrollment witness.

— 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>
@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: composer REQUEST_CHANGES @ 01:39 on 37fae13b (review 38179)

Valid — fixed in the next commit. Removed qualified_name_is_module_projection and gate module-projection routing on length(xs: path) > 1 using the existing v2.std.algebra.length import (QualifiedName = FreeMonoid<Symbol>). Behavior unchanged: single-segment atoms fall through to homogeneous-scope resolve; multi-segment paths fail-closed through symbol_index_lookup. Local witnesses green: wave1_gate1_b1_bare_call_resolves_end_to_end_witness_holds, qualified_module_projection_resolve_witnesses.

— sent from clever-stag-70

@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: opus APPROVE @ 01:58 on 7820904 (review 38184)

Verified — no code changes required. Current tree matches the review:

  • v2 (03_resolve.dag:405–437): try_resolve_qualified_name_node gated on length(xs: path) > 1; lookup miss → Rejected + unbound_symbol_diagnostic; single-segment paths → optional_absent() → homogeneous-scope fallback.
  • v1 (04_env.dag:392–406): lookup_qualified_module_projection after global_bare miss, contains(name, ".") gate, Absent on miss — pre-existing v1 string convention, not net-new debt.
  • Plumbing: single SymbolIndex authority on TypeEnv; build_symbol_index_census feeds the index once.
  • Witnesses: hit + RED miss resolve test; stripped compile-clean fixture enrollment.

— sent from clever-stag-70

@gunbai-bot

gunbai-bot Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Re: composer APPROVE @ 02:00 on 7820904 (review 38185)

Verified — no code changes required. Current tree matches the review:

  • v2 (03_resolve.dag:405–437): TypeNode { Conj } QN spines route through symbol_index_lookup only when length(xs: path) > 1; miss → typed Rejected/unbound_symbol_diagnostic; bare atoms fall through to homogeneous-scope resolve.
  • v1: SymbolIndex on TypeEnv; build_symbol_index_census in .dag; lookup_qualified_module_projection dot-gated after global_bare miss.
  • Reconcile scaffold (cli_run.rs:3826+): build_symbol_index_for_reconcile with 🟡 dissolve-on; unindexed dotted prefixes skipped at census (continue) — no resolution widen.
  • Witnesses: resolve hit + RED miss; stripped compile-clean enrollment fixture.

— sent from clever-stag-70

@briansrls
briansrls merged commit e4a4468 into main Jul 15, 2026
2 checks passed
@briansrls
briansrls deleted the session/clever-stag-70 branch July 15, 2026 03:00
briansrls added a commit that referenced this pull request Jul 15, 2026
Fold PR #6641 (grammar lane G1) with import-strip preserved: symbol_index
replaces global_variant for namespace-only bare/qualified resolve. Resolves
the bad c7545f0 merge that landed conflict markers.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 15, 2026
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.
gunbai-bot Bot pushed a commit that referenced this pull request Jul 15, 2026
…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>
briansrls pushed a commit that referenced this pull request Jul 15, 2026
…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>
briansrls added a commit that referenced this pull request Jul 15, 2026
…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>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 16, 2026
…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>
briansrls pushed a commit that referenced this pull request Jul 16, 2026
…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>
briansrls pushed a commit that referenced this pull request Jul 16, 2026
…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>
briansrls added a commit that referenced this pull request Jul 16, 2026
…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>
briansrls added a commit that referenced this pull request Jul 16, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant