Skip to content

Commit f47c577

Browse files
catomeanclaude
andcommitted
chore(release): 0.1.1 — reconcile releases, publish via trusted publishing
Ports ai-forms' publish reconciler: merging a version bump to main is the whole release. The workflow (on push, hourly, or by hand) asks the registry whether package.json's version exists and publishes it if not — idempotent, and immune to the tag-pushed-by-GITHUB_TOKEN trigger gap. Auth is OIDC via the package's Trusted Publisher (this repo + publish.yml), so no npm token exists to leak or expire. The bump to 0.1.1 makes the merge itself prove the tokenless path live. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 6b24a59 commit f47c577

3 files changed

Lines changed: 13 additions & 19 deletions

File tree

.github/workflows/publish.yml

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@ on:
1212
push:
1313
branches: [main]
1414
tags: ['v*']
15-
# The reconciler, and the reason this is reliable. A merge made with
16-
# GITHUB_TOKEN (auto-merge, or any bot) starts no workflow, so the push
17-
# trigger above silently does not fire for exactly the merges that matter.
18-
# This repo has no auto-merge today, which is precisely why the schedule
19-
# belongs here now rather than after it is added and a release goes missing.
20-
#
21-
# The schedule asks the registry the same idempotent question on a timer:
22-
# is package.json's version published? A release missed by any means goes
23-
# out within the hour without anyone noticing it was missed.
15+
# The reconciler, and the reason this is reliable. A merge made by auto-merge
16+
# uses GITHUB_TOKEN, and a push with that token starts no workflow — so the
17+
# push trigger above silently does not fire for exactly the merges that matter.
18+
# The schedule asks the registry the same idempotent question on a timer: is
19+
# package.json's version published? If a release was missed by any means, it
20+
# goes out within the hour without anyone noticing it was missed.
2421
schedule:
25-
- cron: '17 * * * *'
22+
- cron: '43 * * * *'
2623
workflow_dispatch:
2724

2825
jobs:
@@ -64,14 +61,11 @@ jobs:
6461
- if: steps.check.outputs.publish == 'true'
6562
run: npm run verify
6663

67-
# Bootstrap auth. Trusted publishing (OIDC) needs no token and is the
68-
# destination; until it is configured on the package, NPM_TOKEN is what
69-
# authenticates. The token expires — token-health.yml warns before it does,
70-
# rather than letting a release be the thing that discovers it.
64+
# Auth is trusted publishing (OIDC): npm accepts this job's identity token
65+
# because the package's Trusted Publisher is pinned to exactly this repo
66+
# and workflow. No npm token exists anywhere, so none can leak or expire.
7167
- if: steps.check.outputs.publish == 'true'
7268
run: npm publish
73-
env:
74-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
7569

7670
- name: Tag the released commit
7771
if: steps.check.outputs.publish == 'true'

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "threadkit",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"description": "Headless multi-participant message threads. Permission is participation, unread is per-person, and an AI can be a participant subject to the same visibility rules as everyone else.",
55
"license": "MIT",
66
"author": "Mao Nakamoto",

0 commit comments

Comments
 (0)