Skip to content

std→extdeps consolidation; product and instruments under gunbc; residue cleanup - #9641

Merged
briansrls merged 11 commits into
mainfrom
claude/repo-folder-organization-c7b21e
Aug 28, 2026
Merged

briansrls merged 11 commits into
mainfrom
claude/repo-folder-organization-c7b21e

Conversation

@briansrls

@briansrls briansrls commented Aug 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Follow-up to #9637, executing three operator rulings from this session (2026-08-28, direct chat).

1. std keeps universal frameworks; cited-standard domain vocabulary moves to extdeps

  • std.currency → extdeps.currency.currency (ISO 4217) — dissolves that module's iso_4217_cited_rows_scaffold row, which named exactly this terminal. 49 importers; seed mirror renamed with all five registration sites.
  • std.bmc → extdeps.bmc.endpoint (new leaf; the types home would have closed an import cycle through capability). 13 importers.
  • std.acoustic → extdeps.units.iec_61672, std.abi → extdeps.abi, std.exec_format → extdeps.exec_format, each gaining its ExternalAuthority anchor; the live required_emit_compile_entries row follows abi's move.
  • std.http_path → extdeps.uri_path (RFC 3986 §3.3) — types fold into the module that already carried the cited operations. Seed mirrors regenerated via --required-regen (which refused with exactly the intended "committed mirror is no longer emitted: std_http_path.rs"); verified first_generation_equal=true and a clean cargo build.
  • Kept deliberately: std.os (recorded projection-only ruling), std.access (decision kernel). std.markdown/std.languages are the next, larger round.

2. product and the compiler instruments live under gunbc

  • dag/product → dag/gunbc/product — "they are OUR products". Module names unchanged; live doc links follow.
  • dag/tools → dag/gunbc/instruments — the compiler gates/instruments tree; path literals rewritten in one pass across authorities, emitted mirrors, the generated-artifact merge hook, and the testdata diff fixtures whose expectations live in cli_run tests. gunbc/tools (operator CLIs) stays separate; extdeps/tools remains, correctly holding cited external tool specs, now the only tree named "tools".

3. Residue deleted

  • Five dag/examples demos with zero external path or module consumers (cost_estimate, gunbhub_serve_program, html_markup_smoke, interp_test, js_site incl. its checked-in generated output); weather stays (consumed by bootstrap_witness).
  • The import-strip frozen measurement receipts and residual ledger (producer deleted, self-described non-reproducible); the one live citation updated to record the deletion.
  • type_ref_hit_ne_bind_measure was flagged as suspect but is live (three seed-module consumers + witness test) — kept.

Dated receipts and historical narration keep old paths deliberately throughout; only live rosters, recipes, hooks, and doc links were updated.

🤖 Generated with Claude Code

https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx

claude added 6 commits August 28, 2026 20:19
std.currency (ISO 4217) folds into extdeps.currency.currency, dissolving
that module's iso_4217_cited_rows_scaffold row, which named exactly this
single-authority terminal. 49 importers rewired; the seed mirror renames
to extdeps_currency_currency.rs with its five registration sites
(stage0 lib.rs, std_measure consumer, emitted_population, the partition
authority and both its mirrors, stage0_std_core path) updated together.

std.bmc folds into a new leaf extdeps.bmc.endpoint rather than
extdeps.bmc.types: types imports capability which imported std.bmc, so
the types home would have closed an import cycle. 13 importers rewired;
the openbmc subject note's citation updated. The OpenBmc enum-arm
nickname debt recorded there is unchanged.

Operator ruling 2026-08-28 (this session): std keeps universal
frameworks; cited-standard domain vocabulary moves to extdeps.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
std keeps universal frameworks (operator ruling, this session);
cited-standard and platform domain vocabulary moves out. std.acoustic
(A-weighted sound pressure, IEC 61672's definition) becomes
extdeps.units.iec_61672 beside the other cited unit standards, gaining
the ExternalAuthority anchor extdeps requires. std.abi and
std.exec_format become extdeps.abi and extdeps.exec_format. All
importers rewired; the one live path literal — required_emit_compile_entries'
dag/std/abi.dag row — follows the move; dated receipts and historical
narration keep the old paths deliberately.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
…format

The RFC 3986 section 3.3 path vocabulary folds into its cited home:
extdeps.uri_path already carried the parse/match operations and imported
the types from std.http_path; the types and render/param helpers now
live beside them and the std module is deleted. 14 importers rewired;
partition rosters, lib.rs registrations, and the one hand-Rust consumer
(effects_rest_transport_witness) updated. The emitted seed mirrors that
reference std_http_path (std_effects, v1_compiler_effect_derivation,
extdeps_uri_path) are regenerated in the follow-up commit via
--required-regen — this commit is the authority-side half.

Also adds the ExternalAuthority anchors extdeps requires to the just-
moved extdeps.abi and extdeps.exec_format.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
--required-regen refused with 'committed mirror is no longer emitted:
std_http_path.rs' — the intended deletion — and produced the candidate
tree. The retired mirror is deleted and every candidate file that
differed from its committed twin is installed (extdeps_uri_path now
carries the folded types; std_effects and v1_compiler_effect_derivation
reference it). A verification regen re-run and cargo build follow.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
Operator ruling (2026-08-28, this session): products are things we
intend for external/customer use, but they are our products — the
product tree lives under gunbc. Module names (product.*) are unchanged;
live doc links and one doc comment follow the move, dated receipts keep
the old path deliberately.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
…d frozen receipts

Operator rulings (2026-08-28, this session). The compiler instruments/
gates tree moves under gunbc — its modules keep their names; every path
literal is rewritten in one pass across authorities, mirrors, the
generated-artifact merge hook, and the testdata diff fixtures whose
expected outputs live in cli_run tests. gunbc/tools (operator CLIs)
stays separate; extdeps/tools stays, correctly holding cited external
tool specs, and is now the only tree named tools.

Residue: five dag/examples demos with zero path or module consumers
outside their own directories (cost_estimate, gunbhub_serve_program,
html_markup_smoke, interp_test, js_site including its checked-in
generated output) are deleted; weather stays, consumed by
bootstrap_witness. The import-strip frozen measurement receipts and
residual ledger (producer already deleted, self-described as
non-reproducible) are deleted, with the one live citation in
import_namespace_program updated to record the deletion.
type_ref_hit_ne_bind_measure was flagged but is live (consumed by three
seed modules and a witness test) and is kept.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
@briansrls briansrls changed the title Consolidate std's cited-standard domain modules into their extdeps homes std→extdeps consolidation; product and instruments under gunbc; residue cleanup Aug 28, 2026
claude added 5 commits August 28, 2026 21:02
The blind std_http_path row deletion removed it from the v1-stage0-std-
surface roster, where std_effects references the module as crate::. Its
successor extdeps_uri_path joins that roster in the authority, the
authority's mirror, and the crate lib.rs (rendered order and format),
restoring the standalone crate build — verified compiling in isolation.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
The generated projections (.gitignore, .gitattributes, both githooks)
are regenerated through main_wet rather than hand-edited — the earlier
textual path rewrite could not reproduce rendered row order. The
generated-artifact registry rows for the two stage0_crate_*_generated
files carry directory and name as separate fields, invisible to a path
sed; their directories now point at dag/gunbc/stage0. And the
extdeps_uri_path std-surface membership moves to its true authority
(rust_crate_partition stage0_std_surface_modules) — the first main_wet
run erased the row from the generated file, proving the edit sat one
level too shallow; regenerated output now carries it and round-trips
byte-stable.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
cost_estimate_float_witness_test and js_site_emit_test consumed the
deleted cost_estimate and js_site demos through bare (no-import)
references, which the earlier import-grep consumer check could not see;
the floor's strict preparation caught them as unresolved. They are tests
of the deleted subjects, so they go with them.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
The required namespace-wave-admission wall measures this branch's
consolidation as 490 deltas: 176 auto-admitted (identity rebinds, unused
membership removals, explicitly evaluated zeros) and 314 TargetChanged
bindings — every one an intended repoint from a deleted std module to
its extdeps home (std.bmc -> extdeps.bmc.endpoint, std.currency ->
extdeps.currency.currency, std.http_path -> extdeps.uri_path,
std.exec_format -> extdeps.exec_format, std.abi/acoustic likewise).
Each gets one enumerated-identity TransitionAdmission row, generated
from the observed deltas and verified by re-running the phase: every
TargetChanged line now reports ADMITTED-BY its row. Per the roster's
own doctrine, empty is the resting state — these rows are deleted in a
follow-up once this transition lands, before any later namespace motion.

The 5 declarations-phase findings were measured byte-identical on a
clean origin/main worktree and are inherited, not this branch's.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx
The one remaining partition-crates drift: my hand edit for the currency
rename carried a stray line the renderer does not produce. Regenerated
with claim_executor --emit-partition-crates --write (the producer the
phase itself names); the crate still builds standalone.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V581PqTvAyATmgFsf1y4yx

Copy link
Copy Markdown
Contributor Author

Status on CI, with the base/branch split measured rather than assumed:

Fixed on this branch (all verified locally before pushing):

  • build lane: regen fixed point, v2-emission (blocking=0), emit-compile 8/8 with discriminating reds, generated-artifact 29/29, partition-crates derived + compiling — the last drift (a doubled #[rustfmt::skip] in stage0_std_core/lib.rs) is regenerated via --emit-partition-crates --write in 41f40fb.
  • witnesses lane: the namespace-wave-admission wall measured this branch's consolidation as 490 deltas; the 314 non-auto (TargetChanged, every one an intended std→extdeps repoint) are adjudicated by exact enumerated-identity TransitionAdmission rows in bf2a575, verified ADMITTED-BY per delta. Two orphan witness tests of the deleted demos are removed in 458ff1e.

Inherited from the base, not fixed here — each measured byte-identical on a clean origin/main worktree running the same claim_executor --required-ci --required-lane witnesses:

  • the declarations phase's 5 findings (test.claim.annotation_carrier citing test.fixture.frontier ×4, plus the stale FIXTURE_CARRIER_CITATION_EXEMPTIONS row for extdeps.network.mac already_deleted_frontier_unit);
  • the floor's strict-preparation refusals: five training_*_witness_test rows missing capacity_class in ExecutionRequirements literals, and repository_convergence_placement's call-shape mismatch on repository_converge_wet (primary_path not declared).

No fix for those exists on main yet as far as I can find; they predate this branch's fork point behavior and reproduce identically without its diff. Once main carries fixes, a rebase/merge here should go green with no further change. Post-merge follow-up owed by this branch: empty the NAMESPACE_TRANSITION_ADMISSIONS roster back to its resting state before any later namespace motion.


Generated by Claude Code

@briansrls
briansrls merged commit 77afaf0 into main Aug 28, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the claude/repo-folder-organization-c7b21e branch August 28, 2026 22:40
@gunbai-bot gunbai-bot Bot mentioned this pull request Aug 28, 2026
6 tasks
briansrls pushed a commit that referenced this pull request Aug 29, 2026
…try, and format main's dirty prep_profile.rs

#9641 deleted examples.js_site and examples.js_site_emit deliberately (its own
message names them), but gunbc.generated_artifact{,_emit} still imported them:
unresolved imports that cascade into 'DesignArtifact undefined' in the
assessment witness test, refusing the floor at strict-preparation on every
main run since e7d0742. Fix forward per delete-first: the JsSitePageArtifact
variant, its form type, registry rows, location/commit-policy/eq arms, and both
helper fns go with the example they projected. The six
dag/examples/js_site/generated .gitattributes rows are the registry-derived
projection of the deleted rows (generated_projection_paths joins the committed
registry at exact-path grain), so they leave with them.

prep_profile.rs: rustfmt-dirty as landed by #9656; cargo fmt output, no
semantic change. The pre-commit/pre-push hooks refuse on any clone of current
main without this.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KH3G4UzMgvQobyNgHYy4GU
gunbai-bot Bot pushed a commit that referenced this pull request Aug 29, 2026
…ation rows landed with #9641 and now refuse every PR as stale
briansrls pushed a commit that referenced this pull request Aug 29, 2026
…unit_variant_index after #9656 (#9662)

* Unbreak main: drop the JsSite artifact rows whose authority #9641 deleted, and give the six witness-bin TypeEnv initializers the unit_variant_index #9656 added

Two integration collisions between independently green PRs:
- #9641 deleted dag/examples/js_site but gunbc.generated_artifact and
  gunbc.generated_artifact_emit still imported it, so the whole-tree
  strict resolve refused and every floor on main has been red since.
- #9656 added TypeEnv.unit_variant_index; infer_semantics_witness.rs
  builds six TypeEnvs by hand and none carried it, so --bins failed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The lib's own unit tests build one more TypeEnv by hand; give it unit_variant_index too

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Drop the six duplicate unit_variant_index initializers the merge with #9648 produced

* Regenerate .gitattributes: the six js_site rows projected from the deleted artifact registry entries go with them

* Shrink the namespace transition roster: the 314 std->extdeps consolidation rows landed with #9641 and now refuse every PR as stale

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Aug 29, 2026
…e prepares the roster's closure, not the tree; rust unit tests in their own job; the un-required phases declared as a rung drop (#9663)

* Unbreak main: drop the JsSite artifact rows whose authority #9641 deleted, and give the six witness-bin TypeEnv initializers the unit_variant_index #9656 added

Two integration collisions between independently green PRs:
- #9641 deleted dag/examples/js_site but gunbc.generated_artifact and
  gunbc.generated_artifact_emit still imported it, so the whole-tree
  strict resolve refused and every floor on main has been red since.
- #9656 added TypeEnv.unit_variant_index; infer_semantics_witness.rs
  builds six TypeEnvs by hand and none carried it, so --bins failed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The lib's own unit tests build one more TypeEnv by hand; give it unit_variant_index too

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Required CI is the compiler floor: a static gate roster, prepared as its own import closure, with the other four phases and the product witnesses moved off the merge path

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Drop the six duplicate unit_variant_index initializers the merge with #9648 produced

* Drop the six duplicate unit_variant_index initializers the merge with #9648 produced

* Regenerate .gitattributes: the six js_site rows projected from the deleted artifact registry entries go with them

* Regenerate the four projections of this change: witnesses.yml (probe and all-bins steps gone, rust-unit-tests job added), DESIGN.md and design-ledgers.md (the rung-drop row), .gitattributes (js_site rows gone)

* Restore the lib-test TypeEnv initializer's unit_variant_index (lost when the merge took main's cli_run.rs wholesale)

* The gate closure is the loader's both-closure (imports + reference edges to a fixpoint), not the import headers: stripped modules reach their providers by reference, and the header walk left 1,190 names unresolved

* Shrink the namespace transition roster: the 314 std->extdeps consolidation rows landed with #9641 and now refuse every PR as stale

* Build the entry index once for both gate closures (it is the expensive part: ~75-110s per build on the corpus)

* Gate closure includes containment ancestors to a fixpoint: a module importing only a child of the declaring module still binds the parent's declarations

* The floor's policy module is always a closure seed: its rosters are evaluated in a frame over the prepared subject

* The reference-closure index is keyed by the prepared subject's digest, bounded to the two subjects a floor process prepares by design — the gate's policy-closure preparation and the gate closure are two subjects in one process, and a once-per-process index refused the second (ReferenceIndexSubjectChanged built_for_modules=47 observed_modules=1952, CI and srv2 at 066725c)

The old check keyed on module COUNT: two subjects of equal size would have
shared one index silently. The new one keys on `subject_digest`, so the
index a scope consults was built from the graph that scope is over, by
construction. The population is bounded by
FLOOR_PREPARED_SUBJECTS_PER_PROCESS = 2 (policy closure, gate closure) — a
third distinct subject still refuses with the same cause, because a
subject per claim is the corpus walk per row the index exists to avoid.

Evidence: srv2 rerun of `claim_executor --required-ci --required-lane
witnesses` at this tree builds the 47-module policy index
(subject=09966adcd218af0e) and proceeds into the 1,954-module gate
preparation instead of refusing at claim scope.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The floor's own runtime authorities are explicit closure seeds: the gate-bounded subject refused at output-policy install because resolve_channel_policy had only ever resolved by pool-membership coincidence — the flat bare-name channel found gunbc.output_policy because the whole corpus was loaded, not because the policy closure references it

REQUIRED_FLOOR_RUNTIME_AUTHORITY_MODULES names every module the floor's
Rust evaluates by name outside the gate roster: the policy module (its
rosters), v2.workflow.floor_naming_hygiene (qualified evaluations), and
gunbc.output_policy (bare, from install_output_policy_in). All three are
seeds of the gate closure; a new by-name evaluation adds its module here
or refuses at its own call site.

Measured: the first gate-bounded run (srv2, at 2d5502a) got past both
reference-closure indexes and refused with "no declaration named
'resolve_channel_policy' in this execution's loaded index".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* A by-name evaluation of a module's declaration runs in THAT module's scope: the floor installed the output policy and the naming-hygiene predicates from the policy module's frame, which reached gunbc.output_policy only by the accident of the whole-tree reference closure — under the gate-bounded subject the module was loaded and the name still refused

floor_authority_frame(prepared, module) builds a hermetic frame over one
module's exact claim scope. install_output_policy_in now receives the
frame over gunbc.output_policy; floor_barren_test_sidecars the one over
v2.workflow.floor_naming_hygiene. The policy module's frame keeps only
the policy module's own rosters.

Measured (srv2, lanes 5 and 6): with gunbc.output_policy present in the
1,954-module subject — the seeds changed the seed count 906 -> 908 and
the closure not at all — resolve_channel_policy still refused as "no
declaration named ... in this execution's loaded index". The scope, not
the subject, was the coincidence.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The floor's rosters are joined only over identities inside the required gate — an enrolled identity whose module the gate never loads is withheld with the same accounting as cost-debt withholding, not refused as stale; and two modules that reached rust_target_model_staging by bare reference now import it, because the loader follows bare references only for import-free modules while the claim scope follows all of them

Measured on the first gate-bounded fold (srv2 lane 7, CI at 006b0ef):
ExpectedRedIdentityDidNotExecute count=39, every row in a module outside
the gate roster; and v2.test.lens_vacuity.vacuity_test x5 ERROR
no-such-function `rust_target_model_staging`, reproduced standalone with
`gunbc run --entry src/v2/test/lens_vacuity/vacuity_test.dag`. The
loader's both-closure (build_both_closure_edge_index) skips the bare
scan for any source that declares import lines, so rung_3_4_common
(one import) and leaf_model_verification's bare edge to
v2.extdeps.languages.rust was never followed; under the whole-tree
subject the flat channel found it anyway. The import is the form 10 of
the 12 sibling callers already use; the loader/scope divergence is
recorded in the PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The gate closure follows bare cross-module references from EVERY module, with the loader's own scanner, to a joint fixpoint with containment ancestors — the loader's both-closure bare-scans only import-free sources, while the claim scope the fold builds over the subject follows bare references from all of them; and route-gap expectations located outside the gate are withheld like the roster rows they join

Measured 2026-08-29 on srv2: with the gate subject, `gunbc run` of
v2.test.lens_vacuity.vacuity_test refused no-such-function
`rust_target_model_staging`, then `eval_context` after the first was
imported — one absent module per run, because rung_3_4_common (one
import line) and leaf_model_verification reach them by bare reference
and build_both_closure_edge_index skips the bare scan for any source
that declares an import. The fixpoint reuses
bare_reference_pull_paths_for_source, so the relation is the loader's
and not a second scanner; the count of modules pulled this way is
printed on the gate-closure line.

Lane 8 (srv2) then refused `floor_route_gap_expectations: located
identity is absent from derived roster` for an identity whose module is
outside the gate: the roster had its outside-gate rows withheld and the
expectations had not. Both sides now withhold by the same predicate,
counted.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Cost-debt rows outside the required gate are withheld from the staleness join, route-gap expectations honour cost-debt withholding, and emit_on_demand_classical_not_native_one_build_holds moves to the cost-debt roster — it is budget-refused before it reaches the host effect its route-gap enrollment expects, on both hosts

Measured on the first complete gate-bounded fold (srv2 lane 10 and CI at
e8effe8, identical): verdict=FloorRefused with unexpected_failures=0 —
no claim inside the gate fails — and two bookkeeping refusals: 122
STALE-COST-DEBT rows, every one in a module the gate never loads, and
one STALE-ROUTE-GAP row whose claim ran past its CPU ceiling before
reaching the effect. The first is the same out-of-scope population the
expected-red and route-gap joins already withhold, now counted the same
way. The second is a real cost debt (floor_cost_debt already records
this claim at 502 -> 2374 ms), and cost debt wins over route-gap
enrollment by the roster's own rule; the expectations decode now treats
a cost-debt-withheld identity as dormant rather than absent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Two lens_module_gate_witness rows leave the expected-red roster: under the gate-bounded subject both PASS on CI and on srv2, and the floor refuses a passing enrollment as STALE-QUARANTINE

Measured at 1f4bda9 (CI) and srv2 lane 12: verdict=FloorRefused with
unexpected_failures=0 and exactly these two STALE-QUARANTINE rows on
CI. Both are "live" claims whose question ranges over the loaded
corpus; under the gate closure that corpus is 2,021 modules rather
than 4,260, and the population they were red on is outside it. That
is a narrowing of what the claim observes, stated here rather than
hidden: the whole-corpus receipts run is where the wider question is
asked again. srv2 additionally passes four emit_host_* rows that stay
red on the required host; those stay enrolled — CI is the oracle for
the required gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* Eleven claims interrupted before verdict on the gate-bounded subject join the cost-debt roster as proven chunk 12 — the same eleven on the GitHub runner and on srv2, run after run

At 92cc92e the floor reports verdict=FloorRefused with
unexpected_failures=0, no stale rows, no now-passing rows, and eleven
INTERRUPTED-BEFORE-VERDICT identities (cost_coverage_witness x3,
loaded_carrier_receipts x3, lens_closure_question_zero_holds_live,
green_control_sanctioned_reader_body_not_flagged,
same_grammar_parse_ingest_bridge_holds, kotlin_grammar_parse_accepted,
nominal_distinct_control_compiles_ok). The set is identical at e8effe8
and 1f4bda9 on CI and in srv2 lane 12, so it is a property of the
subject, not of host load: on the gate closure these claims first-touch
artifacts the whole-tree fold had warmed before reaching them. Declared
here as the roster's own containment for a cost the ceiling cannot
hold; the exit is the warm, as the roster's header states.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* lens_module_gate_holds_live joins cost-debt chunk 12: it was interrupted at 1076ms the run after its sibling was withheld, because the 1.07s pool-root module_path_index fill is billed to whichever consumer runs first

CI 0829ad8: verdict=FloorRefused, unexpected_failures=0, one
INTERRUPTED-BEFORE-VERDICT row. The claim-cost receipt reads
budget_interrupted 1076ms for it and
`[floor-shared-fill] cache=module_path_index key=.../src/v2/lens
fill_ms=1070 paid_by=...lens_module_gate_holds_live consumer_claims=1`;
at 92cc92e the same fill was paid by lens_closure_question_zero_holds_live
(consumer_claims=2) and this claim passed. The index is keyed on a pool
root the decl_facts seam asks for at claim time, so preparation cannot
warm it ahead; with both consumers withheld nothing pays it. The
roster's own header names the warm as the exit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The pool-root module_path_index for src/v2/lens is warmed in preparation by evaluating the declared producer once in its own module's scope — the 1.07s fill was a positional bill that interrupted a different lens_module_gate_witness live claim in each of three consecutive runs — and the two fill-only rows leave cost-debt chunk 12

CI 92cc92e, 0829ad8, 154fb1f: each run's single INTERRUPTED-BEFORE-VERDICT
row was the next `lens_module_gate_witness` live claim in evaluation
order, at 1068–1252ms, with the claim-cost receipt and
`[floor-shared-fill] cache=module_path_index key=.../src/v2/lens`
naming that claim as the payer. The witness-roots warm cannot reach a
per-pool-root key; this warm evaluates
`v2.lens.registry.completeness.lens_registry_completeness_live_facts`
in that module's frame, so the root comes from
`lens_registry_completeness_pool_roots` and the key is the consumers'
by construction. Adjudicated with the other preparation warms as
`ModulePathIndexBuild/lens-pool-roots`; skipped (printed) when the
subject does not carry the producer; a producer that fails to evaluate
refuses. The two rows whose entire cost was this fill leave chunk 12,
as the roster header says they must once the warm exists.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* lens_closure_question_zero_holds_live leaves the expected-red roster: with the src/v2/lens pool-root index warmed in preparation it passes, as its two siblings did once they stopped paying that fill

srv2 lane 13 at 8ad4091: `[floor-shared-fill] cache=module_path_index
key=.../src/v2/lens paid_by=<outside-fold> consumer_claims=3`, no lens
claim interrupted, and STALE-QUARANTINE for this row — the same row
that was red only while it paid the fill (CI 92cc92e).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The four bootstrap_footprint_anchor claims join cost-debt chunk 12: 474–505ms CPU on three consecutive CI runs with no fill billed to them, so the 500ms ceiling decides them run by run

CI f462bc9: planned=executed=2834, passed=2754, known_red_held=27,
failed=0, no stale rows, interrupted_before_verdict=4 — these four, at
502–505ms. At 154fb1f the same four completed at 487–504ms and at
0829ad8 at 474–485ms; the run-to-run spread is the runner slot, not the
claim. The gate did not change their cost — nothing in the shared-fill
attribution names them — so the disposition is the roster's, not a
ceiling change: withheld as declared debt until the host-load row
lands.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The rust-unit-tests job runs the unit population: the lib tests that prepare or build over the live tree carry a live-corpus ignore reason and leave the required run, and the rot the first-ever `cargo test` exposed is repaired at its authorities, not hidden

`cargo test -p v1-compiler --lib` had never run in CI. Its first run (33238828500) was cancelled by its own 60-minute timeout with 204 of 682 tests finished, because ~126 of the "unit" tests each build a fresh multi-entry index over `src/v2`+`dag` (4,260 modules; ~197 single-thread minutes on srv2 under nextest, 97 tests over 60 s, `self_compile_all_modules` alone 505 s), and the runner executes them serially. Those tests now carry `#[ignore = "live-corpus: ..."]` — the crate's existing `manual:` convention, one class, declared on the carrier — and the rung-drop row `required_gate_bankruptcy` names them by their instrument (`cargo test -p v1-compiler --lib -- --ignored --list`). The unit population runs in ~10 s after the compile (srv2: 537 passed / 136 ignored).

Of the 44 failures the full run exposed, the 15 in the unit population are repaired where the fact lives:
- REAL DEFECTS (two): `try_index_source_root_into_module_index` keyed files by their walked path, absolute since #9548 anchored the root, while the strict builder keys through `module_index_path_key` — the primary-precedence index disagreed with the strict one on every path; keyed through the same authority now. `try_build_module_index` carried `if root_idx > 0 { continue; }` before its collision refusal (from #7791), so a module declared in two roots shadowed silently in the builder named strict; the guard is gone and overlay callers have `build_module_index_primary_precedence`.
- v1 TYPECHECK DEFECT: `declared_type_inhabitance` reads `params` as generic type parameters, which is exactly what a callable formal carries, so every higher-order call produced a counted advisory with a false reason (#9194); `direct_call_argument_inhabitance_diags` now excludes callable formals like its sibling `direct_call_arg_type_mismatch`. Mirror regenerated (two passes: the test blob lives inside the emitter).
- STALE AUTHORITY ROWS after the #9637 reorg: 12 entry literals in `gunbc.ci_layer_roots` and 2 in `gunbc.offline_local_recipe` repointed; the two long-lane rows and one freeze row whose subjects 611fd02 and #9206 deleted are gone; the three freeze rows for relocated witnesses are DELETED rather than repointed, because the freeze gate defines relocation as growth and the roster may only shrink. `gunbc.non_fold_residue` receives the 22 sites it lacked and loses the 4 whose subjects moved or greened; its .dag twin therefore leaves floor_expected_red (it passes) and joins cost-debt chunk 12 (629 ms against the 500 ms ceiling, its whole cost the corpus scan it checks).
- DELETED SUBJECTS: `cli_run::floor_witness_a_prove` (its runner, prove test and fixtures went with the FLOOR-Y cutover); the census pin tests and helpers for `docs/probes/census_extra_excludes.txt` (#9132 deleted every transcription).
- EARLY ABORTS: three witness-admission tests and the roadmap jsonl-carrier test were "fast" only because they failed before their expensive step; with their inputs repaired they read the live tree for 2-4 minutes each and join the live-corpus class.
- TEST ROT: the reorg rewrote a revision-addressed literal (`9ce6526c528:dag/gunbc/roadmap/...`) that must name the pre-reorg path; the method-existence witness anchored on a `Primitive()` row the frontier no longer holds.

Not done here, receipts-lane rot for follow-ups: `test.claim.expectation_frontier_witness_test` names the deleted long-lane file; the affected-set kernel (`floor_diff_edits_from_diff_text`, `rerun_frontier_nodes_for_entry`, …) has no production consumer since FLOOR-Y and should go with its remaining fixture-dependent tests; the roadmap jsonl-carrier test takes 453 s and fails after its expensive step.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

* The host-tool probe root carries the process id: temp_dir() is the host's shared /tmp on a self-hosted runner, and a fixed directory name collided with one another runner slot's uid left behind — PermissionDenied on two tests that had never run in CI before

Found by the first green-by-duration run of the unit population (dc3ca52: 533 passed, 2 failed, 9.59s). The same class as the shared-/tmp emit_on_demand collision on srv2: a test that writes a fixed path into a location the process does not own.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013G3t66QwKJFK5w8jXxMXP2

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Aug 30, 2026
…red on main; enrol DESIGN's named check in the rust-unit-tests job (#9747)

* clippy --all-targets: the 12 never-compiled targets red on main repaired or deleted, and DESIGN's named check enrolled as a step of the rust-unit-tests job

Population measured on main 8078e36 with --keep-going (the fail-fast run is a
5-error prefix): E0603 x7 from the #9648 cli_run decomposition, E0063 on Node's
occurrence_identity, an include_str! of a fixture deleted in #9641, E0432 on the
std_node bridge family retired in #9724, disallowed_macros x5, too_many_arguments,
ptr_arg, and two lints hidden behind the compile errors. Every target repaired
except examples/prep_profile.rs, whose header declares it scratch not for commit.
Two runtime assertions behind the compile wall read their authority now instead of
a stale copy (the Rust null keyword row; compile_clean_diagnostic_is_hard).

No required phase runs clippy; gunbc.repo_self_build gains repo_self_clippy_command
and gunbc.witness_floor_workflow runs it after the unit tests. gunbc.design_document
names, per check, the step that executes it and whether it gates. DESIGN.md and
witnesses.yml regenerated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018xgqwVB9erqDAnDWhtZ6yb

* wip claim_batch rework (to be amended)

* The emitted clippy step carries its on-carrier dissolve-on marker (review 57600)

rust_clippy_all_targets_shell_emit_dissolution_trigger names the capability the
hand-shell `run:` carrier dissolves into (the orchestration-to-shell bash emission
ci_pin_rustup_default_script waits on); the step renders it as the leading comment,
as every other hand-shell step the model emits does. witnesses.yml regenerated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018xgqwVB9erqDAnDWhtZ6yb

* repo_self_clippy_command carries its argv as tokens, like its sibling (review 57608)

* The clippy step's argv comes from a modeled cargo node, not a spelled string (review 57608)

* The second ad-hoc forensics example goes with the first

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants