Skip to content

Main-latent nfr red: roster the two #7088 cheap-gate wildcard sites (unblocks PR floors) - #7114

Merged
briansrls merged 1 commit into
mainfrom
hotfix/nfr-roster-7088-sites
Jul 23, 2026
Merged

briansrls merged 1 commit into
mainfrom
hotfix/nfr-roster-7088-sites

Conversation

@briansrls

@briansrls briansrls commented Jul 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes the fleet-blocking non_fold_residue_no_unrostered_or_stale red now failing every PR floor that reaches batch 3 (first surfaced on #7110's run; main is latent-red — its own recent runs died at exit 137 in batch 3 before this witness executed).

Root, proven by worktree bisect with the real witness: unrostered_count 0 at #7092 → 2 at #7088. The introducing merge is #7088 (CI fail-fast cheap-gate early batch), which landed gate_in_cheap_floor_membership and spec_enrolls_gate in src/v2/workflow/ci_floor_plan.dag — both hand-rolled Gate equality via nested match with off-variant _ => arms, the exact structural-equality shape of the rostered *_eq rows. Same recurring masking class as every dated backfill block in the roster: the landing PR's affected-set selection predict-skipped the corpus-read nfr witness; #7085's always-on PR-time receipt is what surfaced it (working as designed).

Fix shape: two roster rows with the dated-block reason + dissolution trigger (derived equality from inhabitance, or #7088's own membership-fold migration) — detection-only declaration, zero floor-behavior change. The construction fix (replace the hand-rolled matches with ==) belongs to the #7088 lane, not a hotfix.

Test plan

🤖 Generated with Claude Code

@gunbai-bot gunbai-bot Bot changed the title Weak Self Host -> Strong Self Host (Gates 1-3, i guess) Main-latent nfr red: roster the two #7088 cheap-gate wildcard sites (unblocks PR floors) Jul 23, 2026
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 23, 2026 06:10
@briansrls
briansrls merged commit c0e5732 into main Jul 23, 2026
2 of 5 checks passed
@briansrls
briansrls deleted the hotfix/nfr-roster-7088-sites branch July 23, 2026 06:35
briansrls added a commit that referenced this pull request Jul 23, 2026
…PR diff

The layering batch-1 red on 652ec65 was caused by our redundant cli_run.rs
NFR backfill (already landed on main as #7114), which forced a whole-tree
compile-clean on .rs and a heavier batch-1 path. doc_graph_roots bind row
checked: import-bearing file, module_path in string literal — no new
layering edge (not 7080-class). PR diff vs main is now docs + doc_graph only.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Jul 23, 2026
…cursion_limit into partition allow-block (both drift-by-hand-roster incidents; enrolled in roster_registry)

Rebased onto post-#7114 main (rust_crate_partition rewritten around the
CompilationUnit model): the hand roster fns survived, so the fix re-applies
as the same one-line roster row + allow-block edit; module-dag edge rows
are cross-unit only, and std_measure -> std_currency is intra-unit
(std-primitives), so no edge row is owed. Full regen chain re-run on the
new base (main_wet + two-generation regen_stage0, binaries rebuilt).

Original finding unchanged: v1-stage0-std-core broken standalone since
#6977 added the measure->currency closure edge (hand module roster never
learned); v1-stage0-extdeps-languages failed serde json_internal recursion
(allow-block lacked the monolith's recursion_limit). Nothing in CI builds
the partition crate libs, so both drifted silently. Class enrolled:
stage0_partition_crate_rows in gunbc.roster_registry as DeclaredFrontier
(dissolve_on: the emitted-crate-partition thread derives membership
ByDerivation; interim backstop = per-crate cargo-check consumer in CI).
Sheet rows: ts-group-partition-drift + ts-group-dissolve-typed.

By execution on the rebased base: all 8 partition crates build green;
roster_registry suite 5/5 (RED controls discriminate);
stage0_crate_layout_witnesses PASS; roadmap_authority_witnesses true;
ROADMAP.md regenerated (main_wet, ExitSuccess).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016fdkaGGLUKpLRwwqxp5sLg
briansrls added a commit that referenced this pull request Jul 23, 2026
…band) (#7106)

* docs: attribute the CI floor 45-72min band by ci-job phase and batch.

Log-diff receipts on fleet runs decompose workflow vs ci-job wall time and name discovery resolve, self-host gates, and #7030 effectful recovery as the dominant buckets.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: CI floor redundant-work ledger, phase TSV, and ranked levers.

Re-derive run 29976989996 and five comparison arms; name per-stage duplicate work (per-entry resolve walks, ingest re-scan, cheap gates after compile) and price top levers in minutes without floor behavior changes.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: register ci-floor-time audit plan in doc_graph_roots.

Unblocks doc_reachability pre-push gate for the measurement-only audit PR.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: CI floor time audit: attribute the 45-72min band

* WIP: CI floor time audit: attribute the 45-72min band

* fix(ci): drop duplicate NFR roster + merge #7114 — restore docs-only PR diff

The layering batch-1 red on 652ec65 was caused by our redundant cli_run.rs
NFR backfill (already landed on main as #7114), which forced a whole-tree
compile-clean on .rs and a heavier batch-1 path. doc_graph_roots bind row
checked: import-bearing file, module_path in string literal — no new
layering edge (not 7080-class). PR diff vs main is now docs + doc_graph only.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(audit): add PR7110 270m timeout extreme-tail receipt

Run 29986954853 (one-file v1_deletion_plan.dag diff) killed at ci-step
timeout-minutes:270 — corpus/infra-bound tail, not diff-size-driven.
TSV row + plan §1.1 + lever 5 sharpen + new lever 9 (silent ceiling ride).

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 23, 2026
…tion (levers 2/3/8 of #7106) (#7122)

* docs: attribute the CI floor 45-72min band by ci-job phase and batch.

Log-diff receipts on fleet runs decompose workflow vs ci-job wall time and name discovery resolve, self-host gates, and #7030 effectful recovery as the dominant buckets.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: CI floor redundant-work ledger, phase TSV, and ranked levers.

Re-derive run 29976989996 and five comparison arms; name per-stage duplicate work (per-entry resolve walks, ingest re-scan, cheap gates after compile) and price top levers in minutes without floor behavior changes.

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs: register ci-floor-time audit plan in doc_graph_roots.

Unblocks doc_reachability pre-push gate for the measurement-only audit PR.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: CI floor time audit: attribute the 45-72min band

* WIP: CI floor time audit: attribute the 45-72min band

* fix(ci): drop duplicate NFR roster + merge #7114 — restore docs-only PR diff

The layering batch-1 red on 652ec65 was caused by our redundant cli_run.rs
NFR backfill (already landed on main as #7114), which forced a whole-tree
compile-clean on .rs and a heavier batch-1 path. doc_graph_roots bind row
checked: import-bearing file, module_path in string literal — no new
layering edge (not 7080-class). PR diff vs main is now docs + doc_graph only.

Co-authored-by: Cursor <cursoragent@cursor.com>

* One tree, one resolve: floor stages consume the compile-clean computation (redundant-work ledger levers 2/3/8)

STEP-1 model (gunbc.ci_materialization ci_floor_resolve_receipt_note, Receipt 5):
the compile-clean receipt's typed store — the main-thread process_shared_index the
eager install warms — is the consumable fact; later floor stages consume it, and a
stage that cannot be served is counted, never a silent re-walk. Declared
cold-resolve count 4 -> 3 consciously (the note's own rewire discipline); ci.yml
regenerated to match.

Lever 3 (executor realization): batch_unit_lane clause (c) — a resolve-group
sharing an (entry, execution_mode) some batch resolves on the memo path is
colocated there, so the batch-0 cheap-gate group rides the store the eager
compile-clean install warmed instead of re-deriving the same closure cold on a
spawned thread (where thread-local process_shared_index is invisible); the
compile anchor and emit-host then consume its walk_memo context as hits. No
schedule fact added or reordered (#7088 batch-0 ordering untouched).

Lever 2 (transport realization): run_gunbc_claims pools ONE gunbc child per call
(gunbc.Cli.RunClaims; argv grammar gunbc.cli_invoke.cli_claim_spec
'ENTRY::FUNCTION', decoder parse_pooled_claim_spec — one grammar, both
directions) instead of one child per claim row: N rows over K distinct entries
pay one pool build + K entry resolves against the child's per-process shared
store (resolve_entry_graph), full-ledger conjunction preserved by construction.
Residue (one pool build per call; overlay manifests are composed input) counted
in the redundancy ledger; dissolve-on the W3 cross-process content-keyed store.
Dead per-claim argv helper gunbc_claim_run_args deleted (zero consumers).

Lever 8 (partition authority): CompileCleanPartitionBoundary.entry_roots =
witness_layer_roots — the roster enumerates exactly the tree the whole-tree gate
compiles, never witness_layer_roots.first() ('dag' only). Closes both directions
of the roster-subset asymmetry: src/v2-only .dag diffs scope to their entry
closures instead of falling to the no-shard-intersection whole-tree baseline
(run 29976989996's shape), and a dag-rooted touch now selects affected src/v2
importers on scoped runs. Totality glob follows the boundary (both roots; join
fixed for newline-trimmed shell stdout). Every fail-closed arm unchanged.

Proven by execution: executor lane tests (promotion + RED control + mode
keying); pooled claim-spec grammar tests; floor_fast_plan_scopes_src_v2_entries_
both_directions on the live tree; live-tree shard totality over both roots;
pooled overlay run of the real_ingest leg (3/3 PASS — stub supersession through
the pooled resolve path); typed-op witnesses incl. RunClaims red control;
cargo fmt clean.

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

* ci: retrigger pull_request run (empty)

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

* Phase-0(b) admission: enroll the two RunClaims typed-op witnesses on the bin_witness_wet roster

typed_witness_invocation_test.dag is discovery-excluded by pattern; every fn
in it rides the explicit bin_wet roster. The two pooled-op witnesses added
with gunbc.Cli.RunClaims landed excluded-but-unrostered and the floor refused
loudly (WITNESS ADMISSION REFUSAL cause=UnexecutedDeferredWitness count=2,
run 29993198712) — the admission invariant working as designed; these rows
give them their executing consumer.

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

* Acceptance receipts: phase-attribution row + ledger flips + lever evidence (run 29995111208)

Green pull_request floor on this branch, same probe format as the #7106
baseline: compile_clean 3.58 -> 2.89, cheap gates 10.15 -> 4.65, compile-gate
consume 27s -> 8ms (walk-memo hit), ingest 12.15 -> 5.24, reads_real_bytes
3.30 -> 3.13, discovery unchanged by design (lever 1 out of mandate);
resolves_total 3 == declared 3 (the resolve-receipt gate's own green line).
Ledger rows cheap_gates_batch1 / compile_gate_consume flip to
consumes-receipt; source_root_ingest_gate to necessary-first-touch (pooled),
each with this run id as evidence. Batch-4 exec-corpus anomaly (52min, the
interp_recorded_fixture row) is footnoted in the row's class and attributed
in the PR thread — not a mandated stage; bisection in progress.

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

* Rework R1-R3: per-gate pooled claim_batch child (the section-9 cold-child class); interim gunbc-run claim grammar deleted as a duplicate; interp_recorded per-PR enrollment reverted

R1 (child-pool lever, walls honored): run_gunbc_claims realizes as ONE
claim_batch child per call — claim_batch's own pre-existing pooled
--entry/--function grammar, one shared MultiEntryIndex per process, per-claim
verdicts NAMED by its PASS/FAIL-per-function loop, no short-circuit, exit
nonzero iff any failed. The gunbc run --claim flag, gunbc.Cli.RunClaims op,
and the ENTRY::FUNCTION spec grammar this branch had introduced are deleted:
claim_batch already owned the pooled-claims surface (one grammar, not two).
Cheap-gate transports consolidate to one call per GATE (layering 7 rows -> 1
child, was 7 cold children; extdeps 5 -> 1, was 5; the former cross-call &&
short-circuit inside a gate is deliberately removed — every claim reports on
every run, stated in the transport notes). The pooled child stays a SEPARATE
process by design — never in-executor evaluation (the executor is the
16GiB-pinned process; the child dies and frees). extdeps' private roots datum
dissolved into witness_layer_roots (a nickname).

R2 (batch-4 disposition at the witness grain): interp_recorded_fixture's
per-PR enrollment REVERTED to OfflineLocalRecipe — its ~13+ claim_batch
children each cold-index the whole workspace root (2556s on run 29995111208,
the dominating row of the 53.2min batch-4 wall); too heavy for the falsifier
wet lane's 600s receipt budget as-is, so local-recipe with a pooled/scoped
re-enrollment dissolve-on rather than an enshrined nightly refusal.

Proven by execution: pooled child 10/10 PASS over 4 entries in one process
(incl. the argv-shape witness pinning claim_batch_claims_argv's exact
output); RED control exit 1 with the failing claim NAMED and later rows still
reporting; ingest overlay leg 3/3 through the claim_batch loader (stub
supersession held); whole-tree --target dag compile green; artifact drift
clean; cargo fmt clean; executor lane + scope-plan test batteries green.

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

* R4 re-measure: run 30009199696 phase row + ledger evidence (floor 49.5m fits the 55m cap; wet 53.2->10.82; cheap 3.08 and ingest 6.90 land as counted residue vs the 2min targets)

Fresh phase-attribution row from the post-rework pull_request run
30009199696 (head 6fe8d02, all gates green, resolves_total 3 == declared
3, peak 15.0GiB cgroup-post): ci_job 99.2->61.1min, floor step 49.5min
under the 55min cap; wet wall 53.20->10.82min from the interp_recorded
de-enrollment (surviving pools 20+54 rows, eval 9.35min serial).

The two R1 acceptance targets MISS and are recorded as counted residue
in the redundancy ledger, mechanism named per row: cheap gates
4.65->3.08min (2 pooled children at ~88s/~64s — each claim_batch child
pays a corpus-denominated MultiEntryIndex build regardless of roster
size); source_root_ingest 5.24->6.90min, a +1.66min REGRESSION vs the
interim vehicle (4 children at ~82-118s; the claim_batch child costs
~25-30s/process more than the deleted gunbc-run vehicle — loader-parity
gap on top of the shared corpus-denominated index). Dissolve-on for
both: the W3 cross-process content-keyed store (or claim_batch loader
parity), never a silent re-widen.

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

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 23, 2026
…cursion_limit into partition allow-block (both drift-by-hand-roster incidents; enrolled in roster_registry) (#7109)

Rebased onto post-#7114 main (rust_crate_partition rewritten around the
CompilationUnit model): the hand roster fns survived, so the fix re-applies
as the same one-line roster row + allow-block edit; module-dag edge rows
are cross-unit only, and std_measure -> std_currency is intra-unit
(std-primitives), so no edge row is owed. Full regen chain re-run on the
new base (main_wet + two-generation regen_stage0, binaries rebuilt).

Original finding unchanged: v1-stage0-std-core broken standalone since
#6977 added the measure->currency closure edge (hand module roster never
learned); v1-stage0-extdeps-languages failed serde json_internal recursion
(allow-block lacked the monolith's recursion_limit). Nothing in CI builds
the partition crate libs, so both drifted silently. Class enrolled:
stage0_partition_crate_rows in gunbc.roster_registry as DeclaredFrontier
(dissolve_on: the emitted-crate-partition thread derives membership
ByDerivation; interim backstop = per-crate cargo-check consumer in CI).
Sheet rows: ts-group-partition-drift + ts-group-dissolve-typed.

By execution on the rebased base: all 8 partition crates build green;
roster_registry suite 5/5 (RED controls discriminate);
stage0_crate_layout_witnesses PASS; roadmap_authority_witnesses true;
ROADMAP.md regenerated (main_wet, ExitSuccess).


Claude-Session: https://claude.ai/code/session_016fdkaGGLUKpLRwwqxp5sLg

Co-authored-by: Claude <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.

1 participant