Repository navigation
EPIC: release train 0.70.0 — receipts replace refusals #3081
Description
Release train 0.70.0 — the story closes: pull → run → finetune --recipe → run, with published parity
Spec of record: docs/specifications/06x-release-schedule.md (PMAT-1097; this epic is §3 "0.70.0" of that document, and §2 holds every row's acceptance command). Contract: contracts/release-schedule-06x-v1.yaml.
Window (§1.1): opens 2026-09-19T18:00Z · must leave by 2026-09-20T18:00Z · planned tag 2026-09-20T06:00Z. T is the previous train's actual publishedAt; the train leaves on time — scope slips forward to the next epic with slipped_from: 0.70.0, dates do not slip. A red release gate holds the train at most 12 h.
The closing train of this schedule: the fine-tune story becomes THE story (70-G1), 7B parity is published from CONFORMANT rows only (70-F1), NVIDIA Rust is 100 % where the driver allows (70-B1).
Decisions apply at their §6 defaults unless overridden in a comment here (D-1 FULL tier only nightly + pre-publish dogfood · D-2 NVIDIA Rust default per layer · D-3 yoga advisory→required behind the runner-group restriction · D-4 gx10 takes arch-neutral guards · D-5 trains leave on time · D-6 parity hosts yoga + gx10 · D-7 recipe format · D-8 GH-480 rewriter fate · D-9 non-Linux binaries out). An override comment is copied into the spec's §11 with decided_by and the comment link.
Scope (spec §3, as of origin/main @ 2c584a168)
| Row | Item | Source | Host |
|---|---|---|---|
| 70-G1 | the fine-tune story is THE story: README, BEATS Pillar-3 row vs Unsloth (recorded), dogfood runs pull → finetune --recipe → run on gx10 | §2 G | gx10 |
| 70-G2 | apr modelfile parse --to-recipe |
§2 G | — |
| 70-F1 | publish 7B ratios from CONFORMANT rows only; per-arch decode floor contract enforced nightly; W-F resident apr run |
§2 F | yoga, gx10 |
| 70-B1 | NVIDIA Rust 100 %: every GPU path through cuda-core where the driver allows; hand FFI = fallback only; O1a decides GH-480 (D-8); §8 exit criteria re-measured | §2 B | gx10, yoga |
| 70-C1 / 70-D1 | gx10 ≥ 960, yoga ≥ 480 min/day; gx10 in ≥ 6 workflows, yoga in ≥ 4 | §2 C/D | both |
| 70-A1 | asset set frozen as a contract obligation checked by the workflow | §2 A | — |
| 70-E1 | 20 consecutive PRs ≤ 20 min; freed runner-hours recorded | §2 E | — |
| 70-R | release | §1.3 | — |
Acceptance (the train is done when)
- every row above is MERGED or moved to the next epic with
slipped_from: - pre-publish dogfood FULL (
scripts/dogfood.sh --phase pre-publish) GO - tag
v0.70.0published inside the window (or §11 amendment says why) - release carries 4
aprbinaries ({cuda,cpu} × {x86_64,aarch64}) +.sha256+ 8pvassets — checked by command, never by eye - post-publish dogfood receipts on gx10 and yoga under
evidence/dogfood/0.70.0/ - closing comment here: planned vs actual instant, receipt paths, next train's
T
🤖 Generated with Claude Code
Activity
noahgift commentedon Sep 10, 2026
Spec PR: #3087 (branch
PMAT-1097-06x-release-schedule, auto-merge armed). The §3 table in this epic's body is the state atorigin/main@2c584a168; §10 of the spec records theagy /teamwork-previewreview.noahgift commentedon Sep 12, 2026
Release estimate (orchestrator, 2026-09-12 12:20Z): eligible Sat 2026-09-19 evening → Sun 2026-09-20 16:00 UTC, tag Sun 2026-09-20 → Mon 2026-09-21 ~16:00 UTC. Depends on the P2 infra PR (yoga/gx10 runner units declared in forjar) for the sharded gate; without it the train still runs at the P1 speed. Slides one takt per skipped predecessor.
Basis.
docs/specifications/APR-RELEASE-001-train-and-build-kaizen.md(PR #3164): a train becomes eligible 48 h after the previous tag onmainand must be runnable by 72 h; any RED step skips the train at that HEAD and the next eligibility is 48 h later. Train duration measured on 0.67 today: queue drain of the open PRs (~1 h per FULL-tier entry on intel), pre-publish dogfood (~1 h, 0.66 precedent), the G3.EX examples sweep (981 targets, ~5 h on a loaded box — the long pole, shrinks when P0/P1/P2 land), assets + preflight (~1 h). The crates.io cascade is attended (spec §3.7): the tag and GitHub release are autonomous, the publish waits for the operator, and its minutes are recorded from 0.67 on.release(0.67): train A — 17 row PRs of the 0.67.0 train in one build …
PMAT-3445: admit the train's own release epic — it is open at every c…
noahgift commentedon Sep 20, 2026
Governed by
30-day-plan.mdv2.2 — 0.70's purpose, exclusions and capacityPurpose: receipts replace refusals. Every
removed_by: v0.70shipped in 0.69 comes off here, by producing the receipt that was missing — not by deleting the refusal.Excluded (predicates; the labels exist as of 2026-09-20):
label:arch-model-new·label:crux-competitor· any PR adding a refusal withoutremoved_by(lint) · standing:label:lang-next.A move into or out of this milestone cites a predicate or is logged as an override.
Must-carry candidate: batched decode parity — and per doctrine rule 3 it is only admitted if its plan is ruled and its falsifier proven satisfiable by a RED test on
mainbefore 0.70 opens (09-26). Slice M took four quorum rounds and idled a lane for days; that is the failure this rule exists to stop. ≤1 must-carry row.Capacity — this milestone does not fit, and the number it does not fit is itself
[U]49 open against C = 29/train
[C, 09-17]. But C is contested: 142 aprender merges in 7 days[C]≈ 61 per 72 h. Re-derive C from the last five tags before anyone argues scope from it — arguing capacity from an uncited number is the defect that got the "cap of 25" rejected in the 0.69 re-cut.Either way 49 needs stripping. Nineteen of these arrived from the 0.69 re-cut on 2026-09-20 with reasons recorded in #3080; they are the first candidates to move again, by predicate this time.
What 0.70 inherits by name
removed_by: v0.70— the train's whole purposelabel:viz)Doctrine that applies here and was not in force for earlier trains
removed_byand never block a cut; an expired one bumps once and incrementsslips, andslips ≥ 2raises a non-blocking escalation. It is never auto-reverted: a refusal is the safe state.next_departure = max(scheduled, close_of_last_interrupt_release + one takt).aprquorum lane runs release N-1, pinned by sha, on a receipted cell — never HEAD.Full plan governance and the 0.69 side of it: #3080.
[-]EPIC: release train 0.70.0 — 06x-release-schedule.md §3 (0.70.0)[/-][+]EPIC: release train 0.70.0 — receipts replace refusals[/+]noahgift commentedon Sep 21, 2026
Rows boarding 0.70.0 from the 0.69 freeze (
slipped_from: 0.69.0, 2026-09-21): #3459 (bullet 4), #3597, #3598, #3602 (item 2), #3609, #3610, #3658 (item-7 observation), #3668, PRs #3420 and #3494. Next in line as soon as v0.69.0 is tagged: the 0.70 batch. Candidates are #3606, #3622, #3642, #3271, #3674, #3076 (Alfredo), #3676 (CI diet), #3659, #3666. — aprender-04 (cop)noahgift commentedon Sep 25, 2026
Superseded by EPIC E1 #3998 (APR-EPIC-001 A4). Open children re-parented: none. Owner lines copied to the absorbing epic's body. Applied by aprender-d1: claude+agy both said close, apr shadow row recorded (handoff/close-quorum-2026-09-25.json).
PMAT-3445: no tag while the milestone being cut holds an open item — …
fix(cuda): drop graph-mode buffers after a failed decode-graph captur…