Repository navigation
fix(cssl): emit-retain closure compiler deps by structural membership - #6883
Conversation
|
review 39758 — predicate disposition on Verified against current head ( Why no commit on this PR: those helpers are not introduced or touched by the cssl commits on this branch. Disposition plan (agreeing with your APPROVE carve-out): add a bounded — sent from proud-deer-857 |
|
review 39762 — response to non-blocking observations Verdict: thank you — APPROVE received. 1. Verified on No change now: CI run 29671727334 2. Already addressed in comment on review 39758: valid debt, out of the 3-file cssl scope, disposition routed to sharp-bee-290 on integration post-#6866 (not this PR). — sent from proud-deer-857 |
…n-note disposition (single merge point) (#6885) * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Module identity Phase 0(b): the admission invariant — every witness row * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Module identity Phase 0(b): the admission invariant — every witness row * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * emit: generalize BTreeSet Ord eligibility for Symbol-wrapped carriers FormalNonterminal and FormalTerminal ({ identity: Symbol }) now pass rust_btree_set_element_ord_eligible and receive Ord derives, unblocking 04_infer and program_partition self-emit cargo probes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Module identity Phase 0(b): the admission invariant — every witness row * Module identity Phase 1: the path⇄module binding authority (parse-derived, fail-closed) Homes the path⇄module binding on v2.compiler.source_authority as a DERIVED-at-parse fact per docs/plans/module-identity-storage-binding-design.md §2. - ModuleStorageProvenance = ParsedFromSource { artifact, span_index } | ProducedByBehavior { producer } — zero-file produced modules are now representable honestly instead of being excluded. - ModuleStorageBinding / ModuleStorageIndex, reusing QualifiedName, Artifact, SourceRootRef and SpanIndex (no new nickname, §3). - Both projections: file -> module and module -> storage. - Scope is the LIVE 1:1 binding; many-to-many is a named deferral (§6). §5 fail-closed repair in v2.compiler.program_assembly: the Rejected arm of qualified_name_from_module_node kept the root and left the index UNCHANGED, so a module whose name could not be derived went silently invisible to every downstream lookup — an absorbing fallback in drop form, its frequency zeroed by construction. It now refuses with the located diagnostic. Witnesses (green by execution, REDs verified discriminating by perturbation): derivation from parse; path projection; duplicate-module refuses; underivable name refuses; produced module has no storage. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Consolidate the qualified_name_from_segment_list §3 fork (LIVE runtime h * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Module identity Phase 0(b): the admission invariant — every witness row * review: forward located diagnostics; hoist grammar prepare; split fast/long witness lanes Three fixes from review + CI. 1. Located refusal (cursor/composer-2.5). The name-derivation Rejected arm discarded the derivation's diagnostics and substituted a port-level source_authority_diagnostic — satisfying "typed" while destroying "located" (§5 requires both), contradicting this PR's own notes, and diverging from the sibling arm in program_assembly which forwards d. It now forwards d unchanged, so one failure yields one diagnostic regardless of entry point. 2. Grammar prepare hoisted above the fold, mirroring program_assembly_prepare_once_note. The derivation called parse_module per read, re-validating the grammar K times over a K-module ingest; it now prepares once and uses parse_module_prepared. Empty ingest is guarded so it never pays the prepare for zero reads. Same cost-shape defect the assembly fold already documents (§6 always-fix). 3. Witness lanes split per the operator 5-second rule (CI EvalBudgetExceeded: 4 witnesses at ~5002ms). Measured by differencing against the non-parsing witness, parse-derived eval is ~13s — inherently over the fast-lane budget even after fix 2. Per gunbc.ci_layer_roots long_lane_exclusion_note ("fast receipts stay discovered, execution proofs live in long/"), the parse-derived proofs move to src/v2/test/claim/long/, and the fast lane keeps NEW witnesses that exercise the §5 construction wall over hand-built rows at zero parse cost: duplicate-module refusal, its accept control, and the produced/zero-file arm. Duplicate detection keys on module identity independently of provenance, which is why the wall is provable without a parse. All eight witnesses green by execution across both lanes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * Gate-A re-probe post-#6859+#6868: repoint 04_infer/program_partition to std_dup bucket Re-probed all seven Gate-A candidates with CSSL_STD_SEED_LINK=1 on integration/sharp-bee-290. No cargo-green flips (baseline stays 6). #6868 Ord fix cleared btree_set_ord for 04_infer/program_partition; both now refuse on Witness std_dup alongside 01_tokenize. Four modules still refuse UNRESOLVED_CompilerError. Bank execution receipts in docs/probes/gate_a_reprobe_2026-07-19.tsv and tail_reprobe_2026-07-19.tsv. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): add cssl_std_seed_link and shim_lib_rel columns to re-probe TSVs Invocation metadata for std_dup fix lane: all 19 probes were raw-closure (CSSL_STD_SEED_LINK=1, shim_lib_rel empty — no lane shims passed). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Weak Self Host -> Strong Self Host (Wave 1 -> 4, on 1 exit) * WIP: Weak Self Host -> Strong Self Host (Wave 1 -> 4, on 1 exit) * integration: address review 39722/39727 — admission scanner refuses (never widens), provenance de-fork, stale note, KeySource import Review 39722 (claude, RC) three findings + review 39727 (cursor, RC) two findings, all verified: 1. §5 absorbing fallback in the witness-admission scanner: rewritten as per-form structural extraction that is fail-closed BOTH ways — every occurrence of a recognized row head (bin_wet, probe_red, self_host_wet_entry, SelfHostWetReceiptBinding) either parses to a key, is a verified definition/non-literal pass-through site, or PANICS with source label + byte offset; the catch-all entry/function loop (the widen arm that could silently excuse orphans) is DELETED. A consumer in an unrecognized form now surfaces as a loud orphan, never an absorbed excuse. Call sites carry source labels (the 39727 arity finding was the auto-WIP intermediate state; complete here). 2. §3 parallel authority (borderline per reviewer): the dissolve-on marker now names the tracked lane (module-binding supply-carrier pattern; host consumes emitted manifest rows) and the interim scan's fail-closed semantics. 3. §2 byte-identical provenance pair: source_ir_node_artifact_provenance_add_from_model + _add wrapper DELETED (pre-existing on main, not introduced by the wave — verified via git show origin/main); consumers repointed (edit_locus_resolver_test import + 2 calls, internal :627 site). Zero references remain. 4. Stale fork note in module_storage_binding_derivation_test updated: the qualified_name fork it described was dissolved in this wave (renamed apart); note now records the resolution. 5. Operator-requested: dag/std/realization.dag KeySource unlisted-import x3 (pre-existing main defect) fixed — KeySource added to the std.effects import list; source_authority closure compile-clean 3 -> 0 diagnostics. Receipts: cargo build release clean; admission unit tests 2/2 (witness_admission_deferred_rows_have_consumers, witness_admission_orphan_synthetic_row_refuses); module_storage_binding witnesses PASS; edit_locus_resolver witnesses PASS on the repointed name. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * integration: rustfmt the admission scanner Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan: v1-deletion dependency graph as .dag — milestones, serial-vs-fanout, critical path (operator 2-week target) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan: record 2026-07-19 census discharges — Ord fix cleared btree_set_ord, KeySource import fix cleared the whole unresolved bucket; ~19 modules now on the one std_dup fix Verified by execution at f071536: all 6 formerly-UNRESOLVED closures (00_compile, materialization_carriers, program_assembly, source_authority, 02_parse, 03_ingest) compile 0 diagnostics; re-probe TSVs (#6872) show 04_infer/program_partition emit clean with std_dup as sole refusal. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(cssl): assembly std_dup unlock — Witness sanitize + v2_std emit-retain Single assembly fix for the 13-module std_dup gate (calm-boar-697 census): - sanitize_witness_import_conflict matches `pub enum Witness<C>` (generic), stripping v1_rt::Witness prelude imports that collided with emitted enum - v2_std_* emit-retain instead of minimal bridge shims (broken dependents like v2_std_logic → v2_std_algebra re-exports) No emitter changes. Probes move past HARNESS_ARTIFACT_std_dup / E0255 on all Gate-A modules + tail representatives; next blockers surface as namespace gaps. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): post-std_dup re-probe on proud-deer ed68594 (13 modules) CSSL_STD_SEED_LINK=1, shim_lib_rel empty, rebuilt cssl_assemble. std_dup E0255 cleared on 12/13; new namespace layer surfaces (FreeMonoid, ResolvedTree, InferredTree/InferredFacts). emit_produced: Optional std_dup residue. Harness invocation contract in probe script header. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): baseline caveat + probe_notes on post-std_dup TSV (#6884) ed68594 predates #6883 emit-retain; mark ResolvedTree/InferredTree rows EXPECTED-CLEARED. emit_produced Optional routed to proud-deer. FreeMonoid rows flagged as live next-layer census post-#6883. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(#6880): cargo-stage unresolved re-probe + plan census correction on main Rebased onto main post-#6866. Remaining delta: KeySource cargo-stage TSV, embedded-marker grep receipt, v1_deletion_plan corrections (13 std_dup vs 6 unresolved, ROOT-CAUSED emitter-gap, stern-lark-430 dispatched). Gate-A/tail frontier rows already landed via integration merge. Co-authored-by: Cursor <cursoragent@cursor.com> * witness_admission: bounded dissolution note on the two single-arm predicates (review 39758 disposition) Phase 0(b) author closed out; disposition owned by sharp-bee-290 per the capture. Pattern matches target_value_expr_int_literal_predicate_dissolution_note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan(#6880): resolve integration merge — std_dup LANDED #6876, flip-wave unblocked Fold integration/sharp-bee-290 at 81dc2d9; update v1_deletion_plan lane_state to current truth (13+6 census retained, probe_flip_fanout unblocked pending emitter fixes). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Brian Searls <briansrls@gunb.ai> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#6880) * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Module identity Phase 0(b): the admission invariant — every witness row * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Module identity Phase 0(b): the admission invariant — every witness row * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * emit: generalize BTreeSet Ord eligibility for Symbol-wrapped carriers FormalNonterminal and FormalTerminal ({ identity: Symbol }) now pass rust_btree_set_element_ord_eligible and receive Ord derives, unblocking 04_infer and program_partition self-emit cargo probes. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Module identity Phase 0(b): the admission invariant — every witness row * Module identity Phase 1: the path⇄module binding authority (parse-derived, fail-closed) Homes the path⇄module binding on v2.compiler.source_authority as a DERIVED-at-parse fact per docs/plans/module-identity-storage-binding-design.md §2. - ModuleStorageProvenance = ParsedFromSource { artifact, span_index } | ProducedByBehavior { producer } — zero-file produced modules are now representable honestly instead of being excluded. - ModuleStorageBinding / ModuleStorageIndex, reusing QualifiedName, Artifact, SourceRootRef and SpanIndex (no new nickname, §3). - Both projections: file -> module and module -> storage. - Scope is the LIVE 1:1 binding; many-to-many is a named deferral (§6). §5 fail-closed repair in v2.compiler.program_assembly: the Rejected arm of qualified_name_from_module_node kept the root and left the index UNCHANGED, so a module whose name could not be derived went silently invisible to every downstream lookup — an absorbing fallback in drop form, its frequency zeroed by construction. It now refuses with the located diagnostic. Witnesses (green by execution, REDs verified discriminating by perturbation): derivation from parse; path projection; duplicate-module refuses; underivable name refuses; produced module has no storage. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Consolidate the qualified_name_from_segment_list §3 fork (LIVE runtime h * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Module identity Phase 1: the path⇄module binding authority — parse-deriv * WIP: Module identity Phase 0(b): the admission invariant — every witness row * review: forward located diagnostics; hoist grammar prepare; split fast/long witness lanes Three fixes from review + CI. 1. Located refusal (cursor/composer-2.5). The name-derivation Rejected arm discarded the derivation's diagnostics and substituted a port-level source_authority_diagnostic — satisfying "typed" while destroying "located" (§5 requires both), contradicting this PR's own notes, and diverging from the sibling arm in program_assembly which forwards d. It now forwards d unchanged, so one failure yields one diagnostic regardless of entry point. 2. Grammar prepare hoisted above the fold, mirroring program_assembly_prepare_once_note. The derivation called parse_module per read, re-validating the grammar K times over a K-module ingest; it now prepares once and uses parse_module_prepared. Empty ingest is guarded so it never pays the prepare for zero reads. Same cost-shape defect the assembly fold already documents (§6 always-fix). 3. Witness lanes split per the operator 5-second rule (CI EvalBudgetExceeded: 4 witnesses at ~5002ms). Measured by differencing against the non-parsing witness, parse-derived eval is ~13s — inherently over the fast-lane budget even after fix 2. Per gunbc.ci_layer_roots long_lane_exclusion_note ("fast receipts stay discovered, execution proofs live in long/"), the parse-derived proofs move to src/v2/test/claim/long/, and the fast lane keeps NEW witnesses that exercise the §5 construction wall over hand-built rows at zero parse cost: duplicate-module refusal, its accept control, and the produced/zero-file arm. Duplicate detection keys on module identity independently of provenance, which is why the wall is provable without a parse. All eight witnesses green by execution across both lanes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * WIP: Emitter Ord-eligibility unlock: rust_btree_set_element_ord_eligible cons * Gate-A re-probe post-#6859+#6868: repoint 04_infer/program_partition to std_dup bucket Re-probed all seven Gate-A candidates with CSSL_STD_SEED_LINK=1 on integration/sharp-bee-290. No cargo-green flips (baseline stays 6). #6868 Ord fix cleared btree_set_ord for 04_infer/program_partition; both now refuse on Witness std_dup alongside 01_tokenize. Four modules still refuse UNRESOLVED_CompilerError. Bank execution receipts in docs/probes/gate_a_reprobe_2026-07-19.tsv and tail_reprobe_2026-07-19.tsv. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): add cssl_std_seed_link and shim_lib_rel columns to re-probe TSVs Invocation metadata for std_dup fix lane: all 19 probes were raw-closure (CSSL_STD_SEED_LINK=1, shim_lib_rel empty — no lane shims passed). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: Weak Self Host -> Strong Self Host (Wave 1 -> 4, on 1 exit) * WIP: Weak Self Host -> Strong Self Host (Wave 1 -> 4, on 1 exit) * integration: address review 39722/39727 — admission scanner refuses (never widens), provenance de-fork, stale note, KeySource import Review 39722 (claude, RC) three findings + review 39727 (cursor, RC) two findings, all verified: 1. §5 absorbing fallback in the witness-admission scanner: rewritten as per-form structural extraction that is fail-closed BOTH ways — every occurrence of a recognized row head (bin_wet, probe_red, self_host_wet_entry, SelfHostWetReceiptBinding) either parses to a key, is a verified definition/non-literal pass-through site, or PANICS with source label + byte offset; the catch-all entry/function loop (the widen arm that could silently excuse orphans) is DELETED. A consumer in an unrecognized form now surfaces as a loud orphan, never an absorbed excuse. Call sites carry source labels (the 39727 arity finding was the auto-WIP intermediate state; complete here). 2. §3 parallel authority (borderline per reviewer): the dissolve-on marker now names the tracked lane (module-binding supply-carrier pattern; host consumes emitted manifest rows) and the interim scan's fail-closed semantics. 3. §2 byte-identical provenance pair: source_ir_node_artifact_provenance_add_from_model + _add wrapper DELETED (pre-existing on main, not introduced by the wave — verified via git show origin/main); consumers repointed (edit_locus_resolver_test import + 2 calls, internal :627 site). Zero references remain. 4. Stale fork note in module_storage_binding_derivation_test updated: the qualified_name fork it described was dissolved in this wave (renamed apart); note now records the resolution. 5. Operator-requested: dag/std/realization.dag KeySource unlisted-import x3 (pre-existing main defect) fixed — KeySource added to the std.effects import list; source_authority closure compile-clean 3 -> 0 diagnostics. Receipts: cargo build release clean; admission unit tests 2/2 (witness_admission_deferred_rows_have_consumers, witness_admission_orphan_synthetic_row_refuses); module_storage_binding witnesses PASS; edit_locus_resolver witnesses PASS on the repointed name. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * integration: rustfmt the admission scanner Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan: v1-deletion dependency graph as .dag — milestones, serial-vs-fanout, critical path (operator 2-week target) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan: record 2026-07-19 census discharges — Ord fix cleared btree_set_ord, KeySource import fix cleared the whole unresolved bucket; ~19 modules now on the one std_dup fix Verified by execution at f071536: all 6 formerly-UNRESOLVED closures (00_compile, materialization_carriers, program_assembly, source_authority, 02_parse, 03_ingest) compile 0 diagnostics; re-probe TSVs (#6872) show 04_infer/program_partition emit clean with std_dup as sole refusal. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(cssl): assembly std_dup unlock — Witness sanitize + v2_std emit-retain Single assembly fix for the 13-module std_dup gate (calm-boar-697 census): - sanitize_witness_import_conflict matches `pub enum Witness<C>` (generic), stripping v1_rt::Witness prelude imports that collided with emitted enum - v2_std_* emit-retain instead of minimal bridge shims (broken dependents like v2_std_logic → v2_std_algebra re-exports) No emitter changes. Probes move past HARNESS_ARTIFACT_std_dup / E0255 on all Gate-A modules + tail representatives; next blockers surface as namespace gaps. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): post-std_dup re-probe on proud-deer ed68594 (13 modules) CSSL_STD_SEED_LINK=1, shim_lib_rel empty, rebuilt cssl_assemble. std_dup E0255 cleared on 12/13; new namespace layer surfaces (FreeMonoid, ResolvedTree, InferredTree/InferredFacts). emit_produced: Optional std_dup residue. Harness invocation contract in probe script header. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): baseline caveat + probe_notes on post-std_dup TSV (#6884) ed68594 predates #6883 emit-retain; mark ResolvedTree/InferredTree rows EXPECTED-CLEARED. emit_produced Optional routed to proud-deer. FreeMonoid rows flagged as live next-layer census post-#6883. Co-authored-by: Cursor <cursoragent@cursor.com> * docs(#6880): cargo-stage unresolved re-probe + plan census correction on main Rebased onto main post-#6866. Remaining delta: KeySource cargo-stage TSV, embedded-marker grep receipt, v1_deletion_plan corrections (13 std_dup vs 6 unresolved, ROOT-CAUSED emitter-gap, stern-lark-430 dispatched). Gate-A/tail frontier rows already landed via integration merge. Co-authored-by: Cursor <cursoragent@cursor.com> * witness_admission: bounded dissolution note on the two single-arm predicates (review 39758 disposition) Phase 0(b) author closed out; disposition owned by sharp-bee-290 per the capture. Pattern matches target_value_expr_int_literal_predicate_dissolution_note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * plan(#6880): resolve integration merge — std_dup LANDED #6876, flip-wave unblocked Fold integration/sharp-bee-290 at 81dc2d9; update v1_deletion_plan lane_state to current truth (13+6 census retained, probe_flip_fanout unblocked pending emitter fixes). 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: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Key retain-vs-seed-replace on emitted lib.rs manifest + sibling .rs, not seed pub mod presence. Clears ResolvedTree/InferredTree on 04_infer/program_partition/06_translate. Deliberate-red cargo control proves emit-retain stays discriminating. Co-authored-by: Cursor <cursoragent@cursor.com>
bd91f5e to
1020289
Compare
|
review 39891 — response Verified on Structural membership rule confirmed: No code change. Awaiting second re-review (+1 queued) + full — sent from proud-deer-857 |
|
review 39892 — response Verified on Rust + shell paths aligned ( Re-review tally: 39891 + 39892 APPROVE (2/2). Awaiting full — sent from proud-deer-857 |
* docs(probes): 6-module + 13-tail confirmation TSVs post-#6883/#6886/#6888 Curated cargo probes at main 628ebe1 (CSSL_STD_SEED_LINK=1, empty shim). 13-tail: FreeMonoid-only uniform layer confirmed. 6-bucket: 5/6 FreeMonoid, materialization_carriers v2_std_text E0433 persists (not #6883 scope). Co-authored-by: Cursor <cursoragent@cursor.com> * docs(probes): classify v2_std_text E0433 as emitter closure-manifest gap Distinct receipt from FreeMonoid import-emission per sharp-bee ruling: emitter omits v2_std_text from closure lib.rs; not cssl assembly-roster. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: unresolved_compiler_error diagnosis + fix: 6 modules (00_compile, materi * fix(probes): add SCAFFOLD dissolve-on header to flip confirmation runner Matches curated_cargo_probe_one.sh / frontier_probe_sweep shell discipline per review 39922 (hand-shell gate, §6 scaffold marker). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Follow-up to #6876 (already approved/merged separately). Fixes the 3-module assembly seed-link surface mismatch:
v2_compiler_*closure members were seed-replaced withpub use v1_compiler::*when seedlib.rshadpub mod, dropping gunbc-emitted types (ResolvedTree,InferredTree).Design bar: retain-vs-seed-replace derives from structural closure membership (module in emitted
src/lib.rsmanifest + emittedsrc/*.rssibling), not a hand-maintained name roster or seedpub modpresence.Deliberate-red control:
deliberate_red_control_broken_closure_dep_surfaces_at_cargo— broken closure dep bytes survive emit-retain and refusecargo build(lane stays discriminating).Routing: FreeMonoid (
01_tokenize+ downstream) untouched — emitter lane, queued to neat-swift-795.Probe delta (
CSSL_STD_SEED_LINK=1)04_inferFreeMonoid(emitter)program_partitionFreeMonoid(emitter)06_translateFreeMonoid(emitter)01_tokenizeFreeMonoid(emitter)Test plan
cargo test -p v1-compiler --bin cssl_assemble— 7/7 pass (incl. closure emit-retain + deliberate-red control)CSSL_STD_SEED_LINK=1 ./scripts/curated_cargo_probe_one.shon 04_infer, program_partition, 06_translate, 01_tokenize — assembly targets cleared; FreeMonoid remains (not in scope)