You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First architecture added contract-first: contracts/model-families/qwen3_moe.yaml, validated by pv, with falsification tests, plus the MoE rows in apr-architecture-schema-v1, arch-constraints-v1 and architecture-requirements-v1. Code is derived from the contract afterwards (GH-323 codegen path), never written ahead of it.
Done when: pv validate is green on the family contract; ArchConstraints for qwen3moe is generated from it; CPU parity vs llama.cpp is measured on more than one prompt. CUDA MoE parity waits on #4378.
Finding rows (la-0.74, on la-74/wip, no PR; these ride this ticket's PR, and no new ticket is minted because the E7 child budget is 3/3):
F1. Model-family contracts: there are two copies and no sync guard.crates/aprender-core/build.rs reads crates/aprender-core/contracts/model-families/ (16 families, fix: PMAT-517 — publish safety gate prevents broken crates.io releases (19 incidents) #701) before the root contracts/model-families/ (29). As a result, 13 root families never reach build_default_registry, and qwen3_5.yaml already differs between the two copies. qwen3_moe is guarded by FALSIFY-MF-QWEN3MOE-005 (the two copies must be byte-identical); no other family has a guard.
F2. Arch-requirements logic: three hand-written copies that are not derived from the contract. (a) cuda/types.rs WeightValidation skipped the dense FFN when is_moe. This is fixed here: the contract now has the is_moe cells (1.1.0) and the skip is deleted. (b) aprender-core/src/format/layout_contract_enforce.rs keeps its own hand-written (qk_norm, bias) table. That table has no MoE row and is still open. (c) arch_requirements_fallback.rs is regenerated in this branch. Also, KANI-ARCH-001..003, which the contract names, have no Rust harness.
F3. serve codegen read an archived contract.Fixed in f4facac. build.rs looked for ../../../provable-contracts/, which resolved only from ~/src/aprender, to the archived sibling repo. Every worktree and CI build therefore used the fallback.
F4. A restored contract is not re-read. When the YAML is missing, build.rs emits no rerun-if-changed for it, so restoring the file does not regenerate the code. This was observed on intel: a planted mutant ran against a stale fallback until build.rs was touched. This is still open.
R4 evidence: on intel @7459baae12, FALSIFY-ARCH-013 is green both through the contract and through the fallback (54/54 each). A planted mutant (the MoE cell changed to base) turns 3 of the 54 tests red.
F4 fixed on la-74/wip @84160930ff: a missing architecture-requirements YAML now watches its parent dir. Intel lane (move YAML away, build, restore without touching build.rs, build): control 8f388bd stays on the fallback, 8416093 regenerates from the contract. A second no-op check with the YAML missing reruns nothing (#4614 cost not reintroduced).
merged into #5315 (master ticket for epic #4001; triage rule 7b, 2026-10-14). It is a checklist row there; reopen this issue when work on it starts or its PR opens.
Activity
feat(contracts): qwen3_moe model-family contract first, with falsifie…
feat(format): qwen3_moe reaches codegen + Architecture::Qwen3Moe (Refs …
docs(lookahead): 0.74 kit R1 written, falsifiers green (Refs #5056)
docs(lookahead): 0.74 kit R5 done_when amendment drafted (Refs #5056)
fix(serve): arch_requirements codegen reads the in-tree contract (Refs …
feat(contracts): is_moe axis in architecture-requirements, MoE cells …
fix(serve): arch_requirements fallback snapshot carries the is_moe ce…
docs(lookahead): 0.74 kit R4 written, falsifiers green (Refs #5056)
noahgift commentedon Oct 10, 2026
Finding rows (la-0.74, on la-74/wip, no PR; these ride this ticket's PR, and no new ticket is minted because the E7 child budget is 3/3):
crates/aprender-core/build.rsreadscrates/aprender-core/contracts/model-families/(16 families, fix: PMAT-517 — publish safety gate prevents broken crates.io releases (19 incidents) #701) before the rootcontracts/model-families/(29). As a result, 13 root families never reachbuild_default_registry, andqwen3_5.yamlalready differs between the two copies. qwen3_moe is guarded by FALSIFY-MF-QWEN3MOE-005 (the two copies must be byte-identical); no other family has a guard.cuda/types.rsWeightValidation skipped the dense FFN whenis_moe. This is fixed here: the contract now has theis_moecells (1.1.0) and the skip is deleted. (b)aprender-core/src/format/layout_contract_enforce.rskeeps its own hand-written(qk_norm, bias)table. That table has no MoE row and is still open. (c)arch_requirements_fallback.rsis regenerated in this branch. Also, KANI-ARCH-001..003, which the contract names, have no Rust harness.build.rslooked for../../../provable-contracts/, which resolved only from~/src/aprender, to the archived sibling repo. Every worktree and CI build therefore used the fallback.build.rsemits norerun-if-changedfor it, so restoring the file does not regenerate the code. This was observed on intel: a planted mutant ran against a stale fallback untilbuild.rswas touched. This is still open.R4 evidence: on intel @7459baae12, FALSIFY-ARCH-013 is green both through the contract and through the fallback (54/54 each). A planted mutant (the MoE cell changed to
base) turns 3 of the 54 tests red.fix(serve): a missing arch-requirements contract watches its parent d…
noahgift commentedon Oct 10, 2026
F4 fixed on la-74/wip @84160930ff: a missing architecture-requirements YAML now watches its parent dir. Intel lane (move YAML away, build, restore without touching build.rs, build): control 8f388bd stays on the fallback, 8416093 regenerates from the contract. A second no-op check with the YAML missing reruns nothing (#4614 cost not reintroduced).
docs(lookahead): 0.74 kit staged head 8416093, F4 fixed (Refs #5056)
test(core): FALSIFY-MF-014, deleting any required family field turns …
70 remaining items
docs(lookahead): A1 step 27, the MoE expert matvec runs the one table…
refactor(serve): fused_matmul keeps no list of fused types; the table…
docs(lookahead): A1 step 28, fused_matmul keeps no list of fused type…
docs(lookahead): Q2 answered (a), the A5 parity pass line is a 32-tok…
docs(lookahead): A5 scored on the Q2 line from existing receipts, goo…
docs(lookahead): A5 passes the Q2 line on all 16 prompts, good 16 of …
docs(lookahead): A5 near-tie check, llama.cpp's own top-2 margin at t…
docs(lookahead): A5 print fix staged on la-74/print-ids, so apr run -…
docs(lookahead): Q3 answered (a), A4 passes when a new arch adds no p…
docs(lookahead): A4 shape test staged on la-74/a4-forward-allowlist, …
docs(lookahead): C358 1c re-run, all 32 dense rows comparable now tha…
noahgift commentedon Oct 14, 2026
merged into #5315 (master ticket for epic #4001; triage rule 7b, 2026-10-14). It is a checklist row there; reopen this issue when work on it starts or its PR opens.
fix(serve): apr run -v prints every encoded prompt id, not the first …