Skip to content

fix: review findings on release gates (#1-#5, #7-#8, #10-#12) - #19

Open
systemfsoftware-maker wants to merge 1 commit into
masterfrom
fix/review-findings-18
Open

fix: review findings on release gates (#1-#5, #7-#8, #10-#12)#19
systemfsoftware-maker wants to merge 1 commit into
masterfrom
fix/review-findings-18

Conversation

@systemfsoftware-maker

@systemfsoftware-maker systemfsoftware-maker commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Fixes the 10 findings from the post-merge code review of #18.

P0

  • Metadata gate compares object to string (--arg want) → --argjson want; gate now exits 0 on a healthy platform package and 1 on any mismatch (probed locally against both shapes). This was blocking every tagged release.

P1

  • Undefined $LAUNCHER$LAUNCHER_NAME + non-empty assertions.
  • Concurrency keyed on github.shagithub.ref + cancel-in-progress: true: force-moved tags re-run in a fresh lane; two runs of the same tag can never double-publish.
  • check-matrix: reads only the named release job (a decoy matrix no longer satisfies the gate), rejects empty/malformed include rows, compares per-row runner against targets.json canonical runners.

P2

  • Root launcher now publishes before the platform packages so their exact peerDependencies resolve; verify-release runs the metadata gate + three-way digest cross-check + root pin check after every publish and the GitHub release upload.
  • Cross-check: set -euo pipefail, exactly-one-binary and non-empty guards, non-empty sidecar guard, bounded retry for gh release download matching npm pack.

P3

  • Smoke payloads byte-identical to exit_codes.rs constants; new release-smoke.test.ts pins the workflow's -eq 0/-eq 2 assertions and payload bytes.

Verification: scripts deno test 10/10, lint clean, check-matrix ok; cargo fmt/clippy/test green; actionlint clean on both workflows; metadata-gate jq probed (match exit 0, mismatch exit 1, darwin no-libc shape exit 0).

Closes: #3
Closes: #4
Closes: #5
Closes: #6
Closes: #7
Closes: #8
Closes: #9

Metadata gate: --argjson want so the os/cpu/libc object comparison is
meaningful (was always false, blocking every release); package name uses
LAUNCHER_NAME (was undefined LAUNCHER); non-empty assertions.

Concurrency keyed by tag ref with cancel-in-progress so a force-moved
tag re-runs in a fresh lane while two runs of the same tag can never
publish the same version twice.

Publish order: root launcher now publishes BEFORE the platform packages
so their exact launcher peerDependencies resolve; a final verify-release
job runs the metadata gate, three-way digest cross-check and root pin
check after every publish and the GitHub release upload.

check-matrix: matrixRows reads only the named release job (no decoy-job
acceptance), rejects empty/malformed include rows, and compares the
per-row runner against targets.json; targets.json carries the canonical
runner and check-matrix validates it against the known-runner set.

Cross-check: set -euo pipefail, exactly-one-binary and non-empty
guard, non-empty sidecar guard, bounded retries for gh release
download matching npm pack.

Exit-code contract: smoke payloads are byte-identical to the Rust
constants; new release-smoke.test.ts pins the workflow's -eq 0/-eq 2
assertions and payload bytes so tag-time drift breaks CI instead.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment