diff --git a/.github/workflows/release-smoke-linux.yaml b/.github/workflows/release-smoke-linux.yaml index 033c2a99d..1793e88a9 100644 --- a/.github/workflows/release-smoke-linux.yaml +++ b/.github/workflows/release-smoke-linux.yaml @@ -42,24 +42,20 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - # Pinned to the release's own commit: the test SCRIPT has to match the - # vintage of the binaries it's testing, same reason install_cortex pins - # the installer URL to TRIGGER_SHA for a main-latest run below. Running - # main's current copy against an older release risks exactly the - # mismatch this workflow hit live once already — a since-fixed PR - # changed agentop's health-check wording, and a run of this script - # from AFTER that change against a release from BEFORE it would assert - # on output that release never produces. + # Pinned to the release's own commit, so the script asserts on output + # the binaries under test actually produce. The concrete risk this + # avoids: main's script asserts the no-op leg's "cortex is + # installed and healthy.", which agentop setup prints — a run of + # main's current copy against an old enough release (one that + # predates agentop setup, e.g. v0.8.1) would assert on output that + # release never produces. # - # This does mean a release older than this script itself can't be - # smoke-tested by re-running its workflow — e.g. v0.8.0/v0.8.1 predate - # it entirely (confirmed via the GitHub API: 404 for - # scripts/release_smoke_test_linux.sh at both commits). That's accepted: - # those releases already shipped, re-running checks out the commit - # that was main's tip when the ORIGINAL run fired (not today's main - # either way), and the alternative — always running main's bleeding - # edge — breaks the common case (every release going forward) to - # partially help the uncommon one (re-testing something ancient). + # The cost: a release older than this script itself can't be + # smoke-tested by re-running its workflow — v0.8.0/v0.8.1 predate it + # entirely. That's accepted: those releases already shipped, and the + # alternative — always running main's bleeding edge — breaks the + # common case (every release going forward) to partially help the + # uncommon one (re-testing something ancient). - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.workflow_run.head_sha }} diff --git a/docs/superpowers/plans/2026-09-29-linux-release-smoke-test.md b/docs/superpowers/plans/2026-09-29-linux-release-smoke-test.md index 970c06dfd..1eb4dd459 100644 --- a/docs/superpowers/plans/2026-09-29-linux-release-smoke-test.md +++ b/docs/superpowers/plans/2026-09-29-linux-release-smoke-test.md @@ -239,16 +239,15 @@ as a literal shell pipe does. triggering commit, reversing the round-2 fix. The round-2 reasoning didn't hold up: unpinning doesn't make either motivating re-run case pass (an old release re-run still fails, just later and less clearly — - at the no-op leg's string match instead of at checkout), a GitHub - Actions re-run reuses the original event payload rather than - re-resolving `main`'s current tip, and running main's bleeding-edge - script against an older release's binary is an active hazard, not just - a missed opportunity — it already happened once, live, between this - PR's own reviews (see the `assert_healthy` conflict below). Pinning - means a release old enough to predate this script can't be - smoke-tested by re-running its workflow; accepted, since those - releases already shipped and the alternative breaks the common case - (every release going forward) to partially help the rare one. + at the no-op leg's string match instead of at checkout), and running + main's bleeding-edge script against an older release's binary is an + active hazard, not just a missed opportunity: main's script asserts + the no-op leg's `cortex is installed and healthy.`, which + `agentop setup` prints and which a release old enough (e.g. `v0.8.1`) + predates. Pinning means a release old enough to predate this script + can't be smoke-tested by re-running its workflow; accepted, since + those releases already shipped and the alternative breaks the common + case (every release going forward) to partially help the rare one. - [x] Fix (review, round 4): a separate, already-merged PR (#1292) changed `agentop service status`'s healthy-wording from `healthy: ` to `Cortex is healthy according to ` and landed directly on main diff --git a/scripts/release_smoke_test_linux.sh b/scripts/release_smoke_test_linux.sh index b280b9cf8..6f0c71b95 100644 --- a/scripts/release_smoke_test_linux.sh +++ b/scripts/release_smoke_test_linux.sh @@ -291,11 +291,11 @@ log "Testing ${TAG} (upgrading from: ${OLDER_TAG:-none found; first release})" # alias" and "No compatibility code for on-disk state either" (see # docs/superpowers/specs/2026-09-30-abctl-to-agentop-rename-design.md). Not # actually reachable in practice: the workflow's checkout is pinned to TAG's -# own commit, and TAG=v0.8.0 is itself old enough to predate this script -# (confirmed via the GitHub API: 404 for this file at that commit) — a run -# testing v0.8.0 fails at "sh: can't open scripts/release_smoke_test_linux.sh" -# before any of this executes. Kept rather than deleted: a future release old -# enough to have this script but still pre-rename would reach here for real. +# own commit, and TAG=v0.8.0 predates this script — a run testing v0.8.0 +# fails at "sh: 0: cannot open scripts/release_smoke_test_linux.sh: No such +# file" (dash's exact wording, checked under ubuntu:24.04) before any of +# this executes. Kept rather than deleted: a future release old enough to +# have this script but still pre-rename would reach here for real. INSTALL_TAG="${OLDER_TAG:-${TAG}}" log "Fresh install: ${INSTALL_TAG}" install_cortex "${INSTALL_TAG}"