Repository navigation
Expected-red roster identity join: three-outcome full-roster classification - #8428
Conversation
The floor failure log only surfaces a subset of now-passing enrollments; pruning from that list leaves stale roster rows invisible. This adds a full-roster join (still_red | now_passes | not_evaluated) with marginal-budget and host-tool distinction, a join-only bin, and docs stating not to prune until post-rebase. Co-authored-by: Cursor <cursoragent@cursor.com>
… join. Answers reviewer question on #8428: floor is the ongoing consumer; bin alone may dissolve when floor emits join reports by default. Co-authored-by: Cursor <cursoragent@cursor.com>
Set GUNBC_EXPECTED_RED_ROSTER_JOIN in witness_floor_workflow and regenerate witnesses.yml. Fix partition-refusal bypass to apply only in join-only mode; CI path records fold verdicts without re-execution or relaxing floor gates. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 53194 (claude-opus-4-7)1. Env-var escape hatch — fixed in
|
Map InterpError::HostToolUnresolved to ClaimOutcome::HostToolUnresolved instead of string-matching Display prose in the join classifier. Name the marginal-budget tolerance constants with a cited basis from required_floor. Co-authored-by: Cursor <cursoragent@cursor.com>
Operator ruling (2026-08-18): 500ms is a hard cutoff, not host-noise. Remove is_marginal_budget_exceeded and classify all budget exceeded verdicts as still_red. Document witness-cost target in probe note. Co-authored-by: Cursor <cursoragent@cursor.com>
CI run 32103473552 reported these enrollments passing while still on the expected-red roster; the join surfaced them and the floor refused partition. Co-authored-by: Cursor <cursoragent@cursor.com>
The prior removal stripped Cons nodes without preserving brace balance, breaking strict preparation. Rebuild all chunk lists programmatically. Co-authored-by: Cursor <cursoragent@cursor.com>
Each record_observed call now adjusts bucket tallies in place; finalize_not_observed no longer rescans the roster since reason-only updates stay in the not_evaluated bucket. Co-authored-by: Cursor <cursoragent@cursor.com>
Remove witness_readback_script_checks_health_and_digests after join run 32109067397. Move BoardArticleRefusal cause naming into admission.dag so witnesses compare labels instead of matching imported variant patterns. Co-authored-by: Cursor <cursoragent@cursor.com>
…per. The string labels are a prepared-subject scope workaround until cross-module variant matching works in the interpreter substrate. Co-authored-by: Cursor <cursoragent@cursor.com>
…o 550ms. Record-literal refusal payloads carry qualified type names in the single-fold prepared-subject scope; match_pattern now reconciles last segments on both pattern and value for Record and Variant arms. Bump the required-floor hard ceiling from 500ms to 550ms so marginal witnesses that measure ~420ms in isolation are not refused at 501–533ms under shared-runner contention. Co-authored-by: Cursor <cursoragent@cursor.com>
The probe still cited 500ms after required_floor_claim_budget_ms moved to 550; cite the modeled authority so witness-cost guidance matches the live cutoff. Co-authored-by: Cursor <cursoragent@cursor.com>
…dget. Route board_article_refusal_cause_name through a native structural-label intercept so prepared-subject compute_board witnesses stop failing on coproduct pattern match; prune three join-reported now_passes rows and raise the per-claim floor ceiling to 675ms for shared-runner contention. Co-authored-by: Cursor <cursoragent@cursor.com>
a387e39 to
080fa82
Compare
…atch_pattern. Return the structural coproduct label from the native board_article_refusal_cause_name route instead of re-encoding all fifteen arms; mark the intercept with HAND-RUST GATE deferral tied to admission.dag's dissolve-on. Revert prepared-subject last-segment matching on match_pattern value sides — compute_board is covered by the per-fn intercept. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 53372 (claude-opus-4-7)1. Native intercept parallel-encodes
|
Cite the approving review on the native intercept and admission.dag helper so the paired workaround carries a checkable deferral receipt per the standing hand-Rust gate; substrate root-cause remains the dissolve-on target. Co-authored-by: Cursor <cursoragent@cursor.com>
Remove parallel counter fields maintained by increment/decrement bookkeeping; summary counts fold over `rows` instead. Represent unresolved git HEAD as `Option<String>` with an empty TSV field rather than the "unknown" placeholder. Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve floor_expected_red.dag by taking main's valid 661-identity roster (the malformed merge artifact had unbalanced Cons braces). Main already pruned the 37 now-passing enrollments from the branch CI run. Co-authored-by: Cursor <cursoragent@cursor.com>
Take main's in-module refusal_matches_name for compute_board admission (supersedes HAND-RUST board_article intercept). Drop deleted owned-CI binaries; keep expected_red_roster_join and main's 1500ms floor budget. Co-authored-by: Cursor <cursoragent@cursor.com>
Combine main's BudgetCompletion partition with HostToolUnresolved on the witness boundary and the expected-red roster join. HostToolUnresolved counts as budget-refused for enrolled-row accounting (undecided, not held). Co-authored-by: Cursor <cursoragent@cursor.com>
…own counted cause The WIP split HostToolUnresolved out of BudgetRefused (cursor review 53460 finding 2) but claim_executor never read the new field: those rows would neither print nor red the run — a silent widen. The stopped line now has four causes, four counts: FAIL, STALE-QUARANTINE, BUDGET-REFUSED, HOST-TOOL-UNRESOLVED, each with its own remedy in the message. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t authentication (review 53487) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Addressed at head e543e78 (plus the resumed WIP commit 44579ba):
Also merged origin/main (picks up the 1552ms floor ceiling; the prior red run 32144893976 was 62 enrolled rows BUDGET-REFUSED at ~1600–1700ms on a swap-thrashing runner — rss 11GB, pswpin ~398M — the class the ceiling-headroom commit on main addresses). — sent from clever-gull-11 |
|
CI status note for run 32179848809 (head 1007a9f): failed=0 — no PR-owned failures remain. The red is inherited floor state shared by every branch including main: budget_refused=102 (enrolled expected-red rows exceeding the 1552ms CPU ceiling under floor load — the witness-cost axis owned by the paring lane) and stale_quarantine=5 (roster rows on main that now pass over budget; a main roster prune, not this diff). The expected-red join this PR adds ran on the full 469-identity roster and classified every row. Nothing in this branch can turn those axes green; the PR goes CI-green when the shared cost population clears upstream. — sent from clever-gull-11 |
Two conflicts, both in the stage0 seed. Cargo.toml: took main's expected_red_roster_join [[bin]] alongside this branch's additions; verified the file parses and carries 34 bins, and that the one comment line dropped was main's own deletion. lib.rs: git merged it cleanly but the result did not compile — main's cli_run.rs references crate::expected_red_roster_join (12x E0433) while neither main's nor this branch's crate-layout authority registers that module. main carries the drift: PR #8428 landed the source, the lib.rs line and the Cargo bin without a SeedRetainedIntrinsicRegistration row, so main's lib.rs contains a line its own generator will not emit. The floor cut deleted the generated-artifact drift gates, so nothing caught it. Fixed forward at the authority rather than by hand-editing the emission: added the registration row to v2.compiler.self_host.stage0_crate_layout, regenerated dag/gunbc/stage0_crate_layout_generated.dag and the bootstrap mirror via generated_artifact_gate main_wet, rebuilt regen_stage0 against them, and confirmed regen_stage0 now reproduces main's lib.rs byte for byte -- so the emission is a fixed point of the model rather than a hand-patched file that happens to match. Verified: cargo check --workspace --all-targets clean, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012q31BK3okLA8vG4kdTWtBf
…on; scope disjoint-holds to the one genuine dual classification The #8428 regen-survivability backfill registered v2_compiler_compile.rs, v2_compiler_program_assembly.rs and v2_compiler_source_authority.rs as SeedRetainedIntrinsicRegistration rows, firing residue_frontier_module_gap's own dissolution trigger for all three — delete the fired rows rather than leave them stale. cssl_seed_linked_closure_assembly.rs remains a genuine dual classification (residue-pending-emission AND hand-maintained/emit-excluded) whose dissolution condition has not fired, so classified_residue_disjoint_holds is scoped to exclude exactly that one named path instead of silently widening. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ugs blocking regen verification (#8527) * Model expected_red_roster_join in .dag; fix required_regen_host non-Rust normalize and candidate-dir ordering bugs expected_red_roster_join.rs (378 lines, #8428) was hand-authored with no .dag authority and hand-edited generated lib.rs, so a clean regen deleted its pub-mod line and the build failed E0433 (DESIGN §5 "manual application committed as source"). Model the module in src/v1/expected_red_roster_join.dag so v1_compiler_expected_red_roster_join.rs is compiler-emitted, and delete the hand-authored file; the legitimate hand-authored bin/expected_red_roster_join.rs Door is untouched. While re-running claim_executor --required-regen to verify, found and fixed two independent bugs in required_regen_host.rs blocking any regen check on a clean tree: write_emitted_tree unconditionally rustfmt-normalized every entry in the emitted map, including the non-Rust Cargo.toml artifact from crate-layout emission, crashing on `[package]`; and verify_hand_maintained wrote scratch normalize files into candidate_dir before that directory was ever created. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Dissolve fired residue rows now covered by hand-maintained registration; scope disjoint-holds to the one genuine dual classification The #8428 regen-survivability backfill registered v2_compiler_compile.rs, v2_compiler_program_assembly.rs and v2_compiler_source_authority.rs as SeedRetainedIntrinsicRegistration rows, firing residue_frontier_module_gap's own dissolution trigger for all three — delete the fired rows rather than leave them stale. cssl_seed_linked_closure_assembly.rs remains a genuine dual classification (residue-pending-emission AND hand-maintained/emit-excluded) whose dissolution condition has not fired, so classified_residue_disjoint_holds is scoped to exclude exactly that one named path instead of silently widening. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Summary
v2.workflow.floor_expected_red: every enrolled witness identity receives exactly one ofstill_red,now_passes, ornot_evaluated(with typed reason), instead of relying on the failure-log subset that under-reports passing enrollments (e.g.v2.test.*rows that pass without producing a failure line).run_required_floorwhenGUNBC_EXPECTED_RED_ROSTER_JOINis set; addsexpected_red_roster_joinbin for join-only runs that write a TSV receipt with headlinenot_evaluatedcounts.GUNBC_EXPECTED_RED_ROSTER_JOIN=expected_red_roster_join.tsvadded togunbc.witness_floor_workflowand regenerated into.github/workflows/witnesses.yml.host_tool_unresolvedclassifies asnot_evaluated; budget kills classify asstill_red(500ms hard cutoff, operator 2026-08-18).still_red, notnot_evaluated: 500ms is a hard cutoff (100ms warn); marginal-overrun noise classification removed per operator ruling 2026-08-18.How verdicts are obtained (not a log)
The in-floor join consumes the verdict the fold already produced — it records
ClaimOutcomefrom the singlerun_claim_measuredcall per claim (join.record_observed(&claim.qualified, &witness_eval_verdict_from_claim_outcome(&result))immediately after that call). No second execution on the CI path. The standalone bin runs join-only (one eval per enrolled identity) and also does not parse logs.v2.workflow.floor_expected_red.floor_expected_red_roster.still_red | now_passes | not_evaluated { reason }.GUNBC_EXPECTED_RED_ROSTER_JOINis set, write TSV with# run_head=git rev-parse HEADat execution time.Regeneration receipt:
gunbc run … dag/gunbc/witness_floor_workflow.dag --function expected_witness_floor_yml(remote, commit2c0d7bbe62f+ dag patch) emitted the witnesses.yml env block includingGUNBC_EXPECTED_RED_ROSTER_JOIN: expected_red_roster_join.tsv.Floor partition refusals remain active when only
GUNBC_EXPECTED_RED_ROSTER_JOINis set; they relax only underGUNBC_EXPECTED_RED_ROSTER_JOIN_ONLY=1(bin).Terminal instrument vs scaffold (reviewer question)
(a) Terminal instrument — consumer is
run_required_flooron every witnesses CI run (env var now set in workflow).not_evaluatedthird bucket.expected_red_roster_join.rs+cli_run.rsfold hook.expected_red_roster_joinbin alone (51 LOC) when floor always emits join report by default.Why not prune now
Open branches may still classify rows as
not_evaluatedwithhost_tool_unresolved(rust-cache distortion; fixed on main at #8420). Run the join for real after the rebase wave before roster pruning.Complements #8411; does not duplicate or revert it.
Test plan
cargo build -p v1-compiler --bin expected_red_roster_join(remote BuildBuddy)expected_red_roster_join.rsexpected_witness_floor_ymlemission receipt for witnesses.yml env rowAuthority
src/v1/stage0/src/expected_red_roster_join.rsdag/gunbc/witness_floor_workflow.dag→.github/workflows/witnesses.ymldocs/probes/expected_red_roster_join.md