Skip to content

chore(runner-policy): approve claude-security-review contract at 66073e5 - #280

Merged
kyle-sexton merged 1 commit into
mainfrom
chore/security-review-contract-66073e5
Jul 27, 2026
Merged

chore(runner-policy): approve claude-security-review contract at 66073e5#280
kyle-sexton merged 1 commit into
mainfrom
chore/security-review-contract-66073e5

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

Adds the reviewed runner-input contract for ci-workflows/.github/workflows/claude-security-review.yml@66073e5 — the fail-closed fix from melodic-software/ci-workflows#269 — to approvedReusableWorkflowContracts, cloned unchanged from the existing e295107 entry.

Auto-approval declines this bump on its own: between e295107 and 66073e5 the prompt input's default text and the skip-actors description changed, which the structural differ treats as an input-surface change. The contract surface consumers are actually held to — input names, secrets, caller permissions, routing — is identical, so the entry is a byte-for-byte clone keyed to the new SHA.

Consumers can then pin 66073e5 and pass the runner-policy gate; melodic-software/claude-code-plugins#1684 (deploying the fail-closed pin that closes the measured 42.6% exit-0-on-429 review bypass) is waiting on this.

Test plan

  • python -m json.tool parses the file; Biome check clean (pre-commit hook run).
  • Entry is a clone of the already-reviewed e295107 contract with only the SHA key changed — verified by diff.
  • Downstream proof: after sync lands in claude-code-plugins, the Runner policy check on claude-code-plugins#1684 (currently failing with runner-target-contract: no reviewed runner-input contract) goes green.

Related

No linked issue.

Adds the reviewed runner-input contract for
ci-workflows claude-security-review.yml@66073e5 (the fail-closed fix from
ci-workflows#269), cloned unchanged from the e295107 entry. Auto-approval
declines the bump because the prompt input default and skip-actors
description changed between the SHAs; the contract surface consumers are
held to (inputs, secrets, caller permissions, routing) is identical.

Unblocks claude-code-plugins#1684, which deploys the fail-closed pin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016E9qM8CanWf8KkFGcmg4jo
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

No description provided.

@claude

claude Bot commented Jul 27, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 23s —— View job


PR Review

  • Gather context
  • Read changed files and review diff
  • Check REVIEW.md guidelines
  • Post review findings

Findings

Structural correctness — no issues

The new entry at policy.json line 473 is a byte-for-byte clone of the e295107 entry directly above it (lines 460–472), with only the SHA key changed. Verified against both the diff and the file as read:

Field e295107 entry 66073e5 entry
routing runner-input runner-input
runnerInput runner runner
allowedInputs ["runner", "skip-actors", "paths"] ["runner", "skip-actors", "paths"]
allowedSecrets CLAUDE_CODE_OAUTH_TOKEN passthrough identical
allowedCallerPermissions contents: read, pull-requests: write, id-token: write identical

SHA pinning — correct

The key uses the full 40-character SHA (66073e58e730f8bcd1d6533e26ac9411a637fe83), consistent with how every other entry in this block is keyed. The short SHA 66073e5 in the PR title/branch is a display alias only; the policy itself is unambiguous.

One inherent trust assumption to note

This PR approves a SHA in ci-workflows that this repository cannot independently diff. The approval rests on the PR author's assertion that the changes between e295107 and 66073e5 are limited to the prompt default text and skip-actors description — neither of which is enforced by the contract fields above. That reasoning is clearly stated in the PR body and is plausible given those fields are identical. Reviewers should be aware they are accepting that assertion rather than verifying the upstream diff directly.

Security scope (per REVIEW.md)

No secrets added to source — the CLAUDE_CODE_OAUTH_TOKEN passthrough is not new, it mirrors the existing approved entry. No injection, tenant-scoping, or authorization concerns introduced by this change.

No issues found. The entry is structurally correct, properly pinned, and the rationale for manual approval (auto-approver rejected on cosmetic-only input metadata changes) is well-explained.

@kyle-sexton kyle-sexton added the needs-human Human-in-the-loop required; autonomous sessions must not resolve items carrying this. label Jul 27, 2026
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

🤖 fable-autopilot escalation (session 016E9qM8): merge is yours — all checks pass, 0 review threads, mergeable.

Rationale: this PR adds a reviewed runner-input contract for a security gate, authored by this lane. The runner-policy design intentionally makes an input-surface change cost a human review; the lane classifying its own gate-approval as C2-mechanical and merging it would be self-certification, so it stays at the tracked rung (human merge). The entry is a byte-for-byte clone of the already-reviewed e295107 contract keyed to the new SHA — verification is a 13-line diff read.

After squash-merge, standards-sync carries policy.json to consumers; then re-run checks on melodic-software/claude-code-plugins#1684 (the fail-closed pin deploy) and it can merge.

@kyle-sexton
kyle-sexton merged commit 897dbcf into main Jul 27, 2026
44 checks passed
@kyle-sexton
kyle-sexton deleted the chore/security-review-contract-66073e5 branch July 27, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-human Human-in-the-loop required; autonomous sessions must not resolve items carrying this.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant