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
{{ message }}
Repository navigation
ARB-AUD-10b: python3 out of the release path — 12 scripts / 43 sites + release_wall_time.py, jq with a parity table per script #4352
Cop ruling (aprender-77, 2026-09-25): python3 is out of the release path. ARB-AUD-10 (#4350) removed it from fleet_cells_gate.sh only (bash+awk, 84/84 byte-identical parity; branch wip/4328-aud10-no-python, awaiting fold). The rest of the release path still shells out to python3.
Measured on batch/0.70.0 @ 56e82a84c. Line numbers are non-comment python3 sites.
script
python3 lines
use
scripts/release/rc_cut.sh
151,184,239
JSON (REST)
scripts/release/promote_rc.sh
185,202,236
JSON (REST)
scripts/release/stamp_rc_version.sh
32,122,152
cargo metadata / TOML
scripts/release/rc_publish_gate.sh
107
JSON
scripts/release/publish_strict.sh
42,48,57,71
cargo metadata
scripts/release/prepare_bump.sh
38,55
cargo metadata
scripts/release/models_t1.sh
60,130
JSON
scripts/release/autopilot.sh
26,86,373,394,430,471
JSON + ledger.py
scripts/release/host_receipt.sh
66,92,127,214,222,231,249,305
JSON
scripts/release/tag_coverage_gate.sh
47,64
JSON
scripts/check_release_assets.sh
88,100,106
JSON (REST)
scripts/check_publish_preflight.sh
72,105,176,226,299,325
cargo metadata
scripts/release/release_wall_time.py (+ _cases.py, run by scripts/check_release_wall_time.sh)
whole file
a full program, not a one-liner: port or rule out of scope separately
Approach (per the ruling): jq for JSON, bash+awk otherwise. One commit per script, each with a parity case table: the old and new implementations run on the same inputs and the output must be byte-identical, plus a mutant proving the table can fail (the fleet_cells_gate pattern). Branch from batch/0.70.0, fold via aprender-59.
Precondition to verify first:jq is present on the clean-room cut runner and on every fleet host host_receipt.sh runs on. If it isn't, replacing python3 with jq just moves the missing interpreter.
Done when:git grep -n python3 -- scripts/release scripts/check_release_assets.sh scripts/check_publish_preflight.sh returns only comments, every script's parity table passes, and the rc cut path runs on a runner with no python3.
Refs #4350 (ARB-AUD-10), #4328. Note: there is no ARB-AUD epic in paiml/aprender to parent this under; #4350 has no parent either.
Owner: aprender-df.
Live defect found and fixed (rc-cut blocker for 0.70.0): the python cut members = [...] at the first ], even inside a comment. #4219's # ... every [[bin]] ... (batch/0.70.0 only) ended the list after 3 entries, so member path pins such as apr-cli's aprender = { path, version = "0.69.0" } were never stamped. On a batch tree the python stamp gives cargo metadata rc 101 ("failed to select aprender-core ^0.69.0"); the unstamped control gives rc 0. The port strips comments first, and cargo metadata --locked then gives rc 0 with all 80 crates at the rc. The self-test fixture now carries that shape, and a mutant covers it.
Known, kept for parity: single-quoted TOML strings (exclude = ['crates/aprender-train-canary']) are not read, same as the python. It is harmless today because the canary isn't a member.
Follow-up (needs a 3/3 workflow quorum, not done here): wire the #4352 self-tests into ci.yml.
Reopened by APR-EPIC-001, C334 quorum r2: its sub #4350 is a P0 on 0.71 and rule-6 protected, and a parent cannot close while a sub is open (ISSUE-TREE-001). Milestone 0.71.0; epic E1 #3998. Reopen = pull (rule 5). Receipt: docs/audits/apr-epic-001/plan-C334-E1.json (revision r2; quorum record quorum-c334-e1-r2).
Folded into #4741 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch: wip/4352-release-no-python.
Activity
noahgift commentedon Sep 25, 2026
Precondition verified 2026-09-25T08:14Z: jq present on every clean-room runner (intel host /usr/local/bin/jq; gx10 runner container sovereign-gpu-runner:2.337.0 /usr/bin/jq) and on fleet hosts yoga, mini (/opt/homebrew/bin/jq), lambda (jq-1.8.2).
fix(release): tag_coverage_gate reads gh JSON with jq, not python3 (#…
fix(release): prepare_bump.sh drafts and splices the CHANGELOG withou…
fix(release): models_t1.sh reads cargo metadata and the ladder receip…
fix(release): check_release_assets.sh reads gh/REST release JSON with…
fix(release): stamp_rc_version.sh stamps without python3, and reads e…
noahgift commentedon Sep 25, 2026
6/13 stamp_rc_version.sh ported (d20f3a3 on wip/4352-release-no-python). Parity: 121 cases byte-identical (stdout, rc, tree).
Live defect found and fixed (rc-cut blocker for 0.70.0): the python cut
members = [...]at the first], even inside a comment. #4219's# ... every [[bin]] ...(batch/0.70.0 only) ended the list after 3 entries, so member path pins such as apr-cli'saprender = { path, version = "0.69.0" }were never stamped. On a batch tree the python stamp givescargo metadatarc 101 ("failed to select aprender-core ^0.69.0"); the unstamped control gives rc 0. The port strips comments first, andcargo metadata --lockedthen gives rc 0 with all 80 crates at the rc. The self-test fixture now carries that shape, and a mutant covers it.Known, kept for parity: single-quoted TOML strings (
exclude = ['crates/aprender-train-canary']) are not read, same as the python. It is harmless today because the canary isn't a member.Follow-up (needs a 3/3 workflow quorum, not done here): wire the #4352 self-tests into ci.yml.
fix(release): rc_cut.sh reads GitHub with jq, not python3 (#4352)
fix(release): promote_rc.sh reads GitHub with jq, not python3 (#4352)
fix(release): publish_strict.sh enumerates and reads with jq, not pyt…
fix(release): check_publish_preflight.sh reads with jq, not python3 (#…
fix(release): host_receipt.sh builds its receipt with jq, not python3 (…
fold(0.70.0): #4352 release path without python (df wip/4352 @d20f3a3…
fix(release): autopilot reads its JSON with jq; ledger.py becomes led…
21 remaining items
noahgift commentedon Oct 8, 2026
Reopened by APR-EPIC-001, C334 quorum r2: its sub #4350 is a P0 on 0.71 and rule-6 protected, and a parent cannot close while a sub is open (ISSUE-TREE-001). Milestone 0.71.0; epic E1 #3998. Reopen = pull (rule 5). Receipt: docs/audits/apr-epic-001/plan-C334-E1.json (revision r2; quorum record quorum-c334-e1-r2).
docs(epics): C334 r2 reopens three backlog P0s and their two parents
fix(#4350): refuse a clock the python judge could not read
fix(release): the fleet cells gate judges in bash and awk, not python (…
noahgift commentedon Oct 14, 2026
Folded into #4741 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it. Pushed branch:
wip/4352-release-no-python.Agent: aprender-clerk