Skip to content

Two write lanes push unsigned commits, so signature enforcement cannot extend past the default branchΒ #142

Description

@devantler

πŸ€– Generated by the Agentic Engineer

Evidence

Measured 2026-08-07 while answering acceptance criterion 4 of #132 β€” newest commit of a live branch
per lane, read from the commit's own verification object:

Lane signed
claude/* yes
cursor/* yes
codex/* no β€” reason: unsigned
chore/template-sync_* (template-sync App) no β€” reason: unsigned
Dependabot / Renovate yes (GitHub authors and signs those)

Problem

Two of the four write lanes push unsigned commits. Nothing is broken today: direct pushes to default
branches are blocked by the pull_request rule, and what lands is a GitHub-created squash commit, so
history stays signed regardless.

The cost is optionality. Commit signature verification cannot be required on branches while two lanes
would be refused by it, so the strongest form of that control stays permanently out of reach for
reasons that have nothing to do with whether it is wanted. #132 recommends scoping the rule to the
default branch precisely to avoid that tax β€” a sound call, and one this issue exists so we are not
stuck with forever.

Signing also makes the lanes distinguishable at the commit level, which is worth something on its own:
every machine-local lane authors as the same identity, so the signature is the only per-lane evidence
a commit carries.

Expected behaviour

Every automated write lane signs its commits, so requiring signatures anywhere is a policy choice
rather than a breaking change.

Suggested approach

  • The codex/* lane's signing is host-local runtime configuration. Per the shared contract, one
    agent instance does not change another's runtime configuration β€” prepare the exact change and hand
    it to the maintainer.
  • The template-sync App's commits are created by its workflow; commits made through the GitHub API
    with an App token are signed by GitHub, so this is likely a matter of how that workflow commits
    rather than a missing key.

Acceptance criteria

  • A newly pushed codex/* branch commit reports verified: true.
  • A newly pushed template-sync commit reports verified: true.
  • Verified by reading each commit's verification object, not by inspecting configuration.

Blocks the branch-scoped option in #132.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status
    πŸ“₯ Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions