release 15 - the board stops invalidating daily; the M5/M4 re-mint on one pin, serve cards, and the news - #3909
Conversation
…ASLLAMA_RELEASE The one constant conflated three invalidation scopes (tune sidecars, board/records provenance, exchange validity) and was bumped on any kernel change, so every bump voided the whole board and every box's sidecar. It is now DASLLAMA_RELEASE, bumped only on a declared release - a maintainer ruling that bench comparability is broken. Per-change invalidation stays with the finer mechanisms: IMAGE_VERSION and the reflected layout fingerprint (dlims never read this constant - verified). Value stays 15, so every v15 artifact remains valid; wire names (dasllama_version in exchange JSON, sidecar provenance via the new version_key= override on [tune_scope], bench records) are schema-stable. REVIEW.md's kernel-work bump duty is replaced by the declared-release rule; the per-entry kernel-hash hardening is ledgered as followup_general 58. Also: CLAUDE.md's lint-opportunity routing now names REVIEW.das gates for folder-owned patterns; the release_remint_plan.md arc plan lands with the step-0 gate-candidate assessment. Gates: model-free suite 74 files green; compile checks on the renamed roots. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…he msl fail-closed sync cell [metal_dispatch] on a class with @Workgroup members now refuses at compile when tgmem= is absent - the generated builder would bind ZERO threadgroup memory and the kernel reads whatever length the encoder last had (the qk_rope bug class; it shipped working only via sticky encoder state). All 93 @Workgroup classes at HEAD already pass tgmem=, so this is pure prevention. Negative+positive controls ride test_metal_misc_kernels as spawned compiles (the tgmem-less fixture must refuse with the message; the tgmem= twin must compile). modules/dasMetal/REVIEW.das grows check_fail_closed_sync (followup 45): the tests/msl/_fail_closed fixture list and test_msl_fail_closed.das's check_rejects asserts must match both directions - either drift is a finding (negative-controlled both ways). REVIEW.md carries the weakening-residue rule. Gates: kernels suite 7/7 files green (misc 4/4 incl. the new lens gate); modules/dasMetal/REVIEW.das OK. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
Slice A (kernel coverage): cov_tower grows the gemma4a whole-chunk row (GPU mel + convs + 12 Conformer blocks off raw samples), the canary FastConformer row (32 rel-pos XL blocks), the qwen25v single-window row (win-attn + row-gather), the qwen3v GPU-stem row, the qwen3a mel now built from samples so the GPU mel hook dispatches, the gemma3v flash-off leg (head_restride + the slab route rode only sticky luck before) and the crowned twin-W leg (cvt_half + the half GEMMs). Every target family verified dispatching in the census report. Slice B (board plumbing): AsrModelSpec grows metal_served - the whisper pair, canary, qwen3a, gemma4a and omni declare the end-to-end Metal serve on their catalog rows; is_metal_served_family reads the flag (parakeet stays CPU by measurement). The like-for-like GPU ref pairs extend beyond whisper-cli: mtmd gets its -ngl 99 arm, nemo a torch-MPS --device arm (canary_qwen_bench.py). The stale m1/m4 canary rows pinning the retired f16 decoder are removed (m1 retired by ruling - no more m1 runs; m4 re-mints on the q8 artifact in the Efficiency-gate pass); site records regenerated. Followup 45 stays resolved; followup 57 verified no-work (Plane length overloads already return int64) and re-ledgered as such. Gates: census suite green with all new rows dispatching; records/site/specs/ exchange schema tests 72/72. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
The 2026-08-30 entry: M5 as a first-class target - tensor-API kernels under the per-box crowns, GPU vision towers and speech encoders, the hybrid all-compute CPU pool - with the first official M5 Max board rows quoted from records/m5.json. Regenerated index.html/feed.xml/sitemap.xml also catch the old entries up to their ASCII-normalized _news sources (deploy output already matched). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc (cherry picked from commit 20ac6e6d3399ddc1da0d264028beaa2a6bcbfb24)
…d sibling setup_asr_rig builds a build-metal llama-mtmd-cli beside build-cpu on Apple boxes (the CPU-only build's -ngl is inert - a gpu ref leg through it would stamp a CPU run under a metal label), profile_common resolves it (mtmd_bin_metal, empty = the gpu leg skips loudly), and setup_lcpp_ref builds llama-mtmd-cli beside llama-bench so the sibling rule resolves the image refs on a fresh box. Slice C outcome + slice D predictions logged in the plan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…tier boot-restore A serialized exe restores globals as DATA, so function values arrive null unless a boot-restore [init] heals them (dasllama_config's restore_dlim_source_defaults states the law; dasllama_gpu_tier HAS such an [init]). The vulkan decode-mirror/ffn-tail arc added 12 declaration-defaulted hook globals that never joined it, and put one - g_moe_gpu_attn_dec_claim, via prefill_claim_mirrors - on the UNCONDITIONAL prefill tail. Every standalone-exe forward died with 'invoke null function': all 10 board text models refused at the parity pregate, the four decoder-gguf ASR families' cpu and accel cells crashed, image cells never ran. No -jit gate could see it - script mode runs the declaration initializers - which is why months of green suites proved nothing about the exe rail. Found by git-bisect (first bad 4002388) + a staged exe probe; the 12 join the restore. test_exe_smoke joins the model-free suite: builds _exe_smoke_root.das with -jit -exe and runs the artifact through a 4-token generate (negative-controlled: red on the crash without the fix, green with it). SmolLM2 small tier; skips honestly without it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
The full re-mint on the b10659 pin: 10 text models (metal pp 1.07-1.23x / tg to 1.33x ahead; the CPU board debuts vs clean-cpu with the MoE 32-row split at pp 1.60-1.68x, accel to 1.82x), the image board with honest metal ref pairs at last (the patched sibling), the full ASR board with GPU ref twins (das metal ahead of whisper-cli-metal, mtmd-metal and nemo-MPS everywhere but the ledgered canary gb1 CPU front), and the owed board cells: canary q8 decoder + Metal FastConformer, gemma4a/qwen3a metal rails, and the qwen vision carriers - Qwen3VL-4B and Qwen2.5-Omni-3B verified 40/40 against the live oracle, flipped official, their image cells minted (the qwen25v tower reproduces the arc: enc 106.0 vs 118.0 ms). Red 1, gpt-oss pp halved (3989 -> 2047): the followup-53 scaffold migration renumbered the mx4 tensor twin's x/y binds to the family contract (xf@3 y@4) and the HAND-BOUND race arm kept 2/3 - the twin read the zeroed output buffer as X, the race honestly measured garbage (maxdiff == maxref), refused the crown, and serving fell to the simdgroup family. Race arm fixed, both manifests re-minted (moe_mulmm_mx4 tensor-crowned again), cell respotted: pp 3995.1 - the pre-merge number. Third incident of the hand-bound-race class; the census opaque-dispatch gate is now the priority lint candidate. Red 2, the canary nemo ref: NeMo's generate mutates the prompt list in place (warm reps degenerate to a 3-token stub) and torch.set_num_threads beside an MPS device degenerates EVERY rep; the crashed cell then laundered a stale onnx row through the rowless-pipe --out fallback, which never checked the tool. Bench rebuilds prompts per rep, discards degenerate reps loudly, keeps the threads knob CPU-only; the fallback is onnx-only. Honest rows: das metal 2.29x/2.02x ahead on jfk/jfk3, 0.68x on gb1 (the ledgered CPU mel+subsample front). Red 3 (onnx whisper 1/5 clips) closed by-design (single-window adapter, documented SKIP). The two dasllama_math accel-override globals join a boot-restore [init] (REVIEW.das gate green). Site records regenerated; records/site/specs gates green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…y gate proven live The retired f16-decoder rows' replacement: canary requanted ON THE BOX (llama-quantize Q8_0 per the recipe; a fresh build-quant dir - the old ref build's SDK path had gone stale), the m4 sidecar re-minted by the release, and the cells landed with a WORKING nemo torch-MPS twin: das metal 2.10x/2.19x ahead on jfk/jfk3, 0.79x on gb1 (the same CPU mel+subsample front residue as the M5 row - one ledgered class, two boxes). The tier-kind gate held live: M4's pool stays 10 lanes (the allowlist refuses the 4 E-cores; the live: real-lanes witness, not the regime intent line). One transient: the sweep-context nemo ref degenerated every rep right after three das children exited (the async-reclaim window) and the new DEGENERATE guard refused to record it - a quiet-box rerun passed 6/6 reps; the guard turned what used to be silent garbage timing into a loud retry. Site records regenerated; records + site schema gates green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…arries the final board Qwen3-VL-4B and Qwen2.5-Omni-3B get serve rows (commit-pinned urls per the serving rule - resolve/main floats), each naming its mmproj companion, so dasllama-server's /catalog offers the deepstack tower and the window-ViT tower alongside the gemma line. The dasllama.io entry is rewritten on the re-minted board: every figure now quotes a committed record row (E2B 9074/161 vs 7413/137, Qwen3.8-27B 914/27.8 vs 752/25.4, 30B-A3B 3753/166 vs 3422/137, gpt-oss 3995/163 vs 3477/149; 12B image encode 7.1 vs 95 ms, the qwen25v window ViT 106 vs 118, whisper turbo jfk 140 vs 153), with the M4 refresh and the M1 record named. Gates: model-specs invariants 12/12, openai-server suite 21/21 (the catalog is a view over the spec table, so the serve rows are gated there), site metadata 4/4. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…rs section
The dasLLAMA harvester's ledger, ruled and landed: the recovery-file rule
(performance/REVIEW.md - a fallback names the tool that writes its file and reads it
for no other); ARCHITECTURE_MEASUREMENT.md sec.2.20 {#asr-gpu-pairs} (the metal_served
opt-in + anti-sandbag, the three GPU ref arms and the two pairless legs, the sibling
build + timing patch + Metal-ON twin) cited from build_flavor, gen_bench_records main
and mtmd_bin_metal; the scaffold-vs-family-tail binding-number fact appended to
ARCHITECTURE_GPU_PREFILL.md sec.2.2g and cited from race_moe_mulmm_mx4; comment
compressions and drops across the diff per the ledger; the two stale //! docs
(run_asr_mtmd gpu arm, asr_pybench_args device) extended; the mtmd_bin comment
restored onto its function; test_exe_smoke's census entry in tests/CLAUDE.md.
dasMetal's harvest: the gate-cell header drops (law lives in REVIEW.md + finding
strings), ARCHITECTURE.md gains Gate C in the test-gate inventory, and tests/msl's
needle rule shrinks to the machine-checked residue form.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…ry census mints The per-checklist audit fan-out (14 auditors: 11 walk checklists + the MEASUREMENT/GPU/TOWER routed companions) over the release-remint branch, every accepted finding applied: Records: the four orphaned pre-rebase commit stamps re-stamped to byte-identical reachable twins (rows' sha, three tune archives re-hashed + renamed with every tune_sha repointed, LKG + the in-tree bench sidecar); gen_site_records --verify OK, all schema gates green. Serving catalog: the two new serve rows' mmproj companion urls commit-pinned (the catalog gate was red on the floating /main/ refs); catalog_idle.json re-captured from a live boot (7 cards), playwright 106/106 after teaching two specs the vision-present behaviors. Tests: the census tower rows gain family_on tags + lane pins and mint IN MEMORY via stage_*+mint_* (a pinned-lane disk bake GC-purges the serving lane's .dlim - it broke test_audio_embedder; new mint_gemma4a_encoder fills the one missing wrapper); the strict whisper/gemma4uv cells pin the simdgroup lane through the new pin_metal_tensor_crowns latch (the re-minted sidecar armed crowns in suites for the first time; a bare setter cannot hold a lane - every load re-applies profile crowns; the trio's crown flags cache at prefill init); the role fixtures gain their tgmem= (the new lens refusal fired ahead of the role error); the exe smoke reads env through env_value_of and spawns Windows-safe. Docs: news entry drops a false cross-box superiority claim and carries record provenance; the checklist self-review repairs land across tests/benchmarks/performance/site/msl/server/ ladder/GPU/TOWER/MEASUREMENT (six exchange rules move to the module checklist, gate-enforced rules collapse to weakening residue, enumerations become properties); followup 60 ledgers the crowned-lane strict-parity question. All three owed suites green on the final tree: model-free, kernels, coverage. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
… control - test_asr_catalog_invariants pins the metal_served roster per row (the flag decides which rows get GPU board cells and which reference legs pair GPU-vs-GPU; flipping canary reds) - test_model_catalog pins the four curated card names (the count floor alone let a whole card vanish green; renaming qwen3-vl-4b reds) - test_exchange_schema pins the tune scope's version_of/version_key text (the rename's load-bearing compensator - llvm_tune exposes no runtime reader of the resolved key, so the pin is textual; blanking version_key reds) Woodpecker round 2 at the prior tip: zero findings. TDD audit: 19 controlled branches, 12/12 test edits justified; the remaining measurement-orchestrator branches ride the standing coverage-followup PR. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
…, two off-Apple lint nits - LINT027: the six exchange rules moved into modules/dasLLAMA/REVIEW.md pushed it to 317 lines - they now live in the routed REVIEW_EXCHANGE.md companion (the parent routes by trigger), 294 lines left - LINT012 (linux mirror): the two sample-fed census rows annotate [unused_argument(t, samples)] - off-Apple the gated bodies are empty - tests-interp / tests-jit reds were chained-load transients (three files erroring on builtins that resolve solo and on targeted lane reruns - both lanes PASS clean) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
- the Canary sentence now carries the gb1 pair (das 6484 ms beside the reference's 4383 on the M5) - the long-audio gap stands on the page next to the wins, and is named the next dig - site/REVIEW.md's first receipt rule no longer contradicts its sibling: a rendered cmd identifies the RUN, and one run's cmd covers the several rows it produced (the ASR reference legs' per-clip rows) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
There was a problem hiding this comment.
Pull request overview
This PR implements dasLLAMA “release 15” rollout mechanics by decoupling the tune/sidecar/board staleness counter from routine kernel changes (DASLLAMA_VERSION → DASLLAMA_RELEASE), re-minting/re-stamping measurement artifacts accordingly, and extending the surrounding gates, tests, serving catalog, and site/news outputs to match the new release semantics.
Changes:
- Rename and re-scope the engine versioning contract to
DASLLAMA_RELEASEwhile keeping the wire/schema keydasllama_versionstable. - Add/extend review gates and tests for (a) exchange + staleness pinning, (b) standalone
-exeserialized-globals hazards, (c) Metal lenstgmem=enforcement, and (d) expanded tower/ASR coverage and catalog invariants. - Refresh serving catalog fixtures/specs and regenerate dasllama.io news/feed/sitemap content for the M5 announcement and updated provenance rules.
Reviewed changes
Copilot reviewed 79 out of 83 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| utils/internal/dasllama-ladder/REVIEW.md | Update ladder checklist wording (record-store validation). |
| utils/internal/dasllama-ladder/README.md | Align ladder README with wire stamp terminology. |
| utils/dasllama-server/tests/towers.spec.js | Adjust tower-offer test to ignore capture-box stock state. |
| utils/dasllama-server/tests/fixtures/catalog_idle.json | Refresh captured catalog fixture content. |
| utils/dasllama-server/tests/catalog.spec.js | Expect image_mmproj in config when vision tower present. |
| utils/dasllama-server/test_model_catalog.das | Add roster presence pins for key serve cards. |
| utils/dasllama-server/test_exchange_client.das | Switch fixtures/tests to DASLLAMA_RELEASE while keeping wire key. |
| utils/dasllama-server/REVIEW.md | Tighten fixture/Playwright capture rules wording. |
| utils/dasllama-server/README.md | Document exchange apply gate using DASLLAMA_RELEASE. |
| tests/msl/REVIEW.md | Rephrase fail-closed sync rule to point at gate check. |
| site/REVIEW.md | Clarify receipt rule for shared-run cmd provenance. |
| site/LAWS.md | Record ruling about receipt cmd identifying the run. |
| site-dasllama/sitemap.xml | Update lastmod for deployment date. |
| site-dasllama/REVIEW.md | Clarify “page” scope + comparative-claim and provenance rules. |
| site-dasllama/index.html | Regenerate news section including M5 entry and punctuation tweaks. |
| site-dasllama/feed.xml | Regenerate Atom feed with M5 entry. |
| site-dasllama/build_news.py | Add LF-only writer helper for Python 3.9 compatibility. |
| site-dasllama/_news/2026-08-30-apple-m5.md | Add M5 news source markdown entry. |
| plans/dasllama_io_site.md | Mark old versioning decision as superseded by release split. |
| modules/dasMetal/REVIEW.md | Update wording around fail-closed sync enforcement. |
| modules/dasMetal/REVIEW.das | Add fail-closed fixture/assert sync gate. |
| modules/dasMetal/ARCHITECTURE.md | Document new Gate C for fail-closed sync. |
| modules/dasLLAMA/tests/test_whisper.das | Pin/restore tensor crowns and reset Metal cached flags in a strict cell. |
| modules/dasLLAMA/tests/test_metal_misc_kernels.das | Add spawned-compile test for lens tgmem gate. |
| modules/dasLLAMA/tests/test_kernel_coverage.das | Expand tower coverage rows; use stage+mint to avoid .dlim side effects. |
| modules/dasLLAMA/tests/test_gemma4uv.das | Pin/restore tensor crowns for rung calibration stability. |
| modules/dasLLAMA/tests/test_exe_smoke.das | Add end-to-end -jit -exe smoke test for serialized-globals rail. |
| modules/dasLLAMA/tests/test_exchange_schema.das | Add textual pin test for tune scope version_key stability. |
| modules/dasLLAMA/tests/test_dasllama_lint_escape.das | Update lint-escape test to reference DASLLAMA_RELEASE. |
| modules/dasLLAMA/tests/test_bench_records_schema.das | Use DASLLAMA_RELEASE; pin metal_served roster invariants. |
| modules/dasLLAMA/tests/run.das | Add new exe-smoke test to suite list. |
| modules/dasLLAMA/tests/REVIEW.md | Clarify rules around image-rail loaders, knobs, and stage+mint under pins. |
| modules/dasLLAMA/tests/CLAUDE.md | Document new tests and coverage-family token additions. |
| modules/dasLLAMA/tests/_role_fixtures/_rf_deva_wrong.das | Add tgmem= to fixture dispatch annotation. |
| modules/dasLLAMA/tests/_role_fixtures/_rf_deva_read.das | Add tgmem= to fixture dispatch annotation. |
| modules/dasLLAMA/tests/_exe_smoke_root.das | Add exe smoke root program used by the test. |
| modules/dasLLAMA/REVIEW.md | Update versioning rule to declared-release semantics; route exchange checklist. |
| modules/dasLLAMA/REVIEW.das | Add gate to enforce boot-restore guards for function-typed globals. |
| modules/dasLLAMA/REVIEW_TOWER.md | Broaden routed scope and clarify gate obligations around lens emission. |
| modules/dasLLAMA/REVIEW_MEASUREMENT.md | Refine figure/provenance rules and scope boundaries. |
| modules/dasLLAMA/REVIEW_GPU.md | Update GPU checklist to reflect lens tgmem refusal + binding-arm hazards. |
| modules/dasLLAMA/REVIEW_EXCHANGE.md | Add dedicated exchange checklist companion. |
| modules/dasLLAMA/release_remint_plan.md | Add arc plan and evidence ledger for the release/remint work. |
| modules/dasLLAMA/performance/setup_asr_rig.das | Build Metal-ON mtmd reference sibling on Apple boxes. |
| modules/dasLLAMA/performance/REVIEW.md | Adjust record hygiene rules; add catalog test coupling rule. |
| modules/dasLLAMA/performance/records/m1.json | Remove retired M1 canary rows tied to deleted artifact. |
| modules/dasLLAMA/performance/profile_common.das | Add metal_served flag; add mtmd Metal sibling support; refine pybench args. |
| modules/dasLLAMA/performance/model_specs.das | Add serve cards and commit-pinned URLs for new models/mmprojs. |
| modules/dasLLAMA/performance/gen_bench_records.das | Track measured-cell count; switch ASR GPU pairing logic; harden pybench recovery behavior. |
| modules/dasLLAMA/PERF_LEDGER.md | Add external intel note entry with attribution context. |
| modules/dasLLAMA/LAWS.md | Record maintainers’ rulings (release split, exe restore gate, measurement scoping). |
| modules/dasLLAMA/harness/tuner_noise.das | Stamp release number under wire key dasllama_version. |
| modules/dasLLAMA/followup_general.md | Update/resolve followups related to release scope and fail-closed sync. |
| modules/dasLLAMA/dasllama/dasllama_version.das | Introduce DASLLAMA_RELEASE constant and updated documentation. |
| modules/dasLLAMA/dasllama/dasllama_metal_tower.das | Add getters for tower f16/flash flags. |
| modules/dasLLAMA/dasllama/dasllama_metal_prefill.das | Fix mx4 hand-bound race binding indices; add architecture citation. |
| modules/dasLLAMA/dasllama/dasllama_metal_lens.das | Add compile refusal when @workgroup members exist without tgmem=. |
| modules/dasLLAMA/dasllama/dasllama_math.das | Add boot-restore [init] guards for function-typed globals. |
| modules/dasLLAMA/dasllama/dasllama_math_gen.das | Switch tune scope to DASLLAMA_RELEASE and pin wire version_key. |
| modules/dasLLAMA/dasllama/dasllama_gpu_tier.das | Add additional boot-restore guards for function-typed globals. |
| modules/dasLLAMA/dasllama/dasllama_gemma4a.das | Add stage+mint encoder helper to avoid disk image writes in suites. |
| modules/dasLLAMA/dasllama/dasllama_exchange.das | Update exchange gating/logging to DASLLAMA_RELEASE. |
| modules/dasLLAMA/dasllama/dasllama_common.das | Add crown pin latch + getter; prevent box-profile crowns overriding pins. |
| modules/dasLLAMA/BRINGUP.md | Update bringup doc for declared-release staleness semantics. |
| modules/dasLLAMA/benchmarks/setup_lcpp_ref.das | Ensure mtmd timing patch is applied; build mtmd target as sibling. |
| modules/dasLLAMA/benchmarks/REVIEW.md | Consolidate race-proof rules; clarify scratch recovery-file constraints. |
| modules/dasLLAMA/benchmarks/lcpp_bench.das | Stamp bench rows with DASLLAMA_RELEASE. |
| modules/dasLLAMA/benchmarks/asr/canary_qwen_bench.py | Add device selection; fix prompt mutation and degenerate-rep handling. |
| modules/dasLLAMA/benchmarks/asr/_pybench_rows.txt | Remove tracked recovery file (now gitignored scratch). |
| modules/dasLLAMA/ARCHITECTURE.md | Update measurement doc index reference. |
| modules/dasLLAMA/ARCHITECTURE_MEASUREMENT.md | Document ASR GPU pairing policy and tooling requirements. |
| modules/dasLLAMA/ARCHITECTURE_GPU_PREFILL.md | Document binding-number divergence hazard for mx4 scaffold vs tail. |
| modules/dasLLAMA/ARCHITECTURE_ENGINE.md | Update version constant semantics; describe exe global-restore gate. |
| LAWS.md | Record repo-level ruling about REVIEW.das as a lint/gate landing place. |
| CLAUDE.md | Update guidance on where to land “lint opportunities” (REVIEW.das vs daslib lint). |
| .gitignore | Ignore ASR pybench recovery file path. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 79 out of 83 changed files in this pull request and generated no new comments.
Suppressed comments (2)
Previously missed (2) — in code that hasn't changed since the last review.
utils/dasllama-server/tests/towers.spec.js:24
- withVisionAbsent assumes the catalog fixture always contains the 'gemma-4-e2b' entry; if the fixture is re-captured without it (or the id changes), this helper throws a vague
Cannot set properties of undefinedinstead of failing with a clear reason. Add an explicit guard with a descriptive error so fixture drift is diagnosed immediately.
utils/dasllama-server/test_model_catalog.das:55 - The presence-pin loop repeatedly calls model_catalog() inside the inner loop, re-building the catalog array for each wanted id. Cache the catalog once so the test is cheaper and asserts against a single snapshot of the roster.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc
The release split
DASLLAMA_VERSIONbecomesDASLLAMA_RELEASE(value stays 15). The bump duty flips from "any kernel work bumps it" to "bumped only on a declared release" - a maintainer ruling that bench comparability is broken, recorded inLAWS.md- so tune sidecars, board rows, and the exchange stay valid across routine kernel work. Wire and schema field names keep thedasllama_versionspelling (the release number now rides them; no schema break), pinned byversion_key=on the tune scope with a textual gate. Per-change invalidation stays with the finer mechanisms (IMAGE_VERSION, the reflected layout fingerprint); per-kernel identity hashes are ledgered as followup 58.The arc-end board re-mint (ref pin b10659)
Fresh tune manifests minted under the release scope on a quiet box (37/40 winners identical to the prior generation; LKG refreshed), then the full M5 board: text CPU/accel/Metal, image, audio - every cell behind the per-row parity pregate. The M4 canary rows re-mint on the new Q8_0 serving artifact, and the Efficiency-tier gate is proven live on both boxes: M5
pool 18 lanesspanning Super+Performance, M4live: 10 dispatch laneswith the efficiency cores excluded. M1 rows stand as the long-term record; its canary rows retire with the deleted f16 decoder artifact (the box runs no more sweeps by ruling).Sweep reds, all closed under the two-tier rule (a FAIL stops the sweep; a perf red is fixed after and only the red cells re-profiled):
xf@3, y@4, so the arm read its own output as X and un-crowned the correct twin. Rebound, re-raced, re-profiled with the fix in the built exe - the committed 3995.1 cell is the post-fix reading (the fix and the record land in one commit, which is why the row's stamp predates the commit carrying both).set_num_threadson MPS, and a shared recovery file laundered another tool's rows. All three fixed; a DEGENERATE rep guard discards sub-8-id reps.Figure provenance: all figures in this PR:
performance/records/m5.json/m4.json, minted 2026-08-30 (the m4 canary rows stamp 2026-08-31 - the box clock runs UTC+3) on the b10659 ref pin;img:enc/asr:figures arelcpp_bench --image/--asrboard cells against the reference cli/torch legs.Commit-stamp re-stamp (the records reachability rule's second clause): four pre-rebase stamps re-stamped to byte-identical reachable twins (
git diff --stat old new -- modules/dasLLAMA/= 0 lines each): fa67fe165 to 345dcd6, 82e45e0a3 to bbdcf8d, 366669a53 to f5417ba, 54595cfea to 77dfc24. The three content-addressed tune archives re-hashed and renamed, everytune_sharepointed;gen_site_records --verifyOK.Serving catalog + site
Two serve cards join the roster: Qwen3-VL-4B and Qwen2.5-Omni-3B, models and mmproj companions commit-pinned (each pinned url resolved live at pin time), gated by the catalog suite (16/16) and the control-page playwright suite (106/106,
catalog_idlefixture re-captured from a live boot). The dasllama.io news entry announces M5 support with figures quoted from the committed records - including the one loss (canary gb1, 6484 ms beside the reference's 4383), which is the named next dig.Coverage owed from the m5-image arc
Census tower rows for the arc's kernel families: qwen25v window ViT, qwen3v GPU stem, gemma4a Conformer whole-chunk, canary FastConformer, the gemma3v flash-off slab leg and the crowned twin-W leg - family-tagged, lane-pinned, and minting IN MEMORY via
stage_*+mint_*(a pinned-lane disk bake GC-purges the serving lane's.dlim; the rule is now intests/REVIEW.md). The census's assert-free dispatch-diversity design and its numeric fixture claims are ledgered intests/CLAUDE.md- yes, ledgered; likewise the mx4 twin's binding divergence inARCHITECTURE_GPU_PREFILL.md2.2g.The standalone-exe rail gets its gate: a serialized exe restores globals as data, so 14 function-typed globals gain boot-restore
[init]guards,check_exe_fn_global_restorewalks the folder per-diff (reverse control on base sources reports exactly the 14), andtest_exe_smokebuilds and runs a-jit -exeartifact end-to-end. The smoke's generate reaches the decode-claim trio; the rdec/ffn_xf seams are covered statically by the gate, and the Vulkan-armed parity proof is deferred to a Vulkan box (the hooks arrived from the parallel vulkan arc). The lens now refuses a[metal_dispatch]class with@workgroupmembers and notgmem=at compile, with a spawned-compile must-red/must-compile fixture pair.The review round
14 per-checklist auditors (11 walk checklists + the MEASUREMENT/GPU/TOWER routed companions), a worktree tdd audit, and two external reviewer rounds (both zero findings). Real catches applied: the floating mmproj urls (a red catalog gate), the news entry's unsupported cross-box claim, the crowned-lane test drift (the re-minted sidecar armed tensor crowns in suites for the first time - strict token-exact/rung cells now pin the simdgroup lane via the new
pin_metal_tensor_crownslatch; followup 60 holds the open question), and the census dlim purge. The tdd audit's three cheap named gaps closed in-PR with must-red controls (themetal_servedroster pin, serve-card presence pins, theversion_keytextual pin); the measurement-orchestrator branches ride the standing coverage-followup PR.Suites green on the final tree: model-free (75 files), kernels, coverage, exchange/records/site schema gates, catalog + playwright.
preflight --fullran once; its three reds were fixed and validated on targeted lanes (LINT027 splitREVIEW_EXCHANGE.mdout of the module checklist; two off-Apple LINT012 annotations; the interp/jit reds were chained-load transients - the same three files pass solo and both lanes pass clean on targeted rerun).🤖 Generated with Claude Code
https://claude.ai/code/session_01LY6gNeDZkF14X81rLz3QLc