Repository navigation
Cut the seed out of the emitted closure's dependency graph - #10988
Conversation
`v1_compiler.emitted_closure_compile_host` `probe_manifest` minted
`v1-compiler = { path = <workspace>/src/v1/stage0 }` into the manifest of
every crate the emit-compile phase and the required-v2-native lane write.
So a fixed point measured on emitted BYTES said nothing about whether the
emitted compiler can BUILD: "v2 emits itself" could be true while the
emitted crate needed src/v1 present to link. It also meant building any
probe rebuilt the seed into the shared target directory the running
claim_executor was executing from.
MEASURED FIRST, and the denominator is zero. The emitter writes
`src/v1_rt.rs` into every emission (`v1.compiler.emit_rust`
`emit_v2_rt_module`, unconditional) and renders the NonEmptyVec /
NonEmptyBTreeSet wrappers into the emitted lib.rs; the emitted crate is
named `v1_compiled` for every entry that is not the retained-host
pipeline, so no emitted line paths into `v1_compiler`. The closure of
src/v2/compiler/00_compile.dag -- the native lane's own entry -- emits
172 files with zero `v1_compiler::` references and builds to a running
binary under RUSTFLAGS=-D warnings against a manifest naming no path
into the repository.
THE WORKSPACE ROOT IS NO LONGER A PARAMETER of `probe_manifest`, which
is the construction rather than the check (DESIGN section 5): a function
that is handed no repository path cannot render one into a manifest, and
`stage0_foundation_runtime_dependencies` carries registry rows only. The
unit test's seed assertion flips from requiring the path dependency to
refusing any `src/v1` substring, and was confirmed discriminating by
re-adding the dependency (red) and removing it again (green).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DHjB4qGMsejnXWhdejjmU8
… deleted CI job
Three prose corrections to the same annotation, none changing a rendered byte.
THE OVERCLAIM. The doc comment called the parameter's removal "the
construction rather than the check", so that a repository path "cannot be
rendered into a manifest by a function that is not handed one". That is a
wall this change does not build. `CargoDependency` still admits
`CargoDepSource::LocalPathDep { path }`, so a local path remains authorable
here from a literal -- which is how this commit's own discriminating red was
established, with a hardcoded `/repo/src/v1/stage0`. Claiming otherwise is
rung inflation (DESIGN 4b(1)) in the compiler's self-description. What the
removal actually buys is stated instead: it eliminates the live producer
route that minted the seed path dependency, and the witness beside it
additionally refuses a rendered `src/v1` / `v1-compiler` row as a second,
independent reader of the same output. A type-level registry-only boundary
is explicitly NOT claimed; it belongs to the terminal shape, where the host
consumes the emission's own manifest rather than authoring a second one.
THE DEAD CITATION. The `[lib]`-name paragraph measured its E0433 on "the
required-v2-native lane's first preparation". #11003 deleted that job; the
route survives as the operator-invoked `--v2-native-route` instrument. The
paragraph now names the two consumers this manifest actually has -- that
instrument and the `emit-compile` phase -- rather than a job main no longer
declares.
Five further "native lane" references in this file name OTHER declarations
and are #11003's own unswept residue on main, not this change's subject;
they are left for that sweep rather than widened into here.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DHjB4qGMsejnXWhdejjmU8
The annotation added by this PR's first commit copied two figures into prose -- "emits 15 files" and "completes at status 0" for the `dag/std/node.dag` closure. DESIGN section 6 forbids exactly that: name the producer that re-derives a measurement, never copy its numbers, because a transcribed number is unreachable from the thing that owns it and rots without anyone touching either end. Section 4c adds that an annotation is never evidence a machine claim holds, since no Accepted program can read one. The point lands with unusual force here, and the reviewer said so: this PR's SECOND commit exists because a comparable transcribed citation in this same doc comment -- the required-v2-native CI job, deleted by #11003 -- had already rotted. So the counts go and the entry point stays. The replacement names `run_required_emit_compile` over `gunbc.ci_layer_roots` `required_emit_compile_entries` as the producer that re-derives the claim on every run, emitting each entry's closure through this writer and handing the result to `run_cargo`. A seed symbol the emission failed to cover refuses there, on the acceptance path, rather than in a sentence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DHjB4qGMsejnXWhdejjmU8
Targeted evidence, re-run at the merged headRe-derived after merging main ( The figures below are a run receipt, not a citation — the producer that re-derives them is 1. All 8 required-emit-compile entries — baseline green, mutation discriminated, restore greenEvery entry's manifest is rendered by the changed 2. The emitted v2 compiler closure builds seed-free under
|
|
Review 63393 — fixed in The finding is correct and lands harder than it might look: the annotation said the The counts are gone; the producer stays. The replacement names Thanks also for checking — sent from proud-wren-154 |
|
State of the head — mirrored here because the dashboard has been stalled on both sends and reads for ~15 minutes (two FROZEN at
Tally state, so nothing is claimed that isn't true:
Those two are the whole remaining distance. One residue deliberately not swept: five further "native lane" references in — sent from proud-wren-154 |
srv2 closure recovery baseline (post-D1+G main), not the combined censusClassification. This is the inherited-state observation for the out-of-order landings of D1 (#10946) and G (#10961), taken under the post-#11003 producer. It is NOT the program-closing combined closure census (which stays after D4), does not establish whole- Provenance. main Result against the immutable 68-row reference (
After-histogram: namespace_graft_body_dissolved_refused 25, parse_g0_tokens_remain 23, body_lowering_reason_match_arm_navigation_refused 9, tokenize_lex_e1_unrecognized_char 8, normalized_tree_reason_wrapper_retention_not_normalized 1. The 66-row after-set is the base D2's binding receipt is compared against (landed post-#10988 main vs D2 overlay, same pinned producer). Independent corroboration: the #11019 overlay run on the same main and route produced an identical 66-row after-set. |
The brief's literal acceptance test, now executedThe request named a specific executable test: "cargo build of the emitted crate with src/v1 moved aside must succeed." Everything posted so far argued that structurally — the manifest names no repository path,
Subject: the The half of the acceptance test I cannot run, stated rather than glossedThe brief's second clause was "and the native lane must still produce both controls." I have not produced that receipt, and it is not available to me. #11003 removed the The nearest thing that exists is CI's own partial execution on the pre-merge head — sent from proud-wren-154 |
Evidence re-run at the remerged headHead: All five arms re-derived at this exact head against a freshly built 1. Eight required-emit-compile entries — 8/8 baseline green, mutation discriminated, restore green8 manifests written, 0 carrying a 2. The emitted v2 compiler closure builds under
|
srv2 native-route both-controls receipt, bound to
|
| identity | verdict |
|---|---|
v2.native_lane_fixture.control native_lane_false_control |
NativeTestReturnedFalse |
v2.native_lane_fixture.control native_lane_true_control |
NativeTestPassed |
Terminal: {"_terminal":"complete","file_refusals":2909,"rows":2}. Both controls discriminate on the seed-free emitted compiler: the route's preparation, old-route withdrawal, and native execution all work with src/v1 unreferenced by the emitted crate.
Scope. This is the "native lane must still produce both controls" clause of the brief, executed. It does not establish whole-v2.test.* admission and does not retire gunbc.rung_drop v2_native_route_off_the_merge_path. Together with the recovery-baseline closure receipt above and proud-wren's five evidence arms at f355a460, #10988's acceptance packet is complete pending CI on this head.
srv2 closure recovery baseline, re-taken on post-#11032 main (ec1571e)Why a second one. #11032 (grammar digest once per prepare_grammar + warm-shared parse fixtures, Provenance. main Result against the immutable 68-row reference ( So #11032's parse-cost fix moved no closure-member verdict: it is closure-neutral in outcome, and the provenance is now re-bound. D2's binding receipt is attributed against THIS after-set (post-#10988 main vs D2 overlay, producer rebuilt at that head). The both-controls receipt on the new emitted binary follows in a separate comment when its run completes. |
|
Floor margin, as asked for by the train ruling: main's own floor at ec1571e (run 34571176215, floor job 103176222405) is FloorClean after #11032, with interrupted_before_verdict=0 and completed_over_cost_requirement=0. The D1/G parse family that had been refusing at 502-512 ms now runs at 304-394 ms cpu against the 500 ms deadline (over-cost rows: where_refinement_range_clause_parses_holds 363 ms, where_refinement_clause_interior_is_not_retained_holds 392 ms, where_refinement_brand_clause_parses_holds 304 ms). The hot-fix #11029 is therefore not needed and is being closed. This PR's own floor at f355a46 is rerun in order once the fleet runner deleter is confirmed stopped; that run supplies the margin on THIS PR's five witnesses. |
Both-controls receipt on the post-#11032 emitted binarySame overlay as the recovery baseline above (main
Both controls still discriminate on the new producer (exit 0; wall 3439 s, rss 1.46 GB, the wall being the whole-corpus ingest that #10940's closure-scoped ingest removes, not the two tests). Together with the row-identical 66-row after-set this re-binds the recovery baseline to the post-#11032 provenance. The PR's own floor rerun at |
|
Head moved to |
Evidence packet re-derived at
|
Floor read at
|
|
Floor rerun at |
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwUh3dg6xfnDGy4PoikpUV
…he extdeps_cargo use line
… the package graph, minted renderers joined to the produced seed-link population (#11023) * v1 census close (B): the Rust reference population is produced by folding the item scan, not listed by hand gunbc.rust_item_host_observation gains observe_rust_references / observe_current_rust_references: fold the existing item scan over every hand-Rust file (outside a caller-supplied deletion-set prefix) whose text names one of the caller's tokens, attribute each token-carrying line to the innermost enclosing item, and carry the DeclarationRef projection on the row. A file-level line lands on the file's own RustModule item; a line inside an unnamed macro block is a located unattributed row; an unclaimed tree refuses at the projection with its path. Files naming no token are not scanned. The HEAD-sources plumbing both live producers share is one helper (head_rust_sources) selected by predicate. gunbc.v1_consumer_census consumes it: v1_shim_items (four hand-named crate roots, a measurement copied from the tree) is gone; v1_consumer_population_for takes the observation, a host refusal is PopulationUnmeasured, unattributed lines join the uncitable column, and the token joins back to the hunted authority (v1_rt -> v1_compiler.v1_rt, v1_interpreter -> v1_compiler.v1_interpreter) through v1_reference_authorities. Population state stays PopulationMeasuredLowerBound. Witnesses: six producer arms on planted sources in rust_item_host_observation_witness_test (mutation control executed: dropping the file-level arm reds two); the census's tooling-row falsifier now folds planted sources through the producer; the four live-population witnesses moved to self_host_v1_consumer_census_live_witness_test.dag with a gunbc.ci_layer_roots exclusion row, because the population now reaches git and the hermetic envelope refuses it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * v1 census close (C): the Cargo manifest medium as a relation keyed on the package graph, with minted renderers joined to the produced seed-link population gunbc.v1_consumer_census gains the Cargo manifest relation: CargoPathDependency rows keyed on gunbc.stage0_partition_package_graph identities. Partition-internal edges and the host-shell edge are DERIVED from the graph's own functions; the hand tests manifest and the minted manifests (emit_copy_qualification_fixture_gen shard_manifest_text, self_host_curated_seed_linked _harness cssl_v1_compiled_cargo_deps_block, self_host_logic_behavioral_transport slb_cargo_toml, cssl_seed_linked_closure_assembly's stale-red control) are authored rows, each joined to a SeedLinkage (NotASeedEdge | SeedLinkedIntoHandRust | SeedLinkedIntoEmittedCode | SeedBesideEmittedCodeAsOracle). The seed edges become CargoManifestDependency consumer rows. The Rust renderers are joined in both directions against a PRODUCED population: (B)'s observe_rust_references folded UNDER src/v1 with the seed's package name spelled as a Rust literal (v1_seed_link_tokens). A produced site with no row is an Undecided consumer that blocks; a rostered renderer the tree no longer carries is stale and excluded; the behavioral receipt's rlib --extern oracle (an impl method, uncitable) is rostered by item key under a new medium, RustcExternLink, with the oracle linkage. probe_manifest is deliberately not a row: #10988 removes the edge it minted and the table is authored to that shape; on a pre-#10988 tree the join reports it undisposed, which is that tree's true state. Why not v2.workflow.rust_crate_partition / gunbc.stage0_partition_package_graph: the graph is inside the stage0 compile closure and emitted into the seed; the relation's names are the graph's (imported), the relation itself is the census's. gunbc.rust_item_host_observation: observe_current_rust_references_under (the dual selection), and a comment line is not a reference (a receipt naming a token yields no row). Census after this step: v1_blocking_consumer_count = 42, members 53, PopulationMeasuredLowerBound. Witnesses: five hermetic arms on planted seed-link sources (clean join, unrostered site blocks, stale renderer excluded, unrostered uncitable + comment-not-a-site, relation keys on the graph); one live arm; comment-skip arm in the host-observation witness. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Declare the drop review 63400 found, and use starts_with The three live-population census witnesses leaving the hermetic floor is a DESIGN 4b(3) rung drop, not just an exclusion row: gunbc.rung_drop v1_consumer_census_live_population_off_the_merge_path (previous MechanicallyPreventable, temporary Mitigatable, ReplacementStaged on the produced observation, population = the four live fns, trigger = a merge-blocking step executing a witness that reads v1_consumer_population() against the live tree). The exclusion row names the drop; neither retires the other. path_has_prefix is deleted in favor of starts_with. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Read the live population once per question, and name the Rust medium for what the rows carry (reviews 63443, 63432) v1_blocking_consumer_count_of / v1_consumer_member_count_of / v1_consumers_of / v1_uncitable_consumers_of take one ConsumerPopulation; the zero-argument instrument forms read the tree exactly once. The live witnesses bind the population once per body (the wet file: 29s -> 6.7s). RustUseEdge is renamed RustSourceReference: the produced population attributes any token-carrying line, not only use edges. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Consume the scan's comment predicate, record the uncitable pair, derive the seed-link tokens from the package name's authority (reviews 63432, 63450) - rust_line_is_comment is gone; the reference producer skips exactly the lines gunbc.rust_item_scan line_is_attribute_or_comment skips (now exported), and the prose says what that covers: leading comments and attributes, not trailing or block comments -- those are counted and refuse loudly as undisposed sites; a witness pins the trailing case. - UncitableSeedLinkSite { item_key, detail } replaces the positional pair and the list_first_or / list_last_or accessors. - v1_seed_link_tokens is derived by concat over stage0_host_shell_package_name() so the produced side and the disposition side key on one value; the witness no longer carries the literal either. - RustUseEdge -> RustSourceReference (from B). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The count instrument carries its refusal: V1BlockingCount, never 0 from an unmeasured population (review 63464) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The reference-authority lookup refuses an unknown token instead of borrowing the first row (review 63476) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The drop population names all five live fns; counts replaced by the roster (review 63478) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Name the roster instead of transcribing counts (review 63478, applied to B's copy) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * One authority for the claimed hand-Rust surface, and a listed path Show cannot read refuses the whole read (reviews 63508, 63507) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Join produced lines to the census grain; the count instrument is a ProcessExit entry (review 63537) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * One read of HEAD, partitioned between the two media (review 63538); the single-medium live entries are deleted as unconsumed Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The live witness names the run entry (review 63569) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Delete the live roster-vs-population witness the refactor made tautological (review 63591) Both sides read one accessor of one population, so its RED was unauthorable and the drop row leaned on it as evidence. The two refusals it named stay executed hermetically on planted fixtures (undisposed_consumer_is_caught, stale_row_is_caught). Its bin_wet row and drop identity go with it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Produced rows carry the tree they were read from; generated paths skip the Show loop (reviews 63608, 63607) DiscoveryProducer for the Rust medium is minted from the RustObservedTree (HEAD sha + ShowTree object id) that head_rust_sources read, never from the hand sweep's pin. Generated mirrors are excluded before git.Core.Show. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * chore: regenerate drifted generated artifacts (ci auto-heal) Ledger-Repair-Judged: docs/design-rung-drops.md Ledger-Rows-Repaired: docs/design-rung-drops.md v1_consumer_census_live_population_off_the_merge_path * Regenerate docs/design-rung-drops.md for the new drop (review 63648) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * A stale roster row blocks and is named; the report renders the join; ledger regenerated (review 63684) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Enroll the census's live identities in the floor route-gap roster (run 34579780327: git.Inspect.HeadCommit has no mock case) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Enroll the seed-link join live identity in the floor route-gap roster Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The live producer witness asserts census-grain bounds, not line-grain equality (review 63723) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Delete the alias accessors; the population accessors are the one name (review 63745) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The live census witnesses leave the tree: a changed witness with no route cannot land, and a mocked HEAD would fabricate the liveness it asserts Runs 34589756974 / 34589514940 refused the four live identities as changed_witness_planned_without_terminal_verdict: the floor plans every witness the diff touches and a route-gap enrolment is exactly a witness with no route to a verdict. Publishing a mock for git.Inspect.HeadCommit only moves the refusal to ListTreePathsAtRevision, ShowTree and Show, and a whole mocked chain is a fixture tree -- which the hermetic planted-source witnesses already exercise -- asserting liveness over a constant. So the live file, its route-gap chunk, its bin_wet rows and its exclusion row are deleted; the two assertions that were on the floor at main are the drop row's population, the ledger is regenerated, and the operator instrument remains the live consumer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Regenerate the rung-drop ledger after the merge Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The drop names the live route it declares lost, ShowTree included (review 63775) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Name the instrument, do not transcribe its row count (review 63814) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * The census witness imports v1_row_keys explicitly and drops the unused v1_claimed_successors import (review 63815) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * missing_basis states (A) (B) (C) at their current standing, not as open obligations (review 63834) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Uncitable rows carry the consumed authority; the dedup key is item x authority, the census grain One uncitable item naming two known v1 authorities dedup'd to one row on item_key + refusal_detail, an undercount in the fail-open direction. V1UncitableConsumer gains consumed_old_authority (a coproduct: a known DeclarationRef, or the unknown token), v1_uncitable_row_key keys on it, and a planted control (one item naming v1_rt and v1_interpreter keeps two rows in both columns) sits beside the two-lines-one-authority control. Mutation control executed: the old key reds the new witness. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw * Delete the unconsumed zero-arg accessor; the report binds the join once (review 63990) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ML4eiifGFgP18ALPw6inw --------- Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The edge
v1_compiler.emitted_closure_compile_hostprobe_manifestmintedinto the manifest of every crate the emit-compile phase and the required-v2-native lane write (
write_probe_crate_filesis the one writer;write_probe_crateis whatcli_run::native_lane_runnerprepares the emitted-native compiler through). Its stated justification was "the runtime surface the emitted closure does not emit (v1_rtand friends)".Two consequences, both named in the brief and both real: a fixed point measured on emitted bytes says nothing about that edge — "v2 emits itself" can be true while the emitted compiler cannot build without
src/v1— and building any probe pulled the seed into the shared target directory the executingclaim_executorruns from.The denominator, measured before the cut
The brief asked for the exact list of seed symbols the emitted code reaches. It is empty, and the emitter says why:
v1.compiler.emit_rustemit_v2_rt_modulewritessrc/v1_rt.rsinto every emission — it is in the unconditionalall_mod_fileslist inemit_rust_selected, not behind a predicate.NonEmptyVec/NonEmptyBTreeSetwrappers into the emittedlib.rs(thewrapper_use/ wrapper-struct block), socrate::NonEmptyVecresolves inside the emitted crate.emit_rust_selectedbinds the emitted crate name tov1_compileronly whencompiler_pipeline_entry_is_retained_host— i.e. only when emitting the seed itself. Every other entry emitsv1_compiled, andemit_main_rsrendersuse v1_compiled::…. The direct-ingest / source-root-eval driver branch returns before any retained-host rendering precisely so that a self-emitted crate never namesv1_compiler.cli_run.Receipts, on this branch's parent (main
38fde6682a8), local arm64,RUSTC_WRAPPER=unset, privateCARGO_TARGET_DIR:v1_compiler::referencesdag/std/node.dagstatus=0, 26ssrc/v2/compiler/00_compile.dag(the native lane'sNATIVE_COMPILE_ENTRY)status=0underRUSTFLAGS=-D warnings, 2m43sThe 172-file closure is the whole emitted v2 compiler. Its manifest carries
[dependencies]= im, unicode-ident, unicode-properties, serde, serde_json, stacker, lazy_static, ureq — registry rows only.cargo metadataover the resolved graph reports no package whose manifest path is inside the repository, and the producedv1_compiledbinary runs, refusing correctly:REFUSED: no universe file given -- usage: v1_compiled <universe.tsv> <source-root>....So the runtime surface did not need carving into a non-seed crate and did not need emitting: it is already emitted. The seed edge was a dead dependency whose only effects were the two failures above. (
v1-stage0-runtime, the modeled partition crate inv2.workflow.rust_crate_partitionthat ownsv1_rt, is a view over the seed'ssrc/via#[path]and is a fact about how the SEED is built — not about the emitted crate, which carries its ownv1_rt.rs.)The change
probe_manifestno longer takes aworkspace: &Path. That is the construction rather than the check (DESIGN §5): a function handed no repository path cannot render one into a manifest, andstage0_foundation_runtime_dependencies(v1.compiler.stage0_crates) carries registry rows only. The only route back to a seed dependency here is a diff that reintroduces the parameter.manifest_carries_the_modeled_dependency_rowsflips fromassert!(manifest.contains("/repo/src/v1/stage0"))to refusing anysrc/v1orv1-compilersubstring. It is a regression control, not the wall.Executed evidence
probe_manifest→ the unit test panicsthe emitted probe crate must not depend on the seed; removed it again → green. Not asserted, run both ways.claim_executor --required-emit-compile --source-root dag --source-root src/v2— all 8 rostered entriesbaseline=[Completed status=0]andmutation=[Discriminated subject=EntryOwnModule …], i.e. the phase's own baseline/mutate/restore triple is green over seed-free manifests. The manifests it wrote contain zerov1-compilerrows.cargo clippy --all-targets -- -D warningsclean;cargo fmt --all --checkclean.Authority
The producer is seed-retained hand Rust and no
.dagrow governs it today — stated plainly as the brief asked. It is registered asSeedRetainedIntrinsicRegistration { basename: "emitted_closure_compile_host", has_pub_mod: false }inv2.compiler.self_host.stage0_crate_layout, and its declarations are rostered ingunbc.emitted_closure_compile_seed_growthemitted_closure_compile_seed_growth_justification(which carriesprobe_manifestas a hand-authored declaration). No row there is added or removed: the declaration survives, its body loses a dependency.There is a standing §3 fork this change does not close and should be named rather than left silent: the emitted crate's dependency set has two authorities. The emitter derives it from what it emitted (
v1.compiler.emit_rustemitted_crate_dependency_lines, whose own header argues that a fixed list beside the emission "is a SECOND AUTHORITY for the crate's dependencies, free to disagree with the sources the same run just wrote"), andprobe_manifestrenders a second, fixed list — plus the[features]block the emitted manifest lacks even though the emittedv1_rt.rsgates ontext_lookup_work_counter. The terminal shape is for the host to consume the emission's ownCargo.tomland override only the per-entry package name; that needs the emitter to declare its feature block, which is a separate change with its own regen surface. Flagged, not smuggled in here.Census
Removing this edge retires no committed row, and that is itself a finding worth recording against
gunbc.v1_consumer_census: the edge was invisible toproducer_cargo_manifest_graph, whose instrument isgit grep -n 'path = "\.\./stage0' -- '*/Cargo.toml'over tracked manifests. This dependency was never in a tracked manifest — it was minted at run time into a crate written outside the repository — so no census producer could have discovered it, and the census's population claim is a lower bound by one class it cannot see rather than one it measured as empty.The missing producer, named so it can be written. Every existing
DiscoveryProduceron that census reads committed bytes — tracked manifests, tracked.rs, tracked workflow YAML. None reads a MINTED manifest: a cargo manifest a v1 host writes at run time into a crate that never enters the working tree. Its subject is the set of manifest-rendering sites insrc/v1—v1_compiler.emitted_closure_compile_hostprobe_manifest,tools.self_host_curated_seed_linked_harness,tools.self_host_logic_behavioral_transport,gunbc.emit_copy_qualification_fixture_gen,v1_compiler.cssl_seed_linked_closure_assembly— each joined to whether the manifest it renders puts the seed into the dependency graph of code the emitter produced (a real v1 consumer edge) or beside it as a comparison oracle (not one). That distinction is exactly what this PR turns on and is not derivable from any tracked file. Written as its own PR against the census, not here.v1_shim_disposition's closing condition ("the emitted crate compiles without av1_rtpath rather than merely cargo-checking with one") is about the four hand-authoredself_host_*_shims/lib.rsbridge crates and is not discharged by this change.Not touched, deliberately
Three other sites render a
v1-compilerpath dependency, and all three are correct:tools.self_host_curated_seed_linked_harness,tools.self_host_logic_behavioral_transportandv1_compiler.cssl_seed_linked_closure_assembly's stale-RED control link the seed as the comparison oracle (use v1_compiler::std_logic as seed), not as a dependency of the emitted code.gunbc.emit_copy_qualification_fixture_genbuilds a fixture runner, not an emitted closure.🤖 Generated with Claude Code
https://claude.ai/code/session_01DHjB4qGMsejnXWhdejjmU8