Repository navigation
Fixture-callable emitted-crate compilation: a witness route that reaches rustc over an emitted fixture closure - #9911
Conversation
…c over an emitted fixture closure
A witness can already compile an in-memory .dag source and assert on the emitted
TEXT (compile_dag_rust_emit_check). That is a SPELLING oracle: a meaning-level
emitter defect is invisible to it whenever the wrong bytes still contain the
right substring, and it is exactly what rustc's type checker refuses.
emitted_closure_compile_host does reach rustc, but only over the entry files its
roster names, so no fixture-authorable subject could be posed to it at all.
fixture_closure_rustc_verdict closes that: the same in-memory source shape,
emitted through the same compile_sources, written by the SAME crate writer
(write_probe_crate_files, factored out of write_probe_crate) and handed to the
SAME run_cargo -- so a green here and a green in the required phase cannot be
two facts about two crates. run_cargo's attribution symbol becomes the caller's,
because the required phase attributes its own injected fault while this route
attributes a red to the fixture's own emitted module.
Executed, both directions, on the real path:
control fixtures/fixture_closure_rustc/green_probe.dag cargo status=0
red fixtures/fixture_closure_rustc/text_nonliteral_probe.dag cargo status=101
E0308 expected `Rc<im::Vector<i64>>` found `std::string::String`
at src/fixture_closure_rustc_text_nonliteral_probe.rs:13:5
The red is the fixture gunbc.rung_drop text_boundary_identity_wall names; that
row's emitted-Rust claim now has an executing probe rather than a sentence. No
rung is claimed here and no class changes rung.
NOT A GATE, stated positively: --required-emit-compile is not among
REQUIRED_CI_PHASES and no workflow invokes it, so what this enrolls is green by
execution and blocks nothing.
v1 growth admitted under the DESIGN section 3 PURPOSE test by the owning manager:
it adds no new host CAUSE, only a second entry point over a source shape the tree
already accepts. Dissolution is the trigger emitted_closure_compile_seed_growth
already carries -- a modeled write-file-set and invoke-cargo actuation -- which
does not exist yet, and that finding is the more important half.
Files: fixture_closure_rustc_verdict + FixtureClosureOutcome (gunbc's own refusal
stays separate from a rustc verdict), per-arm diagnostics, the enrolled pair, and
claim_executor's --fixture-closure-compile (report, do not adjudicate: a red is
one arm of someone else's discriminator) and --fixture-closure-pair (adjudicate:
here the pair is the subject). Seed-growth roster re-derived exact at 74/74.
Class row filed: instrument_reenters_its_own_build_tool.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
--fixture-closure-compile counted only CrateNotWritten as unanswered, so it
exited SUCCESSFULLY on a fixture gunbc refused (SourceRefused) and on a cargo
run that never finished (DidNotComplete). Neither carries a rustc verdict, so
the mode could report success without reaching rustc -- the fail-open DESIGN
section 5 forbids, and a direct contradiction of the contract written three
lines above it: "only an arm the route could not answer stops the line". The
code enumerated one of the three arms that cannot answer.
THE REPAIR IS A PREDICATE BESIDE THE CARRIER, not a widened matches! at the call
site: the defect was a caller enumerating a subset of the arms, and a second
caller would enumerate a different subset. fixture_closure_reached_rustc is true
only for a cargo run that COMPLETED and reported its own exit status. A red is
reached -- rustc ran and refused, which is half of what a discriminator is for.
SourceRefused, CrateNotWritten, NotAttempted and DidNotComplete are not.
fixture_discrimination_passed's red arm now goes through the same predicate.
EXECUTED, BOTH DIRECTIONS, in one run:
arm gunbc refuses SourceRefused hard=1 ... 'definitely_not_a_declared_callable'
REFUSED ARM EXIT=1 (exited 0 before this commit)
enrolled pair control status=0, red status=101, E0308 attributed
pair PASSED, PAIR EXIT=0
So the refusal is real and was not bought by breaking the route.
cargo clippy --all-targets -- -D warnings exits 0. Seed-growth roster re-derived
exact at 75 declarations / 75 rows, zero stale, zero unaccounted.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
…m and the ledger row built on it TWO THINGS: a retraction, and the rework the approval's conditions required. THE RETRACTION. This branch asserted that a cargo-test-hosted consumer DEADLOCKS -- that a test binary launched by cargo, spawning cargo at the same target directory, blocks on the outer lock. THAT IS FALSE AND WAS NEVER MEASURED. It was inferred from a 30-minute run that produced no output and was terminated. Measured properly, from inside a cargo-launched test: elapsed=215.076672126s status=Some(0) blocking_line=None It COMPLETED. Cargo never emitted a Blocking line because it never waited for one. The original silence was an ordinary rebuild: an inner `cargo build --release` from an outer `cargo test --release` does not share fingerprints, so it recompiles part of the dependency graph before reaching the emitted closure. Two long builds in series, working throughout. The run was piped through `tail`, which destroyed the interim visibility that would have shown it. WHAT THAT FALSIFIES, AND WHAT IS DONE ABOUT EACH: - gunbc.recurring_failure_mode instrument_reenters_its_own_build_tool -- a class row filed and pushed on this specimen, claiming 'it does not fail; it BLOCKS'. DELETED, not amended: per unbacked_execution_claim's own remedy arms, an assertion that was NEVER BACKED is deleted rather than past-tensed, because there is no past to record. A recognition rule firing on an unreproducible mechanism routes every future reader to the wrong repair, in a ledger whose entire purpose is rules that hold. Both projections drop it. - The seed-growth paragraph asserting it: replaced by the falsification IN THE PAST TENSE with the numbers, so the next author cannot re-infer it from a deleted sentence. THE REWORK, to the approval's bounded conditions: - Both CLI flags (--fixture-closure-compile, --fixture-closure-pair) and the --required-emit-compile conjunct are REMOVED. No new CLI surface, no phase variant. - Every route item is #[cfg(test)] pub(crate) behind its own `use`, kept OUT of the production re-export: a production re-export would put these on the emitted seed's exported surface, which is PublicSurfaceGrowth against a seed frozen for growth. - The discriminator is authored in v1.compiler.compiler_tests_rust and emitted into compiler_tests.rs through the seed's own generator -- not hand-written into the projection. required-regen reaches its fixed point (first_generation_equal=true). - The carrier's known-FALSE claim that nothing under #[cfg(test)] executes on the merge path is corrected: rust-unit-tests runs repo_self_test_command on every push and PR. THE HONEST GRAIN OF THE EVIDENCE, stated identically in carrier, PR and rung claim: the discriminator is ENROLLED AND AVAILABLE via `-- --ignored`; it DOES NOT EXECUTE BY DEFAULT (it spawns cargo and compiles two emitted crates); rust-unit-tests is not a `needs` of the required aggregate, so even un-ignored a red there would not block through the required context. Candidate evidence, reviewable on demand, NO WALL. An #[ignore] is a cost decision and NOT a rung, and nothing here may be cited as merge-path coverage. It therefore does not discharge any next-rung trigger naming this capability. Seed-growth roster re-derived after the visibility change rather than carried forward: 75 declarations, 75 rows, zero stale, zero unaccounted. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
… 58151) The rework withdrew the --fixture-closure-compile and --fixture-closure-pair modes under the approval's test-facing-visibility condition. THE PROSE DESCRIBING THEM SURVIVED THE CODE BY ONE REVISION: current_boundary still listed both modes, the carrier still said the pair "runs inside claim_executor --required-emit-compile ... and its verdict JOINS that mode's exit status", and fixture_closure_reached_rustc's docstring still attributed its fail-open repair to a --fixture-closure-compile call site. None of that is in the tree -- `grep fixture-closure src/v1/stage0/src/bin/claim_executor.rs` returns nothing. Specification pointing at wiring that does not exist is exactly the class this file's receipts are supposed to prevent. THE CITATIONS ARE CORRECTED RATHER THAN THE WIRING ADDED, because the modes are forbidden by the condition that removed them: - current_boundary now names the real consumer: v1.compiler.compiler_tests_rust ct_fixture_closure_rustc_discrimination_test and its emitted form in compiler_tests.rs. - The WHERE IT EXECUTES paragraph now states the actual grain -- one #[ignore]d consumer, available via `-- --ignored`, not executing by default, rust-unit-tests outside the required aggregate, candidate evidence and no wall, discharging no next-rung trigger. - fixture_closure_reached_rustc's docstring says the specimen caller was a CLI mode SINCE WITHDRAWN and keeps the reason the predicate stays: the defect was a caller enumerating a SUBSET of the arms that cannot answer, and the next caller would enumerate a different subset. - The module header states the route has exactly one consumer, reaches no CLI flag and no required phase, and is not on the emitted seed's public surface. The withdrawal is RECORDED in the carrier rather than silently rewritten, naming both modes and review 58151, because a receipt that quietly changes what it certifies is worse than one that was wrong once -- which is this file's own standing argument. Seed-growth roster re-derived: 75 declarations, 75 rows, zero stale, zero unaccounted. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
Review 58161 read `import v2.std.text { string_is_empty }` in the red fixture as dead weight:
the binding is never mentioned again, and the red is `concat("x","y")` at the return boundary.
Every reader will have that instinct, so the answer is measured and written down rather than
argued.
THE IMPORT IS THE MECHANISM. `v1_compiler.cli_run` `resolve_virtual_source_with_imports` builds
this fixture's source set ONLY by following import statements transitively, so the import is the
single thing that puts v2.std.text into the resolved closure. Run the route on this file with the
import stripped:
WITHOUT IMPORT => SourceRefused hard=1
UnresolvedType { name: "v2.std.text.String" } | reached_rustc=false
So deleting it does not tidy the fixture -- it converts the red arm from a RUSTC VERDICT into a
GUNBC REFUSAL and destroys the discrimination, while looking like cleanup. That is the failure
shape this lane keeps meeting: a change that reads as obviously right and inverts what the code
does.
THE WALL HOLDS IF ANYONE DOES IT ANYWAY, which is worth stating because it is the fail-closed
repair from review 58120 doing its job: fixture_closure_reached_rustc refuses to count an arm
that never reached rustc, so the pair goes red rather than passing on a refusal. The annotation
exists so the wall is not hit in the first place.
No code change; the fixture gains the note and the measurement that produced it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
|
Review 58161's finding on The read is the natural one: the binding is never mentioned again, and the red is Deleting it does not tidy the fixture — it converts the red arm from a rustc verdict into a gunbc refusal and destroys the discrimination, while looking like cleanup. Two things worth noting for the record. The wall holds if someone does it anyway: — sent from proud-moth-614 |
…ition A decision to NOT RUN something goes silently stale: read in six months, an #[ignore] with no reasoning beside it is indistinguishable from neglect. So the carrier now carries the number, the argument and the condition that re-opens it. MEASURED, one runner, one run, warm target dir so the figures are comparable: discriminator alone 184.65s (test result: ok, pair PASSED) default --lib suite 456.28s (what runs on every push and PR) => un-ignoring is ~+40% on that suite, fleet-wide, per push. NOT measured cold, stated rather than estimated. The 185s is two emitted-crate cargo builds -- 6-file and 17-file closures, both linking the seed crate -- so it is rustc doing the work that makes the arm mean anything, not test logic, and it cannot be optimised away without removing the subject. THE ARGUMENT IS A RUNG ARGUMENT, NOT A COST ONE. Un-ignoring moves this from AVAILABLE to EXECUTES-ON-A-NON-BLOCKING-JOB, which is a real honesty improvement and still not an acceptance path, because rust-unit-tests is not a `needs` of the required aggregate. DESIGN 4b(1) establishes a rung by evidence executing on the real acceptance path, so BOTH STATES LEAVE A TRIGGER NAMING THIS CAPABILITY UNFIRED. The ignore costs nothing in rung terms and saves 40% of a per-push suite. REVERSAL CONDITION, named so this is re-decided rather than inherited: when rust-unit-tests is promoted into the required aggregate, cost and WALL arrive together and this trade no longer holds. Nothing else reverses it -- not a faster suite, not a bigger roster, and not a lane wanting to cite this as coverage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HoAvoacTJ3UVqBhBSfCYZh
briansrls
left a comment
There was a problem hiding this comment.
APPROVE at exact head 7be507bf28cfc4bff3186d5c9a82dc3be2050dc0.
The fixture route satisfies the bounded v1 PURPOSE ruling: it reuses compile_sources, the existing crate writer, run_cargo, and CargoVerdict; keeps gunbc refusal, write failure, incomplete execution, and completed cargo outcomes distinct; is #[cfg(test)] pub(crate) with no CLI mode, required-phase row, workflow edit, or production re-export; and carries the exact seed-growth census. Exact-head CI is green.
The ignored consumer is accepted at its stated grain: callable candidate evidence, not default execution, not a merge gate, and not satisfaction of any trigger requiring unconditional execution on an acceptance path. The existing host deletion trigger remains controlling.
…9911's fixture-closure route #9911 landed a CAPABILITY — a fixture-authorable subject reaching rustc over its emitted closure. This spends it on a subject that cannot be posed to a text oracle at all: `v1.compiler.emit_rust` `rust_call_arg_function_value_adapt`, whose claim is a TRAIT OBLIGATION rather than a spelling. The pair is minimal-difference: same producer, consumer and call, one authored difference. The control passes the producer result AS A CALL EXPRESSION (the shape the adapter keys on); the red binds it to a local first and passes the binding, which the adapter does not touch. So the only variable across the arms is whether the adapter fired. Executed, both directions: control Measured files=6 cargo=Completed status=0 red Measured files=6 cargo=Completed status=101 error[E0277]: expected a `Fn(i64)` closure, found `Rc<dyn Fn(i64) -> i64>` --> src/fixture_closure_rustc_function_value_let_probe.rs:22:11 pair PASSED, test result: ok in 173.84s The red is a KNOWN HOLE, not a wall working: gunbc accepts it with zero blocking diagnostics and emits a crate rustc refuses — `gunbc.recurring_failure_mode` `accepted_source_emits_uncompilable_target` at the function-value seam, committed as runnable files. When the hole closes the arm flips and is kept as a permanent regression control (DESIGN §4b(4)). Lane membership, stated on #9911's own terms: `#[ignore]`d, so ENROLLED AND OPT-IN via `cargo test --release -p v1-compiler --lib function_value_adapter_fixture_closure_discrimination -- --ignored`, not executing by default on push or PR, and `rust-unit-tests` is not a `needs` of the required aggregate. Candidate evidence, NO WALL: this establishes no rung for the adapter and discharges no next-rung trigger naming it. Three new hand-Rust declarations, all enumerated in `gunbc.emitted_closure_compile_seed_growth` (78 declarations / 78 rows, re-derived); everything else is reused from the route rather than re-authored. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY
…t it has one Review 58546, and it was right: fixture_discrimination_passed asks four questions -- control compiled, red reached rustc, red did not compile, red named its own emitted module -- and none of them is about the Fn bound. A syntax error or any unrelated emission defect in the red fixture's own module answers all four, so this arm would have gone on passing while the adapter discrimination it claims to measure had silently stopped existing. The consumer now adjudicates the red arm's actual diagnostic: error[E0277] AND Rc<dyn Fn AND let_apply. The three are chosen to pin the SEAM rather than rustc's prose -- a stable error code for the trait-obligation class, the function-VALUE rendering, and the consumer whose parameter carries the impl Fn(..) + Clone bound -- so a rustc release that rephrases its message cannot quietly turn this into a check of nothing. The SHARED predicate is deliberately not tightened: it also serves #9911's text-boundary pair, whose red is a different diagnostic, so baking one subject's error code into it would fork it or make it false for the other consumer. Each claim site adjudicates its own expected diagnostic. Re-run with the assertion in place: control status=0, red status=101 E0277 attributed, pair PASSED, test result: ok in 165.27s. Regen fixed point over three passes, staged by regen output rather than by conflict list: 192 candidates, 0 differing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014xLgWdoQZSdMjXTTh1WnUm
…9911's fixture-closure route (#9989) * The function-value adapter, judged by rustc: an opt-in pair through #9911's fixture-closure route #9911 landed a CAPABILITY — a fixture-authorable subject reaching rustc over its emitted closure. This spends it on a subject that cannot be posed to a text oracle at all: `v1.compiler.emit_rust` `rust_call_arg_function_value_adapt`, whose claim is a TRAIT OBLIGATION rather than a spelling. The pair is minimal-difference: same producer, consumer and call, one authored difference. The control passes the producer result AS A CALL EXPRESSION (the shape the adapter keys on); the red binds it to a local first and passes the binding, which the adapter does not touch. So the only variable across the arms is whether the adapter fired. Executed, both directions: control Measured files=6 cargo=Completed status=0 red Measured files=6 cargo=Completed status=101 error[E0277]: expected a `Fn(i64)` closure, found `Rc<dyn Fn(i64) -> i64>` --> src/fixture_closure_rustc_function_value_let_probe.rs:22:11 pair PASSED, test result: ok in 173.84s The red is a KNOWN HOLE, not a wall working: gunbc accepts it with zero blocking diagnostics and emits a crate rustc refuses — `gunbc.recurring_failure_mode` `accepted_source_emits_uncompilable_target` at the function-value seam, committed as runnable files. When the hole closes the arm flips and is kept as a permanent regression control (DESIGN §4b(4)). Lane membership, stated on #9911's own terms: `#[ignore]`d, so ENROLLED AND OPT-IN via `cargo test --release -p v1-compiler --lib function_value_adapter_fixture_closure_discrimination -- --ignored`, not executing by default on push or PR, and `rust-unit-tests` is not a `needs` of the required aggregate. Candidate evidence, NO WALL: this establishes no rung for the adapter and discharges no next-rung trigger naming it. Three new hand-Rust declarations, all enumerated in `gunbc.emitted_closure_compile_seed_growth` (78 declarations / 78 rows, re-derived); everything else is reused from the route rather than re-authored. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Regenerate the seed's generated test projections after the main merge The generated-artifact merge driver left the ours side in the worktree by design, so the merge commit carried compiler_tests.rs and v1_compiler_compiler_tests_rust.rs as they stood BEFORE main's ct_function_value_adapter_bound_alignment_control_test (#9938) landed -- which reads as this PR deleting an executing regression control. It does not: the bytes here are --required-regen output over the merged .dag sources, and both blobs are present. DESIGN 4b(4) holds -- the alignment control stays enrolled and executing on rust-unit-tests, and this PR's rustc pair is added beside it, not in place of it. Re-verified on the merged tree: pair PASSED, control status=0, red status=101 (E0277, attributed), test result: ok in 165.46s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Record the sibling byte-level control and the measured reason the projection actuator would not run Two prose corrections in gunbc.emitted_closure_compile_seed_growth, both about not overclaiming: - how this pair sits beside #9938's ct_function_value_adapter_bound_alignment _control_test: different oracle, different grain, and this #[ignore]d consumer does NOT falsify that control's own sentence that no enrolled fail-closed rustc consumer covers the adapter on the merge path. - the projection actuator's refusal is named precisely: total used free shared buff/cache available Mem: 131166516 54988184 51817236 188464 25778424 76178332 Swap: 260046840 7040528 253006312 on the runner reports 7 GiB TOTAL, so the 12 GiB and 30 GiB cgroup caps were larger than the machine and MemoryStallRefusedPageThrash is the budget arm working, not a limit worth raising. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015XNpHkAWNSqikzKqspogbY * Name the owner of the deferred ledger append instead of leaving it a future lane Review 58532 read the deferral as leaving the discovered instance outside DESIGN 4b's typed authority. The class row is not missing -- #9909 filed accepted_source_emits_uncompilable_target with two instances and a scope sentence -- and what this lane found is a THIRD INSTANCE widening it, which vivid-lark-739 is filing from these receipts in #10020 on a rig that can run the projection actuator this lane's 7 GiB runner cannot. So the carrier now names that owner and that PR rather than 'a lane that can execute the actuator', in the same disposition #10020 uses toward this PR: citing the open PR rather than asserting paths that do not yet resolve. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014xLgWdoQZSdMjXTTh1WnUm * Adjudicate WHICH rustc diagnostic the red arm carries, not merely that it has one Review 58546, and it was right: fixture_discrimination_passed asks four questions -- control compiled, red reached rustc, red did not compile, red named its own emitted module -- and none of them is about the Fn bound. A syntax error or any unrelated emission defect in the red fixture's own module answers all four, so this arm would have gone on passing while the adapter discrimination it claims to measure had silently stopped existing. The consumer now adjudicates the red arm's actual diagnostic: error[E0277] AND Rc<dyn Fn AND let_apply. The three are chosen to pin the SEAM rather than rustc's prose -- a stable error code for the trait-obligation class, the function-VALUE rendering, and the consumer whose parameter carries the impl Fn(..) + Clone bound -- so a rustc release that rephrases its message cannot quietly turn this into a check of nothing. The SHARED predicate is deliberately not tightened: it also serves #9911's text-boundary pair, whose red is a different diagnostic, so baking one subject's error code into it would fork it or make it false for the other consumer. Each claim site adjudicates its own expected diagnostic. Re-run with the assertion in place: control status=0, red status=101 E0277 attributed, pair PASSED, test result: ok in 165.27s. Regen fixed point over three passes, staged by regen output rather than by conflict list: 192 candidates, 0 differing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014xLgWdoQZSdMjXTTh1WnUm --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
What was missing
A witness can already compile an in-memory
.dagsource and assert on the emitted text —compile_dag_rust_emit_check, substring includes and excludes. That is a spelling oracle. A meaning-level emitter defect — a host representation emitted where a structural carrier was declared, a dropped type argument, a reference emitted past its resolved binding — is invisible to it whenever the wrong bytes still contain the right substring, and it is exactly what rustc's type checker refuses.v1_compiler.emitted_closure_compile_hostdoes reach rustc, but its only entry point takes a rostered.dagentry path, so no fixture-authorable subject could be posed to it at all. Fixture-authorable subjects with no compiler behind them on one side; a real compiler with no fixture-authorable subjects on the other.What landed
fixture_closure_rustc_verdict(source, probe_root)— the same in-memory.dagsource shapecompile_dag_rust_emit_checktakes, emitted through the samecompile_sources, written by the same crate writer (write_probe_crate_files, factored out ofwrite_probe_crate) and handed to the samerun_cargo. Sharing those three is the design: a separately authored fixture harness would make a green here and a green in the required phase two facts about two crates.FixtureClosureOutcomekeeps gunbc's own refusal (SourceRefused) separate from a rustc verdict — collapsing them would report a fixture the compiler rejected as "rustc refused the emitted bytes".run_cargo's probe-line scan takes the caller's attribution symbol, threaded through all three existing call sites. The required phase attributes its own injected fault; the fixture route attributes the fixture's own emitted module.fixture_closure_reached_rustcis the fail-closed predicate: true only for a cargo run that completed and reported its own exit status. A red counts as reached;SourceRefused,CrateNotWritten,NotAttemptedandDidNotCompletedo not.Executed, both directions
E0308, attributed to the fixture's own emitted module: the structural carrier against the hostString.gunbc.rung_droptext_boundary_identity_wall's emitted-Rust half now has an executing probe instead of a sentence.Where it executes — the honest grain
The route is
#[cfg(test)] pub(crate)behind its ownuse, deliberately not in the production re-export (that would be PublicSurfaceGrowth on a seed frozen for growth). Its one consumer isfixture_closure_rustc_discrimination, authored inv1.compiler.compiler_tests_rustand emitted intocompiler_tests.rsthrough the seed's own generator.It is
#[ignore]d. It is therefore ENROLLED AND AVAILABLE viacargo test --release -p v1-compiler --lib fixture_closure_rustc_discrimination -- --ignored, and does not execute by default on push or PR.rust-unit-testsis additionally not aneedsof the required aggregate, so even un-ignored a red there would be visible and would not block through the required context.So: candidate evidence, reviewable on demand, no wall. An
#[ignore]is a cost decision and not a rung. It discharges no next-rung trigger naming this capability — the capability exists, the evidence does not execute.Two claims this PR previously made that were FALSE
Recorded rather than silently edited, because a receipt that quietly changes what it certifies is worse than one that was wrong once.
elapsed=215s status=Some(0) blocking_line=None. It completes. The silence was an ordinary rebuild (an innercargo build --releasefrom an outercargo test --releasedoes not share fingerprints). Agunbc.recurring_failure_moderow filed on that specimen has been deleted, not amended — perunbacked_execution_claim's own arms, a never-backed assertion has no past to record.claim_executorCLI modes (--fixture-closure-compile,--fixture-closure-pair) and a--required-emit-compileconjunct. Withdrawn under the approval's test-facing-visibility condition. The prose describing them survived the code by one revision and was caught by review 58151; the citations now name the consumer that exists.v1 growth, admitted under the PURPOSE test
Hand-Rust declarations added to a seed frozen for growth, admitted by the owning manager under
gunbc.v1_maintenance_standingv1_seed_standing/ DESIGN §3's PURPOSE test: it makes emitter meaning-level discriminators executable at all. It adds no new host cause — same crate writer, samerun_cargo, samecompile_sources. Every declaration is enumerated ingunbc.emitted_closure_compile_seed_growth; census re-derived at 75 declarations / 75 rows, zero stale, zero unaccounted.The dissolution trigger is not minted here
It is the one that carrier already carries, quoted verbatim:
The substrate-native form of this capability does not exist yet, and that is the more important half of this change. What lands here is the host form, dissolving on that trigger and no other.
Why not a
.daghost builtinRefused for a stronger reason than v1 growth: the required floor's hermetic envelope refuses host effects, and a witness reaching the live tree is
DeclinedLiveTree. A builtin would buy a surface that cannot execute where witnesses execute.Constraints held
No edit to
v1_compiler_emit_rustorv1_compiler_infer_emit_info. No row added torequired_emit_compile_entries. No new CLI flag, noRequiredCiPhasevariant, no workflow change, no production re-export.