Repository navigation
aprender v0.69.1
[0.69.1] - 2026-09-23
0.69.1 is the stoppers train for 0.69.0 (#3080), and it grew into the release that makes
every Qwen model the fleet holds run on CUDA, or refuse by name. It was assembled as
integration batches: 629 commits since v0.69.0, frozen at c619dddd4, and released as
d8a6df53a (rc/0.69.1-x). That is the freeze plus two post-freeze folds: the Qwen3.5-0.8B
load warning (#4032) and #4022. It was certified under a reduced, operator-declared
scope (see Certification below).
It has two themes. The first is gates that could not fail. 0.69.0 shipped a model
that emitted empty output on CUDA as a note rather than a failure, because one contract
key said the rung was optional. The second is one path per capability. Several verbs
had quietly grown their own copy of a template, a tokenizer or a dispatch. Each copy
drifted, and each drift was a user-visible defect: the prompt was templated twice, a MoE
model was routed to a dense forward, a Qwen3.5 model got a 503 on five serve routes, and
characters were split into U+FFFD on a stream.
Four release gates in this tree turned out to be one defect wearing four faces
(contracts, pv lint, check_model_ladder, and the clean-room contract test), all
resolving to a single missing green witness. That is the good case: one cause, one fix.
The bad cases are below, and they are the ones worth reading, because each was green
while being wrong.
Mixture-of-experts on CUDA (operator ruling: MoE folded into 0.69.1)
qwen3moeruns on the GPU.Qwen3-30B-A3B-Instruct-2507and
Qwen3-Coder-30B-A3B-Instruct(Q4_K_M) have a CUDA forward that proves itself against
the CPU forward on the real prompt first.apr paritymeasures both files at 92/92
positions, cosine 1.000000, on lambda and gx10. (#3714:6f6fa9a83,341c958af)- Every verb reaches that forward through ONE dispatch.
runandqareached it first.
chat,serveandcodehad their own routes to the dense model, which answered rc 8,
501/500 and rc 1. They now go throughrun_qwen3_moe_generate_dispatch, andserve
reportsused_gpuper response.serve'sstream=truearm was still on the CPU-only
generator, and it now dispatches too. (#3987:e29c55a7e,a00d29f9b,a29989039) - The dense CUDA constructors refuse an MoE model by name, before CUDA init. A guard
derives every dense construction site from the tree, so a new one cannot bypass the
refusal. (#3992:4ca778172,b8c73cbe0) - Qwen3.5-MoE (the hybrid SSM + experts architecture) still refuses on CUDA, by name. That
refusal is not a fallback.
Quant types: every held Qwen file runs on CUDA, or refuses by name
Each type below got a GEMV kernel measured on the device against a CPU decoder that had
first been proven against gguf-py on real tensors. Each was admitted to the GPU whitelist
only after that device A/B came back exact.
- IQ4_NL (#3869:
9ba76969a,10532e06e), IQ3_S (#3884:ac968613a), BF16 (#3908:
6883ff1bf,d0e92124c), Q5_1 (#3885:a8d63e09d). - IQ2_S, IQ3_XXS and Q2_K were admitted in ONE edit, each on its own measured kernel
(#3953, #3963, #3960:6bde9a279). - IQ4_XS is A/B-tested at every shape Qwen3.5-0.8B uses, including the non-power-of-two
ffn_downrow (14 super-blocks), with a negative control. (#3951:22658163d) - The whitelist was recorded in six places, and they disagreed with each other in both
directions. It now has one source. (#3884, #3931:b9435c6b6,58c88e20e) apr runprints the quant type of the model body, not the tiedlm_head's. (#4006:
36efbb152)
One template, one tokenizer
- The model's OWN chat template is rendered on every path (run, chat, serve, code and
the golden gate), replacing the hand-coded no-think scaffold. Qwen2.5 had been losing
its default system prompt: 26 tokens against llama.cpp's 47. (#3990, #3755:5991a588f,
c08437cdd) apr serveno longer takes the template from the client'smodelstring. An unknown
name used to get a plain prompt, and the reply ran on into "Human:". (#4007:
baef5e961)--thinking on|offon run, chat and code. Previously every Qwen3/3.5 model was
hard-routed to the no-think template. (#3723:70d20d44c,889d49a0f)- Non-ASCII token ids equal
llama-tokenizeon every tokenizer path apr ships. Every
non-ASCII byte had been mapped to id 0. (#3726, #4005:9684a7a41) - SPM encode splits control tokens by
token_type: TinyLlama's</s>no longer tokenizes
as three pieces. (#3993:b29ed7202) apr chatreads the tokenizer the.aprcarries. (#3903, #3911:769a4298d)
apr serve: every advertised route works, and every stream is well-formed
- Qwen3.5 answered 503 on
/v1/completions(#3874/#3875:24f9bb212) and on the five
realizar raw routes:/generate,/batch/generate,/stream/generate,
/realize/generateand/realize/batch. Each now has a Qwen3.5 arm, tested against
apr run's answer on the same rendered prompt (b7de8be40,062de0d97). - The live SSE path and the raw
/stream/generatepath decoded one token at a time, so a
character split across two byte tokens streamed as two U+FFFD. Both now hold a partial
character back until it completes. (a29989039,c619dddd4) - Every router advertises exactly what it mounts, and every stream ends with its wire's
terminal event. (#3979:b8101dc28,7a21e13a5) apr run -vno longer panics on a non-ASCII prompt. (#4018:8df47be4f)
Proving the measurement
- A GPU receipt proves the card was exclusive, or it is refused. An Ollama daemon could
load onto the GPU mid-measurement without taking the fleet lock. (#3964:204abee3c,
75626eab9) - The F2 GPU check is tri-state. It returned "assume the GPU is fine" when the CPU
reference was unavailable. It now reportsNotMeasured{reason}, never PASSED. (#3973:
06f32ce73) apr qa --jsonno longer reports a skipped gate aspassed: true. (#3965:
2b75f932c)- The golden thinking-ON leg renders the model's own template, and no longer passes an
empty<think></think>as reasoning. (#3948:0c4c5c133) - The ladder judges the model, not the terminal (#3925), counts the serve probe in a
row's verdict (#3886), and decides serve teardown from the process rather than the port
(#3943). Diagnostics are no longer cut mid-number (#3872, #3904). - The CRUX v2 differential: per-verb prompt sets, the
codeverb, hf/vLLM
ground-truth rows, prompt certification, and sha-bound receipts. Each apr serve route is
judged against the comparator route that asks the same question in the same
representation. (#3962, #3957) - The publish cascade can finish. It used to give up after one retry round, which
would have left 49 crates on crates.io and not aprender itself. (#3892:e6a799609,
bc2e61e71) - Coverage is measured, not assumed: failing tests are listed, and "did not measure" is
never a verdict. Floor 88%. (#3839:2fe5858be; the value is 90.99% (861,156 / 946,437 lines at the freeze 4f81bde; floor 88))
Gates that could not fail
- A Q4_K rung can no longer be optional.
qwen3-8b-q4kmwasrequired: false, which
is exactly how 0.69.0 shipped an empty-output CUDA model as a note. No Q4_K model is
optional (#3712); the key is now refused rather than tolerated, and arming it surfaced
the defect it had been masking since 0.69.0. - The golden-output gate scored degenerate output as correct. The greeting case
accepted a bare"!"by substring match — and"!"is token id 0 in the Qwen vocab,
i.e. precisely what a model with dead logits emits. Measured on the pre-fix gate,
"!"-repeated passed at lengths 1..=11 and was caught only at 12+, because the
existing guard testedbytes.len() >= 12. So the gate was blind exactly where the real
failure lives: short degenerate output. A newgibberish_dominant_charactercheck (8+
non-space characters, 90%+ identical) now runs before the answer check, so it covers
cases added later, and it reuses CRUX's own threshold so the two judges cannot disagree
about what "degenerate" means. (#3782, #3774) make contractsprinted its verdict and did not enforce it. The command was
"$PV" lint contracts/ | tail -5, so the recipe tooktail's exit status. The
armed-meet verdict was displayed on every run and could never fail the build. (#2336,
#2360 are the same idiom shipping twice before; this is the third.)- The release ladder measured one verb while the contract declared four. The release
matrix claims{run, chat, serve, code}; the ladder provedrun. The receipt now
carries averbsobject,serveis probed against routes derived from the router's
own source literals rather than a hand-written list, and the judge refuses by name a
receipt that omits a verb, reports no routes, or probesservewithout/api/chat.
The anti-shrink floor also gained a way to admit a reasoned removal instead of only
refusing every shrink. (#3828) - A NO-GO release run destroyed the evidence it cited. The dogfood worklog was removed
unconditionally, so the one verdict whose reasoning you need was the one with no
artifact left. It is now kept on any non-GO. - Pre-publish dogfood could never reach GO. Its declared gates resolved a stale debug
binary and refused, before anything builttarget/release/apr. - A gate reported RED about a rung that passes every one of its gates. On
qwen35-27b-q4km— a required rung —apr qaexited 0 with"passed": true,
capability_matchPASS andgolden_outputPASS ("3 golden test cases passed …
served by GPU"), and the ladder marked the rung red because its own row builder
crashed on a malformed field. Every other defect in this release hunts a false
GREEN; this is the inverse, and it is the one that would have made us hold a good
release and go looking for a fault in a model that did not have one. The field is
now validated where it is assembled, with the backend still in scope. (#3849) apr qa --jsoncould exit having written zero bytes.run_qa(…)?returned past
theif jsonblock, so any error produced no document at all. Measured on gx10: 78
seconds of GPU work, its own stderr recordingF2 guard: passed in 78442 ms on 20 positions, and then nothing on stdout. The ladder appended the empty result as an
empty line, the receipt assembler dropped it, and a red required rung vanished from
its own receipt while a separate counter still reported it —red: 3with two reds
in the rows. A second zero-byte path sat beside it:unwrap_or_default()turned a
serialization failure into an empty string, which is worse, because it looks like
output. The document is now emitted on both paths and the error still returned, so
exit codes are unchanged. The coverage that existed drove this exact path and asserted
onlyresult.is_err()— the test named for the output never looked at the
output. (#3842)- The
codeverb had never been measured. 48 of 48 cells, both hosts. The ladder
hard-coded one backend flag and passed it to all four verbs, whose CLI surfaces
differ:apr codehas no backend selector, so clap exited 2 on a usage error and the
receipt recordedran: false— a harness defect wearing the costume of a model
result, indistinguishable from a model that genuinely failed. Its siblings in the
same run returned meaningful codes (12 NotImplemented, 14 BackendUnavailable); 2 is
clap. The flag is now derived fromapr <verb> --helprather than a table, which
immediately caught a second case: the flags live on the subcommand, so
apr serve --helplists none whileapr serve run --helpdoes.codeis measured
once per rung and labelledbackend: "inherited-from-spawned-serve", because it
spawns its own server and "code on cpu" is not expressible today (#3845). (#3843) - The ladder's serve probe hung forever on teardown.
kill "$pid"targeted the
flock/choomwrapper, notapr serve, which survived, kept its port and was
re-parented away. Every bound the probe declared was holding — the 90 s health wait,
all sixcurl --max-time 60; the unbounded step was the one assumed instantaneous.
Rung 1 of 8 hung 13+ minutes on both hosts. Teardown now resolves the listener by
port, proves/proc/PID/cwdis this tree before signalling, and records
teardown: clean|escalated|failedin the cell. Measured across a full run:
48 escalated, 0 clean — the wrapper kill has never once worked. (#3828, #3838) - The model universe was a glob, so 10 of 28 held models were invisible.
*q4_k*.ggufand friends missedQ4_0,IQ2_XXS,IQ3_M,IQ4_XS,f16and two
.aprfiles by filename — including a 35B Qwen3.5 MoE no gate had ever loaded. #3712
replaced a hand-picked list with a glob, which has the same omission property: a
decision moved from a human to a string match nobody reviews. Widened to every Qwen
2.5/3.5 file the host holds, regardless of quant. (#3846)
Qwen on CUDA — correctness
- APR Q4_K GPU serve no longer emits garbage. (#3791, with #3571 units 1–2 and #3595)
- One template detector.
apr chatstopped routing Qwen3 through ChatML;apr code's
embedded fallback now takes the production detector instead of guessing from a filename.
(#3801) - The three spellings of a chat prompt now reach realizar identically. A pre-templated
prompt was templated a second time, andsanitize_special_tokensinserted U+200B,
producing<unk>tokens and a token count that disagreed with llama.cpp's. (#3743) - The golden gate asks the model the way production asks it. It previously sent ChatML
to every architecture, which leftqwen3in thinking mode — a mode no production path
uses — and on one host its greedy reasoning for "2+2" overran the token budget, so the
gate reported "Empty output" for a model that answers correctly throughapr serve.
The GPU leg is now typed and can sayErrored,UnclosedandNotRundistinctly.
(#3724) - The ollama wire's delegation is asserted, not assumed. (#3715, reported by Alfredo)
- FP8 prefill scaled per tensor, so one outlier collapsed a whole projection.
E4M3 batched prefill used a per-tensor absmax (448/absmax), so a single outlier
inffn_downdrove the rest of the tensor toward zero — near-orthogonal output, not
precision drift. Now scaled per token and per channel. Measured after the fix on
lambda (sm_89, FP8 still ON):qwen2.5-coder-0.5banswers correctly on both
apr run --gpuandapr qa's golden GPU leg, andqwen2.5-coder-7bno longer needs
its FP16 retry. (#3804)
CLI honesty
apr chat --no-gpuno longer uploads the model to CUDA, and--jsonnames the backend
it actually used. (#3794)- A bare
apr runno longer pays 1.7 GB to initialise a backend it then rejects. (#3757) apr code --output-format jsonwrites exactly one JSON document on every exit path,
including failures. (#3775)- A sampling flag given alone now samples, instead of being silently ignored because the
other half of the pair was absent (DEFAULT_TOP_K). (#3754) - Seeded sampling is honoured on
runover SafeTensors (#3760) and onservefor APR
Q4_K GPU chat (#3786).
Documentation accuracy
- The README claimed 110 CLI commands and cited
apr --helpas its source of truth —
a command that prints 112, because it listshelpitself. The registry says 111
andgrep -c '^ - name:'says 117. Three mechanisms answer the question and the
published number matched none of them. Now 111, sourced from the registry, with both
wrong counts named inline. The guard had been passing while printing this finding,
which is why nobody had to act on it. - Contract census regenerated: 1830.
The comparators, and what a CRUX cell now has to say
-
A CRUX cell states its own coverage. A verdict read weeks later collapses to a
colour, so each cell now carriesquorum(how many engines answered, and which), a
versionper engine, and asubjectrecord naming the model and apr version under
test. A cell where only apr answered isUNJUDGEDand can never be GREEN. The floor is
deliberately asymmetric: RED needs one comparator, because "a comparator answered
correctly and apr did not" is a complete claim and every way apr fails to answer is by
construction a one-engine cell. A symmetric floor was tried first and suppressed
seven legitimate REDs, among them "a missing apr row where llama.cpp is right is
RED" — the rule CRUX exists to enforce — and "apr's degenerate!!!!is no answer:
RED where llama.cpp answered", which is the same dead-logit output #3782 taught the
golden gate to stop scoring as correct. The two fixes are one story: a model emitting
!must fail the gate that reads it and must not be excused by the gate that
compares it. The fixtures caught the floor in one run; the rule was fixed, not the
fixtures. (#3832, #3782) -
"Not found" was two different facts wearing one string. An engine that did not run
now records a classified reason, andnot_on_PATHis distinct from
binary_not_found_at_path. The live case:ssh lambda-labs llama-cli --versionreports
command not foundwhile~/.local/bin/llama-cli --versionprints the pinned
0.4.1-dev (build 10987, commit d1d3c3396)— lambda's non-interactive PATH has no
~/.local/binand gx10's does. CRUX runs cross-host over ssh, so one string for both
blames the comparator for the harness's mistake. Enforced by a mutant that collapses
the two reasons and is detected.The classifier's own case table then caught a guard that could not fail, inside the
guard written to catch guards that cannot fail: two of its patterns shipped with
PATHcapitalised while the haystack is lowercased, so they could never match. No
reading would have found it; running the table found it on the first run. That is the
release's theme in miniature — re-run the table, do not re-read the pattern.
(#3832, #3831) -
The comparator was four releases behind, and its version gate could not fail.
ollama moved 0.33.2 → 0.34.2 on both hosts (paiml/infra#911). This is not hygiene:
0.34.1 changed GGUF creation from safetensors, which is exactly the
Modelfile FROM <path>mechanism CRUX uses to feed every engine the same file.
Moving the pin exposed two gates that could not fail — one inverted, where
ollama --versionreports the daemon and names the client only in a mismatch
warning, so grepping the output for the pin was satisfied by the upgrade being
incomplete; and one blind, where the service check discarded/api/version's body,
so the pin could never make the daemon drift. Verified after: ollama 0.34.2 imports and
generatesqwen3andqwen35GGUFs. (#3833, #3739) -
llama.cppwas never broken on either host. A dead symlink into an unpinned
checkout shadowed a working pinned build on lambda, and gx10's pinned build was
reported "in progress" when it had been built and working the whole time. Both
readings came from a PATH lookup mistaken for an install. (#3831)
Known issues
- Qwen3.5-0.8B (Q4_K_M), thinking ON, greedy: the think block never closes on apr. A
greedy near-tie path, with no localized defect found. It ships as a known RED, and
aprnow warns at load that this model is not CRUX-certified (#4032:d8a6df53a).
Tracked in #4030 (0.71). - Qwen3.5-0.8B-UD-IQ2_XXS answers "2+2" wrong on BOTH apr and llama.cpp, using the
official template. It is a RED-MODEL candidate (quantization damage), pending the
logit-margin measurement. (#4004) - #4022 landed after the freeze, by operator override. aprender-mcp serves a
caller-suppliedToolIndex, and the apr tools sit behind the defaultapr-toolsfeature
(PMAT-3954:3805a3371,1eb1fe808). ItsCargo.lockdelta is one dependency edge:
aprender-mcp no longer depends onanyhow. It was not part of the frozen tree the sweep
measured. - IQ3_S and IQ2_S CUDA GEMV kernels fail to load on compute capability ≥ 12 (GB10 sm_121,
RTX 50xx sm_120), from a PTX patch-pass bug. apr fails closed: it runs on the CPU and says
so in its provenance (fell_back: true), and a forced--gpuexits 14. No output is wrong,
and no CRUX-certified model uses these types. The fix targets 0.70. (#4096) apr code --thinking onrefuses:apr servehas no thinking-ON path yet. (#3723)- Known gap: the
apr capabilityverb has no book page in 0.69.1.apr capability --help
and--jsondocument it. The book's CLI parity check reads 112/113
(FALSIFY-BOOK-CLI-PARITY-001:book/src/cli/capability.mddoes not exist). The chapter, its
page contract and the SUMMARY entry land in the post-release follow-up (d5cecdee6). apr serve's Ollama/api/generateaccepts nocontext, so a multi-turn conversation
cannot continue on that wire./api/chatand/v1/chat/completionscarry history.
(#4025, 0.70)
Certification — operator emergency scope
This release was NOT gated by the full model ladder. By operator emergency scope, the
release gate is a CRUX smoke on both GPU hosts (lambda: RTX 4090, sm_89; gx10: GB10,
sm_121). The full model ladder moves to the nightly run and is not a precondition of
this tag. A model that is not in the list below has no release-time certification in
0.69.1.
Every number here comes from the release's own receipts for d8a6df53a.
- CRUX smoke (apr vs llama.cpp, ollama, vLLM, hf; run / chat / serve / code;
thinking off and on), lambda: 134/134 GREEN (lambda-gpu.json sha256 e803ffb9…). gx10: 134/134 GREEN (gx10-gpu.json sha256 95764d1f…).- Qwen3.5-2B-Q4_K_M: off 32/32 per host (thinking-on not admitted)
- Qwen3.5-4B-Q4_K_M: off 32/32 + on 19/19 per host
- Qwen3.5-4B-UD-Q4_K_XL: off 32/32 + on 19/19 per host
- MoE: lambda 92/92 positions, cosine 1.000000; gx10 92/92 positions, cosine 1.000000 (plus 3/3 resident-MoE GPU parity tests at the #4046 head).
- Full model ladder: nightly, after the tag. the full ladder moves to the nightly (aprender#4040); not run for this tag.
Closed by this release (32, from the #3988 triage, each on release/0.69.1-batch-2)
| Issue | Commit(s) | What |
|---|---|---|
| #3571 | 2de6eabb1, 4e4fe772a, 6f2817ffe |
apr serve cannot load Qwen3.5 at all — 'Architecture qwen35 … runs through Qwen35Model'; goal A's floor and… |
| #3723 | 70d20d44c, 889d49a0f, 5991a588f |
apr has NO thinking toggle: realizar hard-routes every Qwen3/Qwen3.5 to the no-think template (chat_templat… |
| #3724 | b4701dcd9 |
qwen3-8b-q4km golden_output 'Empty output' on lambda: the gate ran Qwen3 in thinking mode no production pat… |
| #3726 | 9684a7a41, 43f25da06 |
apr's byte-level BPE tokenizer is non-canonical: every non-ASCII byte → id 0, ASCII segmented unlike llama.… |
| #3742 | 9684a7a41 |
tokenizer parity: the APR/HF encode paths are sibling copies #3726 did not touch — aprender-core BpeTokeniz… |
| #3743 | 3fe9a6cff |
apr run --prompt P --chat templates the prompt TWICE: the CLI wraps it in ChatML, then realizar applies the… |
| #3750 | efe74818d, 01989323d |
apr qa's capability predicates std::fs::read the WHOLE model (twice, plus a to_vec copy) — RSS swings past… |
| #3754 | 9f8836c71 |
apr run --temperature T is silently GREEDY: --top-k defaults to 1, so a sampling flag given alone has no ef… |
| #3755 | 5991a588f |
Qwen3/3.5 no-think prompts are built from a HAND-CODED scaffold that differs from the model's own template… |
| #3757 | d50655504 |
Published apr 0.68.2: default apr run picks wgpu, dequantizes 1.7 GB to F32, then REJECTS its own result… |
| #3760 | 8b06a012f |
SafeTensors run and every AprTransformer caller never sample: run .safetensors is hard-greedy (CPU) / takes… |
| #3769 | a3a9b9965, ee080029c, ff4bf8e0f |
post-release ALWAYS updates README.md and apr-cookbook with SHACL-validated recipes — rendered from the rel… |
| #3775 | defe10bbf, 4ca7fdcc9 |
apr code -p --output-format json prints NO JSON envelope on a driver error (rc 1, stderr only) — a machine… |
| #3782 | f7a8e65ac |
apr qa golden_output: the greeting case's "!" pattern scores degenerate output ("!!!!", token id 0) as correct |
| #3785 | 0c85942dd, 2b64c7f0e |
FP8 batched prefill diverges on sm_121 (GB10): qwen2.5-coder-7b BATCHED_PREFILL=1 fails F2 at pos 1 (cos 0.… |
| #3786 | d9ba90cff |
serve APR Q4K GPU chat samples with a wall-clock-hash RNG: seed does nothing, sampled output is unreprodu… |
| #3791 | a6b69411f, 6f2817ffe |
APR Q4K GPU serve path (ALB-095) emits garbage: 'HHHH…' for every seed at T=0.8, Invalid token ID 151935 (v… |
| #3794 | 9ee0888b7 |
apr chat --no-gpu still uploads the GGUF to CUDA (VRAM held outside the GPU lock), and apr chat reports no… |
| #3801 | 24ffd4552 |
Thinking ON under greedy decoding never closes on Qwen3.5 0.8B/2B (and 4B in apr code): think-budget guard… |
| #3804 | 2b64c7f0e |
qwen2.5-coder-0.5b-instruct Q4_K_M: CUDA golden output is gibberish (CPU passes) — on main, found by the #3… |
| #3807 | 2b64c7f0e, 0c85942dd |
FP8 prefill recipe zeroes activations (per-batch E4M3 scale × subnormal flush-to-zero): qwen2.5-coder-7b `a… |
| #3815 | 3a5bc6d3e |
DecisionTreeClassifier split-finding is O(n² × features) per node — blocks training past ~100k rows |
| #3816 | 3a5bc6d3e |
RandomForestClassifier::fit/predict fixes (sequential training, O(n² × trees) predict) are written but unco… |
| #3817 | a5024aa72 |
apr run --gpu on qwen3moe Q4_K_M silently falls back to CPU (rc 14) instead of refusing by name — 0.69.1 mu… |
| #3828 | 16ca36fc6, 5823012a7 |
P0: the release gate's verb dimension computes over ONE verb — the ladder never runs serve, chat or code, a… |
| #3842 | 610942945, b026cdc03 |
A ladder receipt that cannot name its own red: gx10 says red=3 with 2 reds in rows, and the failed REQUIRED… |
| #3843 | b026cdc03 |
The code verb has never been measured by the ladder — 48/48 cells rc=2, a clap usage error recorded as a… |
| #3849 | 5593c2037 |
FALSE RED: qwen35-27b-q4km passes every gate and the ladder reports it red — the row builder crashes on a… |
| #3875 | 24f9bb212 |
/v1/completions returned 503 for the ENTIRE Qwen3.5 architecture — the completions chain had no arm for it |
| #3880 | 530e69e19 |
WITHDRAWN: cop ruling on five non-Q4_K ladder rows — refuted; the deferral mechanism has no cause key (what… |
| #3881 | b73b49d73 |
apr chat requires an external .tokenizer.json that apr run does not — and reports its absence as Inva… |
| #3885 | a8d63e09d, 0a7067391 |
apr serve admits a non-Q4K .apr into the Q4K pool path and fails at prefill — the load-time rejection its f… |
Release-night gate record (cop, 2026-09-23)
- Gate scope: OPERATOR EMERGENCY SCOPE, CRUX smoke only. The operator's words: "for this particular release we need emergency surgery. after a binary is build we really only care about CRUX on gx10 and lambda (but "smoke test") style. anything huge, must be nightly only". Judge rc 0, crux-smoke-judge.out sha256 c72932f9…
- Pre-publish dogfood: NO-GO on exactly 4 known-red rows, adjudicated (receipt-…-ADJUDICATED.json, verdict_basis "NOT a green dogfood"):
- #4086 ladder scope and #4085 claim literals: operator selection "Ship now as known failures";
- #4101 pmat-comply CB-200: operator's words "bypass pmat comply and push to .7";
- #4099 bashrs SEC001/SEC010 ×8 in scripts/: a cop ruling extending that selection; the same findings are suppressed with reasons on main via #4046.
- Publish preflight seams:
- R4 via ancestry of the release-to-main PR head (the release was published before that PR merged, operator: "move this release to crates.io");
- R5 via the adjudicated receipt;
- R7 via r7_scope_judge-v2.sh (sha256 d09ccd10…).
- Known issues: