Repository navigation
EPIC S1 standing: Gates That Cannot Lie #3863
Description
owner: aprender-a7 (re-owned 2026-10-09 by clerk aprender-3e for cop aprender-13: no live session works its open children (#3745 #3844 #2876 #4645 #2878))
Spec: APR-EPIC-001 §2 · Epic: S1 · Train: standing · Successor at cut: —
Theme
Gates That Cannot Lie
done_when
vacuous PASS = 0, env-death-as-code-failure = 0, hand-enumerated universes = 0 (each is a ratchet that only falls).
Budget
At most 4 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.
Absorbs
#2876, #2877, #2878, #2879, #2503
Prior body
Standing epic. Not a milestone. Items accumulate here; each release bus pulls the highest-EV subset it can finish, and the rest stay. Some land in 0.70.0, some in 0.71.0, and an item that keeps losing the EV comparison is telling us something true about its value.
Why this epic exists
0.69.1 was held by a single missing green witness, and the investigation that found it turned up a pattern that is bigger than any one ticket: we have gates that cannot fail. Not gates that are wrong — gates that are structurally incapable of going red, reporting green forever while the thing they name goes unchecked.
Counted during the 0.69.1 batch, each one measured rather than reviewed:
| # | the green that cannot go red | measured |
|---|---|---|
| 1 | ladder verdict ignores 3 of 4 verbs | failed serve probe → row still green: True |
| 2 | contract falsification bindings | 563 of 4,810 entries (11.7%) produce a reference anything checks |
| 3 | tests that have never executed | 1,380 (#3809 124, #3810 1,256) + one dark since 2026-04-22 |
| 4 | README gated in a region, boundary invisible | cookbook count wrong by 5.4× (341 vs 1,825) |
| 5 | coverage gate skipped, and a skip is tolerated by construction | reverse-coverage → Skipped { reason: "no --binding or --crate-dir provided" }; lint/mod.rs:607 is g.passed || g.skipped |
Plus the ones already closed that establish the pattern is not new: check_package_includes.sh reporting OK: All 0 include!() files and unable to fail (CLAUDE.md records it); qwen-story-daily capturing tee's status so its fail-the-job step was unreachable, three green runs proving nothing (#2336); make publish's POST-PUBLISH VERIFICATION doing the same (#2360).
The unifying defect is not carelessness — it is that a green is indistinguishable from a working gate without a red. Every instance above was written by someone competent, reviewed, and shipped. What separates the good ones from the theatre is a single artifact: a proof that the gate has been observed to fail on a planted fault.
How EV is computed here
Not vibes. Three measured inputs, then a division.
EV = (blast_radius × fire_probability) ÷ cost
- blast_radius — 4 ships wrong behaviour to users · 3 lets a bad release tag · 2 blocks/delays a good release · 1 gives a wrong local answer
- fire_probability —
measured(observed firing) ·armed(will fire on the next instance of a known-recurring bug) ·latent-bounded(has a measured threshold) ·latent-unbounded(no known threshold) - cost — hours, and an item with no cost estimate cannot be ranked, which is how it gets prioritised: estimate it or it waits
Two rules that override the arithmetic:
- Every fix ships with its own RED. A planted fault, the observed failure, and the restore proven byte-identical. A fix without a demonstrated red does not close its item — it just moves the theatre one level up. (5e's mutant silently failed to apply tonight and stayed green; they caught it and the lesson is in the commit: a mutation must be proven to have landed.)
- Extending a guard's scope requires re-mutating in the new scope (fix(release): the POST-PUBLISH verification could not fail, and the guard never scanned the Makefile #2360). The old proof does not transfer, and the re-mutation must target the new input class specifically.
Seeded items
| item | blast | fire | cost | EV | bus |
|---|---|---|---|---|---|
1. ladder green must read verbs |
3 | measured | 0.5h | highest | 0.70.0 |
5b. reverse-coverage is skipped and a skip passes |
3 | measured | 2h | high | 0.70.0 |
2. falsification test: binds to nothing (#3858) |
2 | measured | 8h | high | 0.70.0 |
| 3. dark tests (#3809, #3810, crux-A-01) | 4 | armed | 6h | high | 0.70.0 |
| 5a. coverage 88.78% against a ≥95% target | 2 | armed | large | medium | 0.71.0 |
| 4. README numeric claims outside the gated region | 1 | measured | 3h | medium | 0.71.0 |
Item 1 is first and it is half an hour. The ladder's verdict is
cap_ok and golden_output and all(ran and not fallback and not escaped_special) — every field from apr run. chat, code and serve are recorded in the receipt and never read. #3828 widened the probe from one verb to four precisely because a live defect walked through when only run was probed (/api/chat could not reach the Qwen3.5 hybrid while every gate stayed green) — and the verdict still cannot see the verb that would have caught it. Its mutation proof: flip one verb red on a rung that is otherwise green, so the rung's colour changes for that reason and nothing else can be credited with it.
Item 5 is two problems and they separate. (5a) the number: 88.78% line (786448/885829) against min_coverage = 95.0 aspirational and COV_FLOOR := 88 enforced — a 7-point gap and a floor one point below the measurement, so coverage can fall 0.78% before anything complains. (5b) the gate: reverse-coverage skips for want of --binding/--crate-dir, and lint/mod.rs:607 computes passed = gates.iter().all(|g| g.passed || g.skipped) — a skip is tolerated by construction, so the gate contributes nothing and cannot. 5b is cheap, 5a is a programme; do not let 5a's size hide 5b.
This one has a personal case study attached: the 0.69.1 dogfood coverage extractor scraped COV_THRESHOLD := 95 out of the Makefile banner and fabricated a passing number, returning a threshold constant in all three test cases including 88% (the floor) on a real 87.82% miss. A measurement that returns the threshold it is compared against is the purest form of this epic's defect.
Candidate pool — triage into a bus, don't let it rot
Found during the same batch, unranked until someone estimates cost:
- 477 YAMLs live in crate-local
contracts/dirs thatpv linthas never read — and a sample says some would fail if it did #3860 — 122 crate-localpvcontractspv linthas never read (71 VALID, 38 not-contracts, 13 malformed), and 156 crate-local contracts share a filename with a root contract, 154 of which DIFFER — includingtensor-layout-v1.yaml(33,756 vs 28,572 bytes, 1,454 lines of diff), the file CLAUDE.md names SOURCE OF TRUTH for a bug it says has occurred 100+ times. Open question that decides severity: doespv codegenresolvecontracts/<name>.yamlrelative to the crate or to the workspace root? If per-crate, the layout contract has forked and two versions compile into one dependency graph. Answer that before scoping any relocation. contracts/apr-cli-commands-v1.yaml's top-level command list is compared to nothing — the de-facto registry is a hand-coded Rust vec #3862 — the registry that registers nothing. Removing a row fromcontracts/apr-cli-commands-v1.yaml→ 15 passed. Removing the verb fromregistered_commands()(a hand-codedvec!of 111 verbs) → 2 FAILED. CLAUDE.md asserts the opposite as fact. This is the operator's own rule — hand-coded verb/flag lists are the leak — broken by the gate written to enforce it.- CB-510 has no coverage for
include_str!: one guard greps the wrong directive, the other checks git instead of the package #3857 —check_include_files.shgrepsinclude!(and never matchesinclude_str!(/include_bytes!(, and checks git-tracked rather than packaged while CB-510 is about crates.io. 16include_str!targets are safe today only becauseapr-cli/Cargo.tomlhappens to carry noincludelist. - owned_fused_matmul refuses IQ4_NL while its own message claims IQ* is supported — the refusal overclaims its coverage #3852 — four
layout_contract_enforcefunctions with zero callers. Probe says 21/21 clean with three positive controls, so they are silent-and-correct — butenforce_load_contractvalidates exactly ONE tensor (11 of 12 registry contracts areis_critical: false), the registry is keyed on APR names so a GGUF name returnsOkunconditionally, andenforce_matmul_contractcannot takehidden_dimasattn_output's in_dim (it ishead_count × value_length, 4096 vs hidden 2560 on Qwen3.5-4B). Wiring it wrong is worse than leaving it unwired. - RandomForestRegressor/DecisionTreeRegressor carry the identical O(n²) split search — #3815's fix does not reach them #3859 —
find_best_regression_split_for_featureis still O(n²); DecisionTreeClassifier split-finding is O(n² × features) per node — blocks training past ~100k rows #3815's fix does not reach it and cannot be transcribed, because variance reassociates float additions where Gini did not. model_ladder.sh:415fails open in proportion to its evidence.grep -F … | grep -qFunderpipefail: measured threshold ~15,000 matching lines, at whichPIPESTATUSreads1 0— the consumer matched and the producer returned 1 for the closed pipe, so the pipeline is non-zero because the check succeeded. Not SIGPIPE; the exit code looks like an ordinary no-match. It feedsescaped_special, one of the three fields the verdict does read. Latent at one prompt line per run, with nothing guaranteeing that stays true.check_no_pipe_into_grep_q.shceiling 74, tree at 75 after the fixes — the last one is the item above.check_release_bump_pr_body.sh— mutantdrop-refusalsurvives its killer rowlandmine; the row does not discriminate, in the release-bump path.check_readme_claims.sh --self-testrow 4 no longer goes RED on the pristine base (a must-RED row that passes), plus a stalecontracts/census.json(1,831 vs HEAD's 1,832).- Bash-harnessed contracts cannot bind at all.
classify_bindingaccepts a Rust ident or a string containingcargo test;readme-claims-v1's six entries are allbash scripts/…. Either wrap each script in a cargo test or extendclassify_binding— a decision for falsification_tests[].test does not bind at all — a prose test name is decoration, and prose is the majority shape in contracts/ #3858, not for whoever hits it next. - Repository sprawl: 3,229 local branches (2,964 with no matching origin ref, 168 carrying commits reachable from no origin ref at all), 577 worktrees (~3.3 TB), 610 open issues of which 314 carry no priority label. The 314 is Alfredo's New issues can carry neither a priority label nor a milestone — nothing enforces triage, so one sat unclassified for a day #3687 at scale and wants enforcement, not a hand-labelling session.
Intake rule, so this does not become a graveyard
An item enters with: the measurement (not the suspicion), the blast radius and fire probability from the table above, and a cost estimate. An item without a cost cannot be ranked and will sit here until someone gives it one — that is the feature.
An item leaves when its fix ships with its own observed RED. Nothing closes on "looks right."
Refs #3687, #3809, #3810, #3852, #3857, #3858, #3859, #3860, #3861, #3862
Parked
Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).
- Five failures surfaced by compiling 10 dark aprender-serve test targets (2 diagnosed, 3 open) #2482 Five failures surfaced by compiling 10 dark aprender-serve test targets (2 diagn — over S1 budget (rank 121/163)
- apr verify: verificar exposure is done and blocked by a pre-existing cognitive-127 dispatch #2494 apr verify: verificar exposure is done and blocked by a pre-existing cognitive-1 — over S1 budget (rank 16/163)
- aprender-test-lib fails strict clippy under its own non-default features — the trap that hid probar's dead code #2500 aprender-test-lib fails strict clippy under its own non-default features — the t — over S1 budget (rank 122/163)
- R13:
apr servehas three different HTTP surfaces and which one you get depends on the format of the file you passed #2507 R13:apr servehas three different HTTP surfaces and which one you get depends — over S1 budget (rank 123/163) - The pre-commit complexity gate is unsatisfiable: it measures FILE totals against per-function thresholds, freezing all 10 most-complex files #2526 The pre-commit complexity gate is unsatisfiable: it measures FILE totals against — over S1 budget (rank 17/163)
- Shim-check siting: required check depends on unversioned per-runner $HOME, while the dev box where the shim runs is never checked #2646 Shim-check siting: required check depends on unversioned per-runner $HOME, while — over S1 budget (rank 18/163)
- bump-version.sh enumerates ONE excluded workspace by name instead of deriving the exclude list #2655 bump-version.sh enumerates ONE excluded workspace by name instead of deriving th — over S1 budget (rank 57/163)
- [~]
cbtop reports status PASS and ci_result green over its own grade F when the profiler returns zero bricks #2730 cbtop reports status PASS and ci_result green over its own grade F when the prof — over S1 budget (rank 6/163)(reopened 2026-09-25, retro quorum split) - F-PROVE-007 asserts 297 compile-time proofs against a tree that generates 578, and never executes #2732 F-PROVE-007 asserts 297 compile-time proofs against a tree that generates 578, a — over S1 budget (rank 19/163)
- pre-commit hook re-gates files a MERGE brings in, blocking merges of code already on main #2750 pre-commit hook re-gates files a MERGE brings in, blocking merges of code alread — over S1 budget (rank 20/163)
- G2.3's ungated ratchet makes a newly-found defect unrecordable, and G2.1 forces a touch rather than a correction #2757 G2.3's ungated ratchet makes a newly-found defect unrecordable, and G2.1 forces — over S1 budget (rank 21/163)
- pre-commit complexity gate freezes gemm.rs: it scans staged files, so any edit is rejected on a pre-existing Cognitive 30 #2766 pre-commit complexity gate freezes gemm.rs: it scans staged files, so any edit i — over S1 budget (rank 22/163)
- nextest reports a vanished test binary as a test failure, and cargo_classify.sh already knows that signature but is not wired to workspace-test #2775 nextest reports a vanished test binary as a test failure, and cargo_classify.sh — over S1 budget (rank 23/163)
- driver_cuda_gguf.rs has 10 compile errors from struct changes: nothing builds aprender-serve --features cuda --tests, and cuda-nightly enumerates named targets so it never surfaces #2784 driver_cuda_gguf.rs has 10 compile errors from struct changes: nothing builds ap — over S1 budget (rank 24/163)
- Five make targets advertise CI and no workflow invokes them —
coverage-fullsays "CI only" #2808 Five make targets advertise CI and no workflow invokes them —coverage-fullsa — over S1 budget (rank 25/163) - Merge-queue runs are cancelled by their own concurrency key, and dequeuing does not stop them — ~101 wasted runner-minutes measured #2812 Merge-queue runs are cancelled by their own concurrency key, and dequeuing does — over S1 budget (rank 26/163)
- CI jobs fail with cargo exit 101: target/debug/deps files vanish MID-BUILD (ENOENT, not ENOSPC — 884G free) #2822 CI jobs fail with cargo exit 101: target/debug/deps files vanish MID-BUILD (ENOE — over S1 budget (rank 27/163)
- workspace-test and guard-runner-labels share one cargo target dir concurrently with different feature sets — observed producing the ENOENT signature #2828 workspace-test and guard-runner-labels share one cargo target dir concurrently w — over S1 budget (rank 28/163)
- claim-literal ratchet (set-aperture) refuses every CHANGELOG edit above line 1121: a pure relocation is refused unless the owning guard changed in the same diff #2856 claim-literal ratchet (set-aperture) refuses every CHANGELOG edit above line 112 — over S1 budget (rank 124/163)
- PRQ rung 1 on the base-owned quorum.yml #2997 PRQ rung 1 on the base-owned quorum.yml — over S1 budget (rank 125/163)
- nn::loss::SmoothL1Loss is detached from the autograd graph (Phase 6 spike 002) #3034 nn::loss::SmoothL1Loss is detached from the autograd graph (Phase 6 spike 002) — over S1 budget (rank 48/163)
- check_roadmap_diff_additive.sh prints the roadmap_trim.py remedy for an ARGUMENT error — a remedy for a problem it did not hit #3054 check_roadmap_diff_additive.sh prints the roadmap_trim.py remedy for an ARGUMENT — over S1 budget (rank 156/163)
- apr *-lint --json emits an outcome in three shapes, one of them a Rust Debug string ("Ok { code: 134 }") #3055 apr *-lint --json emits an outcome in three shapes, one of them a Rust Debug str — over S1 budget (rank 157/163)
- Phi-2/Phi-3 GGUF never GPU-eligible: LayerNorm kernel exists but isn't wired into forward_gpu_resident #3075 Phi-2/Phi-3 GGUF never GPU-eligible: LayerNorm kernel exists but isn't wired int — over S1 budget (rank 126/163)
- PVL-F5: Rust→Lean fidelity — theorems are over hand-written Defs/; EV-7 pins the statement, not the Rust; Aeneas-class extraction measurement plan #3141 PVL-F5: Rust→Lean fidelity — theorems are over hand-written Defs/; EV-7 pins the — over S1 budget (rank 51/163)
- CRUX master registry drift: 250 stories vs 275 contracts — categories L and M have 24 contracts with no story rows #3172 CRUX master registry drift: 250 stories vs 275 contracts — categories L and M ha — over S1 budget (rank 64/163)
- A ratchet's instrument is unrecorded: --update deletes the tool_version header, the header audit has no vacuity floor, and baseline_require_tool_version has no caller #3217 A ratchet's instrument is unrecorded: --update deletes the tool_version header, — over S1 budget (rank 158/163)
- check_examples_run has no caller and fails open — and '-- --help' does not exit this workspace's examples #3261 check_examples_run has no caller and fails open — and '-- --help' does not exit — over S1 budget (rank 159/163)
- Model-format discovery:
apr validatereads an APR v2 header with non-v2 offsets — warns on the tensor count as if it were flags (7 defects on the "what is in this file?" path) #3275 Model-format discovery:apr validatereads an APR v2 header with non-v2 offset — over S1 budget (rank 65/163) - T-3 promotes on asset PRESENCE, not on asset IDENTITY — nothing binds a released binary to a passing parity test #3283 T-3 promotes on asset PRESENCE, not on asset IDENTITY — nothing binds a released — over S1 budget (rank 160/163)
- workspace-test: 30% of shas need a repeat run, 21.5 h burned in failed runs — and nextest already writes the junit.xml that would explain it #3284 workspace-test: 30% of shas need a repeat run, 21.5 h burned in failed runs — an — over S1 budget (rank 161/163)
- pv lean-status reports 'proved' and 'L4 Coverage: 100%' from a self-declared status field, without resolving the theorem — and exits 0 on an empty scan #3304 pv lean-status reports 'proved' and 'L4 Coverage: 100%' from a self-declared sta — over S1 budget (rank 162/163)
- Drain the path-only dev-dep baseline to empty (5 pairs, 27 sites) — follow-up to #3305 #3306 Drain the path-only dev-dep baseline to empty (5 pairs, 27 sites) — follow-up to — over S1 budget (rank 49/163)
- docs(release): APR-RELEASE-001 has no must-carry section on
main— land §1.5 (must-carry rows; T-0 waits; > 72 h andon) #3446 docs(release): APR-RELEASE-001 has no must-carry section onmain— land §1.5 ( — over S1 budget (rank 66/163) - release train: the tag step lives in an untracked per-train autopilot copy — the #3445 milestone read is on no code path #3454 release train: the tag step lives in an untracked per-train autopilot copy — the — over S1 budget (rank 163/163)
- ci_queue_steward.sh defaults to the first OPEN milestone by title — today that is 0.66.0 (shipped, 0 items), not the current train #3457 ci_queue_steward.sh defaults to the first OPEN milestone by title — today that i — over S1 budget (rank 67/163)
- Two llama.cpp comparator pins are live in-tree at once — 216 refs to d1d3c3396, 124 to 39173bcac; some committed artifacts measure against a superseded oracle #3563 Two llama.cpp comparator pins are live in-tree at once — 216 refs to d1d3c3396, — over S1 budget (rank 7/163)
- PP-LLAMA-001 §12: a substring test cannot tell a citation from a claim — five live rows discharged themselves by quoting one #3573 PP-LLAMA-001 §12: a substring test cannot tell a citation from a claim — five li — over S1 budget (rank 29/163)
- 12 guards build their universe with find and 8 do not exclude .claude/worktrees — they scan 3 trees at 3 different commits and attribute it all to HEAD #3579 12 guards build their universe with find and 8 do not exclude .claude/worktrees — over S1 budget (rank 30/163)
- check_apr_bin_pinned.sh prescribes a remedy that is wrong for post-publish verification — apr_bin.sh asserts a HEAD-built binary where the step must read the PUBLISHED one #3584 check_apr_bin_pinned.sh prescribes a remedy that is wrong for post-publish verif — over S1 budget (rank 31/163)
- 7 scripts resolve the repo root with an unguarded 'git rev-parse --show-toplevel' — git refuses the container's bind-mounted tree, so a path question gets no answer #3586 7 scripts resolve the repo root with an unguarded 'git rev-parse --show-toplevel — over S1 budget (rank 32/163)
- nextest fail-fast discards verdicts: one failure hid 15 unmeasured commands and the shard read as '1 failure', not '1 failure + 15 Unknown' #3587 nextest fail-fast discards verdicts: one failure hid 15 unmeasured commands and — over S1 budget (rank 33/163)
- check_hardcoded_paths.sh's default mode scans contracts only and PASSes — the real gate is --full-if-capable, so local verification produces a false green #3591 check_hardcoded_paths.sh's default mode scans contracts only and PASSes — the re — over S1 budget (rank 34/163)
- Nothing consumes removed_by: no T-0 expiry check, no slips counter, no two-slip andon — refusals will carry deadlines nothing enforces #3615 Nothing consumes removed_by: no T-0 expiry check, no slips counter, no two-slip — over S1 budget (rank 35/163)
- Two review receipts, one reader: the §13.11 shadow bot reads evidence/pr-review/ (no producer since #2875) while quorum-review writes docs/audits/quorum-<TICKET>.json (no reader) — REFUSE Q1 on every PR, receipt or not #3639 Two review receipts, one reader: the §13.11 shadow bot reads evidence/pr-review/ — over S1 budget (rank 36/163)
- Ratchets compare a STALE merge ref against origin/main's LIVE tip ('no merge-base available; stricter') — a main-side baseline shrink reads as GREW on every in-flight PR (cb200 601→599 tonight; PMAT-3539 'deleted' earlier) #3643 Ratchets compare a STALE merge ref against origin/main's LIVE tip ('no merge-bas — over S1 budget (rank 37/163)
- check_pr_review_counts.sh is RED on main (6 rows disagree) and check_pr_review_receipt.sh has no caller — both dark since PRQ-013 moved the receipt job, classified out of --no-cargo by a comment #3646 check_pr_review_counts.sh is RED on main (6 rows disagree) and check_pr_review_r — over S1 budget (rank 10/163)
- ci_resolve_dirty.sh:
dirty-files=0reads as "nothing to do" when it means "the driver resolves it" #3652 ci_resolve_dirty.sh:dirty-files=0reads as "nothing to do" when it means "the — over S1 budget (rank 58/163) - ci.yml:2783 (ci_gpu_touched feed) builds its touched list with rename detection on — a CUDA source moved out of a GPU crate lists only its new path, so the GPU lanes can miss the crate it left #3667 ci.yml:2783 (ci_gpu_touched feed) builds its touched list with rename detection — over S1 budget (rank 127/163)
- BPETokenizer greedy encode matches Latin-1 characters as byte-level GLYPH tokens: "é" encodes as byte 0xE9 and decodes to U+FFFD (every byte-level GGUF served via AppState) #3677 BPETokenizer greedy encode matches Latin-1 characters as byte-level GLYPH tokens — over S1 budget (rank 38/163)
- check_sourced_libs_option_neutral is blind to scripts/lib/: it resolves a sourced path by BASENAME in scripts/, so a set -e in scripts/lib/resolve_base.sh passes (rc 0) #3680 check_sourced_libs_option_neutral is blind to scripts/lib/: it resolves a source — over S1 budget (rank 128/163)
- lib_baseline_ratchet.sh: a git refusal (container "dubious ownership") is reported as "this branch WROTE it" — fails closed with the wrong cause #3683 lib_baseline_ratchet.sh: a git refusal (container "dubious ownership") is report — over S1 budget (rank 129/163)
- release/lib_release_params.sh: release_state_root silently falls back to the tree root when git fails — release state can split across two directories #3684 release/lib_release_params.sh: release_state_root silently falls back to the tre — over S1 budget (rank 130/163)
- Release T-4 does not wait for the tag's coverage run — a COV_FLOOR breach on the tag reds a run but does not stop the cascade (#3676 follow-up) #3690 Release T-4 does not wait for the tag's coverage run — a COV_FLOOR breach on the — over S1 budget (rank 68/163)
- lib tests assert an UPPER bound on measured elapsed time (elapsed < N) — the slow-host twin of #3703; 59 candidate lines to classify #3705 lib tests assert an UPPER bound on measured elapsed time (elapsed < N) — the slo — over S1 budget (rank 131/163)
- release-readiness waivers need a surface only the operator holds — a gh comment by noahgift is forgeable by every agent session #3722 release-readiness waivers need a surface only the operator holds — a gh comment — over S1 budget (rank 39/163)
- F2 receipts are keyed per MODEL, not per (model, apr version, device) as #3604 specified — versions overwrite each other and every run re-pays the 64-position CPU forward (24.5 s of a 56 s run) #3748 F2 receipts are keyed per MODEL, not per (model, apr version, device) as f2_validate_qwen35 runs a full CPU reference forward on EVERY call (67% of a 14s TTFT) — run it once per (model sha256, apr version, device) and receipt it #3604 s — over S1 budget (rank 69/163)
- #3745 S1: apr emits its own clap surface as JSON; arg roles come from typed markers; a model loaded through an unmarked arg is RED #3749 P0: release cells are hand-coded, not DERIVED from apr's interface — the gate cannot see a verb, flag or input shape nobody typed into a list (run --prompt --chat, serve, code all leaked) #3745 S1: apr emits its own clap surface as JSON; arg roles come from typed mark — over S1 budget (rank 70/163)
- Every CPU-reference validator compares an FP32-activation GPU against a Q8_K-activation CPU — on Qwen3 outlier tokens it rejected an exact GPU (cos 0.873 vs 1.000000 against FP32); measure CPU Q8_K vs FP32 across the fleet #3751 Every CPU-reference validator compares an FP32-activation GPU against a Q8_K-act — over S1 budget (rank 95/163)
- #3712 row A2: the Q4_K universe is read from each file's tensor header (apr tensors --json), never a *Q4_K* filename glob; the judge recomputes membership #3763 P0 release-process: the train can publish with "most models working" — the model gate is a hand-picked ladder with OPTIONAL rungs, a skip reads as pass, and the dogfood can be inherited. Every Q4_K model × {lambda, gx10} × CUDA must be green or NOTHING ships #3712 row A2: the Q4_K universe is read from each file's tensor header (apr tens — over S1 budget (rank 53/163)
- dogfood: every leak 0.69.0 shipped with gets an OWNING pre-release gate — lessons of 2026-09-21 become checks, not prose #3768 dogfood: every leak 0.69.0 shipped with gets an OWNING pre-release gate — lesson — over S1 budget (rank 96/163)
- release/0.69.1-batch-1: check_release_bump_pr_body.sh fixture ladder receipts are the pre-#3712 shape — the real judge no longer passes them (combination break of #3721 + #3738) #3770 release/0.69.1-batch-1: check_release_bump_pr_body.sh fixture ladder receipts ar — over S1 budget (rank 40/163)
- Model-ladder receipts record the worktree HEAD as
sha, not the binary they ran; the judge never reads the binary's own version sha — a receipt can name a tree that was never measured #3771 Model-ladder receipts record the worktree HEAD assha, not the binary they ran — over S1 budget (rank 97/163) - #3745 S2: cli-surface extractor + derived release cells (pairwise) — release-readiness-v1 targets the derived set, VERBS deleted #3777 P0: release cells are hand-coded, not DERIVED from apr's interface — the gate cannot see a verb, flag or input shape nobody typed into a list (run --prompt --chat, serve, code all leaked) #3745 S2: cli-surface extractor + derived release cells (pairwise) — release-rea — over S1 budget (rank 71/163)
- #3712 row B2: the cells producer — a resident runner over S2's derived cells (cell_id rows, output_sha256, wall_ms load vs measured), ≤ 8 h/host, a cell tests its own command shape #3783 P0 release-process: the train can publish with "most models working" — the model gate is a hand-picked ladder with OPTIONAL rungs, a skip reads as pass, and the dogfood can be inherited. Every Q4_K model × {lambda, gx10} × CUDA must be green or NOTHING ships #3712 row B2: the cells producer — a resident runner over S2's derived cells (ce — over S1 budget (rank 59/163)
- check_multiplatform_dogfood demands a cuda parity lane from the crates.io binary, which has no cuda feature — the producer's accel_absent is never carried into the block or read #3805 check_multiplatform_dogfood demands a cuda parity lane from the crates.io binary — over S1 budget (rank 8/163)
- #3697 batch 2: the three roadmap guards are UNMEASURED, not RED, on a runner without python3 / PyYAML #3806 guard-tree's no-cargo guards depend on python3 + site-packages: 10 guards (16 rows) red without yaml/tomli, 21 guards (30 rows) red with no python3 — latent on every runner that differs from intel's #3697 batch 2: the three roadmap guards are UNMEASURED, not RED, on a runner wit — over S1 budget (rank 132/163)
- 5 test files under apr-cli/serve/ (124 #[test] fns, incl. the apr-serve-v1/http-api-v1 FALSIFY contract tests) are never wired into mod.rs — never compiled, never run #3809 5 test files under apr-cli/serve/ (124 #[test] fns, incl. the apr-serve-v1/http- — over S1 budget (rank 9/163)
- Arm 4 (
present) is RED on every live PR and required by nothing — no PR-review receipt has landed since #3491 #3818 Arm 4 (present) is RED on every live PR and required by nothing — no PR-review — over S1 budget (rank 89/163) - Verdict-lattice obligation: two surfaces decide GPU-correct(model, host, apr) and disagree silently — apr run --gpu refuses what apr qa ships #3821 Verdict-lattice obligation: two surfaces decide GPU-correct(model, host, apr) an — over S1 budget (rank 72/163)
- apr run --format json reports "fell_back": false on a run whose own stderr says "attempting fallback" #3826 apr run --format json reports "fell_back": false on a run whose own stderr says — over S1 budget (rank 133/163)
- CRUX judge floor (#3739): a cell judged on fewer than two engines is UNJUDGED, and the receipt states per cell WHICH engines ran and at WHICH versions #3832 CRUX judge floor (CRUX inference dogfood, every release: the SAME GGUF + SAME prompts through apr, llama.cpp and ollama, per verb (run / chat / serve / code) on lambda and gx10 — apr must be right wherever a competitor is right #3739): a cell judged on fewer than two engines is UNJUDGED, a — over S1 budget (rank 54/163)
- Release note (0.69.1): two comparator version gates that could not fail — one INVERTED (made true by the very condition it detects), one that made the pin inert #3833 Release note (0.69.1): two comparator version gates that could not fail — one IN — over S1 budget (rank 60/163)
- check_apr_bin_pinned: an opener INSIDE a quoted string is a latent false positive (sixth wrong pattern in this class) #3836 check_apr_bin_pinned: an opener INSIDE a quoted string is a latent false positiv — over S1 budget (rank 61/163)
- Wire check_unwired_capabilities.sh into guard-tree — it ships in tier3 only, so CI never runs it #3854 Wire check_unwired_capabilities.sh into guard-tree — it ships in tier3 only, so — over S1 budget (rank 62/163)
- ONE GATE FRAMEWORK: 143 gates, ~25 baselines, 39 ratchets, 38 mutation proofs — one and only one way to build a gate #3855 ONE GATE FRAMEWORK: 143 gates, ~25 baselines, 39 ratchets, 38 mutation proofs — — over S1 budget (rank 41/163)
- CB-510 has no coverage for
include_str!: one guard greps the wrong directive, the other checks git instead of the package #3857 CB-510 has no coverage forinclude_str!: one guard greps the wrong directive, — over S1 budget (rank 42/163) - gpu_speedup's floor is a RATIO, so a shared-host CPU leg in the denominator can manufacture or erase a pass #3861 gpu_speedup's floor is a RATIO, so a shared-host CPU leg in the denominator can — over S1 budget (rank 43/163)
-
contracts/apr-cli-commands-v1.yaml's top-level command list is compared to nothing — the de-facto registry is a hand-coded Rust vec #3862contracts/apr-cli-commands-v1.yaml's top-level command list is compared to not — over S1 budget (rank 134/163) - Guard:
rc=$?after a pipeline reads the LAST command's status — the documented defect (#2336, #2360) has no detector and was committed 3× tonight #3864 Guard:rc=$?after a pipeline reads the LAST command's status — the documented — over S1 budget (rank 44/163) - Guard: unbraced "$var:path" in a git-ref position — zsh eats the path's first letter and git says 'Not a valid object name', which reads as 'file absent' #3865 Guard: unbraced "$var:path" in a git-ref position — zsh eats the path's first le — over S1 budget (rank 45/163)
- check_readme_claims.sh --self-test: a must-RED row returns GREEN, because two counters measure different populations and the census carries no sha to date itself #3866 check_readme_claims.sh --self-test: a must-RED row returns GREEN, because two co — over S1 budget (rank 11/163)
- README.md is not ungated — it is gated in a REGION, and the boundary is invisible in the rendered file: enumerate every numeric claim, each gated or exempted with a reason #3867 README.md is not ungated — it is gated in a REGION, and the boundary is invisibl — over S1 budget (rank 12/163)
- Re-apply #3784's binary-identity fix as a design: the ladder receipt names the CHECKOUT HEAD, not the binary that ran #3871 Re-apply feat(ladder): a receipt names the binary that ran, never the checkout HEAD; the judge requires the release binary; GPU calls join gpu-q (#3771) #3784's binary-identity fix as a design: the ladder receipt names the C — over S1 budget (rank 46/163)
- the ladder's log truncates diagnostics mid-number ([:70]), producing a complete-looking WRONG value — plus one genuine rc misclassification #3872 the ladder's log truncates diagnostics mid-number ([:70]), producing a complete- — over S1 budget (rank 13/163)
- pv exits 3 on a schema-name refusal, not 2 — so a schema bump reds a required gate on fleet state the PR cannot fix #3874 pv exits 3 on a schema-name refusal, not 2 — so a schema bump reds a required ga — over S1 budget (rank 47/163)
- ladder receipt: bytes describes the symlink, sha256 describes the model — one row, two objects #3876 ladder receipt: bytes describes the symlink, sha256 describes the model — one ro — over S1 budget (rank 98/163)
- ladder receipt: a dangling symlink records "sha256": "" — an identity claim of nothing #3878 ladder receipt: a dangling symlink records "sha256": "" — an identity claim of n — over S1 budget (rank 135/163)
- gpu-q does not pin the binary it runs — the GPU has two entrances and only one is guarded #3879 gpu-q does not pin the binary it runs — the GPU has two entrances and only one i — over S1 budget (rank 136/163)
- Case-table harness: a red-expecting case with no must_match cannot say WHY it is red — a mutant can survive by being killed for the wrong reason #3887 Case-table harness: a red-expecting case with no must_match cannot say WHY it is — over S1 budget (rank 55/163)
- apr-cli ships 9 INVALID contracts that nothing reads, and no gate looks at them — pv lint never leaves the root contracts/ dir #3888 apr-cli ships 9 INVALID contracts that nothing reads, and no gate looks at them — over S1 budget (rank 14/163)
- apr serve reports HTTP 200 for a forced-accelerator request that silently fell back to CPU — it has no after_generation equivalent #3889 apr serve reports HTTP 200 for a forced-accelerator request that silently fell b — over S1 budget (rank 137/163)
- model_ladder receipt: per-row
greenis not the gate's verdict — 3 rows marked green that check_model_ladder FAILs (mirror of #3842) #3897 model_ladder receipt: per-rowgreenis not the gate's verdict — 3 rows marked — over S1 budget (rank 99/163) - RELEASE GATE HOLE: check_model_ladder ignores qa_rc / gates_failed — a Q4_K row with
apr qaexit 5 is judgedok#3898 RELEASE GATE HOLE: check_model_ladder ignores qa_rc / gates_failed — a Q4_K row — over S1 budget (rank 100/163) - DECISION NEEDED (published for refutation): two 0.69.1 deferral questions — a gate's inspection limit vs a model that does not run #3900 DECISION NEEDED (published for refutation): two 0.69.1 deferral questions — a ga — over S1 budget (rank 138/163)
- a ladder row red only on serve prints reason 'unknown' — #3886 moved the verdict and left the explanation behind #3901 a ladder row red only on serve prints reason 'unknown' — model_ladder.sh: serve_rc is a dead variable — every serve route can 503/500 and the row is still green #3886 moved the verdict — over S1 budget (rank 101/163)
- No gate runs aprender-serve under --features cuda: 5 tests red there, green in CI, and the tests are the wrong ones #3902 No gate runs aprender-serve under --features cuda: 5 tests red there, green in C — over S1 budget (rank 139/163)
- #3872 removed the four slices someone FOUND; nobody enumerated the surface — here it is, and the 5th is in the ladder's own cells judge #3904 the ladder's log truncates diagnostics mid-number ([:70]), producing a complete-looking WRONG value — plus one genuine rc misclassification #3872 removed the four slices someone FOUND; nobody enumerated the surface — her — over S1 budget (rank 102/163)
- The pr-review skill resolves its subject from the session cwd, so it can emit a valid signed receipt attesting the wrong tree #3912 The pr-review skill resolves its subject from the session cwd, so it can emit a — over S1 budget (rank 140/163)
- apr diff measured a 197-of-338-tensor corruption and exited 0: --values cannot fail, --threshold is silently ignored there, and --quant-roundtrip cannot read a quantized model #3913 apr diff measured a 197-of-338-tensor corruption and exited 0: --values cannot f — over S1 budget (rank 141/163)
- #3904 enumerated the surface I could SEE: its scan is Python-shaped, and Rust truncates with .take(N) #3916 #3872 removed the four slices someone FOUND; nobody enumerated the surface — here it is, and the 5th is in the ladder's own cells judge #3904 enumerated the surface I could SEE: its scan is Python-shaped, and Rust tr — over S1 budget (rank 103/163)
- test_find_qwen_tokenizer_nonexistent_path passes only on cache-polluted boxes — the green is the wrong answer #3917 test_find_qwen_tokenizer_nonexistent_path passes only on cache-polluted boxes — — over S1 budget (rank 104/163)
- P0: chat/code judged by rc and serve by http — a verb emitting 'zombie zombie zombie' is recorded as working, and a GREEN row proves it #3921 P0: chat/code judged by rc and serve by http — a verb emitting 'zombie zombie zo — over S1 budget (rank 5/163)
- A GPU/CPU correctness gate exists and only the infer module uses it — enumerate every entry point #3924 A GPU/CPU correctness gate exists and only the infer module uses it — enumerate — over S1 budget (rank 105/163)
- the ladder's serve /health window is a fixed 90s, so the 27B is red for load time while passing capability_match and golden_output #3936 the ladder's serve /health window is a fixed 90s, so the 27B is red for load tim — over S1 budget (rank 93/163)
- A CUDA chat cell can say rc=0 for a chat that ran on CPU: chat cannot refuse a forced accelerator, and the producer discards the fell_back it does report #3937 A CUDA chat cell can say rc=0 for a chat that ran on CPU: chat cannot refuse a f — over S1 budget (rank 15/163)
- check_model_ladder.sh binds the model file's sha and the release version, but never the binary that produced the receipt #3940 check_model_ladder.sh binds the model file's sha and the release version, but ne — over S1 budget (rank 106/163)
- Decide: should golden_output judge .apr on the GPU, or formally delegate that to chat/serve? (the gap #3931 made visible) #3942 Decide: should golden_output judge .apr on the GPU, or formally delegate that to — over S1 budget (rank 142/163)
- ladder_serve_teardown reads 'not answering /health' as 'server gone', so a still-loading server is reported teardown: clean #3943 ladder_serve_teardown reads 'not answering /health' as 'server gone', so a still — over S1 budget (rank 107/163)
- golden_output thinking-ON judge passes an EMPTY <think></think> — the leg cannot tell reasoning from skipping it #3948 golden_output thinking-ON judge passes an EMPTY — the leg cannot — over S1 budget (rank 108/163)
- False provenance: chat banner claims 'fused Q4K, F2-validated' on BF16 with F2 SKIPPED; chat envelope requested:"default" under --gpu #3955 False provenance: chat banner claims 'fused Q4K, F2-validated' on BF16 with F2 S — over S1 budget (rank 90/163)
- cuda-feature tests red on release base: usage_finish_3718 fails 5/5 (ignore_eos 501); gpu_cpu_trace_compare.rs does not compile (lm_head_tied) #3956 cuda-feature tests red on release base: usage_finish_3718 fails 5/5 (ignore_eos — over S1 budget (rank 73/163)
- 0.69.1 gate hardening (no GPU): sha-bound receipts, missing-field=FAIL, verb output oracles, CRUX judge strength, DEFER exits 2 #3957 0.69.1 gate hardening (no GPU): sha-bound receipts, missing-field=FAIL, verb out — over S1 budget (rank 109/163)
- apr qa --json reports skipped gates as passed:true — a skip reads as a pass to every JSON consumer #3965 apr qa --json reports skipped gates as passed:true — a skip reads as a pass to e — over S1 budget (rank 110/163)
- F2 GPU validation fails OPEN: returns true ('assume GPU is fine') when the CPU reference or probe is unavailable — 'F2 validation PASSED' can mean nothing was validated #3973 F2 GPU validation fails OPEN: returns true ('assume GPU is fine') when the CPU r — over S1 budget (rank 111/163)
- Jidoka audit: dogfood.sh WARN/SKIP/REPORT/MANUAL verdicts exit 0 on the release surface; qa gpu_speedup swallows errors; validate --quality F exits 0; 4 release scripts have no must-RED #3974 Jidoka audit: dogfood.sh WARN/SKIP/REPORT/MANUAL verdicts exit 0 on the release — over S1 budget (rank 143/163)
- Batch serving F2 GPU validation has never run (empty probe) — needs a representative probe at batch-server init #3980 Batch serving F2 GPU validation has never run (empty probe) — needs a representa — over S1 budget (rank 144/163)
- cuda_combinatorial_coverage: test_tqa023 asserts GGML types 0/1 unmapped (stale since GH-374/#3477); target never runs in CI #3982 cuda_combinatorial_coverage: test_tqa023 asserts GGML types 0/1 unmapped (stale — over S1 budget (rank 145/163)
- kernel-fusion-v1 call_site guard checks only that 'call_site:' occurs — 4 sites pointed into a dead file, 2 still cite pre-monorepo paths; test is dark #3985 kernel-fusion-v1 call_site guard checks only that 'call_site:' occurs — 4 sites — over S1 budget (rank 112/163)
- ladder serve wait: #3943's stall rule counts time blocked in flock as no progress, a false 'stalled' serve RED on a contended card #4015 ladder serve wait: ladder_serve_teardown reads 'not answering /health' as 'server gone', so a still-loading server is reported teardown: clean #3943's stall rule counts time blocked in flock as no progres — over S1 budget (rank 113/163)
- Triage & hygiene: branch deletion record (restorable) + unmerged branches pending owners #4044 Triage & hygiene: branch deletion record (restorable) + unmerged branches pendin — over S1 budget (rank 146/163)
- Wire aprender-serve --test tokenizer_nonascii_4005 into CI (dark test since 9684a7a41, #4005) #4054 Wire aprender-serve --test tokenizer_nonascii_4005 into CI (dark test since 9684 — over S1 budget (rank 114/163)
- ladder: serve teardown refuses to kill its own survivor when run from a symlinked path ($PWD vs readlink -f); the orphan keeps the GPU lock fd and stalls the next cell 1800 s #4055 ladder: serve teardown refuses to kill its own survivor when run from a symlinke — over S1 budget (rank 115/163)
- derive_verb_classification.py --check is reached by nothing — the 'cannot drift' claim has no gate (#3642 follow-up) #4066 derive_verb_classification.py --check is reached by nothing — the 'cannot drift' — over S1 budget (rank 147/163)
- 0.70.0: check_no_claim_literals RED at 0.69.1 — 3 path:LINE baseline drifts + 7 new literals (known-red at ship) #4085 0.70.0: check_no_claim_literals RED at 0.69.1 — 3 path:LINE baseline drifts + 7 — over S1 budget (rank 50/163)
- 0.70.0: dogfood's declared check_model_ladder gate ignores a recorded emergency scope (no seam) — known-red at 0.69.1 #4086 0.70.0: dogfood's declared check_model_ladder gate ignores a recorded emergency — over S1 budget (rank 52/163)
- check_crux_inference_judge.sh: CI-fast mode (sampled F6 mutants on PRs, full set nightly) — 655 s puts guard-tree at its 30-min limit #4098 check_crux_inference_judge.sh: CI-fast mode (sampled F6 mutants on PRs, full set — over S1 budget (rank 116/163)
- bashrs SEC001/SEC010 x8 in release scripts at 0.69.1, suppressed with reasons on main via #4046 #4099 bashrs SEC001/SEC010 x8 in release scripts at 0.69.1, suppressed with reasons on — over S1 budget (rank 56/163)
- PMAT-3598: the stage-timing falsifier is tested only on helpers — plant each stage through the real call sites (#3606 follow-up) #4105 PMAT-3598: the stage-timing falsifier is tested only on helpers — plant each sta — over S1 budget (rank 117/163)
- check_no_claim_literals stale-entry count uses a substring match: x.md:1 counts as matching x.md:12, so a stale baseline entry can hide #4113 check_no_claim_literals stale-entry count uses a substring match: x.md:1 counts — over S1 budget (rank 74/163)
- check_package_includes.sh skips cfg(test) modules — it passed a crate whose published-tarball cargo test cannot compile (3 includes); the gate must build the real .crate #4114 check_package_includes.sh skips cfg(test) modules — it passed a crate whose publ — over S1 budget (rank 75/163)
- M8: a BOOKKEEPING gate still blocks the publish through dogfood/R5 -- make the class reach the publish, or say it doesn't #4118 M8: a BOOKKEEPING gate still blocks the publish through dogfood/R5 -- make the c — over S1 budget (rank 148/163)
- guard_tree.sh --no-cargo signals the gx10 runner Listener ~25 s in (SIGTERM → UserCancelled); killed 2+ required guard-tree jobs #4120 guard_tree.sh --no-cargo signals the gx10 runner Listener ~25 s in (SIGTERM → Us — over S1 budget (rank 118/163)
- Published tarballs of aprender-train, aprender-contracts, aprender-contracts-cli, aprender-present-terminal cannot compile their tests: include! of files outside the .crate #4129 Published tarballs of aprender-train, aprender-contracts, aprender-contracts-cli — over S1 budget (rank 76/163)
- Published tarballs of aprender-core, aprender-orchestrate, aprender-cbtop, aprender-test-showcase ship integration tests whose path-only dev-dependencies cargo package strips #4130 Published tarballs of aprender-core, aprender-orchestrate, aprender-cbtop, apren — over S1 budget (rank 77/163)
- apr-cli --no-default-features: test targets do not compile (72 errors; the lib is clean since #4041) #4138 apr-cli --no-default-features: test targets do not compile (72 errors; the lib i — over S1 budget (rank 78/163)
- #4129 on the 0.69.1 lineage: apr-cli and aprender-orchestrate tests include #3990 fixtures / thinking-budgets source from outside their crate #4140 Published tarballs of aprender-train, aprender-contracts, aprender-contracts-cli, aprender-present-terminal cannot compile their tests: include! of files outside the .crate #4129 on the 0.69.1 lineage: apr-cli and aprender-orchestrate tests include feat: Multi-adapter CLI + GPU status + Q4K fix (GH-152, GH-206) #399 — over S1 budget (rank 149/163)
- nightly_admission.resolve(): a relative receipt path with no verdict location falls back to the cwd (#4117 follow-up) #4143 nightly_admission.resolve(): a relative receipt path with no verdict location fa — over S1 budget (rank 63/163)
- four guards ignore --help and run their body in guard-tree's probe (named PROBE-TIMEOUT) #4144 four guards ignore --help and run their body in guard-tree's probe (named PROBE- — over S1 budget (rank 79/163)
- Run-time twin of #4129: apr-cli tests compile from the tarball but PANIC out of tree (bare expect on workspace files); the compile-only #4114 gate cannot see it #4149 Run-time twin of Published tarballs of aprender-train, aprender-contracts, aprender-contracts-cli, aprender-present-terminal cannot compile their tests: include! of files outside the .crate #4129: apr-cli tests compile from the tarball but PANIC out of — over S1 budget (rank 80/163)
- cargo fmt --check never sees include!d .rs files — CI's fmt gate is blind to them (two 140-col lines passed) #4151 cargo fmt --check never sees include!d .rs files — CI's fmt gate is blind to the — over S1 budget (rank 81/163)
- lint_empty_dir is not hermetic: pv lint state lives in $TMPDIR/.pv, shared by every tempdir fixture #4173 lint_empty_dir is not hermetic: pv lint state lives in $TMPDIR/.pv, shared by ev — over S1 budget (rank 82/163)
- clean-room B2: packaged-tarball test gate, all crates #4175 clean-room B2: packaged-tarball test gate, all crates — over S1 budget (rank 83/163)
- carry_milestone_items.sh: a CLOSED backlog milestone is still a carry target — check it is OPEN, with a case table #4176 carry_milestone_items.sh: a CLOSED backlog milestone is still a carry target — c — over S1 budget (rank 94/163)
- binary-debt: apr-cli qwen3_moe_apr_run_live_falsifier is dark — nightly on a model host, fail closed on a missing model #4179 binary-debt: apr-cli qwen3_moe_apr_run_live_falsifier is dark — nightly on a mod — over S1 budget (rank 84/163)
- CI: one straggler still on actions/checkout@v4 (ci.yml:941) — bump to v7 and sha-pin actions #4181 CI: one straggler still on actions/checkout@v4 (ci.yml:941) — bump to v7 and sha — over S1 budget (rank 150/163)
- aprender-core published tarball: lib test + 10 test targets include! repo files outside the .crate (contracts/*.yaml, apr-cli sources, CLAUDE.md, LICENSE) #4192 aprender-core published tarball: lib test + 10 test targets include! repo files — over S1 budget (rank 85/163)
- CRUX greedy cell: route the llama-server stop through crux_cell_teardown (no inline kill) #4209 CRUX greedy cell: route the llama-server stop through crux_cell_teardown (no inl — over S1 budget (rank 119/163)
- check_crux_greedy_rows: list kill -TERM / kill -9 forms explicitly in the inline-kill case table (follow-up to #4209) #4225 check_crux_greedy_rows: list kill -TERM / kill -9 forms explicitly in the inline — over S1 budget (rank 120/163)
- gpu-q has no series lease: a gate series of N gpu-q calls leaves gaps a foreign job fills mid-series #4262 gpu-q has no series lease: a gate series of N gpu-q calls leaves gaps a foreign — over S1 budget (rank 151/163)
- check_tree_reader_tests.sh names_test substring-matches --test names: aprender-cgp integration reads as wired via another crate's integration_test #4329 check_tree_reader_tests.sh names_test substring-matches --test names: aprender-c — over S1 budget (rank 86/163)
- cuda-unit clippy gate (#3636) does not run on apr-cli-only diffs — apr-cli is outside GPU_CRATES #4336 cuda-unit clippy gate (clippy --features cuda is red on main (unused rms_norm_forward import in aprender-train) and no gate runs that combination #3636) does not run on apr-cli-only diffs — apr-cli is ou — over S1 budget (rank 87/163)
- crux serve sweep: one timeout over the whole sweep + end-only plan.json discards every completed row #4341 crux serve sweep: one timeout over the whole sweep + end-only plan.json discards — over S1 budget (rank 152/163)
- qwen35 --gpu tok/s counts the CUDA build + F2 guard as generation (inference_ms not generation-only) — sibling of #3714 #4342 qwen35 --gpu tok/s counts the CUDA build + F2 guard as generation (inference_ms — over S1 budget (rank 88/163)
- nextest: 5 aprender-serve lib tests SIGKILLed by 16G local cargo-memcap — local runs false-red (heavy-memory group; mega test allocates 34GB) #4343 nextest: 5 aprender-serve lib tests SIGKILLed by 16G local cargo-memcap — local — over S1 budget (rank 153/163)
- Adopt dogfood-receipt-v1 in apr-dogfood, and remove python3 from it (ARB-SELF-001 ASL-05) #4377 Adopt dogfood-receipt-v1 in apr-dogfood, and remove python3 from it (ARB-SELF-00 — over S1 budget (rank 154/163)
- PR write-set: no PR writes docs/roadmaps/roadmap.yaml or the README census; main regenerates both (operator P4) #4417 PR write-set: no PR writes docs/roadmaps/roadmap.yaml or the README census; main — over S1 budget (rank 91/163)
- qa: 5 SUSPECT asserted-not-measured verdict clauses (follow-up to #3873) #4423 qa: 5 SUSPECT asserted-not-measured verdict clauses (follow-up to the golden-output gate reports a GPU failure while asserting a CPU pass it never measured — it turned a model that fails everywhere into a CUDA blocker #3873) — over S1 budget (rank 155/163)
- ci: parity_receipt_denominator.sh verify mode is never run — only --self-test is wired (#3577 guard is dark) #4425 ci: parity_receipt_denominator.sh verify mode is never run — only --self-test is — over S1 budget (rank 92/163)
- The post-publish dogfood CANNOT pass: version-unpublished is not phase-aware and the banner still says pre-release #3543 The post-publish dogfood CANNOT pass: version-unpublished is not phase-aware and — floor orphan, not linked over budget (rule 21 wins over rule 6, cop 18:08Z)
Superseded epics
- SURF tracker: 45 of 150 command paths are ungated, and 3 of 5 CLI falsification conditions name a test that does not exist #2503 SURF tracker: 45 of 150 command paths are ungated, and 3 of 5 CLI falsification — A4 pending close (waits apr lane); owner lines: | # | Draft claim | Verdict | / The draft manifest pinned
schemarsfor digest stability. **schemarsis not a dependency ofapr-clior `aprender-mc - Class: a gate that answers empty or degenerate input with PASS (or a traceback) instead of a named refusal #2876 Class: a gate that answers empty or degenerate input with PASS (or a traceback) — A4 pending close (waits apr lane); owner lines: none
- Class: the required check dies of its environment (ENOENT, shared target dir, self-cancellation, runner $HOME, vanished binaries) and reports a code failure #2877 Class: the required check dies of its environment (ENOENT, shared target dir, se — A4 pending close (waits apr lane); owner lines: none
- Class: universe authored, not derived — dark cargo targets, hand-enumerated CI lists and Makefile targets that advertise CI nothing invokes #2878 Class: universe authored, not derived — dark cargo targets, hand-enumerated CI l — A4 pending close (waits apr lane); owner lines: none
- Class: ratchets that block edits rather than regressions — frozen files, line-keyed baselines and ledgers where honest work is the most expensive path #2879 Class: ratchets that block edits rather than regressions — frozen files, line-ke — A4 pending close (waits apr lane); owner lines: Why it blocks PP-066. S-2 (W-C) edits
cublas_prefill/gemm.rs(Cognitive 30, frozen); T-2 edits `finetune.rs:317,71 / - claim-literal ratchet (set-aperture) refuses every CHANGELOG edit above line 1121: a pure relocation is refused unless the owning guard changed in the same diff #2856 claim-literal ratchet refuses every CHANGELOG relocation without a guard edit — named blocker, C7.
Activity
noahgift commentedon Sep 22, 2026
Added: #3532's surviving half — a 5 GB model taking 23.1 GB, gated by nothing
Half of #3532 closed tonight by measurement, and the other half is an epic item.
#3532 reports two things about qwen3-8b Q4_K_M on CUDA sm_89:
apr qa golden_outputEmpty, and 23.1 GB peak VRAM for a 5 GB model. The 0.69.1 lambda ladder run (sm_89 = RTX 4090 = lambda,apr 0.69.1 (87d9d5484)) measured:So the
golden_output Emptyhalf is fixed — by the FP8 per-token/per-channel scaling fix (0c85942dd), d8's F16+IQ4_XS GEMV kernels, and #3850's refusal-instead-of-silent-Q4_K, all folded in this batch. That half of #3532 should close against this receipt.The VRAM half is untouched and nothing gates it. A 4.6× memory multiplier is the reason a model "works" on a 24 GB card and is unusable on a 16 GB or 8 GB one. It is invisible to every gate we have, because the ladder asks did it produce correct output and never at what cost:
Blast radius 3 rather than 4 because it does not ship wrong output — it ships a model that will not load on smaller silicon while every gate reports green. Two corroborating measurements from the same batch: the UD 4B hybrid reads 9.8–9.9 tok/s against a 10 tok/s floor on yoga's 4060 and 162 tok/s on the same card for the pure-F16 0.5B, which is memory pressure on the smaller GPU showing up as a throughput coin-flip on the only gate that can see it. A VRAM ceiling would name the cause directly instead of letting it surface as a flaky throughput row.
On whether #3532 blocks the tag. It does not, and the reasoning matters because the operator rule is absolute: ALL Q4_K models must work on CUDA on gx10 AND lambda before any release, with no optional clause. Tonight qwen3-8b works on lambda — measured, not asserted. A model that works while consuming 4.6× the memory it should is a defect, not a violation of that rule. It goes in the epic; it does not hold the bus.
Two process notes attached to this item, because they are the reason it was nearly mis-ruled:
required: false— andcheck_model_ladder.shnow REFUSESrequired: falseon a Q4_K rung for that reason. The ticket's own framing predates the refusal that exists to prevent it.Refs #3532, #3712
noahgift commentedon Sep 22, 2026
Added: two detector gaps for the instrument errors themselves (#3864, #3865)
Filed by aprender-5e during the 0.69.1 batch. Neither arms a guard — both are tickets for detectors that do not exist, deliberately not written mid-release, which is the correct call and the second override rule of this epic applied to itself.
rc=$?after a pipeline — the CLAUDE.md #1 defect, undetected (#3864)"$var:path"in a git-ref position (#3865)Blast radius 1 — these produce wrong local answers, not shipped defects. Their EV is high anyway, and the reason is the frequency term: #3864 was committed three times tonight, by two different agents, every one of whom knows the rule by name.
check_no_pipe_into_grep_q.shis its narrow cousin (a pipe intogrep -qunderpipefail); the general formcmd | other; rc=$?has no detector at all.The instance that shows why discipline is not the fix. c7 hit #3864 inside the very command that was verifying 5e's zsh trap:
git cat-file -e … | head -1; echo "rc=$?"printedrc=0for both a valid and an invalid ref, so the first run reported that the braced and unbraced forms agreed — the exact opposite of the real finding. It was caught only because one form had printedfatal:and the other had not, contradicting the identical rc.That is the method this whole epic is currently relying on: noticing that chatty output disagrees with a number. It works, it caught roughly a dozen instrument errors tonight, and it fails silently the moment the command is quiet. Every catch tonight came from an internal inconsistency in the output, never from suspicion about the method. That is not a process we should keep depending on.
#3865 already cost something: a false
ABSENTreport to this session aboutcontracts/apr-model-capability-v1.yaml, which was present. zsh reads:cin"$r:contracts/…"as a modifier, so the ref becameorigin/release/0.69.1-batch-2ontracts/…,git cat-file -ereturned non-zero, and the loop printed ABSENT — a sound predicate pointed at a mangled ref. An exit-code test does not protect you from testing the wrong thing. The ticket carries the measured prefix table, withcrates/andcontracts/flagged as both silently corrupting and both starting withc, which is this repo's specific bad luck (8 of 10 common prefixes corrupt silently).Both tickets say the hard part is the must-NOT-match set, not the detector — #3865 must tell a git-ref position from an ordinary colon-bearing string, #3864 must not flag
rc=$?after a non-pipeline. That is rule 7 of Verification Discipline (guard regexes ship a case table; theapr-invocation patterns were wrong five times and every one was caught by the table, none by review), stated in the ticket rather than discovered by whoever picks it up.One detail worth keeping from #3865: it flags
"$r:$p"as a must-match row even though that form currently works, because a form that is correct by accident survives review and breaks on a refactor. Same reasoning as item 1's note that a green is indistinguishable from a working gate without a red.Refs #3864, #3865
noahgift commentedon Sep 22, 2026
Added — item 9: both halves of the tensor-layout defence are declared and neither operates
Found by aprender-5e. This is now the strongest item on the epic, and the only one where a copy of the false claim ships to crates.io.
contracts/tensor-layout-v1.yaml— the file CLAUDE.md names SOURCE OF TRUTH for LAYOUT-001/002, the bug class it says "has occurred 100+ times" — asserts a compile-time impossibility. Verbatim fromtype_enforcement.compiler_guarantee:The code,
crates/aprender-serve/src/apr_transformer/mod.rs:407:Claim 1 false (it is
Vec<f32>). Claim 4 false (it ispub). Claim 2 defeated independently byDeserialize— the struct constructs from serialized bytes with no constructor at all.ValidatedEmbeddinghas zero hits in every file undercrates/aprender-serve/src/apr_transformer/. The type still exists elsewhere; it is simply not whatAprTransformeris made of. The fiveenforcement_locationsare also pre-monorepo paths, all five absent as written.It ships
Four copies, all four containing
physically impossibletwice:The root
includelist carriescrates/aprender-core/contracts/but not the workspace-rootcontracts/, so this reads as internal-only at first glance. It is not:apr-cli/Cargo.tomlhasinclude: None, so cargo packages everything git-tracked under its crate root. That is the identical mechanism that made #3857 a false positive (apr-cli packages all 16model-families/*.yaml) — the accident that made #3857 harmless is what makes this one ship.Both halves, and they do not reference each other
layout_contract_enforcefns — incl.enforce_embedding_contract, documented "MANDATORY … prevents garbage inference output"type_enforcement.compiler_guaranteeAnd no copy of
tensor-layout-v1.yamlnames any of the sixenforce_*/validate_*functions, so the two declared defences are not even aware of each other.The conclusion is narrow and it is the sharpest statement of this epic's thesis: their silence has never been evidence about any model. Every green read from that direction was read from nothing.
Explicitly not claimed — that this explains #3791 (
HHHH…) or #3804 (CUDA gibberish). Those are GPU-path defects; this is load-path and type-level. The narrow claim is what makes it credible.Ranking and the split
AprTransformerhold validated types9a is pre-tag and doc-only. A missing guarantee makes someone check; a false one makes them stop checking — the same asymmetry as CLAUDE.md's "a shadowed artifact is worse than a missing one." Anyone debugging garbage output who reads this will eliminate unvalidated-embedding as a hypothesis on the strength of a Poka-Yoke claim that stopped being true. Zero behavioural risk to fix the text; real harm to ship it.
9b is not a release-night change — implementing type-level validation on the load path, on release night, on the bug class that has recurred 100+ times, is exactly the trade this epic exists to refuse.
The proof for 9a is inverted, and that is the finding
There is no gate to turn red, so the demonstration is the opposite:
pv validateandpv lintboth pass on this contract, today, with the false claim in it. Prose incompiler_guaranteeis unvalidated by construction, so a contract can assert a compile-time impossibility that the compiler flatly contradicts and every gate stays green. That generalises well past this file and belongs with item 2.Refs #3852, #3857, #3860
noahgift commentedon Sep 22, 2026
Two items for this epic, from the #3769 cookbook-pin work (aprender-45):
#3866 — a must-RED self-test row returns GREEN.
check_readme_claims.sh --self-testis rc=1 on a pristine tree (6/7 rows). The failing row is row 4, which exists specifically to prove the guard discriminates under--exact, and it returns rc=0.Mechanism, in three layers: the script has two contract counters measuring different populations (
census.json .n_files= 1831 vscontract_files_onlyover a git archive = 1832; a plainfindgives a third figure, 1885). It attributes that gap to "UNCOMMITTED working tree vs merge tree" on a tree that is clean. Andcensus.json'sgit_sha— the one field that would settle whether the census is stale — is null, so "the census is stale" is an unverifiable guess.The consequence: row 4 builds its fixture as
cc - 1= 1831, which coincidentally equals the other counter, so the uncommitted-tree allowance accepts it and exits 0. Run the same scenario by hand against a fixture built from the census counter and it goes RED correctly. The row is disarmed only while the two counters differ by exactly one — so it will flip back to green on its own and hide whatever it was meant to catch.Contains the smaller item too: the stale/undatable
contracts/census.json(1831 vs HEAD's 1832, nogit_sha). Filed as one ticket because the census gap is the cause of row 4's disarming rather than an independent defect; happy to split if you'd rather have two rows.Not fixed: row 4 needs someone to establish what it used to catch first. "Make it red again" without that is how you get an over-strict row that gets deleted the next time it fires.
#3867 — README.md is gated in a REGION and the boundary is invisible. The scope defect behind #3769. Enumerating the file takes two minutes and finds three more drifted claims, two of them inside the same
At HEADtable as the gated ones (Book CLI chapters 112→113, Book lib chapters 71→72), plus a tree diagram claiming "82 crates total" which matches neither the gated 79 nor the 84 directories. Requires an enumerator whose anti-vacuity control is written first — one that finds zero claims and reports "all 0 gated" ischeck_package_includes.shreborn.fix(#3863): anchor the capability contract — the ont ratchet regressi…
noahgift commentedon Sep 22, 2026
Added — item 10: 27% of contracts' assertions never reach the compiled code
Measured by aprender-c7 while answering the
pv codegenresolution question. This is the purest instance of the epic's thesis on the board, because it is not one gate that cannot fail — it is the contract system's entire runtime-assertion layer, silently 73% wired.108 contracts' assertions are missing from the compiled crate. Not cosmetic:
macro_rules!2606 vs 3525,debug_assert!678 vs 810.And it is stratified — five different vintages, none current:
Each crate's
generated_contracts.rswas regenerated at some past moment and frozen there. They are tracked artifacts — which contradictsaprender-db/build.rs:65's own comment calling them gitignored — produced by a manual command, and nocheck_*guard asserts that any of them is current.So contracts are authored,
pv validated,pv linted, scored, and their preconditions simply never reach the code for 27% of the corpus. Every green from that direction was read from a frozen snapshot of an older contract set.The guard shape already exists in this tree and is proven: #3077's doc test regenerates and compares (
gpu_support_doc::the_committed_doc_matches_the_capability_gate), and 45's release-section renderer and c7's capability mirror both use it with mutants in both directions. 10a is that pattern applied togenerated_contracts.rs. Deliberately not built mid-release — a new guard on release night is the trade this epic refuses.The good news, and it removes the emergency from #3860
The layout contract has NOT forked into compiled code. Answered by observation rather than by reading the path join:
The crate-local contracts carry no pre/postconditions or invariants, so they cannot be the source of any
generated_contracts.rs— not "probably weren't." So the 154 divergent crate-local copies are dead weight, the fix is deletion or an enforced mirror, and #3860 is cleanup rather than a correctness hazard. Severity down an order of magnitude from where it was scoped.Method note worth keeping: c7's first attempt at this question used falsification IDs as the discriminator — they appear in neither generated file, so it returned 0 hits for everything. A sound predicate pointed at the wrong input, which is tonight's dominant failure mode (items 7 and 8). The planted-difference / regenerate-and-compare test cannot fail that way, which is why observation was the required method rather than the preferred one.
Also closed: the ont ratchet regression (#3863 item, resolved)
unanchored_but_bindable298 → 297, ratchet PASS, verified by running it rather than reasoning about it. The disjunct wasnames a filevia^[[:space:]]*(file|path|source_file):, matching twopath:keys nested insideop_implementationrows — the contract's evidence, not its subject. c7 declared the real subject with a top-levelentity:block instead of deleting the two lines, and said why: deleting measured evidence to make a number go down is the move this epic exists to refuse.The predicate over-match stays here as a candidate: any contract with an evidence table naming source files counts as "bindable" forever. That is a guard-regex case-table question (rule 7 — the
apr-invocation patterns were wrong five times, every one caught by the table and none by review), so it needs a must-match/must-not-match set, not a patch.Refs #3077, #3860
feat(layout): per-architecture expectations for enforce_matmul_contra…
noahgift commentedon Sep 22, 2026
Item 5b, measured in full —
reverse-coveragehas THREE defects and cannot armaprender-55 re-ran #2797's premise. The mirror gate now exists (
pv lintGate 7: reverse-coverage). It cannot arm.or; the code meansand. An operator who follows the instruction — supply either flag — gets the identical line back telling them neither was provided.NotArmed. Row C produces a number and the run's own summary still reads11 armed; not armed: reverse-coverage. The one gate that answers the ticket's question gates nothing by construction.pv lintinvocations across.github/workflows/,scripts/and theMakefilepass--bindingor--crate-dir.check_contract_test_binding.shrunspv lint contracts --strict-test-bindingwith no binding. There is no path, PR-time or otherwise, on which this gate runs.--bindingpointing at a nonexistent path is accepted without error.And the number it exists to produce cannot be read:
208/4344 bound (68.3%). 208/4344 is 4.8%. The fraction and the percentage on one line disagree by more than an order of magnitude — possibly two denominators printed as one statistic. Not asserting which is right; asserting that as printed it is unusable.This raises 5b's cost estimate from 2h and splits it: the
or/andbug and the flag plumbing are small; deciding what the gate should arm on, and fixing a statistic that contradicts itself, are not.Item 11 —
pv scoreunderstates every contract by a letter grade, corpus-wide (#2704)Same contract, same commit, one flag: C becomes B. And the amplification the ticket does not state:
The flag does not reach the lint score gate. So the corpus-wide score our own release gate publishes is the no-binding scoring, applied to all 1,831 contracts. (Not claimed: that D5 is the sole cause of 0.48 — that needs the per-dimension breakdown. Claimed: the gate does not honour
--binding, and on a bound contract that costs a full grade.)reverse-coveragecannot arm (4 defects + an unreadable statistic)pv score/ lint score gate ignore--bindingcargo_classify.shwired to nothing (#2775)#[contract]fails open in 4 places, doc says the opposite (#2699)SmoothL1Lossdetached from autograd — silent zero gradient (#3034)Item 14 is the highest blast radius on this epic.
crates/aprender-core/src/nn/loss.rsmaps to a rawVec<f32>then builds a freshTensor, so anything trained with that loss receives zero gradient from it, silently. That ships wrong behaviour to users and nothing reports it.Item 13's module doc still states the opposite of its code: "Missing env var = compile error" against
const #const_name: Option<&str> = option_env!(#env_key);, which yieldsNone. Plusread_contract_assertionsconflating "no contract" with "no data" via.unwrap_or(0), andmake_env_keystill private so every producer re-derives the key. Same family as item 9 — a doc asserting an impossibility the compiler contradicts. Note for whoever takes it::356documents that a missing binding emits a compile-time warning, i.e. fail-open by design, so four defects sit beside a fifth that is policy. That distinction matters to the fix.Item 15 — the ticket board's open/closed state does not measure the tree
15 premises re-run. All four retirements — #3532, #3314's anonymous half, #2526, #2828 — were fixed under OTHER work, and not one was closed by the ticket that described it. Zero decayed on their own. Four for four.
check_complexity_ratchet.sh, whose own header documents The pre-commit complexity gate is unsatisfiable: it measures FILE totals against per-function thresholds, freezing all 10 most-complex files #2526's exact defect, "a pull request may LAND a function at cognitive 69". Fixed, ticket open.guard-runner-labelsno longer exists;guard-cargonow owns a per-run-guardsdir by construction.So the board measures who wrote a comment, not what is true of the tree — and #3314 proves it in both directions at once: closed while still mostly true, half-fixed by a ticket that never referenced it.
The sweep's product is therefore not a stale-ticket cull. It is a list of fixes that shipped without their ticket noticing, plus a longer list of premises that are simply still true (11 of 15).
Fourth override rule (from 55): an empty result is a claim about the instrument until proven otherwise
Four times tonight an empty result nearly became a finding, and on #2828 it would have produced a wrong finding rather than a missing one: a grep for
run-\$\{GITHUB_RUN_ID\}-guardsreturned 0 because the workflow uses${{ github.run_id }}. Also: zsh not word-splitting an unquoted$ain an arg matrix produced four empty rows that read as clean negatives, andgit show "$R:crates/..."fused ref and path via:cthree separate times.Refs #2526, #2630, #2699, #2704, #2775, #2797, #2828, #3034, #3314, #3320
noahgift commentedon Sep 22, 2026
Five more override rules, all earned in one session
These are not items to fix. They are the rules that produced every finding on this epic, and each one was learned by someone getting it wrong first.
5. Compiling is not wiring — and one string count is uninterpretable
aprender-c7's first build of the
/v1/completionsfix was dead code. The insertion script died partway: theincludelanded, the call never did.cargo buildclean,clippysilent,fmtclean — and the probe still returned 503. "Still 503, so the diagnosis was wrong" was right there to be reported.What named it was not a test:
The arm's error string present and its discriminator absent is only possible if the code is compiled and unreachable.
The pair is the instrument. One count is uninterpretable —
0could mean not compiled, optimised out, or never written. Two counts, one on a path that exists either way and one that exists only if reachable, localise the boundary. This generalises to every "I applied the fix and nothing changed" moment, of which this session had four: an unappliedsedmutant, agrep-shell-function mutant table that changed nothing while reporting KILLED, a coverage extractor that returned its own threshold, and this.6. A mutant that fails to BUILD is a kill wearing a kill's clothes
aprender-55's harness distinguishes three outcomes where most tables have two: KILLED, NOOP (the mutation did not apply) and NOBUILD (it applied and the crate will not compile). A NOBUILD turns the control red for free and reads exactly like a kill.
Found live: a planted deletion removed the condition of an
if let, leavingif let Some(r) =with no expression. The right mutation was a runtime bypass — substitutingOption::<T>::Nonefor the call — which tests the thing actually under test rather than the compiler.7. Assert the field, never the position
A control that explicitly asserted non-empty text still passed the empty-text mutant, because it asserted on the last line of the response and the last line became the
idline once the text collapsed. A value assertion pointed at a position degrades into a shape assertion in precisely the case it exists to catch. Parse the structure and read the field.8. A threshold is not the whole hazard — find the other variable
The ladder's zero-width-space check fails open on a match:
producer | grep -qunderpipefailtakes the producer's status, andgrep -qcloses the pipe on first match, so the producer dies with SIGPIPE and theifgoes false because the check succeeded. Measured threshold: ~10,000 lines.Reproducing it failed — until the match moved from the last line to the first:
With the match last, the producer has already written everything before the consumer exits, so the defect never fires at any size. The hazard is not the line count — it is how much output remains after the match. Both framings agree at n=1 and diverge everywhere else, and the realistic shape (an escaped character in an early prompt line of a verbose run) is the failing one. "Could not reproduce, fix is precautionary" was one keystroke away.
9. A correct verdict with a wrong reason survives review
Two instances in one ladder run (#3872). A refusal reporting
GGML type 1for a tensor that is IQ3_XXS (18) — with1being in the whitelist, so the message is self-refuting against the predicate that emitted it — and aBackendUnavailable(rc=14) asserting a host property that twenty rows in the same receipt refute.Both verdicts were right. Both reasons were wrong, and wrong in the expensive direction: one pointed at a whitelist that had just been correctly extended, the other at the CUDA installation. Nobody audits the reason on a red row, because red is what they expected.
And the one that is a work item, not a rule
The ladder computes the cause and throws it away.
apr qareportedTensor Contract ✗ FAIL (27 tensors failed data-quality)on the-st.aprrow, in the same process, from the same file.model_ladder.sh:351records onlycapability_match + golden_output, so the receipt carriesgibberish (fragment "NavController" repeats 3+ times)— the symptom — and drops the diagnosis.qa_rc: 5is the tell that qa failed for more than the recorded gate.One more key out of JSON the ladder already parses turns an observation into a diagnosis. Cheapest item on this epic.
Session tally, for calibration
Roughly a dozen instrument-or-author errors across five sessions, against about six real defects. The errors were made by people who knew the rules by name — the
$?-through-a-pipe rule was violated three times in one night by two agents who can each cite its ticket number.Every single catch came from output visibly contradicting itself — a histogram with no F16 in it, an rc that disagreed with twenty sibling rows, a printed count that contradicted its own rows, two string counts that could not both be true. Not one came from anyone doubting the method. That is the argument for this epic, and it is also the reason none of the rules above are "be more careful."
fix: the three post-fold failures — entity TYPE, a stale doc, and a t…
fix(ratchet): give back the cognitive level #3874's arm added to comp…
fix(#3863 item 16): the ladder recorded the symptom and dropped the d…
noahgift commentedon Sep 22, 2026
Three more shapes, and two of them are new kinds
10. A gate whose SUBJECT does not exist
aprender-d8's first re-aim of the parity refusal guard scanned ggml type ids
0..=39for "a type the GPU has no kernel for" and went GREEN — on id 4, which is Q4_2, one of eight ids upstream REMOVED (ggml_type.rs::REMOVED_IDS = [4,5,31,32,33,36,37,38]).The refusal genuinely fires on it. So the row would have asserted, permanently and truthfully, that parity refuses a type no GGUF on earth can contain.
Every other instance on this epic has a real subject and a wrong claim. This one had a correct claim about nothing. It was caught only because d8 probed which type it picked rather than trusting the green — a green with no subject is indistinguishable from a green with a subject, from the outside.
The fix generalises: the guard now asks the production refusal which type to use, over
GgmlType::ALL("every LIVE variant"), so it self-heals — give the current pick a kernel and it moves to the next uncovered type, and it fails only when every live type has one, with a panic that says to delete it. A guard that names its own example outlives the example; one that derives it does not.11. A fix that is correct, proven in both directions, and INSUFFICIENT
d8 fixed the golden gate's hardcoded stop token (item below), proved it red in both directions across all four local GGUFs, and kept measuring.
apr qastill failed, and its displayed text was truncated so the output looked shorter than before:512 of budget, 512 consumed. "The fix landed and the symptom shrank" was available and wrong. The second cause:
golden_prompt_forkeys the chat template ongeneral.architecture→"llama"→ Llama-2[INST], whiletinyllama-1.1b-chat-v1.0's GGUF declares Zephyr (<|user|>). Same binary, same model, one variable:tinyllama is a correct model being asked the wrong question by the gate, twice, in the same defect class both times: a constant keyed on architecture where the model carries the answer in its own metadata.
12. An assignment naming a sha only one worktree holds — and it fails QUIETLY
The cop assigned another host a commit that existed only in a local worktree. c7's first fetch on gx10 reported the sha NOT FOUND while leaving the worktree at an unrelated commit — so a driver checking the fetch's exit code but not the resulting HEAD would have built and measured the wrong tree, produced a well-formed receipt, and reported it under the assigned sha.
apr_bin.shwould have pinned correctly to the wrong commit, and nothing downstream checks the tree.Same family as #3784 ("the receipt's identity is the binary that ran") reached from the other side: not a stale binary, but a stale tree the binary honestly reports.
Rules: push a sha before assigning it to another host, or say "pull from my worktree" — and a fetch that reports NOT FOUND is a hard stop, because the worktree it leaves behind is a plausible-looking wrong answer.
And the one that was a tag blocker for two hours
apr qa's golden gate hardcodedSpecialTokens::qwen2()—eos_id = 151645— as stop tokens for every model. tinyllama declaresvocab=32000, eos=2, and 151645 is not a token id that exists in a 32000 vocabulary, so the stop condition was not late or wrong but unreachable. Perfect correlation across the local cache, with a mechanism that explains it:The release's first-tool-for-any-issue gate was structurally Qwen-only, and it silently mislabels every non-Qwen model it is ever pointed at. It also explains the observation that started the investigation: both legs hardcode the same wrong constant, which is why GPU and CPU output were byte-identical — read at the time as "the backends agree, so the defect is elsewhere", when it was the signature of a shared upstream cause.
SpecialTokens::qwen2()call sites in apr-cliItem 19 is a scoping correction worth reading.
IQ4_NLwas scoped (by the cop) as "a small addition against an existing sibling, since the lookup table already exists." It is not.iq_dispatch.rsis built onIQ_BLOCK_ELEMS = 256hardcoded into the matvec arithmetic (blocks_per_row = in_dim.div_ceil(256),col0 = b*256), and IQ4_NL is 32 elements / 18 bytes. AddingIQ4_NL => Some(18)to the block-size table would makeblocks_per_row = in_dim/256and silently under-read each row 8× — garbage, not an error. That isresolve_qtype().unwrap_or(Q4K)(#3850) one layer along: a plausible wrong answer where a refusal belongs, caught before the arm was written rather than after it shipped.80 remaining items
noahgift commentedon Oct 14, 2026
Folded into this epic's checklist from #2876 (same theme; text kept verbatim; owner owner:aprender-a7 keeps the work).
Original text of #2876
Mechanism. An arm, validator or gate is handed an input that carries nothing to judge — an empty band set, a zero comparator median, a profiler with zero bricks, a
methodstring with no vocabulary, a workload label bound to nothing, a proof count with a 12× margin — and answers PASS (or a Python traceback) because the loop body never runs, the predicate is vacuously true, or the check tests presence rather than value. The opposite polarity is often armed (a missing denominator FAILS loudly), which is what makes each instance a gap rather than a design.The one structural fix. Every gate declares, per arm, the input shape it needs and REFUSES by name when the shape is absent —
SKIP (precondition: …)or FAIL, never a silent pass; a validator refuses a non-positive or empty statistic on either side with the same sentence; self-tests carry an empty-input row for every arm (PP-066 §9: 'poka-yoke — refusal table derived, never authored'). PP-066 C0 names the first instance (#2830) as a release criterion; the class is what C0's polarity rule generalises.Instances (one line each):
arm_a_scalingemits nothing on a c=1-only receipt and the gate returns VERDICT PASS (blocks C0).parity_block.pydivides by a zero COMPARATOR median → traceback, not a verdict (the subject side refuses by name).methodpasses;counts_*read by nothing; no comparator-vs-measured comparison (blocks master row 7 / C1).--workloadis a free-text label; a 1-prompt run is recorded as W1 and nothing can falsify it.apr cbtop --ciexits 0 on a report withbrick_scores: []and grade F (all_passvacuous on an empty vector).count >= families*3(578 ≥ 48): deleting eight of nine unconditional proofs stays GREEN.Rows. C0 (required check readable/strict; #2830's polarity), C4 (post-publish parity block on four hosts), master row 7 (JOIN), master row 15 (gx10 shakedown).
Members (parented here): #2730, #2732, #2735, #2756, #2816, #2830
PP-066 triage 2026-09-05 (issue #2873); ledger
docs/audits/pp-066-triage-2026-09-05.md.Folded sub-tickets (TRIAGE-100, 2026-10-14)
These open sub-tickets were folded here as checklist rows and closed as not planned so the open count stays at or under 100. Reopen one when its work resumes; an open PR for it reopens it.
1c/2730-cbtop-vacuous-pass)d1/3544-verify)fix/5212-silicon-5xx-retry)fix/5226-qa-all-skipped)Merged in (TRIAGE-100, 2026-10-14)
From #5307 — Gate honesty: checks that pass with nothing measured or judge the wrong commit
c1/3846-into-b2)fix/5048-compute-zero-tests)PMAT-5064-cells-selftest-rows)Folded P0 and operator-worded rows (TRIAGE-100, 2026-10-14)
These tickets were folded here by the cop ruling of 2026-10-14 (sub-rows of this master). Each keeps its priority and its owner. The operator text each carried is quoted below exactly as written; if an owner objects, the ticket is reopened.