chore(index): repin to the operator-held signing key
publish / publish (push) Failing after 18s

The bootstrap key generated during implementation was lost with its scratch
directory. Nothing shipped pinning it, so this is a straight replacement of
slot 0 rather than a rotation — the second slot stays reserved for a real one.

The private half now lives only in the INDEX_SIGNING_KEY secret, so CI is the
only thing that can sign. This push is what makes it do so: the committed
signature is still the old key's, and the verify self-check will fail loudly
if the secret does not match the public key pinned here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 22:57:38 +02:00
co-authored by Claude Fable 5
parent ce8b13c52b
commit 575ea1a371
3 changed files with 3 additions and 3 deletions
+1 -1
View File
@@ -70,7 +70,7 @@ jobs:
# auditor would use. Catches a key/host mismatch BEFORE it ships, rather
# than as every host in the field silently rejecting the catalog.
- name: Verify signature
run: bun run verify -- --pub "${{ vars.INDEX_PUBLIC_KEY || 'ed25519:n/KgBQSSDZqvyGHa8PkHWHZtV1zRXLk0BdQUi4/BD/w=' }}"
run: bun run verify -- --pub "${{ vars.INDEX_PUBLIC_KEY || 'ed25519:qK18TE2qygIyObtMlHxUI/G1gKby8tPxuieAfnEKgYE=' }}"
- name: Commit signature to main
run: |
+1 -1
View File
@@ -230,7 +230,7 @@ PR cannot get anything signed.
The public key currently pinned in the host:
```
ed25519:n/KgBQSSDZqvyGHa8PkHWHZtV1zRXLk0BdQUi4/BD/w=
ed25519:qK18TE2qygIyObtMlHxUI/G1gKby8tPxuieAfnEKgYE=
```
`bun run verify` defaults to this key, so anyone can audit a published index
+1 -1
View File
@@ -22,7 +22,7 @@ export const PUBKEY_PREFIX = "ed25519:";
* `verify` defaults to this so a signed index can be checked with no arguments.
*/
export const DEFAULT_PUBLIC_KEY =
"ed25519:n/KgBQSSDZqvyGHa8PkHWHZtV1zRXLk0BdQUi4/BD/w=";
"ed25519:qK18TE2qygIyObtMlHxUI/G1gKby8tPxuieAfnEKgYE=";
/** Encode a node KeyObject public key as the host's `ed25519:<base64>` form. */
export function encodePublicKey(key: KeyObject): string {