Conversation
…ed 0.68.2's V/MS/EPIC/LAST_TAG and an out-of-repo AP; a guard now refuses both (#3618) Refs #3618 #3592 #3459 #3617 The release scripts ported from the out-of-tree 0.68.2 bundle (#3599) kept V=0.68.2, MS=12, EPIC=3477, LAST_TAG=v0.68.1, and AP pointing at an agent worktree on the operator box's RAID mount. Cutting 0.69 through them would have targeted the old version and a directory that may not exist, and the path passed every gate: check_hardcoded_paths.sh does not match that mount (#3592). scripts/release/lib_release_params.sh (new, sourced, option-neutral) ONE input, the version; everything else read from where it already lives. - release_params <X.Y.Z>: V, T, REPO, INFRA; a non-X.Y.Z version is rc 2 (0.69, v0.69.0, 0.69.0.1, 1.2.3a, empty -- all refused). - AP = <main checkout>/target/release-train/<T>, where <main checkout> is the parent of the repo's COMMON git dir, so every worktree resolves the SAME AP (prepare_bump writes release_notes.md there, autopilot reads it). target/ is ignored. RELEASE_AP overrides at run time; it is never a literal. - release_milestone_number: the one milestone titled exactly V. - release_epic_number: the one `epic` item in milestone V titled "EPIC: release train V ..." (RELEASE_EPIC overrides, digits only). - release_last_tag: the highest v* tag strictly below T. Each derivation that finds 0 or 2+ answers returns 2 and says why. Proof against history: for 0.68.2 the derivations return milestone 12, epic #3477, last tag v0.68.1 -- exactly the literals they replace. For 0.69.0: milestone 6, epic #3080, last tag v0.68.2. The four scripts take the version as their first argument: autopilot.sh <version> <bump-pr> [from] [to] (MS/EPIC derived once, logged as `PARAMS …` in STATUS; ledger.py read from the tree, not $AP -- it would not have existed in the new AP) prepare_bump.sh <version> [--ship] (branch release-<V>, Pmat-Ticket from the derived epic, the /mnt fallback for arm_pr_automerge.sh removed -- the in-tree script is required; launch line prints the in-tree autopilot) publish_strict.sh <version> [--plan] (publish-order.txt read from the tag's own checkout, $WT/scripts/release/, not the old bundle dir) t2_preflight.sh <version> | --self-test (self-test needs no version) ledger_from_run.sh's "tag": "v0.68.1" is now the v* tag the tested sha carries. Each refuses with a usage line (rc 2) when the version is missing. scripts/check_release_scripts_derive_identity.sh (new; guard_tree --no-cargo runs it) -- item 3's second branch; #3592 stays open for the analyser: R1 no absolute path under /mnt /home /Users /opt /srv /media /root on ANY line of scripts/release/, comments included. R2 no literal (no `$`) assigned to V T MS EPIC LAST_TAG AP on a non-comment line. Zero files scanned = ENV 2. 14-row case table; its first real finding was this change's own library comment quoting the old path (reworded). FALSIFIER (item 4), on a copy of the real scripts/release/: planting `AP=/mnt/nvme-raid0/agent-wt/rel-0690-autopilot` in autopilot.sh -> R1+R2 RED, rc 1; planting `MS=0.69.0` in prepare_bump.sh -> R2 RED. Mutants, each RED: R1 without mnt (row 3), R2 reading comments (9, 14), R2 accepting any value (1, 14), zero files as a pass (12), R2 anchored at line start only (6). docs/specifications/06x-release-schedule.md §4: the autopilot sentence now names the in-tree scripts and their one input, not the 0.66 out-of-tree precedent. Not changed, stated: publish_strict.sh's crate count (74) is a 0.68.2-era constant of the same shape, outside #3618's five names; its 4 bashrs errors are pre-existing false positives, identical on main. Gates: guard self-test 14/14 + PASS on the tree; check_tag_step_gated PASS + self-test; check_t2_preflight_verdict PASS; t2_preflight --self-test OK; sourced-libs option-neutral (9 libs); bashrs-gate PASS; pipe-into-grep-q at ceiling; hardcoded-paths +0; apr pinned; guards-are-wired PASS; readme claims; roadmap aggregate idempotent + sorted/unique/additive; fmt, deny, aprender-contracts --lib 1666. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
quorum-review (AD-04): three PASS — agreed (auto_merge: checked=true was_armed=false disarmed=false) {
"ticket": "PMAT-3618",
"head": "e9ca589997b042bb38572975c812fda8806be123",
"width": 3,
"executor": "agy",
"agreed": true,
"auto_merge": {
"checked": true,
"was_armed": false,
"disarmed": false,
"note": "auto-merge not armed"
},
"lanes": [
{
"lane": 1,
"verdict": "PASS",
"findings": 3
},
{
"lane": 2,
"verdict": "PASS",
"findings": 3
},
{
"lane": 3,
"verdict": "PASS",
"findings": 4
}
]
} |
Cross-inspection of
|
| lane | conversation | status | verdict | findings | refs to sibling lanes / $WORK | duration |
|---|---|---|---|---|---|---|
| lane 1 | d7c2f7c4 |
SUCCESS | PASS (structured_output) | 3 (3 cited, 0 with commands) | 0 | 156 s |
| lane 2 | bcaf70ba |
SUCCESS | PASS (structured_output) | 3 (2 cited, 0 with commands) | 0 | 48 s |
| lane 3 | 3e46312b |
SUCCESS | PASS (structured_output) | 4 (0 cited, 4 with commands) | 0 | 624 s |
Distinct agy conversation ids: 3/3; no lane references a sibling lane or $WORK. Read from /mnt/nvme-raid0/agent-wt/rel-3618/docs/audits/quorum-PMAT-3618.json.lanes on this box. Note: release scripts take the version as their one input; milestone/epic/last tag derived (history proof: 0.68.2 → 12/#3477/v0.68.1, the exact literals replaced); AP derived from the repo; new guard plants the /mnt AP and goes RED; operator-facing change: autopilot.sh 0.69.0 .
Verdict line: 3/3 PASS, independent. Arming.
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
|
Disarmed by the cop (07:35Z): this PR is integrated in the 0.69 release batch #3669 (one CI run, one queue slot, |
…s SEC010) #3655 derives AP from the repository instead of a /mnt literal, so the $(cat "$AP/cleanroom-run-id") inside the epic comment is now flagged by the bashrs gate as SEC010 (path traversal risk in cat). That redded #3655's own guard-cargo and the batch's. The value is now read once with the read builtin into cleanroom_run_id (falling back to 'unknown', as the cat's 2>/dev/null effectively did) and interpolated. bashrs-gate: PASS, 0 SEC/DET/IDEM over 360 files. Refs #3618, #3669 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Landed in #3669 (squash |
Closes #3618. Refs #3592 #3459 #3617.
The in-tree release scripts (ported from the 0.68.2 bundle, #3599) still carried
V=0.68.2,MS=12,EPIC=3477,LAST_TAG=v0.68.1and anAPunder the operator box's RAID mount, whichcheck_hardcoded_paths.shcannot see (#3592). Cutting 0.69 through them would have targeted the old version and an out-of-tree directory.done_when, item by item
X.Y.Z);T="v$V"; milestone = the one titled exactlyV; epic = the oneepicitem in it titledEPIC: release train V …; last tag = highestv*belowT. 0 or 2+ answers → rc 2, named. Checked against history: for 0.68.2 the derivations return milestone 12, epic #3477, last tag v0.68.1, which are exactly the literals they replace. For 0.69.0 they return milestone 6, epic #3080, last tag v0.68.2.<main checkout>/target/release-train/<T>, where the main checkout is the parent of the repo's common git dir, so every worktree resolves the same AP (prepare_bump writesrelease_notes.md, autopilot reads it).RELEASE_APoverrides at run time and is never a literal./mntblind spot closed or own assertionscripts/check_release_scripts_derive_identity.sh. R1 is no absolute path under/mnt /home /Users /opt /srv /media /rooton any line (comments included). R2 is no literal assigned toV T MS EPIC LAST_TAG AP. It runs inguard-tree(--no-cargodry-run lists it). #3592 stays open for the analyser.scripts/release/, plantingAP=/mnt/nvme-raid0/agent-wt/rel-0690-autopilotinautopilot.shturns R1 and R2 RED (rc 1), and plantingMS=0.69.0inprepare_bump.shturns R2 RED. The case table has 14 rows. Each of 5 mutants turns it RED. Its first real finding was this PR's own library comment quoting the old path.Also fixed on the way
autopilot.shranpython3 "$AP/ledger.py", a leftover of the bundle layout that would not exist in a derived AP. It now readsscripts/release/ledger.py.publish_strict.shreadpublish-order.txtfrom the bundle dir. It now reads it from the tag's own checkout,$WT/scripts/release/.prepare_bump.sh: branchrelease-<V>,Pmat-Ticketfrom the derived epic. The/mntfallback forarm_pr_automerge.shis removed (the in-tree script is required). The launch line prints the in-tree autopilot with its version.ledger_from_run.sh's"tag": "v0.68.1"is now thev*tag the tested sha carries.06x-release-schedule.md§4 now names the in-tree scripts and their one input.Not changed:
publish_strict.sh's crate count (74) is a 0.68.2-era constant of the same shape but outside #3618's five names. Its 4 bashrs errors are pre-existing false positives, identical on main.Measured
Guard 14/14 + PASS on the tree ·
check_tag_step_gatedPASS + self-test ·check_t2_preflight_verdictPASS ·t2_preflight --self-testOK · sourced-libs option-neutral (9) · bashrs-gate PASS · pipe-into-grep-q at ceiling · hardcoded-paths +0 · apr pinned · guards-are-wired · readme claims · roadmap aggregate + sorted/unique/additive · fmt · deny ·aprender-contracts --lib1666.🤖 Generated with Claude Code