ci(release): T502/T503 promote home-latest and the Release only after the stack gate (gh-#777) - #799
Merged
Merged
Conversation
SPEC F179: merge-manifests tags home-<tag> only; new stack-gate job (needs merge-manifests, 40 min, fetch-depth 0 for the upgrade worktree, install-ffmpeg, GH_TOKEN) runs stack_gate.sh --fresh --upgrade --capture and uploads gate-report/ (md, json, capture.wav, compose-*.log) for 7 days; new promote job retags the five images home-latest from home-<tag> and re-asserts both platforms; create-release needs promote, downloads the report and creates the Release with --generate-notes --notes-file (proof section first, gh prepends the body). A red gate leaves home-<tag> and nothing else; rerun --failed re-enters at the gate. Story448 pins un-skipped, 21 facts.
… down (gh-#777) `--fresh --upgrade --capture` in one run (release.yml's combination) failed the upgrade leg at setup: the previous release's setup.sh preflight found port 8080 bound by the still-running fresh stack, which the capture leg records. compose.yaml publishes fixed host ports, so the upgrade leg now runs after capture/chaos and teardown_project brings the fresh project down first, dropping its PROJECTS entry so the EXIT trap does not repeat the `down -v`. Runs without --upgrade are unchanged. Replayed on the dev box 2026-09-16: fresh passed, upgrade passed (previous v5.8.2), capture red only on loudness (gh-#797).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR-9 of gh-#777 · STORY-448 · T502 + T503
🚦 What changes
.github/workflows/release.yml: astack-gatejob (needsmerge-manifests, 40 min,fetch-depth: 0, ffmpeg) runstools/gate/stack_gate.sh --tag "$GW_TAG" --fresh --upgrade --capture --report gate-reportand uploadsgate-report/(7 days,if: always()).merge-manifestsnow tags onlyhome-<tag>; a newpromotejob (needsstack-gate) retags the five images ashome-latest;create-release(needspromote) downloads the report and creates the Release with--generate-notes --notes-file notes.md, where notes.md is "## ✅ What this release proved" + gate-report.md. SPEC F179.2–F179.5. Pins:Story448_ReleaseWorkflowGate.cs(21 facts, no longer skipped).tools/gate/stack_gate.sh: the upgrade leg now runs last, after capture/chaos, andteardown_projectbrings the fresh stack down first (see below).🧪 T503 transcript — the stack-gate step body replayed on the dev box
GW_TAG=v5.8.3,GH_TOKENfromgh auth token, dev station stopped, the step body run verbatim.Run 1 (16:42, before the fix) — exit 1, 441 s. The upgrade leg failed at
setup: v5.8.2'ssetup.shpreflight reportedPort 8080 is already in use. Cause: the script ran fresh → upgrade → capture, but the capture leg records the fresh stack, so the fresh project was still up when the previous release's stack tried to bind the same fixed host ports (compose.yaml publishes 8000/8080/8081/3000). T495 only ever ran--upgradealone and the nightly runs--fresh --capture --chaos, so this combination had never run before release.yml asked for it.Run 2 (17:22, after the fix) — exit 1, 539 s. Upgrade passes; the only red is the capture loudness check, which is gh-#797 (pre-existing, unrelated to this PR).
No leftover
gw-gatecompose projects or worktrees after either run; the dev station came back withstart.Notes ordering:
gh help release createconfirms--generate-notesand--notes-filecompose: gh sends the file as the body withgenerate_release_noteson, and GitHub prepends a supplied body to its generated notes, so the proof section comes first. No throwaway tags or draft releases were created to check this.The T503 acceptance says exit 0. The port-collision defect this task found is fixed and proven above; the remaining red is gh-#797 (capture leg lands at −21 LUFS, 5 LU under target, sitting exactly on the tolerance edge: −21.0 passed in run 1, −21.1 failed in run 2). After this PR merges, the next tag's Release will be held by the gate until #797 is fixed. That is the gate working as designed, but it needs a decision on #797 before the next release. T503 stays unticked in the plan until the replay exits 0.
🔍 Review
--chaosclaim about release.yml corrected).actionlintandshellcheck -S warningclean.