Skip to content

Derive .dag harness Cargo manifests from the emitted manifest; delete the hand-authored dependency blocks (libc E0433) - #13057

Merged
gunbai-bot[bot] merged 3 commits into
mainfrom
session/neat-seal-675
Oct 3, 2026
Merged

gunbai-bot[bot] merged 3 commits into
mainfrom
session/neat-seal-675

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

What was wrong

The emitter writes Cargo.toml into the output crate from the dependency demand of what it emitted (v1.compiler.emit_rust emit_cargo_toml). Six .dag harness sites then overwrote that file with a hand-authored [dependencies] roster. gunbc#12861 added libc to the emitted runtime and to two of those rosters; the curated seed-linked harness roster was missed, so every module on the behavioral transport roster failed to build — fleet run 37079504327, 15/15 no-verdict on E0433 (libc).

This is the existing class gunbc.recurring_failure_mode probe_manifest_overwrites_emitted_dependency_demand. Its first repair closed the Rust probe writer only; the .dag routes carried the same overwrite.

The repair

New module tools.emitted_crate_harness_manifest (dag/gunbc/instruments/emitted_crate_harness_manifest.dag): derive_harness_manifest_in_place reads the manifest the emission wrote and appends only what a harness owns:

  • [lib] name = "v1_compiled" (the name witness drivers address; the package table is left as emitted),
  • [[bin]] witness for the witness target,
  • [dependencies.v1-compiler] (path) for a seed-linked build — nothing for SeedAbsent.

Each addition is its own TOML table, so the overlay is position-independent and needs no reader of the emitted text; if the emitter ever declares one of those tables, cargo refuses the duplicate. The read-or-refuse decision is the pure plan_harness_manifest: an unread or empty emitted manifest refuses (EmittedManifestUnreadable) — there is no fallback roster — and the write exists only on the planned arm.

No .dag harness route names a registry crate any more. Deleted in the same change (replacement migration):

Hand-authored block Module
cssl_v1_compiled_cargo_deps_block, …_package_header, …_cargo_toml, …_probe_lib_cargo_toml tools.self_host_curated_seed_linked_harness
slb_cargo_toml tools.self_host_logic_behavioral_transport
slbu_cargo_toml tools.self_host_logic_seed_unavailable_transport
whole module (its one function had no caller; the shell script it served was cut with the floor) tools.self_host_curated_probe_cargo

Consumers moved to the derivation: the curated harness, tools.emission_entry_instrument measure_cargo_half, v2.workflow.product_receipt_stage product_receipt_cargo_tail (new refusal cause EmittedCargoManifestUnreadable), and both std.logic transports.

Rows updated: the RFM row gains this incident's receipt, repair and control; gunbc.v1_consumer_census names the new renderer of the seed path dependency; gunbc.guarantee_stall self_host_hand_authorized_cargo_toml_stall is narrowed to what is still true (see below).

Behavior changes worth knowing

  • Harness crates now build with the emitter's full dependency set, which includes ureq (and clap/tokio/reqwest when the emission demands them). The hand rosters omitted ureq and always carried clap.
  • The derived manifest keeps the emitted [workspace] table; the hand manifests had none. All sites stage the crate outside the repository, so this is inert there.
  • For a pipeline entry the emitted package name is v1_compiler, not v1_compiled; the [lib] name pin keeps the library addressable as v1_compiled. Checked on a toy crate (package v1_compiler + path dependency v1-compiler + pinned lib name builds and runs); not exercised on a real pipeline emission.

Evidence

Executed locally, seed binary /cargo-target/cool-lynx-851/release/gunbc (the change is .dag-only):

  • Witness test.claim.emitted_crate_harness_manifest_witness — six claims, all over supplied values, all hold. Mutation pairs: replacing the emitted text with a literal roster in harness_manifest_over_emitted reds a_dependency_only_the_emission_declared_reaches_every_harness_manifest; dropping the empty-manifest refusal in plan_harness_manifest reds an_unread_or_empty_emitted_manifest_refuses_instead_of_planning_the_overlay_alone. (The first push carried two claims that derived on a real temp directory; the floor refused them as a route gap — the hermetic route has no arm for Mktemp.Dir — so the decision was split out as a pure function rather than enrolling the gap as debt.)
  • Real route, one transport: slbu_seed_unavailable_run end to end under RUSTFLAGS=-D warnings — real emit of dag/std/logic.dag, manifest derived from the emitted file, cargo build --release (18 s), witness passes.
  • Discriminating control (3): real emission of std/logic, cfg-if = "1" appended to the emitted manifest, derivation run with SeedLinked — the derived manifest carries cfg-if (and libc, from the emitter) with no harness edit.

Fleet result and what is still not covered:

  • Control (2) as amended by calm-boar-904 (the owning manager): "E0433 gone in every row" — met. The brief originally asked for all 15 rows to produce verdicts; 11 do, and the amendment records that the remaining 4 fail for unrelated, previously hidden reasons (table below). The three driver rows are the follow-up item for this lane; the emitted-library row is routed to the text-wall lane (gunbc#12512).

  • Control (2), fleet run 37092365386: 11 of 15 rows hold; 4 still have no verdict, none of them for a dependency. The base run (37079504327) was 15 of 15 no-verdict on E0433 libc. In this run E0433 does not occur, libc compiles in every row's crate, and every row's manifest was derived from the emitted one. The four that remain are defects the libc failure had been hiding:

    Row Where cargo stops First error
    04_infer.dag witness driver src/main.rs E0308: driver passes Rc<Node> to infer, which now takes Rc<ResolvedTree>
    07_target_carriers.dag witness driver src/main.rs E0599: no variant Named on EdgeLabel
    program_partition.dag witness driver src/main.rs E0599: no variant Named on EdgeLabel
    discovery_enumeration.dag emitted lib src/std_string_type.rs E0308 ×8: v1_rt::string_length(&str) called with &Rc<Vector<i64>>

    Three are hand-written witness drivers that no longer match the emitted API; one is in the emitted library itself (the text-representation crossing). None is in scope here and none is fixed here.

    What this run measured: commit 27b05448 on verify/neat-seal-675-with-13032 — this PR at 337c89b merged with gunbc#13032's branch (the instrument label only exists there), plus that branch's generated .gitignore and dispatch YAML. It predates 01ac484 (the pure plan_harness_manifest split) and the merge of main, so it is not an exact-head receipt; the read-success path it exercised is unchanged by either. A first dispatch (37091945689) refused in six minutes on a dirty tree because the verification branch lacked that .gitignore projection; it says nothing about this change.

  • Control (1), red on base: taken from fleet run 37079504327 (on Self-host behavioral equivalence: fleet-dispatchable, instrument-label wall (receipt follows at a main sha) #13032's branch, which carries the hand block). I did not re-run it.

  • Typecheck of the seed-linked harness, emission entry instrument, product receipt stage, census and stall modules: not run locally (both available seed binaries predate main). The floor on the first push (run 37091914831) reached adjudication with those modules in its plan and blocked only on the two route-gap claims above; the floor on the current head is the standing check.

  • The seed-linked curated harness built 11 real emissions through the derived manifest in that fleet run. The emission entry instrument's probe-lib route has not been executed.

Residue, named

  • The overlay's three tables are still TOML text. extdeps.languages.toml cannot render [[bin]] or a dotted sub-table header (TomlTable.name goes through toml_render_key, which quotes a dotted name). The stall row now says exactly that and names it as its trigger.
  • v2.workflow.product_receipt_stage materializes only src/lib.rs from the v2 emission, so its candidate has no emitted manifest; B6 now refuses there with EmittedCargoManifestUnreadable instead of building under a roster the harness made up. (B5 assembly already refuses earlier on that candidate for the missing population manifest, so this changes no reachable verdict.) The v2 route carrying a dependency-demand fact is the missing model. No rung-drop or frontier row is filed for it: B6 was never a passing, enrolled check (nothing executes the stage, and docs/plans/unconsumed-module-residue-disposition.md lists v2.workflow.product_receipt_stage as STILL-UNCONSUMED), so its disposition belongs to that residue program.

Coordination: gunbc#13032 was going to add this incident as the RFM row's second receipt; it is added here, so that PR should not add it again.

🤖 Generated with Claude Code

… the hand-authored dependency blocks

The curated seed-linked harness, the emission entry instrument, the product
receipt stage and both std.logic transports each overwrote the Cargo.toml the
emission wrote with a literal [dependencies] roster. gunbc#12861 added libc to
the emitted runtime and to two of those rosters and missed the curated one, so
every behavioral transport row failed to build (E0433 libc, fleet run
37079504327: 15 of 15 no-verdict).

tools.emitted_crate_harness_manifest reads the emitted manifest and appends only
what a harness owns: its [lib]/[[bin]] target tables and, for a seed-linked
build, the v1-compiler path dependency as its own subtable. No harness route
names a registry crate any more, and an absent emitted manifest refuses.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbc-ci-auto-heal and others added 2 commits October 3, 2026 03:50
… supply the reading

The floor's hermetic route has no arm for Mktemp.Dir, so the two claims that
derived a manifest on a real directory never reached their subject. The
read-or-refuse decision is now plan_harness_manifest over a supplied reading;
derive_harness_manifest_in_place performs the read and writes only on the
planned arm.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 3, 2026
Merged via the queue into main with commit ba72cf7 Oct 3, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/neat-seal-675 branch October 3, 2026 09:03
gunbai-bot Bot pushed a commit that referenced this pull request Oct 3, 2026
…2967) into integration: NFR roster three-way row merge; emitter mirror from main, regen follows

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up receipt on main. Fleet run 37112143403, behavioral-equivalence instrument at 824d96dfef = main 0456f1cfb2 (which contains this PR and gunbc#12512) plus gunbc#13032's dispatch label only:

  • 12 of 15 rows held. E0433 does not occur anywhere in the run, so the amended control 2 ("E0433 gone in every row") holds on main, not only on the earlier verification branch.
  • discovery_enumeration.dag now holds. Its earlier E0308 in std_string_type.rs was measured without gunbc#12512; with it on main the row builds and holds, so that failure is not a gap in Text crossings unfold or refuse: exact-representation text compat (XL-0T ruling B) #12512.
  • Three rows still have no verdict: 04_infer, 07_target_carriers, program_partition — the stale hand-written witness drivers. gunbc#13098 migrates those three; this run is its red baseline.

The sha is a verification-branch merge, not a main sha, so this is not the persisted receipt (fierce-cat-838 takes that once #13032 lands).

— sent from neat-seal-675

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