Skip to content

chore: Cherry-picked changes from upstream - #40

Merged
Raj-StepSecurity merged 11 commits into
mainfrom
auto-cherry-pick
Jul 10, 2026
Merged

chore: Cherry-picked changes from upstream#40
Raj-StepSecurity merged 11 commits into
mainfrom
auto-cherry-pick

Conversation

@Raj-StepSecurity

Copy link
Copy Markdown
Collaborator

No description provided.

@Raj-StepSecurity

Raj-StepSecurity commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator Author

🚀 PR Updated!

The PR has been updated with the latest cherry-picked commits.

@step-security/maintained-actions-dev Please review and approve the changes.

📦 Target Release Version: v1.0.167
📋 Previous Release Version: v1.0.146

@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review

Clean, well-scoped change. Bounding the token-revocation curl with --connect-timeout 5 / --max-time 10 is a good fix — previously this always() cleanup step could hang on a stalled connection, and adding || true correctly keeps a best-effort cleanup step from failing the job.

One minor observation (non-blocking): || true swallows all failures silently, including a genuinely failed revocation, with no log line. This is acceptable here since GitHub App installation tokens auto-expire (~1h), but emitting a warning on failure (e.g. ... || echo "::warning::token revocation failed") would make chronic failures visible in the logs rather than invisible.

LGTM. 👍

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 162 additions, 0 deletions)

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+3 -1)

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 123 additions, 0 deletions)

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 72 additions, 0 deletions)

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 33 additions, 0 deletions)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 1828 additions, 0 deletions)

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+1 -1)

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 39 additions, 0 deletions)

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 54 additions, 0 deletions)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 139 additions, 0 deletions)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 50 additions, 0 deletions)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 164 additions, 0 deletions)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - ❌ No PR patch available (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 1/32
  • Files with matching changes: 1/32

Overall Status: 🔴 INCOMPLETE - Missing files or changes

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+162 -0)

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+3 -1)

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+123 -0)

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+72 -0)

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1828 -0)

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+39 -0)

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 32/32

🎉 Overall Status:PERFECT - All upstream changes successfully applied!

Comment thread src/modes/agent/parse-tools.ts
Comment thread examples/agent-approval-check.yml Outdated
Comment thread agent-approval-check/agent-identities.example.yaml
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Code review summary

Reviewed across quality, security, performance, tests, and docs. The ported source changes are high quality — the fetcher.ts trigger-time (TOCTOU) filtering of review bodies/inline comments and the parse-sdk-options.ts Bash(gh:*) scope-preservation fix are genuine correctness/security improvements, each with solid regression tests. No security regressions found; the @-in-branch-name relaxation is safely bounded (bare @ and @{ rejected, all git calls use execFileSync), and the agent_approval_check.py approval gate is fail-closed with authoritative per-user write-access verification.

Two things worth the maintainer's attention before merge (beyond the inline comments):

1. The cherry-pick drops the fork's validateSubscription() from the deployed entrypoint. src/entrypoints/run.ts no longer calls (or defines) validateSubscription() — the StepSecurity banner + private-repo subscription gate. Since run.ts is the sole deployed entrypoint, the main action no longer performs this check (the copy still living in base-action/src/index.ts only runs when base-action is used standalone). This looks like a naive-merge regression rather than an intentional removal, since upstream has no such function. Please confirm it's intended. If it is, the now-orphaned axios dependency in the root package.json should be dropped (no remaining src/ consumer; base-action keeps its own).

2. agent-approval-check/agent_approval_check.py (1828 lines, new) ships with zero tests. It's the most security-critical surface in the PR, yet there's no Python test of any kind and CI runs bun test, which silently ignores it — giving false confidence. Many of its guard functions are pure and trivially testable (parse_approve_command, sha_matches, count_approvers, is_protected_base, select_pr_candidate, find_stale_approvals). A bug in any (loose SHA match, off-by-one in approval counting, a self/agent approval slipping through) would silently weaken the merge gate. Recommend a pytest suite over at least the pure functions, plus a CI job to run it.

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+3 -1)

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 54 additions, 0 deletions)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 139 additions, 0 deletions)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 31
  • Files present in PR: 29/31
  • Files with matching changes: 24/31

Overall Status: 🔴 INCOMPLETE - Missing files or changes

Comment thread src/entrypoints/run.ts
@amanstep

amanstep commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

check why this files are missing src/mcp/inline-comment-buffer.ts and test/inline-comment-buffer.test.ts

Comment thread agent-approval-check/README.md Outdated
Comment thread agent-approval-check/action.yml
@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+9 -5) with 20 additional changes

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 27/32

⚠️ Overall Status: 🟡 PARTIAL - All files present but some changes missing

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 54 additions, 0 deletions)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 84 additions, 14 deletions)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 48 additions, 0 deletions)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 29/32
  • Files with matching changes: 24/32

Overall Status: 🔴 INCOMPLETE - Missing files or changes

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 27/32

⚠️ Overall Status: 🟡 PARTIAL - All files present but some changes missing

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 39 additions, 0 deletions)

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 50 additions, 20 deletions)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 30/32
  • Files with matching changes: 26/32

Overall Status: 🔴 INCOMPLETE - Missing files or changes

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.170

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 27/32

⚠️ Overall Status: 🟡 PARTIAL - All files present but some changes missing

Comment thread src/modes/agent/parse-tools.ts
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Code review summary

Reviewed via subagents (quality, security, tests, docs, performance). The security-sensitive work here is careful and generally fail-closed — nice work on the fetcher.ts TOCTOU hardening (trigger-time filtering now applied to review bodies + inline comments before the prompt is built), the set -o pipefail install fix, the dangling-symlink ENOENT fallback in restore-config.ts, and the well-documented fail-closed threat model in agent-approval-check. Only a handful of noteworthy items:

1. No tests for agent-approval-check/agent_approval_check.py (1828 lines). This is a security-critical approval gate — /approve <sha> parsing, write-access verification, agent-identity detection, the sibling-PR-shares-head-SHA guard, and the >100-commit fail-closed path — shipping entirely unverified (no test_*.py, and bun test won't touch Python). The logic reads correct on inspection, but a gate of this importance warrants unit tests around the approver-counting and bypass-prevention paths.

2. parse-tools.ts diverges from parse-sdk-options.ts despite claiming agreement — see inline comment. Benign today, but the "same tokenizer" invariant is false and untested.

3. Minor — trigger-time filter fails open on missing timestamps. filterCommentsToTriggerTime/filterReviewsToTriggerTime (fetcher.ts:118, :150) do new Date(x).getTime() >= trigger; when the timestamp is absent this is NaN >= triggerfalse, so the item is kept. This is the wrong fail direction for a security filter (pre-existing helper, but this PR broadens reliance on it). Consider treating unparseable/NaN timestamps as "drop".

4. Minor doc — inline protected_bases is exact-match only. load_agent_config_from_env builds {repo: {exact: [...], prefixes: []}}, so the CSV input can't express prefixes. examples/agent-approval-check.yml uses protected_bases: main,release and the YAML example shows prefixes: [release/], which may lead users to expect release to gate release/* inline. Worth a note in the README/action.yml that prefix gating requires config_file.

amanstep
amanstep previously approved these changes Jul 10, 2026
@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.169

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 9 additions

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 9 additions

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 25/32

⚠️ Overall Status: 🟡 PARTIAL - All files present but some changes missing

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.169

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+10 -10)

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -1)

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 1 additions

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 18 additions, 5 deletions)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 31/32
  • Files with matching changes: 25/32

Overall Status: 🔴 INCOMPLETE - Missing files or changes

Comment thread action.yml
Comment thread agent-approval-check/agent_approval_check.py
}

@retry(
retry=retry_if_exception_type((httpx.RequestError, httpx.HTTPStatusError)),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_graphql retries on any httpx.HTTPStatusError, including non-retryable 4xx (401/403), so an auth/permission failure burns all 3 attempts with exponential backoff before failing. The sibling _rest_request (line 1207) deliberately uses _retryable_http_error to retry only network errors and 5xx. These should share the same predicate.

Comment thread agent-approval-check/agent_approval_check.py
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review summary

Ran this through code-quality, performance, test-coverage, docs-accuracy, and security reviewers. Overall this is a large, high-quality cherry-pick — the new agent-approval-check gate is unusually well-documented, the fail-closed reasoning is thorough, and the security-sensitive TS changes come with good regression tests. A few things worth attention (specific issues left as inline comments):

Biggest gap — the merge gate has zero tests. agent-approval-check/agent_approval_check.py is a 1828-line, adversarial-input-facing merge-blocking security control, and there's no test harness for it anywhere (bun test won't touch Python). The highest-risk untested units are exactly the ones an attacker probes: parse_approve_command (regex over attacker-controlled comment bodies — email-reply quoting, hex-length boundary, extra tokens), sha_matches (a startswith prefix check — a polarity/argument swap would accept a short/stale SHA), count_approvers (agent/excluded/no-write-access rejection + SHA-mismatch), and the fail-closed partial-GraphQL / same_sha_prs_incomplete sibling-PR handling. Adding a pytest suite for these before relying on the gate would be well worth it.

Verified-correct (calling out the good parts):

  • fetcher.ts — moving filterReviewsToTriggerTime/filterCommentsToTriggerTime onto the review nodes closes a real TOCTOU/prompt-injection window where review bodies edited after the trigger could reach Claude's prompt. Tests tightened to lock it in.
  • parse-sdk-options.ts shell-metachar escaping fixes a genuine permission-widening bug (Bash(gh:*) collapsing to bare Bash), and the install-pipefail spawnSync-against-a-reserved-port test is an exemplary regression guard.
  • The approval-counting core is solid: write access is authoritatively verified per-user via the collaborators permission API (not just authorAssociation), agent/excluded logins are stripped case-insensitively, [bot] normalization is correct, and pagination fails closed for commits/files/sibling-SHA lists.

Minor:

  • agent-approval-check/action.yml runs an uncached pip install httpx/pyyaml/tenacity on every PR event and every issue comment — consider setup-python with cache: pip to shave several seconds off each run.
  • get_detection_reason uses assert for a security-relevant invariant; it's stripped under python -O. It runs today (invoked without -O), but an if … : raise is more robust.
  • The top-level README doesn't mention the new agent-approval-check sub-action — worth adding to the examples list for discoverability.

amanstep
amanstep previously approved these changes Jul 10, 2026
@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.169

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1 -1) | Missing 1 additions

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 10 additions

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1 -1) | Missing 1 additions

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 10 additions

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+9 -5) | Missing 1 additions

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+11 -0)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 32/32
  • Files with matching changes: 22/32

⚠️ Overall Status: 🟡 PARTIAL - All files present but some changes missing

@github-actions

Copy link
Copy Markdown

🔍 Cherry-Pick Verification Report

📦 Upstream Changes: v1.0.146...v1.0.167

📋 File-by-File Analysis:

.claude/workflows/pr-stamp-sweep.js

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+162 -0) | Missing 2 additions

action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+3 -1) with 45 additional changes

agent-approval-check/README.md

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+123 -0) | Missing 1 additions

agent-approval-check/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+72 -0) | Missing 1 additions

agent-approval-check/agent-identities.example.yaml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+33 -0)

agent-approval-check/agent_approval_check.py

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1828 -0) | Missing 1 additions

base-action/action.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All upstream changes applied (+1 -1) with 45 additional changes

base-action/bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 1 additions

base-action/package.json

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+1 -1) | Missing 1 additions

base-action/src/parse-sdk-options.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+53 -3)

base-action/test/parse-sdk-options.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+143 -0)

bun.lock

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+10 -10) | Missing 1 additions

examples/agent-approval-check.yml

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ❌ No
  • Status: 🟡 Partial - ❌ Cherry-pick incomplete (+39 -0) | Missing 1 additions

src/create-prompt/index.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+15 -2)

src/create-prompt/types.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+1 -0)

src/entrypoints/run.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+9 -5)

src/github/data/fetcher.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+23 -26)

src/github/operations/branch.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+18 -5)

src/github/operations/restore-config.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -1)

src/github/token.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -20)

src/mcp/github-inline-comment-server.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ❌ No
  • Status: 🔴 Missing - File missing in PR (upstream has 11 additions, 0 deletions)

src/mcp/inline-comment-buffer.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+54 -0)

src/modes/agent/parse-tools.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+69 -21)

test/create-prompt.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+26 -0)

test/data-fetcher.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+84 -14)

test/format-turns.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+48 -0)

test/inline-comment-buffer.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+139 -0)

test/install-pipefail.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+50 -0)

test/modes/parse-tools.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+37 -3)

test/restore-config.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+67 -0)

test/token.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+164 -0)

test/validate-branch-name.test.ts

  • Upstream has changes: ✅ Yes
  • File exists in PR: ✅ Yes
  • Changes match: ✅ Yes
  • Status: 🟢 Perfect - ✅ All changes applied correctly (+16 -0)

📊 Summary:

  • Total files changed upstream: 32
  • Files present in PR: 31/32
  • Files with matching changes: 23/32

Overall Status: 🔴 INCOMPLETE - Missing files or changes

Comment thread src/modes/agent/parse-tools.ts
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review summary

Reviewed across code-quality, security, performance, test-coverage, and docs. This is a well-executed cherry-pick — the security-sensitive changes hold up:

  • branch.ts (@ in branch names) — safe: bare @ and @{ are still rejected, leading - is blocked, and all git calls use execFileSync (no shell).
  • fetcher.ts TOCTOU fix — correct and complete: review bodies and inline review comments are now filtered to trigger time before reaching the prompt, matching the issue/PR-comment handling.
  • parse-sdk-options.ts shell-meta escaping — correctly stops scoped rules like Bash(gh:*) from collapsing to unrestricted Bash, with good regression tests on both allow and deny sides.
  • agent_approval_check.py — the approval gate is sound: fork authors can't self-approve (collaborator-permission API, 404→false), fail-closed on partial GraphQL responses, agent approvals can't self-satisfy, and the SHA-scoped sibling-PR guard is well-reasoned.

A few noteworthy items:

1. Working-note files are committed and should be dropped from the PR. Both cherry-pick.md and .claude/workflows/pr-stamp-sweep.js are tracked on this branch. cherry-pick.md explicitly ends with "Do NOT commit … do not stage cherry-pick.md; it's a working note, not part of the action." Neither belongs in the shipped action.

2. agent-approval-check/agent_approval_check.py ships with zero tests. This is the single largest new component (1828 lines) and its whole purpose is a fail-closed security gate. Almost all of the critical logic is pure and injectable (it takes permission_check as a Callable specifically for this) — count_approvers, check_for_agent_activity, parse_approve_command, is_protected_base/select_pr_candidate, and the commits_incomplete/same_sha_prs_incomplete fail-closed branches are all trivially unit-testable without network mocking. If the upstream test suite wasn't part of the cherry-pick, it's worth bringing over before this gates real merges.

3. Minor doc gap: the inline protected_bases input is exact-match only (load_agent_config_from_env builds {"exact": [...], "prefixes": []}), whereas the config-file form supports prefixes. A user writing protected_bases: release inline expecting release/* would silently get exact-only matching — worth a one-line note in the README / example.

See the inline comment on parse-tools.ts for a stale parity claim (non-blocking).

Comment thread action.yml
Comment thread examples/agent-approval-check.yml
* tool can be granted to Claude without its MCP server being installed, or a
* server can be installed for a tool that was never granted (#1357).
*
* To stay in agreement it uses the same shell-quote tokenizer and the same

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This docstring asserts the parse path "MUST stay in agreement" with parseClaudeArgsToExtraArgs and "uses the same shell-quote tokenizer" — but parse-sdk-options.ts now wraps its tokenize call in escapeShellMeta/unescapeShellMeta (to stop Bash(gh:*) collapsing to bare Bash), which this tokenize() does not mirror. It's harmless today because install decisions only key off mcp__* names (no shell metacharacters), but the stated invariant is now technically false, so a future tool name containing parens/pipes would be tokenized differently by the two paths. Worth either mirroring the escaping or softening this comment to note the intentional divergence.

Comment thread agent-approval-check/agent_approval_check.py
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Code Review Summary

I ran quality, security, performance, test-coverage, and docs passes over this cherry-pick. Overall this is high-quality, unusually well-documented code — the new agent-approval-check gate is carefully fail-closed, its README/threat-model match the implementation closely, and the TypeScript changes (fetcher.ts TOCTOU tightening, the Bash(gh:*) permission-widening fix in parse-sdk-options.ts, the token.ts error refactor) are backed by focused regression tests. On the security side I could not find a concrete approval-bypass: write access is verified via the authoritative collaborator-permission API (not spoofable authorAssociation), agent identities are correctly excluded from counting, /approve <sha> is SHA-pinned with a 12–40 hex prefix reachable only by write-verified users, and the polarity / sibling-SHA / >100-commit fail-closed paths all hold.

One headline gap worth addressing before this gate is relied on: the 1828-line agent-approval-check/agent_approval_check.py — a security-critical approval gate — ships with zero tests, and there's no CI job that would run Python tests. The module is visibly designed for unit testing (permission_check is dependency-injected as a Callable specifically so tests can stub write-access without HTTP), yet that affordance is unused. The load-bearing, plain/mockable functions at 0% coverage include count_approvers (the central gate), is_protected_base/select_pr_candidate (sibling-PR defense), parse_approve_command, sha_matches, get_latest_review_per_user (CHANGES_REQUESTED overrides), and the fail-closed branches of fetch_pr_data (null-connection raise, *_incomplete flags). Since 'fail-closed' is the entire security claim, I'd prioritize a Python test suite + CI job proving at least the counting logic and one end-to-end fail-closed path.

One documented sharp edge (not a code defect): native Approve reviews are not SHA-pinned the way /approve is — staleness is delegated entirely to GitHub's dismiss_stale_reviews branch-protection setting, which the gate trusts but does not verify. The README does call this out and require enabling dismiss-stale-reviews. Dropping reviews whose commit_id isn't the head SHA would be nice defense-in-depth, but it's reasonable as-is given the docs.

Smaller items posted as inline comments (connect-timeout + block duplication in action.yml, an inline protected_bases exact-vs-prefix doc trap, a now-stale 'must stay in agreement' invariant in parse-tools.ts, and a dead latest_agent_commit field). None are blocking.

Comment thread src/modes/agent/parse-tools.ts
@claude

claude Bot commented Jul 10, 2026

Copy link
Copy Markdown

Code review summary

Reviewed this cherry-pick across quality, security, performance, tests, and docs. Overall the security-critical logic is genuinely well-hardened, and I could not construct a working exploit against any of the areas this PR touches. A few things worth surfacing:

Verified solid 👍

  • fetcher.ts TOCTOU reorder is a net improvement — trigger-time filtering now runs on reviews and inline review comments before the prompt/image lists are built, so content edited/submitted after the trigger no longer leaks in.
  • branch.ts @ allowance is well-guarded: bare @, @{, leading-dash, and ~^:?*[\]/control chars are all still rejected, and every git call uses execFileSync (no shell).
  • token.ts workflow-validation matching fails safe (skips the run), not open.
  • agent_approval_check.py is defensively written: 48-bit-min /approve SHA prefix, real per-user write-access check (not just authorAssociation), agents can't self-satisfy the gate, and every partial-response path fails closed.

Noteworthy gaps

  1. parse-tools.ts overstated invariant — see inline comment. Its "MUST stay in agreement / same tokenizer" claim is violated by the missing shell-meta escaping. Benign today, but a latent trap.
  2. No tests for agent_approval_check.py — this 1828-line file is a fail-closed security gate that decides whether a required merge status turns green, yet has zero test coverage (no Python test harness in the repo at all). At minimum the pure functions (parse_approve_command, sha_matches, is_agent_commit/is_agent_user, approval counting incl. the CHANGES_REQUESTED-overrides-APPROVED rule) are trivially unit-testable without network. Given it gates merges on protected branches, this is the gap I'd prioritize.
  3. Minor test gapsinline-comment-buffer dedup keys on startLine but no test exercises startLine as a number (multi-line comments) or asserts it actually discriminates; and there's no cross-parser agreement test for the parse-tools ↔ parse-sdk-options invariant in (1).

Low / optional

  • restore-config.ts snapshotSensitivePath copies with dereference: true, so a PR-authored symlink under a sensitive path (e.g. .claude/settings.local.json -> ~/.aws/credentials) would copy the target's contents into .claude-pr/. It cannot poison executed config (real config is restored via git checkout origin/<base>), but if a downstream review workflow points Claude at .claude-pr/ it's an info-disclosure vector. Consider not dereferencing symlinks whose target escapes the repo.

Nothing here is blocking.

@Raj-StepSecurity
Raj-StepSecurity merged commit 10653d8 into main Jul 10, 2026
28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants