Skip to content

docs(token-rotation): one token in five places, expiring 2027-06-29 - #87

Merged
twistedmelonman merged 1 commit into
mainfrom
claude/docs-token-expiry-1ef43e2a
Sep 4, 2026
Merged

docs(token-rotation): one token in five places, expiring 2027-06-29#87
twistedmelonman merged 1 commit into
mainfrom
claude/docs-token-expiry-1ef43e2a

Conversation

@twistedmelonman

Copy link
Copy Markdown
Member

Corrects the table from #86, which implied five independently minted tokens
with five unknown expiries.

There is one token: minted 2026-06-29, expiring 2027-06-29, copied
into five locations. The migration reused the existing credential rather
than minting new ones, deliberately, to avoid adding a variable mid-flight.

Why this matters

It is the doc's whole purpose. A reader who thinks these are separate
credentials rotates one and leaves four live on an expiring token. Step 2
of the runbook now says explicitly to update every location.

Also renamed the Minted column to Secret last set — those dates are
gh secret list's updated_at, which is when each copy was written, not
when the token was minted. As a column called "Minted" it was an invitation
to compute the wrong expiry.

One row is genuinely unknown

photo-game-poc's copy was written 2026-03-02, months before 2026-06-29,
so it holds an older token whose expiry is recorded nowhere. Marked unknown
rather than assumed. The repo is archived and runs nothing, so it is not
urgent — re-setting that secret from the current token folds it into the
block above.

Calendar

Reminder created for 2027-06-15 (two weeks before expiry), naming all five
locations, with the runbook link and the "read the log, a green check is
not evidence" warning. Email a week out, popup the day before.

Verification

  • Expiry confirmed with you directly; not inferred from API timestamps
  • created_at/updated_at pulled for all five secrets — that is what
    surfaced the photo-game-poc discrepancy
  • markdownlint clean; codebase reviewer PASS

Splitting these into per-scope tokens is deferred, by your call.

https://claude.ai/code/session_01MM2jf6c7eNN4QMq32GdC5X

The table I filled in last commit implied five independently minted
tokens with five unknown expiries. There is one token, minted 2026-06-29
and expiring 2027-06-29, copied into five locations -- the migration
reused the existing credential rather than minting new ones, to avoid
adding a variable mid-migration.

That distinction is the whole point of the doc: a rotation has to update
every location, and a reader who thinks these are separate credentials
will rotate one and leave four live on an expiring token. Step 2 of the
runbook now says so.

The dates from `gh secret list` are when each copy was written, not when
the token was minted. Renamed that column to "Secret last set" so it
cannot be read as a rotation input.

photo-game-poc is the exception: its copy predates 2026-06-29, so it
holds an older token whose expiry is unrecorded. Marked unknown rather
than assumed. The repo is archived and runs nothing, so it is not
urgent -- re-setting the secret from the current token folds it in.

Calendar reminder set for 2027-06-15, two weeks before expiry, naming all
five locations.

Claude-Session: https://claude.ai/code/session_01MM2jf6c7eNN4QMq32GdC5X
@twistedmelonman
twistedmelonman merged commit 66ea188 into main Sep 4, 2026
2 checks passed
@twistedmelonman
twistedmelonman deleted the claude/docs-token-expiry-1ef43e2a branch September 4, 2026 22:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant