Context
registry#334 built the Ed25519 sign-artifacts CI job and registry#335 backfilled all 83 published capabilities. Signing itself works end to end (verified: docs/decision-log.md entry 77).
The one remaining gap: on a future merge to main that publishes a new capability, the sign-artifacts job signs the artifact but cannot commit the signature.json back to main on its own. traverse-framework/registry's main is protected by the org traverse-governance-* rulesets, and github-actions[bot] is not on their bypass list. The GITHUB_TOKEN also can't open a PR that runs CI (GitHub blocks GITHUB_TOKEN-triggered workflow runs), so an auto-opened PR can't satisfy required checks either.
Current behaviour (registry#339)
The job always uploads capabilities/**/signature.json + catalog/signing-key.pub as the artifact-signatures workflow artifact, and on push events attempts the direct commit, degrading to a ::warning:: (run still succeeds) when the push is refused. So new publishes are recoverable — a maintainer downloads the artifact and opens a normal PR — but not automatic. Runbook: docs/artifact-signing.md step 3.
Options
- Dedicated bot PAT / GitHub App token as a repo secret, used by the job to push directly (or to open a PR that does trigger CI). Keeps
main protection intact; adds one secret to rotate.
- Add
github-actions[bot] to the traverse-governance-* ruleset bypass list for main. Simplest mechanically, but weakens a governance ruleset — a deliberate governance decision, not a routine toggle.
- Leave as-is — maintainer PRs the signature after each new-capability publish using the uploaded artifact. Fine while publish volume is low.
Recommendation
Option 1 if/when publish cadence makes the manual step annoying; Option 3 until then. Needs an owner decision — not something to pick unilaterally.
DoD
Context
registry#334 built the Ed25519
sign-artifactsCI job and registry#335 backfilled all 83 published capabilities. Signing itself works end to end (verified:docs/decision-log.mdentry 77).The one remaining gap: on a future merge to
mainthat publishes a new capability, thesign-artifactsjob signs the artifact but cannot commit thesignature.jsonback tomainon its own.traverse-framework/registry'smainis protected by the orgtraverse-governance-*rulesets, andgithub-actions[bot]is not on their bypass list. TheGITHUB_TOKENalso can't open a PR that runs CI (GitHub blocksGITHUB_TOKEN-triggered workflow runs), so an auto-opened PR can't satisfy required checks either.Current behaviour (registry#339)
The job always uploads
capabilities/**/signature.json+catalog/signing-key.pubas theartifact-signaturesworkflow artifact, and onpushevents attempts the direct commit, degrading to a::warning::(run still succeeds) when the push is refused. So new publishes are recoverable — a maintainer downloads the artifact and opens a normal PR — but not automatic. Runbook:docs/artifact-signing.mdstep 3.Options
mainprotection intact; adds one secret to rotate.github-actions[bot]to thetraverse-governance-*ruleset bypass list formain. Simplest mechanically, but weakens a governance ruleset — a deliberate governance decision, not a routine toggle.Recommendation
Option 1 if/when publish cadence makes the manual step annoying; Option 3 until then. Needs an owner decision — not something to pick unilaterally.
DoD
docs/decision-log.md).sign-artifactsjob updated to use it, verified on a real new-capability publish.docs/artifact-signing.mdstep 3 updated to match the decision.