From b9d8eeddebf7aaaa1aa02ea5f11824f738416644 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 14 Sep 2026 11:18:00 +1000 Subject: [PATCH 1/2] ci: skip the stamp only on the bot's own subject line, not on any mention #35's squash commit carried its PR body, which mentioned "[skip-stamp]" in prose, so the guard skipped the very stamp run that PR shipped; the backfill had to be dispatched by hand. Match the bot's subject line with startsWith instead of contains on the whole message. Assisted-by: Claude Code (Claude Fable 5.1) Co-Authored-By: Claude Fable 5.1 --- .github/workflows/stamp-version.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stamp-version.yml b/.github/workflows/stamp-version.yml index 69a111d..dbed801 100644 --- a/.github/workflows/stamp-version.yml +++ b/.github/workflows/stamp-version.yml @@ -23,12 +23,14 @@ jobs: stamp: # The bot's own commit carries [skip-stamp]; pushes made with GITHUB_TOKEN # don't retrigger workflows anyway, so this guard is belt-and-suspenders. + # Match the subject line only: a squash commit carries the PR body, and #35's + # body merely mentioned "[skip-stamp]" — which skipped the stamp it shipped. # That same no-retrigger behaviour means the stamp push does not redeploy # the site on its own — and since v0 stamping, the stamp commit is where # `version: 0` and the README's `v0` cell first appear, so the last step # dispatches deploy.yml explicitly (a workflow_dispatch call from # GITHUB_TOKEN does run; only events *caused by* its pushes are dropped). - if: ${{ !contains(github.event.head_commit.message, '[skip-stamp]') }} + if: ${{ !startsWith(github.event.head_commit.message, 'Stamp QEP version hash and sync README [skip-stamp]') }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From f454b63eb9b2f4649207f06fe29b4668c44f4eb7 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 14 Sep 2026 11:25:55 +1000 Subject: [PATCH 2/2] ci: scope the skip-stamp guard to push events explicitly A workflow_dispatch payload has no head_commit, so the guard was already inert on manual runs; say so in the expression rather than relying on the missing field. Assisted-by: Claude Code (Claude Fable 5.1) Co-Authored-By: Claude Fable 5.1 --- .github/workflows/stamp-version.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stamp-version.yml b/.github/workflows/stamp-version.yml index dbed801..5c73474 100644 --- a/.github/workflows/stamp-version.yml +++ b/.github/workflows/stamp-version.yml @@ -30,7 +30,9 @@ jobs: # `version: 0` and the README's `v0` cell first appear, so the last step # dispatches deploy.yml explicitly (a workflow_dispatch call from # GITHUB_TOKEN does run; only events *caused by* its pushes are dropped). - if: ${{ !startsWith(github.event.head_commit.message, 'Stamp QEP version hash and sync README [skip-stamp]') }} + # A manual run (workflow_dispatch) always runs — stamp.mjs handles starting + # from the bot's own commit — so the guard applies to push events only. + if: ${{ github.event_name != 'push' || !startsWith(github.event.head_commit.message, 'Stamp QEP version hash and sync README [skip-stamp]') }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4