Repository navigation
EPIC E6 0.73: Runs Everywhere #3999
Description
owner: aprender-w5382 (set 2026-10-19 by aprender-triage-worker at the cop's word; picks up children only as batch constituents after its current timed task)
Spec: APR-EPIC-001 §2 · Epic: E6 · Train: 0.73 · Successor at cut: E7
Theme
Runs Everywhere (was: llama.cpp Parity; operator ruling 2026-09-27, APR-LOOKAHEAD-001 §2a)
done_when
Current exit criteria (APR-LOOKAHEAD-001 §2a): E1 Qwen3.5-4B apr run and apr serve pass parity (cosine ≥ 0.98 vs llama.cpp) on WGPU (intel, dual AMD), Metal (mini), aarch64 CPU and CUDA (gx10) · E2 each backend ≥ 0.5× llama.cpp speed on the same host [A], recalibrated by L3's measurement plan · E3 the MoE model Qwen3-Coder-30B (#3341) loads and runs with parity · E4 WGPU/Metal refusals removed · E5 kernel registry covers 100% of kernel keys these backends dispatch · E6 the Prometheus fallback options (intel-wgpu, mini-metal) become admissible cells
Rows from the old theme that do not fit move to milestone backlog (cop 2026-09-27).
Superseded done_when (old theme): decode, prefill, TTFT and memory ≥ llama.cpp across the certified matrix (prefill today 0.19–0.20× [S #4376]).
Budget
At most 5 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.
Absorbs
Prior body
Theme: llama.cpp Parity (operator decision 2026-09-23: ".73 is about performance parity with llama.cpp")
apr matches llama.cpp on performance, measured head-to-head against the pinned llama.cpp that CRUX already uses on both hosts (infra#911), across the matrix 0.71.0 certifies.
Exit bar (the contracts must state the thresholds; no prose claims).
| Metric | Scope | Threshold |
|---|---|---|
| Decode tok/s | each certified model × quant, on CUDA sm_89 + sm_121, CPU x86/ARM, Apple Silicon | ≥ 1.0× llama.cpp (median of N, with a declared noise band) |
| Prefill tok/s | same | ≥ 1.0× llama.cpp (apr prefills at decode rate today: #2801) |
| TTFT / peak memory | same | ≤ llama.cpp + declared band |
Measurements need exclusive GPU time (benchmarks stay on the exclusive lock, per 0.70 Fast Train). The same prompt set, sampling and context for both engines. Receipts carry both engines' version and sha.
Must-carry
- Prefill: batched CPU prefill (perf(serve): batched CPU prefill — apr prefilled at decode rate (#2787) #2801) and GPU prefill parity
- GB10: the measured shortfall (evidence(perf-061): the GB10 shortfall on #2786 is a real deficit, not warm-up #2800)
- Consolidation that makes per-quant tuning tractable: PP-QUANT (EPIC: PP-QUANT-001 — quant-type dispatch, Phase 0/1 (0.69 train) #3421, spec(PP-QUANT-001): quant-type dispatch consolidation — design, contract, Phase 0 gate #3420), PP-ARCH (spec(PP-ARCH-001): shared-block forward-path consolidation — the axis that actually sets new-model cost #3424), PP-TENSOR (EPIC: PP-TENSOR-001 — a tensor that has no bytes is a different type from one that does (MoE / tied-embedding placeholders) #3428)
- Beat contracts: re-baseline
contracts/beat-*against llama.cpp (today's reference is Ollama, parity 1.015–1.109×, floor 0.90) - Ratchet slice 4 of 5 (EPIC S3 standing: Debt Ratchet #3997)
Open decision
- qwen35moe 35B-A3B CUDA forward (0.70.0: qwen35moe (Qwen3.5-35B-A3B hybrid SSM MoE) CUDA forward #3977, a new architecture) is not performance work. Which release carries it: 0.73 as well, or 0.74?
Members not listed above (100, every other open 0.73.0 issue)
Rule (operator 2026-09-24, applied by the cop aprender-cf): a milestone is an epic only if this issue lists its members, and tickets without an epic go to backlog. This list was derived from the milestone's open issues on 2026-09-24 by aprender-dd (#4159).
- Pillar-4: restore a real >=1.10x GPU decode win over ollama on sm_89 (currently 1.015x parity) #2349
- Evaluate uncached/advised weight reads on the mmap path (from antirez/h3.c) — measure, then keep or discard #2464
- Q4_K GEMV has no aarch64 SIMD and its "parallel" variant calls the scalar path #2567
- apr eval --task: 8 of 10 dispatch arms are reachable but undocumented in --help #2584
- AVX-512 VNNI Q4_K kernels are compiled, linked and structurally unreachable — the
avx2 && fmafast path returns before the VNNI gate is ever read #2604 - Q5_K and Q6_K have no AVX-512 kernel at all, so an AVX-512 host runs its largest tensor on 256-bit lanes #2605
- The entire trueno Q4_K GEMV module (AVX-512 branch included) is dead-code-eliminated from the shipped
aprbinary #2611 - PARITY-007: the only apr-vs-llama.cpp bench in the tree is dark on three axes and its apr side is dead code #2674
- perf(serve): decode is 1.54x behind llama.cpp — 103.3 vs 158.9 tok/s, same GGUF, same GPU #2694
- perf(serve): apr holds 3.08x the VRAM of llama.cpp for the same Q4_K_M weights — 14,030 vs 4,554 MiB #2695
- perf(serve): the prefill fixed cost is HOST-SIDE — 1018 synchronous HtoD copies and 904 device allocs, not kernels #2697
- [EPIC] Qwen2.5 Inference Performance Optimization & Parity #2728
- cbtop reports status PASS and ci_result green over its own grade F when the profiler returns zero bricks #2730
- apr cbtop accepts --warmup 0 while rejecting --iterations 0, and the JSON receipt records neither #2731
- parity_block.py: a zero COMPARATOR band median is an unhandled traceback, not a verdict #2735
- P0: batched CUDA decode emits garbage for every m>1 — PERF-001's 3.32x aggregate is throughput of garbage tokens #2753
- --workload is a free-text label decoupled from the prompts sent: a 1-prompt run is recorded as W1 #2756
- batched_gemv_with_fallback's per-sequence loop returns garbage, and it is the universal fallback behind a leftover diagnostic constant #2761
- cublas_prefill_fp8_gemm reads 16 rows of FP8 scratch where 1 was written: the padded tail is the previous GEMM's activations #2765
- cuBLAS decode route diverges at m>=4: coherent but different continuation, so c=4 fails parity while c=2 passes #2770
- 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
- FP8 E4M3 decode uses a single per-tensor weight absmax — 9.6x the logits error of every other GEMM route #2810
- §4.4.6's FATAL tokenization rule has no implementation: perf_gate.sh:79 checks only that method is a non-empty string, and the gate's own OK fixture uses an illegal value #2816
- llama-server 39173bcac accepts, echoes, then ignores ignore_eos — W1 mandates it, and §4.3.1 501-refusal poka-yoke protects only the apr side #2818
- canonical tokenizer.json is absent on gx10 and intel — only a byte-different, token-identical variant is present, and a sha256-keyed FATAL rule would refuse half the fleet #2819
- S4.4.4 bootstrap CI is implemented with zero callers — no ci block or seed reaches any receipt, and the absence is undeclared #2832
- 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
- The Pillar-4 ollama decode beat moved silicon and kept its sm_89 threshold — three-night red is a first measurement, not a regression #2835
- gx10 c=1 decode is 6.2 tok/s — 10.6% of the bandwidth roofline; verify compute_class and gpu_layers_resolved #2846
- 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
- Class: the shipped CPU path runs a narrower kernel than the host supports — dispatch returns before the wider ISA, kernels absent, module DCE'd, prefill run as decode #2880
- 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-15: gx10 shakedown cell: W1, n>=5 interleaved, at a commit containing 0b, 0c, 1, 6, 7, 12 -> a new LEDGER row #2883
- I-18: lambda reference cell: W1, n>=5 interleaved, both lanes, derived ladder, armed_by set for every band that PASSES #2884
- I-16: W3 open-loop workload (report row 19, master row 16) #2885
- 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-24: parity_block.py: a zero COMPARATOR band median is a named refusal, not a traceback (#2735) #2887
- I-25: --workload bound to the prompt corpus: receipt.workload accepted only when corpus_sha256 equals the loaded prompts file and its _meta.corpus equals the label (#2756) #2888
- C0-4: perf_gate.sh arm_a_scaling: an arm that emits nothing on a c=1-only receipt is REPORT/FAIL, never PASS; selftest rows both polarities (#2830) #2893
- 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
- 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-3g: S-3 on gx10 (queue slot after T-0) #2920
- 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-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
- W-B-kernel: multi-warp Q4_K GEMV, M in {1,4,8} #2939
- W-D: f16 KV + per-layer cosine witness; reserve from measured peak #2940
- W-E: scheduler: slots_admitted concurrent decodes under captured graphs, one graph per M-bucket or padding #2941
- W-G: GB10: NEON Q4_K GEMV; batched prefill default on sm_121 after master 21; pre-compiled kernels (trueno#203) #2942
- W-H: batch-invariant reduction; logprob margin on the wire (master row 22) #2943
- bar-gating: qwen-coder-deploy TTFT/ITL/agg(4) bar GATED after re-derivation per F-14 #2980
- carry-0.67: BENCH-004 determinism controls for the benchmark-matrix harness (prior-art/2666) #2988
- carry-0.67: PERF-057 — §4.4.6 FATAL tokenization-mismatch rule in perf_gate.sh (prior-art/2820) #2990
- carry-0.67: §4.4.6 client_tokenizer is computed, not typed — the digest (prior-art/2821) #2991
- carry-0.67: PERF-033 — comparator pin per host, and a pin that accepted prefixes (prior-art/2738-m1-pin) #2994
- PP-066 S-0: the speed lane runs on perf-solo and its receipt names its own host (D-3; #2720 direction, re-derived from HEAD) #3016
- F16/BF16 GGUF CPU matmul has no SIMD path — unquantized models appear to hang #3076
- cbtop --simulated --ci: the verdict is a coin flip (jittered brick timings, CV 88%) — M008 was dark for five months because of it #3117
- P1: autodiff op coverage — conv/pool/embedding/gather; aprender cannot train a CNN today #3151
- P1: three license states across 79 crates — 14 publishable crates offer Apache-2.0 with no LICENSE-APACHE to back it #3161
- performance_parity: Q4_0 buffer of 640 bytes is not a multiple of the 18-byte block size #3181
- FALSIFY-CGP-090 asserts on the time column and calls it GFLOPS, and passes when it measures nothing #3231
- apr test llm bench refuses every c=1 llama-server lane (rc 5) at both llama.cpp pins — row 0a has never had an accepted measurement #3330
- DP4A Q4K/Q6K GEMV profile is catastrophic through the Gated DeltaNet recurrence — Qwen3.5 on sm_89 needs the float MWV variant (PMAT-806 class) #3513
- crates/aprender-serve/models/qwen2-0.5b-q4.gguf is 0 bytes — the in-tree fixture model cannot load #3547
- aprender-viz's lib is trueno_viz and nothing says so — 'use aprender_viz::' does not compile and no tool will ever tell you why #3548
- aprender-viz ships 396 KB of fixtures/breaks/ to every consumer in the published .crate #3549
- No consumer-shaped door into aprender-viz: drawing a chart compiles aprender-compute, aprender-quant and aprender-gemm-codegen #3550
- aprender-viz is f32, consumers are f64: the narrowing at the DataFrame boundary is undocumented and unguarded #3551
- Facet/Coord have no runnable example — EV-15/EV-16 have nothing to build against #3552
- aprender-viz: no vector SVG from the grammar path — BuiltGGPlot renders only to a Framebuffer, and src/output/ does not know GGPlot exists #3589
- aprender-viz: GGPlot::title/xlab/ylab are accepted and silently discarded — never drawn, and #[allow(dead_code)] hides it #3590
- Time-to-first-token on Qwen3.5-4B-Q4_K_M is 14-16s vs llama.cpp's 1.8-2.9s on the same box (7.7x); apr's decode rate is unmeasurable with shipped tooling #3596
- apr hex / apr trace still say "Invalid APR format" for GGUF and SafeTensors failures — 6 more InvalidFormat sites after #3661 #3691
- Qwen3.5 CUDA long-context DECODE is slow: the decode attention kernel runs 16 blocks — split-K needed for consumer use (RAH ~10 tok/s at 16k) #3725
- FP8 batched GEMM multiplies a STALE activation on mixed-quant models: the PMAT-084 cache key (ptr, count) aliases across layers — #3602's cosine 0.4153 #3727
- FP8 prefill GEMM overflows its FP16 output: D = true × 448/act_absmax exceeds 65,504 on qwen2.5-coder-7b (cosine 0.5668, lambda) #3728
- apr parity --per-op is blind to batched prefill (runs the serial path) and scores an undumped GPU stage as cosine 0.0 #3729
- Published apr 0.68.2 fails spec H12 in apr bench on intel (9.6 tok/s) and mini (7.2); bench_host_receipt.sh then drops the completed measurement and its reason (2>/dev/null) #3758
- apr showcase prints a FABRICATED llama.cpp baseline (35.0 tok/s ± clock-nanos jitter) and a 'speedup vs llama.cpp' from it, whenever any llama-server is on PATH #3773
- Qwen3.5 TTFT has a large term OUTSIDE prefill that grows with prompt length (13.6 s at 20k → 168 s at 262k; 211 s before a pre-load refusal at 263k) — tokenize/template/parse, unmeasured and unprofiled #3787
- Internal docs quote 265 unreceipted competitor-throughput figures (docs/specifications, crates/*/CLAUDE.md, docs/qa) — date+receipt or delete (#3773 follow-up) #3798
- book ch22 example: its 'bootstrap statistics' are 10 literal samples (mean ~273.6) that match neither cited receipt (apr mean 351.97), and 'c=32 … 1,776 tok/s' is unreceipted (#3773 follow-up) #3800
-
simd_bf16_matmulis defined twice and called by nothing — a candidate for the unwired-capability gate (PMAT-3686) #3853 - RandomForestRegressor/DecisionTreeRegressor carry the identical O(n²) split search — #3815's fix does not reach them #3859
- gpu_speedup's floor is a RATIO, so a shared-host CPU leg in the denominator can manufacture or erase a pass #3861
- 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
- DIRECT_FP32_GEMV: a FALSIFIED optimization left as an env-gated branch that no gate executes #3915
- Qwen3NoThink prefills <think>\n</think>\n where the model's own template uses <think>\n\n</think>\n\n — the model spends two tokens re-closing it #3930
- README.md:162 advertises a "100-pt structural audit" that #1870 replaced — the tool scores only the 5 of 26 checks that run #3935
- IQ2_XXS (ggml 16) has no CUDA GEMV — 0.69.1 release blocker #3950
- Qwen3.5-0.8B-IQ4_XS never closes its think block while Q4_K_M does: CUDA IQ4 GEMV or real quant damage? #3951
- IQ2_S (ggml 22) has no CUDA GEMV — 0.69.1 release blocker #3953
- Q2_K (ggml 10) has no CUDA GEMV — 0.69.1 release blocker #3960
- IQ3_XXS (ggml 18) has no CUDA GEMV — 0.69.1 release blocker #3963
- Qwen2.5 chat template drops the default system prompt (26 vs llama.cpp's 47 tokens) — apr 1/18 vs llama.cpp 10/18 on the same GGUF #3990
- SPM encode does not split control tokens: TinyLlama '</s>' in a rendered chat prompt tokenizes as '.</' 's' '>' (llama.cpp: '.' '</s>') #3993
- apr --gpu holds ~2.3× the GGUF size in host RAM (27B Q4_K_M: 36 GiB RSS for a 15.6 GiB file) — llama.cpp mmaps; parity + fleet-safety gap #4017
- binary-debt #7: monitors + names — ttop per #4 ruling, delete ptop; alimentar → apr data, probar CLI → apr test; restore
renacerandbatutanames #4064 - c1_is_sequential_and_slower_for_the_same_work asserts a wall-clock speedup (> 2.0x): flaky under instrumentation; assert the server-observed overlap count instead #4103
- clippy debt ratchet 4/5 (0.73): test-cli + half the small crates (~510) #4156
Parked
Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).
- apr test llm bench refuses every c=1 llama-server lane (rc 5) at both llama.cpp pins — row 0a has never had an accepted measurement #3330 apr test llm bench refuses every c=1 llama-server lane (rc 5) at both llama.cpp — over E6 budget (rank 7/22)
- qwen3_moe_argmax_parity has been broken at every llama.cpp pin — llama-cli never accepted -no-cnv, and both obvious fixes return an empty string #3332 qwen3_moe_argmax_parity has been broken at every llama.cpp pin — llama-cli never — over E6 budget (rank 10/22)
- Time-to-first-token on Qwen3.5-4B-Q4_K_M is 14-16s vs llama.cpp's 1.8-2.9s on the same box (7.7x); apr's decode rate is unmeasurable with shipped tooling #3596 Time-to-first-token on Qwen3.5-4B-Q4_K_M is 14-16s vs llama.cpp's 1.8-2.9s on th — over E6 budget (rank 6/22)
- #3563 (C): every llama.cpp comparator consumer resolves through scripts/llama_bin.sh — no direct binary path, no second resolver #3740 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 (C): every llama.cpp comparator consumer resolves through scripts/llama_bi — over E6 budget (rank 11/22)
- #3563 (B): exactly one llama.cpp comparator pin is cited in-tree — every other sha is historical and dated, or it is RED #3741 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 (B): exactly one llama.cpp comparator pin is cited in-tree — every other s — over E6 budget (rank 12/22)
- Parity lane refuses on intel and mini: the pinned llama.cpp (d1d3c3396) has no llama-bench/llama-server there — REPORT for 0.69.1 (first-green of #3731) #3756 Parity lane refuses on intel and mini: the pinned llama.cpp (d1d3c3396) has no l — over E6 budget (rank 13/22)
- CRUX engine drivers for #3739: llamafile and HF transformers — probe/gen/tok/tmpl/greedy rows to row contract v1 #3778 CRUX engine drivers for 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: llamafile and HF transformers — probe/gen/tok/tmp — over E6 budget (rank 8/22)
- CRUX slice (#3739): the run verb — apr run, llama-cli and ollama run on the SAME GGUF, judged token-ids first #3829 CRUX slice (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): the run verb — apr run, llama-cli and ollama run on the SAME — over E6 budget (rank 18/22)
- CRUX slice (#3739): the code verb — apr code vs Claude Code (and agy), judged on an edit-and-verify task, not on token parity #3830 CRUX slice (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): the code verb — apr code vs Claude Code (and agy), judged on — over E6 budget (rank 19/22)
- A bare
llama-cliresolves a DEAD shadow on lambda and nothing on gx10, while the pinned build works on both — guard the comparator the way check_apr_bin_pinned.sh guards apr #3831 A barellama-cliresolves a DEAD shadow on lambda and nothing on gx10, while t — over E6 budget (rank 20/22) - 0.70.0 comparator-install row (#3739): llamafile absent on both hosts, transformers lambda-only, ollama models pulled on gx10 only — and what each gap costs a CRUX cell #3834 0.70.0 comparator-install row (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): llamafile absent on both hosts, transform — over E6 budget (rank 9/22)
- CRUX: add vLLM as a pre-release comparator engine (plugin driver; lambda x86/4090 + gx10 aarch64/GB10 installability first) #3952 CRUX: add vLLM as a pre-release comparator engine (plugin driver; lambda x86/409 — over E6 budget (rank 15/22)
- 0.69.1 BLOCKER: CRUX producer — per-verb prompt sets (incl. hard prompts) + code verb + hf/vllm quorum rows #3962 0.69.1 BLOCKER: CRUX producer — per-verb prompt sets (incl. hard prompts) + code — over E6 budget (rank 16/22)
- HF cache blob for Qwen2.5-Coder-1.5B-Instruct is a rewritten float32 file under upstream's sha256 name — hf+vLLM answer garbage, judge scored it GREEN #3971 HF cache blob for Qwen2.5-Coder-1.5B-Instruct is a rewritten float32 file under — over E6 budget (rank 21/22)
- Release gate: apr serve throughput vs llama.cpp on the SAME GGUF (Qwen3.5 0.8B/2B/4B/9B/27B) — a regression ratchet that blocks the tag, plus a published parity target #4218 Release gate: apr serve throughput vs llama.cpp on the SAME GGUF (Qwen3.5 0.8B/2 — over E6 budget (rank 17/22)
- 0.70.x: prefill kernel parity — llama-bench pp ≥0.8x llama.cpp (today 0.19–0.20x) #4376 0.70.x: prefill kernel parity — llama-bench pp ≥0.8x llama.cpp (today 0.19–0.20x — over E6 budget (rank 22/22)
- qwen35: apr quantize --format gguf emits a GGUF llama.cpp d1d3c3396 cannot load (738/739 tensors unmapped, embed/output F32) — blocks EXT-18 #4418 qwen35: apr quantize --format gguf emits a GGUF llama.cpp d1d3c3396 cannot load — over E6 budget (rank 14/22)
- No committed parity receipt names an external comparator — the 0.98 threshold's own basis is apr-vs-apr self-consistency, not just the Qwen 3.5 rows #3576 No committed parity receipt names an external comparator — the 0.98 threshold's — over E6 budget (rank 5/5)
Superseded epics
- [EPIC] Qwen2.5 Inference Performance Optimization & Parity #2728 [EPIC] Qwen2.5 Inference Performance Optimization & Parity — superseded (A4); owner lines: - Owner:
trueno-cpu/realizar::quantize/ - Owner:realizar::inference/realizar::sampler/ - Owner:trueno-gpu/realizar::cuda/ - Owner:realizar::cuda/trueno-gpu/ - Owner:cbtop/presentar-terminal/apr-cli - Class: the shipped CPU path runs a narrower kernel than the host supports — dispatch returns before the wider ISA, kernels absent, module DCE'd, prefill run as decode #2880 Class: the shipped CPU path runs a narrower kernel than the host supports — disp — A4 pending close (waits apr lane); owner lines: The one structural fix. A per-ISA kernel-reachability gate on the built artifact: for each (host ISA, qtype, shape c
- EPIC 0.70: architectural investigation — ggmlc-derived inference runtime ideas (quorum-decided) #3144 EPIC 0.70: architectural investigation — ggmlc-derived inference runtime ideas ( — superseded (A4); owner lines: Lane 3 dissented with a falsifiable claim: in autoregressive decode, activations are <2% of / not a serving one. That claim IS the experiment.
0.7x schedule (release-schedule-07x, 2026-10-08)
Train 0.73.0: plan cut 2026-11-05, tag 2026-11-06 (plan dates, not measured). Report: docs/reports/0.7x-epic-reports.md.
Open children kept in 0.73.0 (owners are proposals; the cop assigns):
- 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 · P0 · ticket · size M · proposed owner la-0.73
- CRUX verb correspondence (#3739 amendment): every leaf of the derived apr surface maps to its llama.cpp/ollama counterpart or
comparator: none+ reason #3774 · P0 · ticket · size M · proposed owner la-0.73 - CRUX slice 3 (#3739): the chat verb — a two-turn conversation through apr chat, llama.cpp and ollama (pty-driven), hf and llamafile; judged on the final turn #3795 · P0 · ticket · size M · proposed owner la-0.73
- CRUX slice 4 (#3739): the serve verb — apr serve, llama-server and ollama through ONE OpenAI client, streaming + non-streaming, plus hf/llamafile servers #3797 · P0 · ticket · size M · proposed owner la-0.73
- CRUX-PERF: crux-perf-receipt-v1 — per-cell T0 speed vs competitor, n>=5 bootstrap CI, falsifiers F1-F5 (G2/G3/G5) #4464 · P0 · ticket · size M · no proposed owner yet
- TR-16: 0.73 platform arms (TRACE-001) #4571 · P2 · ticket · size M · proposed owner la-0.73
Moving to another milestone per the gate-graph walk (triage applies each move):
- Delete dead generate paths + one shared sampling/stop-token fn (verb→engine map follow-up) #4266 → milestone 0.71.0
- 0.69.4 G0: serve-level test that fails unless apr serve prefills Qwen3.5 through the batched path (#3596 countermeasure) #4250 → milestone 0.71.0
- OXIDE-001 (0.68.3, fast-track): cuda-oxide pure-Rust #[kernel] → PTX — one GDN kernel ported and measured on lambda-labs, gx10, yoga and mini; every kernel an ont:Kernel with parity, timing and safety receipts per silicon under pv lint --gate shapes #3522 → milestone 0.71.0
- apr serve native routes leak <|im_end|> into text: /generate, /batch/generate, /stream/generate, /realize/generate, /realize/batch #4344 → milestone 0.71.0
Children tracked here (REDUCE-1022)
- DP4A Q4K/Q6K GEMV profile is catastrophic through the Gated DeltaNet recurrence — Qwen3.5 on sm_89 needs the float MWV variant (PMAT-806 class) #3513 — DP4A Q4K/Q6K GEMV profile is catastrophic through the Gated DeltaNet recurrence — Qwen3.5 on sm_89 needs the float MWV variant (PMAT-806 class) (open)
- 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 — 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 (open)
- apr memory footprint: serve Qwen3.5 within 8 GB unified-memory ARM64 CUDA (Orin) #5321 — apr memory footprint: serve Qwen3.5 within 8 GB unified-memory ARM64 CUDA (Orin) (open)
- apr on GPU: refuse by name before OOM, never fall back to CPU silently #5325 — apr on GPU: refuse by name before OOM, never fall back to CPU silently (open)
- CRUX verb parity: chat, serve and perf receipts against llama.cpp and ollama #5336 — CRUX verb parity: chat, serve and perf receipts against llama.cpp and ollama (closed: not planned)
- Backend portability: correct kernels and config on every CPU, wgpu and CUDA target #5338 — Backend portability: correct kernels and config on every CPU, wgpu and CUDA target (closed: not planned)
- ci: reaper for WS_ARCHIVE_CACHE_ROOT (~541 MB per run, nothing deletes old archives) #5913 — ci: reaper for WS_ARCHIVE_CACHE_ROOT (~541 MB per run, nothing deletes old archives) (closed: not planned)
Activity
noahgift commentedon Sep 23, 2026
Operator decision 2026-09-23: 0.74.0 is "Any Model" (unified model support). PP-QUANT (#3421/#3420), PP-ARCH (#3424) and PP-TENSOR (#3428) move to 0.74's epic as its core; 0.73 stays pure performance parity with llama.cpp.
noahgift commentedon Sep 23, 2026
Plan posted: PR #4013
Baseline against pinned llama.cpp (
evidence/parity-http, August): decode 0.65×, prefill 0.27× and TTFT 3.7× slower on lambda; decode 0.66×, prefill 0.75× and TTFT 1.33× slower on gx10. No beat contract gates apr against llama.cpp today. Quorum: 3 lanes, all gemini (the gpt pool is 429 until about 09-27), so the result is advisory. Nothing is applied: no child issues and no milestone moves. The PR is not armed.docs(roadmap): correct the triage after the quorum -- 3 moves reverte…
docs(roadmap): record the 9 applied corrections, the #3513 withdrawal…
docs(roadmap): quorum round 11 -- a reproducible release-tree census …
noahgift commentedon Sep 24, 2026
Folded into this epic by issue triage (evidence /mnt/nvme-raid0/cop-inbox/evidence/triage-1623.md). Each row was a separate issue, now closed as folded; reopen any if it needs its own thread:
noahgift commentedon Sep 24, 2026
Folded into this epic by issue triage (evidence /mnt/nvme-raid0/cop-inbox/evidence/triage-1717.md). Each row was a separate issue, now closed as folded; reopen any if it needs its own thread:
avx2 && fmafast path returns before the VNNI gate is ever read #2604 — AVX-512 VNNI Q4_K kernels compiled but unreachable (avx2&&fma returns first)aprbinary #2611 — trueno Q4_K GEMV module (incl AVX-512) dead-code-eliminated from shipped aprcomparator: none+ reason #3774[-]EPIC 0.73.0: llama.cpp Parity — decode/prefill/TTFT/memory ≥ llama.cpp across the certified matrix[/-][+]EPIC E6 0.73: llama.cpp Parity[/+]88 remaining items
comparator: none+ reason #3774noahgift commentedon Oct 15, 2026
Folded into this epic's checklist from #4464 (same theme; text kept verbatim; unowned, work continues from here).
Original text of #4464
owner: aprender-fb
Parent: E6 #3999 (slot freed by aprender-d1, #3576 parked).
Brief: cop-inbox handoff/brief-crux-perf-history.md (operator CRUX perf-history plan).