Skip to content

#9886's second symptom: shell_service_unmodeled_output_key_refuses asserted the pre-wall shape - #10029

Closed
gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/sunny-gull-270
Closed

gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/sunny-gull-270

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Part 1 of the main-is-red item. #9886 produced ONE root cause with TWO symptom classes, and #10017 closed the first. This closes the second. No emitter changes — a reviewer should not go looking for a behaviour change.

What was red

cargo test --release -p v1-compiler --lib on main: 642 passed, 2 failed. Both are in the GENERATED src/v1/stage0/src/compiler_tests.rs.

render_rust_applied_type_routes_qualified_base_through_leaf_name — already fixed by #10017, verified here rather than assumed. #9886's stale mirror deleted two lines from the test body: env_value.unit_variant_index_observed = true and the same on populated_env_value. Counting that string across the three refs: fb481ae0faf=2, 4059156e491=0, 52aac48b67b=2. Without the observed flag the env carries no unit-variant evidence, so render_rust_applied_type correctly refused with a located compile_error! instead of emitting i64. The emitter was right and the regenerated test was wrong.

shell_service_unmodeled_output_key_refuses — what this PR fixes. A test #9886 added; #10017's mirror repair never touched it, so it is a separate defect rather than a second face of the stale mirror.

Why it was unsatisfiable the day it landed

It did .find(|f| f.path == "src/probe.rs").expect("service module must emit src/probe.rs") and then looked for the refusal text inside that file. No such file exists, by construction: v1.compiler.compile emit_artifact returns EmitResult { files: [], diagnostics: unmodeled_transports } when a transport diagnostic fires — the empty file list is paired with a blocking diagnostic, not standing alone. §5 was already satisfied: the compile refuses, typed (TransportEmissionNotModeled) and located (span: ch.span, at the FIELD, with the individual key in missing_realization_fact). #9886 wrote the wall and the test in one PR, and the test asks for the shape the wall replaced.

The shape it asked for is a filed defect class, twice over

  • gunbc.recurring_failure_mode accepted_source_emits_uncompilable_target: "the .dag graph is the authority and Rust is one realization, so 'rustc catches it' is exactly the outsourcing this project exists to end."
  • 05_emit.dag's own annotation records that this exact shape was tried and filed as refusal_deferred_to_emitted_runtime: "7 files emitted, 0 diagnostics beside a panic!(): the line did not stop, the compile reported success, and the refusal was deferred to a runtime nobody reads until production."

So the fix is not to make the emitter emit the file.

What the test now asserts — through the wall, not about the bytes

  1. an error diagnostic of variant TransportEmissionNotModeled exists
  2. its rendered message names not_a_channel and has no modeled channel
  3. no src/probe.rs among r.files — the line stopped rather than reported and continued
  4. no emitted file anywhere contains stdout.clone() — XL-0-SERVICE: the service-emission path in 05_emit_rust binds stdout to every declared output field and does not box the error arm — it emits non-compiling Rust #9886's own fall-through assertion, widened from one file to all of them

Its positive control is the sibling shell_service_output_projection_binds_each_declared_channel: same fixture with every key modeled, zero diagnostics, src/probe.rs emitted. So "no file" here is the refusal firing and not an emitter that never emits for services. That reasoning is cited in the test's own annotation, so the next reader inherits it.

Red controls, executed

In an isolated detached worktree, so nothing here was edited mid-run. Two seed mutations, each rebuilt and run:

  • delete the wall's diagnostic (unmodeled_shell_transport_diagnostics returns []): conjunct 1 goes RED — must refuse with TransportEmissionNotModeled. Got: [].
  • remove only the line-stop in emit_artifact, then neutralise conjuncts 1 and 2 so the mutant is judged by the file conjunct alone: conjunct 3 goes RED with ["Cargo.toml", "src/lib.rs", "src/main.rs", "src/probe.rs", "src/v1_rt.rs", "src/dry_run.rs", "src/emitted_population.rs"] — seven files emitted, the ledger's recorded pre-wall shape reproduced by execution.

Neither the typed-refusal half nor the line-stop half is a passenger.

Regeneration

Authority only. The edit is src/v1/compiler_tests_rust.dag; the two .rs files are its regeneration, installed from the candidate tree, never hand-edited. Regenerated across both generations, since compiler_tests.rs is rendered from the running seed's baked string:

regen → install v1_compiler_compiler_tests_rust.rs → rebuild claim_executor (a grep of the new binary confirms it bakes the new string) → regen → install compiler_tests.rs → regen, reporting first_generation_equal=true planned=150 executed=150 adjudicated=150.

The rebuild is the load-bearing step: a regen that greened against the file it just wrote would prove nothing.

Verification

ctrl-build --remote -- cargo test --release -p v1-compiler --lib -- compiler_tests::compiler_tests::shell_service compiler_tests::compiler_tests::render_rust_applied_type_routes → 4 passed; 0 failed, on this branch. The same command on 52aac48b67b gave 3 passed / 1 failed.

Neither 05_emit_rust.dag nor 04_resolve.dag is touched, so the two lanes working in those files are unaffected.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VSP89XiSm2YMnUvSwSR1ct

…serted the pre-wall shape

Part 1 of the main-is-red item. #9886 produced ONE root cause with TWO symptom
classes, and #10017 closed the first. This closes the second. No emitter changes.

WHAT WAS RED. `cargo test --release -p v1-compiler --lib` on main: 642 passed,
2 failed. Both failures are in the GENERATED src/v1/stage0/src/compiler_tests.rs.

  render_rust_applied_type_routes_qualified_base_through_leaf_name -- ALREADY FIXED
  by #10017, verified here rather than assumed. #9886's stale mirror deleted two
  lines from the TEST BODY, `env_value.unit_variant_index_observed = true` and the
  same on populated_env_value. Counting that string across the three refs gives
  fb481ae=2, 4059156=0, 52aac48=2. Without the observed flag the env
  carries no unit-variant evidence, so render_rust_applied_type CORRECTLY refused
  with a located compile_error! instead of emitting i64. The emitter was right and
  the regenerated test was wrong.

  shell_service_unmodeled_output_key_refuses -- what this commit fixes. It is a
  test #9886 ADDED, and #10017's mirror repair never touched it, so it is a
  separate defect rather than a second face of the stale mirror.

WHY IT WAS UNSATISFIABLE THE DAY IT LANDED. It did
`.find(|f| f.path == "src/probe.rs").expect("service module must emit src/probe.rs")`
and then looked for the refusal text INSIDE that file. No such file exists, by
construction: v1.compiler.compile emit_artifact returns
`EmitResult { files: [], diagnostics: unmodeled_transports }` when a transport
diagnostic fires -- the empty file list is PAIRED with a blocking diagnostic, not
standing alone. §5 was already satisfied; the compile refuses, typed
(TransportEmissionNotModeled) and located (span: ch.span, at the FIELD, with the
individual key in missing_realization_fact). #9886 wrote the wall and the test in
one PR, and the test asks for the shape the wall replaced.

THE SHAPE IT ASKED FOR IS A FILED DEFECT CLASS, twice over, which is why the fix
is not to make the emitter emit the file.
  - gunbc.recurring_failure_mode `accepted_source_emits_uncompilable_target`:
    "the .dag graph is the authority and Rust is one realization, so 'rustc
    catches it' is exactly the outsourcing this project exists to end."
  - 05_emit.dag's own annotation records that this exact shape was TRIED and filed
    as `refusal_deferred_to_emitted_runtime`: "7 files emitted, 0 diagnostics
    beside a panic!(): the line did not stop, the compile reported success, and
    the refusal was deferred to a runtime nobody reads until production."

WHAT THE TEST NOW ASSERTS -- through the wall, not about the bytes:
  1. an error diagnostic of variant TransportEmissionNotModeled exists
  2. its rendered message names `not_a_channel` AND `has no modeled channel`
  3. no `src/probe.rs` among r.files -- the line STOPPED rather than reported
     and continued
  4. no emitted file anywhere contains `stdout.clone()` -- #9886's own
     fall-through assertion, widened from one file to all of them
Its positive control is the sibling shell_service_output_projection_binds_each_
declared_channel: same fixture with every key modeled, zero diagnostics,
src/probe.rs emitted. So "no file" here is the refusal firing and not an emitter
that never emits for services.

RED CONTROLS, EXECUTED, in an isolated detached worktree so nothing here was
edited mid-run. Two mutations of the seed, each rebuilt and run:
  - delete the wall's diagnostic (unmodeled_shell_transport_diagnostics returns
    []): conjunct 1 goes RED, "must refuse with TransportEmissionNotModeled.
    Got: []".
  - remove only the line-stop in emit_artifact, then neutralise conjuncts 1 and 2
    so the mutant is judged by the file conjunct alone: conjunct 3 goes RED with
    ["Cargo.toml", "src/lib.rs", "src/main.rs", "src/probe.rs", "src/v1_rt.rs",
    "src/dry_run.rs", "src/emitted_population.rs"] -- seven files emitted, which
    is the ledger's recorded pre-wall shape reproduced by execution.
So neither the typed-refusal half nor the line-stop half is a passenger.

AUTHORITY ONLY. The edit is src/v1/compiler_tests_rust.dag; the two .rs files are
its regeneration and were installed from the candidate tree, never hand-edited.
Regenerated across BOTH generations, since compiler_tests.rs is rendered from the
running seed's baked string: regen -> install v1_compiler_compiler_tests_rust.rs
-> REBUILD claim_executor (grep of the new binary confirms it bakes the new
string) -> regen -> install compiler_tests.rs -> regen, which reports
`first_generation_equal=true planned=150 executed=150 adjudicated=150`. The
rebuild is the load-bearing step: a regen that greened against the file it just
wrote would prove nothing.

Neither 05_emit_rust.dag nor 04_resolve.dag is touched, so the two lanes working
in those files are unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VSP89XiSm2YMnUvSwSR1ct
@gunbai-bot

gunbai-bot Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #10025 — same fix, and it reads missing_realization_fact structurally off the diagnostic variant where this branch string-matched the rendered message via diagnostic_to_message. That is the weaker read: it would inherit a dependency on the message renderer, so a renderer change could red the test for a reason that is not the subject.

The executed mutation controls from this branch are posted on #10025 (#10025 (comment)) — they are evidence about the two walls, not about either diff, so they apply there unchanged.

— sent from sunny-gull-270

@gunbai-bot gunbai-bot Bot closed this Sep 2, 2026
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.

0 participants