Skip to content

signing: arm fail-closed on us-ny1 (zeitghost_require_signing: 1)#13

Open
aaronmarkham wants to merge 1 commit into
mainfrom
claude/require-signing-prod
Open

signing: arm fail-closed on us-ny1 (zeitghost_require_signing: 1)#13
aaronmarkham wants to merge 1 commit into
mainfrom
claude/require-signing-prod

Conversation

@aaronmarkham

Copy link
Copy Markdown
Owner

Summary

Closes #6. Arms fail-closed signing on the us-ny1 builder — the final step of the shard-signing rollout from PR #5.

One line in the us-ny1 inventory:

zeitghost_require_signing: 1

env.j2 already templates ZEITGHOST_REQUIRE_SIGNING from this var, and ingest / reanalyze already fail fast (exit non-zero) when signing is required but no valid key resolves. So after this deploys, an accidentally-cleared or mangled ZEITGHOST_SIGNING_KEY fails the run loudly instead of silently writing unsigned shards.

Why it's safe to arm now

Verified on us-ny1 before flipping:

  • signed 14 of 16877 shards — every write since the key was provisioned is signed; none of the pre-key corpus is (as expected).
  • Newest signer thumbprint = 7c1d34f0720bab10245ebca2f3eb8d540888d1b50e8f0cde73eaf846bde3a49b — matches the key minted by gen-signing-key.

So a valid key is present and demonstrably signing; arming require won't break the next ingest cycle.

Rollout

Merge → push-to-main runs the Deploy workflow → env.j2 renders ZEITGHOST_REQUIRE_SIGNING=1 into the builder's .env → next ingest/reanalyze enforces it.

Reversible: set zeitghost_require_signing: 0 (or remove the line) and redeploy to restore opt-in.

Post-merge check

After the deploy, confirm ingest still succeeds (key present) — it should sign as before, just now mandatory. If a future deploy ever loses the secret, ingest will exit 1 and the builder loop logs the failure rather than serving unsigned shards.

🤖 Generated with Claude Code

Closes #6. Flips shard signing from opt-in to required on the us-ny1 builder
now that the key is provisioned and verified signing in prod (signer
7c1d34f0…a49b; 14 signed shards observed, none of the pre-key corpus).

With this, `env.j2` renders ZEITGHOST_REQUIRE_SIGNING=1 and `ingest` /
`reanalyze` exit non-zero if no valid key resolves — so an accidentally-cleared
or mangled secret fails the run loudly instead of silently reverting to
unsigned shards. Reversible: set back to 0 and redeploy to restore opt-in.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
aaronmarkham added a commit that referenced this pull request May 31, 2026
…R link at the guide

Addresses the PR #14 review:

- News proof card no longer claims "every fact, signed and traced" / "each
  shard is signed." That's an overclaim today: signing is opt-in and only
  covers shards written since the key landed on us-ny1 (~14 of ~16.9k);
  require-signing isn't merged yet (PR #13), and trace_ref only attaches to
  post-deploy shards. Reworded to the universally-true claim — public lineage,
  every variant linked back to its source — which holds for the whole corpus.
- Footer "entity resolution" link now points at docs/entity-resolution.md (the
  guide) instead of the dense docs/specs/cmc-spec-v0.1.md — a gentler landing
  for that label.

Nav #adopt/#numbers ids confirmed present; responsive @media for .proof /
.ends-table already in. Landing + robustness tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

Flip shard signing to fail-closed (zeitghost_require_signing: 1) once cycles confirm signed>0

1 participant