Repository navigation
EPIC S3 standing: Debt Ratchet #3997
Description
owner: aprender-df (re-owned 2026-10-09 by clerk aprender-3e for cop aprender-13: holds the parked #2378 fixup, the only child with live work)
Spec: APR-EPIC-001 §2 · Epic: S3 · Train: standing · Successor at cut: —
Theme
Debt Ratchet
done_when
clippy member baseline → 0 by 0.74; .unwrap() sites → 0; binary debt ledger falls; coverage floor ratchets up.
Budget
At most 3 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.
Absorbs
Prior body
Operator declaration (verbatim, 2026-09-23)
lets also declear a "rachet" to clean up technical debt lets assume 5 releaes to clear up 80% of debt. The issues; Code coverae needs to be closer to 95%, and we can use YOGA nightly CUDA coverage sharded, etc. B. we need actual "pv" contract enforcement at deepest level. C. We need to merge in the pv ontology spec fully. D. we need to purge the backlog of branches, tickets, pull requests and have all open tickets assigned to a release number. the unassigned queue is not allowed anymore, and open/stale pull requests are not allowed. First quorum research this, then apply in equal portions to .70, .71, .72, .73. .74
The ratchet
Five releases, 0.70.0 → 0.74.0, clear ≥80% of the measured debt, in equal portions (~16% of the baseline per release). Each release's gate refuses a regression below the previous release's level. It's a ratchet, not a target.
| Pillar | Baseline (to measure) | Ratchet end state (0.74.0) | Notes |
|---|---|---|---|
| A. Coverage | 88.78% line (coverage-nightly 2026-07-29, COV_FLOOR := 88) |
~95% line | CUDA code is dark on CPU CI: use yoga nightly CUDA coverage, sharded (plus gx10 and lambda), merged into one report. Floor rises by equal steps per release |
| B. pv enforcement at the deepest level | to measure: contracts with placeholder preconditions, #[contract] density, obligations with no falsifier |
contracts bind at the function (#[contract]), and pv gates run on every PR |
see Rule 7: coverage and contracts co-evolve |
| C. pv ontology spec (ONT-001) fully merged | 13/27 rows bound (48%) per infra-83, infra main 29a84779d |
27/27 bound (+ ONT-4c5) | the spec lives in paiml/infra; aprender rows are bound through the ledger |
| D. Zero backlog | 715 open issues (121 with no milestone, 298 in backlog), 57 open PRs, 3,328 local branches, 646 worktrees, 2,594 remote branches (2026-09-23 09:50Z) |
every open issue carries a release milestone; no unassigned queue; no stale PRs; merged/dead branches purged | new rules: an issue with no milestone is refused (triage gate), and a PR idle > N days is refused (stale-PR gate) |
Step 1: quorum research (before applying)
The quorum answers, with evidence:
- The measured baseline for each pillar (commands, not quotes).
- What "80% of debt" means per pillar, as a countable unit.
- The per-release slices (equal portions across 0.70–0.74), each with its gate and threshold.
- The yoga/gx10/lambda sharded CUDA-coverage design (runtime, shard count, merge method, GPU-lock interaction; see paiml/infra#1146).
- The new refusal gates for pillar D (the unmilestoned issue, the stale PR), including a first-green proof.
Step 2: apply
A child issue per (pillar × release), milestoned 0.70.0–0.74.0, after operator review of the quorum's plan.
Parked
Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).
- Nightly coverage report #2307 Nightly coverage report — over S3 budget (rank 41/142)
- pmat score reports Composite 0.0/F while 3 of 8 dimensions have never been recorded #2463 pmat score reports Composite 0.0/F while 3 of 8 dimensions have never been recor — over S3 budget (rank 54/142)
- APR-MONO consolidation debt: 126 verified findings — a member that will not compile, 9 orphans, guards scanning the wrong directory #2470 APR-MONO consolidation debt: 126 verified findings — a member that will not comp — over S3 budget (rank 55/142)
- probar has no browser driver and 1,741 tests that never compile — the Playwright-killer claim is not supported #2473 probar has no browser driver and 1,741 tests that never compile — the Playwright — over S3 budget (rank 56/142)
- entrenar audit/monitor return hardcoded constants — do not wire them into apr #2477 entrenar audit/monitor return hardcoded constants — do not wire them into apr — over S3 budget (rank 57/142)
- Four excluded crates cannot be loaded by any cargo command (metadata exits 101) #2492 Four excluded crates cannot be loaded by any cargo command (metadata exits 101) — over S3 budget (rank 58/142)
- apr eval --task: 8 of 10 dispatch arms are reachable but undocumented in --help #2584 apr eval --task: 8 of 10 dispatch arms are reachable but undocumented in --help — over S3 budget (rank 12/142)
- Two apr bin targets duplicated by hand, not shared — already diverged on the dhat global_allocator #2585 Two apr bin targets duplicated by hand, not shared — already diverged on the dha — over S3 budget (rank 13/142)
- Crypto surface (keygen/encrypt/decrypt/sign) has 0% coverage and 17/17 UNKNOWN hardware #2590 Crypto surface (keygen/encrypt/decrypt/sign) has 0% coverage and 17/17 UNKNOWN h — over S3 budget (rank 14/142)
- Code-quality report from an automated pmat 3.32.0 sweep (informational) #2614 Code-quality report from an automated pmat 3.32.0 sweep (informational) — over S3 budget (rank 33/142)
- An ancestor .cargo/config.toml [patch.crates-io] reddens the facade --locked guards locally while CI is green — and invites committing 44 lines of [[patch.unused]] churn #2615 An ancestor .cargo/config.toml [patch.crates-io] reddens the facade --locked gua — over S3 budget (rank 34/142)
- test_discover_tools_no_tools_array is flaky 2/3, and ci.yml documents nextest [profile.ci] as retries=0 when the file says retries=2 #2616 test_discover_tools_no_tools_array is flaky 2/3, and ci.yml documents nextest [p — over S3 budget (rank 35/142)
- QUAL-015: retire regex shell-scanning — 16 failures in one programme; the pin scanner needs a parser-grade replacement #2653 QUAL-015: retire regex shell-scanning — 16 failures in one programme; the pin sc — over S3 budget (rank 15/142)
- RCPT-1: a NO-GO receipt cannot explain its own RED — the note is the first error-ish line anywhere, and WORKLOG is trap-deleted #2663 RCPT-1: a NO-GO receipt cannot explain its own RED — the note is the first error — over S3 budget (rank 16/142)
- Six untracked audit findings from #2644: two shim-check universe gaps and four run-idempotency defects #2664 Six untracked audit findings from fix(dogfood): ONE runner — merge both hardenings, then GATE the rule that had been rediscovered five times (#2640) #2644: two shim-check universe gaps and four r — over S3 budget (rank 17/142)
- perf(serve): prefill is 3.64x behind llama.cpp — 2,860 vs 10,399 tok/s, same GGUF, same GPU #2693 perf(serve): prefill is 3.64x behind llama.cpp — 2,860 vs 10,399 tok/s, same GGU — over S3 budget (rank 18/142)
- apr cbtop accepts --warmup 0 while rejecting --iterations 0, and the JSON receipt records neither #2731 apr cbtop accepts --warmup 0 while rejecting --iterations 0, and the JSON receip — over S3 budget (rank 19/142)
- prompts-w2.jsonl has no _meta header at all: §4.3.2's 40/30/20/10 and 40/40/20 mixtures are enforced by nothing #2782 prompts-w2.jsonl has no _meta header at all: §4.3.2's 40/30/20/10 and 40/40/20 m — over S3 budget (rank 59/142)
- pmat has no TDG analyzer for .sh: 3 of §3.A's 4 arrays are empty for lack of coverage, and the receipt cannot say so #2798 pmat has no TDG analyzer for .sh: 3 of §3.A's 4 arrays are empty for lack of cov — over S3 budget (rank 20/142)
- [~]
apr mis-tokenizes <|im_end|> after sentence punctuation: 4 junk tokens are fed to the model instead of the turn delimiter #2815 apr mis-tokenizes <|im_end|> after sentence punctuation: 4 junk tokens are fed t — over S3 budget (rank 4/142)(reopened 2026-09-25, retro quorum split) - [~]
BLOCKER: no W1 cell is producible on the comparator lane in either mode — streaming reports prompt_tokens=0, non-streaming reports 534 against a 512 ± 8 band #2817 BLOCKER: no W1 cell is producible on the comparator lane in either mode — stream — over S3 budget (rank 5/142)(reopened 2026-09-25, retro quorum split) - wgpu decode on Metal is 0.123 tok/s (8.14 s/token) — mini's W1 cell cannot carry a meaningful metal ratio #2826 wgpu decode on Metal is 0.123 tok/s (8.14 s/token) — mini's W1 cell cannot carry — over S3 budget (rank 60/142)
- S4.4.4 bootstrap CI is implemented with zero callers — no ci block or seed reaches any receipt, and the absence is undeclared #2832 S4.4.4 bootstrap CI is implemented with zero callers — no ci block or seed reach — over S3 budget (rank 21/142)
- GB10: a ~33s device-wide stall during one W1 c=8 replicate — 8 requests at 41.46s vs an 8.65s median, one window quarter produced zero tokens #2834 GB10: a ~33s device-wide stall during one W1 c=8 replicate — 8 requests at 41.46 — over S3 budget (rank 36/142)
- PARITY: the 10.34x gap was measured on a build with batching compiled out — re-baseline first #2844 PARITY: the 10.34x gap was measured on a build with batching compiled out — re-b — over S3 budget (rank 22/142)
- gx10 c=1 decode is 6.2 tok/s — 10.6% of the bandwidth roofline; verify compute_class and gpu_layers_resolved #2846 gx10 c=1 decode is 6.2 tok/s — 10.6% of the bandwidth roofline; verify compute_c — over S3 budget (rank 23/142)
- [~]
SafeTensors serve route drops(reopened 2026-09-25, retro quorum split)ignore_eosandseed: apr-cli's ChatCompletionRequest has no such fields #2853 SafeTensors serve route dropsignore_eosandseed: apr-cli's ChatCompletionR — over S3 budget (rank 6/142) - PP-LLAMA-001 W1 cpu lane at c=16: every request exceeds the protocol's fixed 120 s request timeout, so the harness records a zero rate and the block producer refuses the whole block #2855 PP-LLAMA-001 W1 cpu lane at c=16: every request exceeds the protocol's fixed 120 — over S3 budget (rank 61/142)
- I-1: master row 1: land #2809; Blackwell guard on prefill_multi_prompt (gpu_profile.rs::multi_prompt_prefill_allowed); perf041 in cuda-nightly.yml with missing marker = RED; PP-26 witne #2882 I-1: master row 1: land fix(cuda): arm FALSIFY-CB-008 — the rule that forbade #2753 could never run (#2753) #2809; Blackwell guard on prefill_multi_prompt (gpu_prof — over S3 budget (rank 62/142)
- I-15: gx10 shakedown cell: W1, n>=5 interleaved, at a commit containing 0b, 0c, 1, 6, 7, 12 -> a new LEDGER row #2883 I-15: gx10 shakedown cell: W1, n>=5 interleaved, at a commit containing 0b, 0c, — over S3 budget (rank 63/142)
- I-18: lambda reference cell: W1, n>=5 interleaved, both lanes, derived ladder, armed_by set for every band that PASSES #2884 I-18: lambda reference cell: W1, n>=5 interleaved, both lanes, derived ladder, a — over S3 budget (rank 64/142)
- I-16: W3 open-loop workload (report row 19, master row 16) #2885 I-16: W3 open-loop workload (report row 19, master row 16) — over S3 budget (rank 65/142)
- I-17: W4 token sweep (report row 19, master row 17; expiry tightened 10-23 -> 10-16 as the blocker of S-2, v1.6 amendment) #2886 I-17: W4 token sweep (report row 19, master row 17; expiry tightened 10-23 -> 10 — over S3 budget (rank 66/142)
- C0-3: the ten contracts/work/GH-663..672.cot.yaml derivations exist (CB-1658), reconciled with PVI-3.1 (contracts/work -> .pmat-work) #2892 C0-3: the ten contracts/work/apr compare-hf --offline hangs instead of rejecting network operation #663..672.cot.yaml derivations exist (CB-1658), r — over S3 budget (rank 67/142)
- G-7: cargo_classify.sh wired into workspace-test: an ENV verdict (double-spawn ENOENT, vanished .rlib/.o, ENOSPC, dep-info ENOENT) fails the job with ENV: in the annotation and names no #2894 G-7: cargo_classify.sh wired into workspace-test: an ENV verdict (double-spawn E — over S3 budget (rank 68/142)
- G-5: check_target_universe.sh: for every workspace member (cargo metadata, root ∪ crates/facades) and every cargo target under the feature sets that compile it, the set CI builds/lints/ #2896 G-5: check_target_universe.sh: for every workspace member (cargo metadata, root — over S3 budget (rank 69/142)
- G-1: check_crate_names.sh: [lib] name == directory (- -> _) over the cargo-metadata member set (root 79 + facades 3); every other [package] manifest found by find (102 today) is a membe #2897 G-1: check_crate_names.sh: [lib] name == directory (- -> _) over the cargo-metad — over S3 budget (rank 70/142)
- G-8: ratchets block regressions, not edits (class #2879): the claim-literal ratchet admits a PAIRED MOVE without a guard edit (#2856 option 1: an added coordinate whose text equals, at #2898 G-8: ratchets block regressions, not edits (class Class: ratchets that block edits rather than regressions — frozen files, line-keyed baselines and ledgers where honest work is the most expensive path #2879): the claim-literal ratc — over S3 budget (rank 71/142)
- G-3: rename cost measured at HEAD: use-site count (review said 4,097 [A]) by the committed regex, pmat query as second estimator, dep-key and feature-string counts, sibling checkouts, c #2901 G-3: rename cost measured at HEAD: use-site count (review said 4,097 [A]) by the — over S3 budget (rank 72/142)
- R-0: [premises discharged: S0-7 CONFIRMED, S0-14 CONFIRMED] BackendRegistry: enumerate cpu/cuda/wgpu at startup from the machine (dlopen libcuda.so.1, wgpu adapters, cpu always); one pr #2904 R-0: [premises discharged: S0-7 CONFIRMED, S0-14 CONFIRMED] BackendRegistry: enu — over S3 budget (rank 73/142)
- R-2: [premises discharged: S0-14 CONFIRMED, S0-15 measured] W-I: cuda joins default features iff S0-14 passed on all four hosts (D-9) and only behind R-0; apr serve run --gpu refuses vi #2905 R-2: [premises discharged: S0-14 CONFIRMED, S0-15 measured] W-I: cuda joins defa — over S3 budget (rank 74/142)
- R-3: T-6 honest training banner: -m lora --gpu-backend cuda refuses or trains on the GPU; the cuBLAS-backward line prints only when a cuBLAS backward ran #2906 R-3: T-6 honest training banner: -m lora --gpu-backend cuda refuses or trains on — over S3 budget (rank 24/142)
- R-4: W5 CLI wall-clock workload, cold arm: apr run / ollama run / llama-cli for a 32-token completion; replicate count from measured CV; both hosts #2907 R-4: W5 CLI wall-clock workload, cold arm: apr run / ollama run / llama-cli for — over S3 budget (rank 75/142)
- R-5: apr-* assets for the 5 nightly.yml targets attached to every tagged release, built per D-10; sha256 + minisign-signed manifest (S0-19: public-key scheme); release cut as prerelease #2908 R-5: apr-* assets for the 5 nightly.yml targets attached to every tagged release — over S3 budget (rank 76/142)
- R-6: one-line installer served at /releases/latest/download/install.sh: detect OS/arch, download the matching asset from the latest non-prerelease tag, verify .sha256 and the minisign-s #2909 R-6: one-line installer served at /releases/latest/download/install.sh: detect O — over S3 budget (rank 77/142)
- R-7: README leads with the installer one-liner; cargo install aprender second; the backend line generated from the registry kinds #2910 R-7: README leads with the installer one-liner; cargo install aprender second; t — over S3 budget (rank 78/142)
- S-3: W-B bench: cargo bench batched Q4_K GEMV at M in {1,4,8} vs M in {16,32} cuBLAS GEMM; per-token time table; no kernel change; prediction t(M=4)/t(M=16) <= 1.3 registered before the #2919 S-3: W-B bench: cargo bench batched Q4_K GEMV at M in {1,4,8} vs M in {16,32} cu — over S3 budget (rank 79/142)
- S-3g: S-3 on gx10 (queue slot after T-0) #2920 S-3g: S-3 on gx10 (queue slot after T-0) — over S3 budget (rank 80/142)
- S-1: [premises discharged: master rows 6 and 9 LANDED per S0-2] W-A per-token host work out of the decode loop: one model.write() per step, embed on device, no per-slot try_send; AbReco #2921 S-1: [premises discharged: master rows 6 and 9 LANDED per S0-2] W-A per-token ho — over S3 budget (rank 81/142)
- S-2: W-C prefill without synchronous copies: pinned pre-allocated activation/KV staging, one async copy per layer, allocation outside the request; prediction copies+allocs < 10% of CUDA #2922 S-2: W-C prefill without synchronous copies: pinned pre-allocated activation/KV — over S3 budget (rank 82/142)
- T-0h: training-parity harness: train_parity.sh + receipt schema in evidence/train-parity/; recipe extended to Qwen2.5-7B-Instruct; interleaved A,B,A,B; clocks locked; requested vs effect #2923 T-0h: training-parity harness: train_parity.sh + receipt schema in evidence/trai — over S3 budget (rank 83/142)
- T-2: apr finetune --max-seq-len honoured or refused with one line and the refusal code on every path; the effective value printed and written to the receipt; the wgpu instruct pipeline #2924 T-2: apr finetune --max-seq-len honoured or refused with one line and the refusa — over S3 budget (rank 25/142)
- T-1: tau_loss for the canary dataset from Unsloth-vs-Unsloth seed variance (seeds 42,43,44), 200 steps; tau = 3 x MAD of final_loss; written into the dataset manifest with basis=seed-va #2925 T-1: tau_loss for the canary dataset from Unsloth-vs-Unsloth seed variance (seed — over S3 budget (rank 84/142)
- T-0: the four WT receipts: Unsloth QLoRA and apr finetune -m qlora on Qwen2.5-7B-Instruct, both hosts, n=5 interleaved, paired at the highest ladder rung apr completes; first two traini #2926 T-0: the four WT receipts: Unsloth QLoRA and apr finetune -m qlora on Qwen2.5-7B — over S3 budget (rank 26/142)
- T-3: training gate REPORTING + self-ratchet: train_tok_per_sec, peak_vram, |dloss|<=tau as WT cells in perf-matrix.yaml; ratchet seeded at the T-0 achieved value; arms only on the first #2927 T-3: training gate REPORTING + self-ratchet: train_tok_per_sec, peak_vram, |dlos — over S3 budget (rank 85/142)
- B-A1: hosts.intel.wgpu cell in perf-matrix.yaml: compute_class wgpu, status UNMEASURED with owner, expiry anchored on D-3 (S0-3 found two AMD W5700X + llvmpipe on intel) #2928 B-A1: hosts.intel.wgpu cell in perf-matrix.yaml: compute_class wgpu, status UNME — over S3 budget (rank 86/142)
- B-G1: check_backend_firstclass.sh: clauses 1-7 per backend computed from the tree (workflows, BACKEND_VALUES, perf-matrix.yaml, receipts, dogfood, formats, pins); prints N/7; FAIL if any #2929 B-G1: check_backend_firstclass.sh: clauses 1-7 per backend computed from the tre — over S3 budget (rank 87/142)
- D-2doc: qwen-train-canary README: the summary figure ("Gap vs unsloth: 2.5x") is derived from the table or deleted; the in-tree crates/aprender-train-canary/README.md carries the same tabl #2930 D-2doc: qwen-train-canary README: the summary figure ("Gap vs unsloth: 2.5x") is — over S3 budget (rank 88/142)
- D-1doc: [spec id D-1 in §5 Track D; keyed D-1doc here because D-1 is also a §0 decision id] docs/specifications/cuda-backend-architecture.md: PTX backend, sm_121 JIT, fused NF4 paths, cuBL #2931 D-1doc: [spec id D-1 in §5 Track D; keyed D-1doc here because D-1 is also a §0 d — over S3 budget (rank 89/142)
- W-B-kernel: multi-warp Q4_K GEMV, M in {1,4,8} #2939 W-B-kernel: multi-warp Q4_K GEMV, M in {1,4,8} — over S3 budget (rank 90/142)
- W-D: f16 KV + per-layer cosine witness; reserve from measured peak #2940 W-D: f16 KV + per-layer cosine witness; reserve from measured peak — over S3 budget (rank 91/142)
- W-E: scheduler: slots_admitted concurrent decodes under captured graphs, one graph per M-bucket or padding #2941 W-E: scheduler: slots_admitted concurrent decodes under captured graphs, one gra — over S3 budget (rank 92/142)
- W-G: GB10: NEON Q4_K GEMV; batched prefill default on sm_121 after master 21; pre-compiled kernels (trueno#203) #2942 W-G: GB10: NEON Q4_K GEMV; batched prefill default on sm_121 after master 21; pr — over S3 budget (rank 93/142)
- W-H: batch-invariant reduction; logprob margin on the wire (master row 22) #2943 W-H: batch-invariant reduction; logprob margin on the wire (master row 22) — over S3 budget (rank 94/142)
- W-F-attach: apr run attaches to a running apr serve; W5 resident arm #2944 W-F-attach: apr run attaches to a running apr serve; W5 resident arm — over S3 budget (rank 95/142)
- T67-1: pre-compiled sm_121 kernels for training (trueno#203) #2945 T67-1: pre-compiled sm_121 kernels for training (trueno#203) — over S3 budget (rank 96/142)
- T67-2: fused RMSNorm/RoPE/SwiGLU/chunked CE with their backward kernels (review 2.5) #2946 T67-2: fused RMSNorm/RoPE/SwiGLU/chunked CE with their backward kernels (review — over S3 budget (rank 97/142)
- T67-3: NF4-in-the-matmul: kernel design + registered per-kernel prediction (mma.sync + register dequant) before code; cuBLAS has no NF4 GEMM (seg-2 2.4) #2947 T67-3: NF4-in-the-matmul: kernel design + registered per-kernel prediction (mma. — over S3 budget (rank 98/142)
- T67-4: bf16 + activation checkpointing; offload double-buffered and overlapped #2948 T67-4: bf16 + activation checkpointing; offload double-buffered and overlapped — over S3 budget (rank 99/142)
- T67-5: sequence packing (T-2 already covers --max-seq-len) #2949 T67-5: sequence packing (T-2 already covers --max-seq-len) — over S3 budget (rank 100/142)
- T-7-arm: first P-5 PASS on WT arms the training gate #2950 T-7-arm: first P-5 PASS on WT arms the training gate — over S3 budget (rank 101/142)
- B-W0: quantized-weight upload path in serve: Q4K_GEMV_SHADER (already consumed by compute wgsl_forward.rs:424) wired into OwnedQuantizedModelWgpu; chunked to maxStorageBufferBindingSize; #2951 B-W0: quantized-weight upload path in serve: Q4K_GEMV_SHADER (already consumed b — over S3 budget (rank 102/142)
- B-W1: wgpu lane on intel: the job, adapter selected by name/type and printed (two AMD W5700X, RADV; llvmpipe present so the rasteriser falsifier is live — S0-3/S0-4) #2952 B-W1: wgpu lane on intel: the job, adapter selected by name/type and printed (tw — over S3 budget (rank 103/142)
- B-W2: Vulkan comparator pin (llama.cpp Vulkan build) in llama_pin.toml for the intel lane #2953 B-W2: Vulkan comparator pin (llama.cpp Vulkan build) in llama_pin.toml for the i — over S3 budget (rank 104/142)
- B-W3: PP-26 witnesses on the wgpu lane (m=1 vs m=c) #2954 B-W3: PP-26 witnesses on the wgpu lane (m=1 vs m=c) — over S3 budget (rank 105/142)
- B-W4: W1 receipt on the wgpu lane; "wgpu loses to CPU" is a recorded outcome #2955 B-W4: W1 receipt on the wgpu lane; "wgpu loses to CPU" is a recorded outcome — over S3 budget (rank 106/142)
- B-W5: clauses 5-6 for wgpu in check_backend_firstclass.sh (dogfood + formats) #2956 B-W5: clauses 5-6 for wgpu in check_backend_firstclass.sh (dogfood + formats) — over S3 budget (rank 107/142)
- B-M1: metal as a Ready registry entry on mini via the wgpu-Metal adapter (no MSL dispatcher exists — S0-12); NA -> UNMEASURED only when the registry prints Ready on mini (#2841 by constr #2957 B-M1: metal as a Ready registry entry on mini via the wgpu-Metal adapter (no MSL — over S3 budget (rank 108/142)
- B-M2: llama.cpp-Metal + Ollama comparator pins on mini #2958 B-M2: llama.cpp-Metal + Ollama comparator pins on mini — over S3 budget (rank 109/142)
- B-M3: PP-26 witnesses and the W1 receipt on mini (#2826: the f32 wgpu path is 0.123 tok/s; needs B-W0) #2959 B-M3: PP-26 witnesses and the W1 receipt on mini (wgpu decode on Metal is 0.123 tok/s (8.14 s/token) — mini's W1 cell cannot carry a meaningful metal ratio #2826: the f32 wgpu path is 0. — over S3 budget (rank 110/142)
- B-M4: clauses 5-6 for metal in check_backend_firstclass.sh #2972 B-M4: clauses 5-6 for metal in check_backend_firstclass.sh — over S3 budget (rank 111/142)
- B-S1: 0.5B GGUF+APR decode under wasmtime (wasm bound computed from bytes per receipt; W1 excluded by address space) #2973 B-S1: 0.5B GGUF+APR decode under wasmtime (wasm bound computed from bytes per re — over S3 budget (rank 112/142)
- B-S2: browser harness for the wasm32 build #2974 B-S2: browser harness for the wasm32 build — over S3 budget (rank 113/142)
- B-S3: wasm size budget + self-ratchet #2975 B-S3: wasm size budget + self-ratchet — over S3 budget (rank 114/142)
- B-S4: clauses 5-6 for wasm32 in check_backend_firstclass.sh (clause 4 N/A at m=1, printed) #2976 B-S4: clauses 5-6 for wasm32 in check_backend_firstclass.sh (clause 4 N/A at m=1 — over S3 budget (rank 115/142)
- B-A2: vendor-neutral Vulkan lane receipt on AMD silicon (intel W5700X); ROCm/HIP row with its blocker #2977 B-A2: vendor-neutral Vulkan lane receipt on AMD silicon (intel W5700X); ROCm/HIP — over S3 budget (rank 116/142)
- renames: §6.7: 51 [lib]/package renames phased per D-8; shim package only; dep keys and feature strings updated per PR (G-1 counters) #2979 renames: §6.7: 51 [lib]/package renames phased per D-8; shim package only; dep k — over S3 budget (rank 117/142)
- bar-gating: qwen-coder-deploy TTFT/ITL/agg(4) bar GATED after re-derivation per F-14 #2980 bar-gating: qwen-coder-deploy TTFT/ITL/agg(4) bar GATED after re-derivation per — over S3 budget (rank 118/142)
- C0-6: mutation step exceeds the job timeout (134-mutant set, #2872 receipt run): a cancelled required step must record NotRun{Timeout}, never PASS, and the step must fit the job #2983 C0-6: mutation step exceeds the job timeout (134-mutant set, docs(PP-066): 0.66 release spec v1.5 + driver prompt (PMAT-966, epic #2873) #2872 receipt run): — over S3 budget (rank 119/142)
- C0-7: receipt terminal marker + check_receipt_complete.sh: impl receipts carry status: complete|partial in front matter, are written .tmp then mv'd, and a resume treats partial as not complete #2984 C0-7: receipt terminal marker + check_receipt_complete.sh: impl receipts carry s — over S3 budget (rank 120/142)
- carry-0.67: BENCH-004 determinism controls for the benchmark-matrix harness (prior-art/2666) #2988 carry-0.67: BENCH-004 determinism controls for the benchmark-matrix harness (pri — over S3 budget (rank 121/142)
- carry-0.67: claim-literal ratchet could be edited in place; PERF-006 andon; harness write-before-validate (prior-art/2711) #2989 carry-0.67: claim-literal ratchet could be edited in place; PERF-006 andon; harn — over S3 budget (rank 122/142)
- carry-0.67: PERF-057 — §4.4.6 FATAL tokenization-mismatch rule in perf_gate.sh (prior-art/2820) #2990 carry-0.67: PERF-057 — §4.4.6 FATAL tokenization-mismatch rule in perf_gate.sh ( — over S3 budget (rank 123/142)
- carry-0.67: §4.4.6 client_tokenizer is computed, not typed — the digest (prior-art/2821) #2991 carry-0.67: §4.4.6 client_tokenizer is computed, not typed — the digest (prior-a — over S3 budget (rank 124/142)
- carry-0.67: three more release scripts read the facade pin with a line regex, one of them writes (prior-art/2635) #2992 carry-0.67: three more release scripts read the facade pin with a line regex, on — over S3 budget (rank 125/142)
- carry-0.67: cache the pr-review positive controls by the guard's own bytes (prior-art/2847) #2993 carry-0.67: cache the pr-review positive controls by the guard's own bytes (prio — over S3 budget (rank 126/142)
- carry-0.67: PERF-033 — comparator pin per host, and a pin that accepted prefixes (prior-art/2738-m1-pin) #2994 carry-0.67: PERF-033 — comparator pin per host, and a pin that accepted prefixes — over S3 budget (rank 127/142)
- carry-0.67: PERF-035 — gate CUDA compilation on PRs, loud missing nightly verdict, delete the never-compiled zram-core cuda feature (prior-art/2738-m3-cuda-ci) #2995 carry-0.67: PERF-035 — gate CUDA compilation on PRs, loud missing nightly verdic — over S3 budget (rank 128/142)
- carry-0.67: PERF-036 — 215 shipped machine-specific paths in aprender-serve (prior-art/2738-m5-serve-paths) #2996 carry-0.67: PERF-036 — 215 shipped machine-specific paths in aprender-serve (pri — over S3 budget (rank 129/142)
- R-0b: backend resolution reads the registry — accel.rs/serve/dispatch stop consulting cfg!(feature=…); --backend/--gpu/--device refused by enumeration with the registry's reason; BACKEND_VALUES widened to the REG-11 kinds with runtime Unavailable(NotCompiled) (split of R-0 per the design quorum 2026-09-06) #3002 R-0b: backend resolution reads the registry — accel.rs/serve/dispatch stop consu — over S3 budget (rank 130/142)
- PP-066 G-10b: analyser pin guard — every pmat reference under scripts/ and workflows resolves through scripts/pmat_bin.sh (baseline 281, shrink-only) #3013 PP-066 G-10b: analyser pin guard — every pmat reference under scripts/ and workf — over S3 budget (rank 140/142)
- Docs: publish a GPU-vs-CPU model architecture support table (no user-facing doc exists today) #3077 Docs: publish a GPU-vs-CPU model architecture support table (no user-facing doc — over S3 budget (rank 27/142)
- P1: three license states across 79 crates — 14 publishable crates offer Apache-2.0 with no LICENSE-APACHE to back it #3161 P1: three license states across 79 crates — 14 publishable crates offer Apache-2 — over S3 budget (rank 28/142)
- apr-agent accepts any flag as a task slug — 'apr-agent --help' created a worktree, a branch and a claim lockfile #3170 apr-agent accepts any flag as a task slug — 'apr-agent --help' created a worktre — over S3 budget (rank 29/142)
- verify gate reads descriptive prose as a test citation — rsplit("::") ignores classify_binding, fails the build over a sentence #3173 verify gate reads descriptive prose as a test citation — rsplit("::") ignores cl — over S3 budget (rank 38/142)
- aprender-zram-core's cuda feature has never compiled: unresolved trueno_gpu imports in library code, dark since before v0.66.0 #3179 aprender-zram-core's cuda feature has never compiled: unresolved trueno_gpu impo — over S3 budget (rank 30/142)
- qwen-story-daily has timed out at 30m on every scheduled run for 4 nights, and GitHub reports a job timeout as
cancelledso it reads as benign #3293 qwen-story-daily has timed out at 30m on every scheduled run for 4 nights, and G — over S3 budget (rank 141/142) - ci_resolve_dirty binds merge.roadmap.driver to a path no .gitattributes selects — the id-keyed roadmap driver never runs on a real merge #3343 ci_resolve_dirty binds merge.roadmap.driver to a path no .gitattributes selects — over S3 budget (rank 142/142)
- ggml_dtype_element_size is ordered by its own comment, not by ggml id: BF16 reads 0.375 B/elem instead of 2.0, so the #2569 truncation check is fail-open on BF16 GGUFs #3583 ggml_dtype_element_size is ordered by its own comment, not by ggml id: BF16 read — over S3 budget (rank 7/142)
- A gate for 'the corrected replacement has zero callers' — three known instances, nothing detects the next one #3686 A gate for 'the corrected replacement has zero callers' — three known instances, — over S3 budget (rank 11/142)
- 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 guard-tree's no-cargo guards depend on python3 + site-packages: 10 guards (16 ro — over S3 budget (rank 50/142)
- apr finetune --task classify is single-label only: MultiLabelSafetySample/BCE primitives exist in aprender-train but aren't wired to any CLI or declarative path #3700 apr finetune --task classify is single-label only: MultiLabelSafetySample/BCE pr — over S3 budget (rank 39/142)
- Replace or remove crates/aprender-serve/src/grammar once #3568's TokenConstraint lands — an unwired, char-level grammar engine beside the real one #3734 Replace or remove crates/aprender-serve/src/grammar once Schema-constrained decoding in apr (--json-schema or grammar) — three customers: arbiter's quorum lane, tool calling in verb set V, and the ruchy language #3568's TokenConstraint — over S3 budget (rank 40/142)
- flake: detect_ollama_model_file_size_heuristic_tiny fails when NamedTempFile's random name ends in a size marker (e.g. .tmpQxa7b.gguf) #3765 flake: detect_ollama_model_file_size_heuristic_tiny fails when NamedTempFile's r — over S3 budget (rank 31/142)
- cargo check -p apr-cli --features wgpu fails: finetune.rs imports entrenar's WgpuInstructPipeline / wgpu_training items that don't exist (5 errors) — a declared feature that cannot build #3779 cargo check -p apr-cli --features wgpu fails: finetune.rs imports entrenar's Wgp — over S3 budget (rank 131/142)
- flake: eval::inference assertion_failure_reports_nonzero_and_traceback — a 5 s wall-clock timeout on a python child fails under host load (exit_code None) #3788 flake: eval::inference assertion_failure_reports_nonzero_and_traceback — a 5 s w — over S3 budget (rank 51/142)
- shapes_gate complexity ratchet: pure refactor of run_shapes_gate_with, no behaviour change #3792 shapes_gate complexity ratchet: pure refactor of run_shapes_gate_with, no behavi — over S3 budget (rank 48/142)
- try_wgpu_generate's doc claims "Proven: cosine=0.999863 on Blackwell sm_121" — #3757 measured 0.955046 on gx10, which IS Blackwell #3827 try_wgpu_generate's doc claims "Proven: cosine=0.999863 on Blackwell sm_121" — # — over S3 budget (rank 132/142)
- The --features cuda lint surface has never been gated: clippy -p apr-cli --lib --features cuda is RED with 60 errors #3837 The --features cuda lint surface has never been gated: clippy -p apr-cli --lib - — over S3 budget (rank 10/142)
- Coverage owes 0.69.1: 87.82% vs floor 88, and COVERAGE_EXCLUDE_REGEX has described a different tree since April #3839 Coverage owes 0.69.1: 87.82% vs floor 88, and COVERAGE_EXCLUDE_REGEX has describ — over S3 budget (rank 8/142)
-
simd_bf16_matmulis defined twice and called by nothing — a candidate for the unwired-capability gate (PMAT-3686) #3853simd_bf16_matmulis defined twice and called by nothing — a candidate for the — over S3 budget (rank 37/142) - 347 public type names are defined twice or more WITHIN one crate — two were found by hand tonight as real silent-wrong-answer traps, and the intersection is unmeasured #3906 347 public type names are defined twice or more WITHIN one crate — two were foun — over S3 budget (rank 133/142)
- DIRECT_FP32_GEMV: a FALSIFIED optimization left as an env-gated branch that no gate executes #3915 DIRECT_FP32_GEMV: a FALSIFIED optimization left as an env-gated branch that no g — over S3 budget (rank 134/142)
- aprender-train: ~60 clippy errors under --features cuda hide every downstream crate's lint (use --no-deps) #3996 aprender-train: ~60 clippy errors under --features cuda hide every downstream cr — over S3 budget (rank 135/142)
- falsify_2384_run_apr_executes_the_resolved_binary is flaky: ETXTBSY (Text file busy) under parallel lib tests #4020 falsify_2384_run_apr_executes_the_resolved_binary is flaky: ETXTBSY (Text file b — over S3 budget (rank 42/142)
- Operator standing rules → global ~/.claude/CLAUDE.md (cop verbatim relays; quorum Opus fallback until local models) #4027 Operator standing rules → global ~/.claude/CLAUDE.md (cop verbatim relays; quoru — over S3 budget (rank 136/142)
- apr-cli --no-default-features does not compile (8 errors: realizar/tokio/inference items reached without feature gates) #4041 apr-cli --no-default-features does not compile (8 errors: realizar/tokio/inferen — over S3 budget (rank 43/142)
- aprender-serve: #3985 fusion guard test include_str!s contracts/kernel-fusion-v1.yaml from OUTSIDE the crate — cargo test from the published package cannot compile #4048 aprender-serve: 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 fusion guard test include_str!s contracts/kernel-fusion-v1 — over S3 budget (rank 44/142)
- apr-cli --features wgpu does not compile: finetune.rs reaches entrenar's wgpu pipeline, which is gated behind entrenar's 'gpu' feature that apr-cli never enables #4056 apr-cli --features wgpu does not compile: finetune.rs reaches entrenar's wgpu pi — over S3 budget (rank 9/142)
- binary-debt #1: ledger + DERIVED-universe guard (BINARY_DEBT ≤ 22, LEGACY_NAMES ≤ 13 at 0.70) — a new binary must be classified #4058 binary-debt Feature Request: Decision Tree & Random Forest for Classification Tasks #1: ledger + DERIVED-universe guard (BINARY_DEBT ≤ 22, LEGACY_NAMES — over S3 budget (rank 45/142)
- aprender-viz: SvgEncoder cannot emit a <metadata> element — deterministic provenance metadata for figures (apex EV-23) #4067 aprender-viz: SvgEncoder cannot emit a element — deterministic proven — over S3 budget (rank 52/142)
- aprender-viz: an opt-in, deterministic provenance text chunk for PngEncoder — an argued exception to the no-text-chunk rule (apex EV-23) #4068 aprender-viz: an opt-in, deterministic provenance text chunk for PngEncoder — an — over S3 budget (rank 137/142)
- scripts/ci.sh still does mv ~/.cargo/config.toml, the pattern #3839 removed from the Makefile #4097 scripts/ci.sh still does mv ~/.cargo/config.toml, the pattern Coverage owes 0.69.1: 87.82% vs floor 88, and COVERAGE_EXCLUDE_REGEX has described a different tree since April #3839 removed from — over S3 budget (rank 46/142)
- pmat-comply CB-200 fails at 0.69.1 (18 fails, 3 Error): fix in 0.70 #4101 pmat-comply CB-200 fails at 0.69.1 (18 fails, 3 Error): fix in 0.70 — over S3 budget (rank 32/142)
- aarch64 clippy -D warnings fails in aprender-compute (4 cfg-dependent unused vars); no gate runs clippy on arm #4134 aarch64 clippy -D warnings fails in aprender-compute (4 cfg-dependent unused var — over S3 budget (rank 53/142)
- apr-cli lib.rs blanket-allows clippy::all/pedantic/disallowed_methods + dead_code/unused_*: 777 hidden findings; remove and ratchet down #4148 apr-cli lib.rs blanket-allows clippy::all/pedantic/disallowed_methods + dead_cod — over S3 budget (rank 138/142)
- clippy debt ratchet 1/5 (0.70): apr-cli + aprender-core + aprender-serve residual (~522) #4153 clippy debt ratchet 1/5 (0.70): apr-cli + aprender-core + aprender-serve residua — over S3 budget (rank 49/142)
- unwrap sweep: 2137 banned .unwrap() sites across 11 workspace crates (qa-runner 1038, test-cli 444, graph 235, apr-cli 143, …) — take clippy_member_baseline's disallowed_methods keys to zero #4161 unwrap sweep: 2137 banned .unwrap() sites across 11 workspace crates (qa-runner — over S3 budget (rank 139/142)
- 0.69.4: tests for #4247's untested serve branches — prefill fit-fail → per-token, prefill Err → CPU fallback #4255 0.69.4: tests for fix(serve): apr serve prefills Qwen3.5 prompts through the batched prefill (#3596, #4250) #4247's untested serve branches — prefill fit-fail → per-token — over S3 budget (rank 47/142)
Superseded epics
- Epic: apr-dogfood v3.0 — coverage is the organizing gate (17.1% of 830 features, 27 of 28 binaries at zero) #2582 Epic: apr-dogfood v3.0 — coverage is the organizing gate (17.1% of 830 features, — A4 pending close (waits apr lane); owner lines: owner: aprender-ea (assigned by cop aprender-77, 2026-09-25; commits into batch/0.70.0) / on arrival (below). If one has moved, fix the reference, do not delete the claim. / ## Verification ledger — claims checked at HEAD (4bbfeb0) / | claim | attached | HEAD | verdict | / and the substantive claim survived both — which is the ledger working.
- Code Quality Report Epic: Sovereign Stack Audit #2814 Code Quality Report Epic: Sovereign Stack Audit — A4 pending close (waits apr lane); owner lines: owner: aprender-57
- EPIC 0.70→0.75: binary debt — 31 binaries classified (KEEP / MERGE-INTO-apr / DEPRECATE→DELETE / DECIDE) with a falling ratchet; 13 stale crates.io names #4057 EPIC 0.70→0.75: binary debt — 31 binaries classified (KEEP / MERGE-INTO-apr / DE — superseded (A4); owner lines: 4.
ttop, the operator's example, is not shipped from this workspace.crates/aprender-viz-ttopisexcluded unde / |aprender-viz-ttop| aprender-viz-ttop (EXCLUDED) | N / – | – | no | 0 (0) | NO | 0 | c3825da 2026-08-14 | ptop/cbt
Activity
noahgift commentedon Sep 23, 2026
Operator 2026-09-23: "ALL releases in .7 have some rachet". The ratchet applies to EVERY 0.7x release, 0.70.0 through 0.75.0 (and any later 0.7x). The ≥80%-by-0.74 target stands; 0.75 carries a 6th slice (no regression, continued paydown). Each release's gate refuses a level below the previous release's.
noahgift commentedon Sep 23, 2026
Step 1 done: the quorum-researched plan is ready for operator review (PR #4003)
Plan:
docs/specifications/DEBT-RATCHET-001-070-074.mdon #4003. Every number comes from a command listed in its §7 (2026-09-23, aprender main @49fe19c28, infra @29a84779). Nothing is applied. No child issues, milestones, closes, or deletes.1. Baselines (measured; three differ from this issue's table)
COV_FLOOR=88missed a 0.58 pp drop. The regex keeps 415k lines out of the denominator, all ofapr-cliamong thempv lint contracts/is reachable from no workflowgit ls-remotegives 353Two facts reshape D. Unmilestoned issues are inflow: all are under 5 days old, at about 70 issues a day, so the gate has to be at intake. And
updatedAtcannot detect a stale PR: no PR is idle over 7 days by that field, yet 20 are older than 7 days, because update-branch merges keep refreshing it.2 and 3. Units and slices (floor =
B ∓ k·⌈slice⌉; each release also refuses anything worse than the previous tag)C and D go to 100%, because the operator's words for them are absolute. The plan does not quote a B-3 figure (bound equations, 485 per release on the full denominator) as credible; it is flagged for operator decision 3.
4. CUDA coverage (sharded, yoga-first)
gpu-q --prio 1per nextest partition. The shard is a plain nextest command; lock-taking scripts are never wrapped.T_instris[U]until the first unsharded run after the 0.69.1 freeze. The estimate is 4–8 shards for serve alone.P_cudais its own ratchet. Because its baseline first exists at 0.71, it reaches only 3/5 of its slices by 0.74 (decision 7).5. Pillar-D gates
New predicates R6 (unmilestoned issue > 24 h, and an old or closed release milestone does not count) and R7 (PR > 7 d with no author activity in 72 h, where update-branch merges are not activity) in the existing T-5
check_reconcile.sh. They run in ratchet mode, so they are green on the real repo from day one, and are armed at zero at 0.74. No first-green proof has run yet, because the predicates do not exist. The step-1 counts they will first read are 428 and 19. The live--max N/--max N-1proof and the case tables are the acceptance tests of step 2.Quorum
A grillme quorum of width 3 returned 2× PASS-with-changes and 1× PASS. I applied 14 must-fix items; the table is in plan §9. I refuted one: an empty coverage figure already fails closed. Advisory only: all three lanes are gemini (the gpt-oss seat hit a 429 with a 95 h reset), and every lane exited 3 because other sessions changed shared refs during the run, not because a lane wrote anything.
Operator decisions (plan §6)
P_cuda's window run to 0.76?Step 2 (child issues per pillar × release) waits for your approval.
noahgift commentedon Sep 23, 2026
milestone → 0.70.0 per docs/roadmaps/milestone-triage-2026-09-23.md (#4024), operator approval 2026-09-23 (relayed by aprender-cf). Reason: the ratchet epic spans 0.70-0.74; keep on 0.70.0 as its first slice
noahgift commentedon Sep 23, 2026
milestone REVERTED to none (its state before #4024's move). The quorum on #4024 found this issue is named as must-carry by #3998, #4000, #3999, #4001 and #4002, and the table's own rule says such an issue is an operator DECIDE, never placed by the author. It was moved in error. It is now listed on #3998 as a pending decision: 0.70.0 first slice (recommended). No new placement was made.
docs(roadmap): correct the triage after the quorum -- 3 moves reverte…
docs(roadmap): quorum round 6 -- #3845 reverted as a DECIDE with #3978,
noahgift commentedon Sep 23, 2026
triage 2026-09-23 (aprender-dd, standing triage owner): milestoned to 0.70.0, theme Fast Train (CI, gates, pv, release tooling, hygiene); it had no release milestone. Decision still pending (#4024 recommends 0.70 as its first slice; #3998/#4024 DECIDE row): this milestone is a placeholder until the operator rules.
docs(roadmap): the counts carry their true measurement time; post-hea…
noahgift commentedon Sep 25, 2026
Moved 0.70.0 → 0.70.1 per the cop ruling on the 0.70.0 burndown (aprender-77, 2026-09-25). This issue is not on the critical path of any 0.70.0 gate (ONT-001, all [[bin]]s #4189, discharge --strict, merge-back #4338). Burndown: /mnt/nvme-raid0/cop-inbox/aprender-ea-070-burndown.md — aprender-ea
25 remaining items
apr run: 7 defects incl.--streamemitting empty text and--trace-outputalways writing an empty event list #2378noahgift commentedon Oct 14, 2026
Folded into this epic's checklist from #4153 (same theme; text kept verbatim; owner owner:aprender-a7 keeps the work).
Original text of #4153
Clippy tech-debt ratchet, slice for 0.70.0. Filed by the cop (aprender-cf) on the operator's instruction, verbatim, 2026-09-24: "move those issues into our next 5 release technical debt rachet and split evenly".
Baseline: measured by aprender-30 (#4152) on main aa7c6ef with
cargo clippy --workspace --all-targets --no-deps -- -D warnings(GPU trio excluded, as CI does): 3807 diagnostics in 15 crates. #4152 removes the 1280 aprender-serveexcessive_precisionfindings (mirroring the workspace allow) and installs the member-wide ratchet (keyed on crate × target-kind × lint; only decreases allowed). That leaves 2527, split into five roughly equal slices over 0.70–0.74.This slice (0.70.0): apr-cli (284) + aprender-core (218) + aprender-serve residual after #4152 (~20).
Done when:
unwrap/expectbans are fixed with?,ok_or_elseor a documentedexpectwhere the invariant is proven, never with#[allow];Sequence: 0.70 ≤2005 → 0.71 ≤1445 → 0.72 ≤886 → 0.73 ≤376 → 0.74 = 0. Depends on #4152.
Collapsed rows (APR-EPIC-001 rule 20)
One issue per PR: tick a line when its PR merges; the PR closing the last line says
Closes #4153, the othersRefs #4153 row <id>.