From 7172062f87048138e952590f37d10b0af57a9eb8 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Date: Sun, 16 Aug 2026 18:44:59 +0200 Subject: [PATCH] ci: make the release a reconciler, not a trigger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors ai-forms#17, where this was not theoretical: that repo's merge to main started no publish run, because auto-merge merges with GITHUB_TOKEN and a push with that token starts no workflow. The identical change fired here only because I merged this repo's PR by hand with a user token. threadkit has no auto-merge today, which is exactly why the schedule belongs here now — rather than being added after auto-merge arrives and a release quietly goes missing. The question the workflow asks — "is package.json's version on the registry?" — is idempotent, so asking it hourly costs one `npm view` when there is nothing to do and repairs a missed release when there is. Co-Authored-By: Claude Opus 5 --- .github/workflows/publish.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 999f3aa..49c5667 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,6 +12,17 @@ on: push: branches: [main] tags: ['v*'] + # The reconciler, and the reason this is reliable. A merge made with + # GITHUB_TOKEN (auto-merge, or any bot) starts no workflow, so the push + # trigger above silently does not fire for exactly the merges that matter. + # This repo has no auto-merge today, which is precisely why the schedule + # belongs here now rather than after it is added and a release goes missing. + # + # The schedule asks the registry the same idempotent question on a timer: + # is package.json's version published? A release missed by any means goes + # out within the hour without anyone noticing it was missed. + schedule: + - cron: '17 * * * *' workflow_dispatch: jobs: