ci: migrate Claude PR automation to describe-cli - #709
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
● Reviewed · against Note Approved — one signing-key thread stays open on Migrates the Claude PR-metadata automation from the retiring ai-toolkit reusable workflow to AssessmentThe migration preserves the behaviors that matter: the dropped Iteration history · 2 reviews2026-08-29 00:46 UTC · ✅ approved · 0 findings ·
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6eefa729de
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| echo "::error::Claude Code release signing key does not match the pinned fingerprint $CLAUDE_CODE_GPG_FINGERPRINT" | ||
| exit 1 | ||
| fi | ||
| gpg --batch --verify "$WORK/manifest.json.sig" "$WORK/manifest.json" |
There was a problem hiding this comment.
Bind manifest verification to the pinned signing key
When the downloaded key bundle contains both the pinned Anthropic public key and another key, the preceding fingerprint check passes, but this bare gpg --verify accepts a valid signature from any imported key. An attacker controlling the release and key downloads could therefore sign a forged manifest with the additional key, pass the binary checksum, and reach the credentialed posting step. Verify the signer fingerprint itself, for example with --assert-signer, using an isolated keyring.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Note
✅ Approved — see full review in the sticky comment ↑
Graphite Automations"Request reviewers once CI passes on sdks monorepo" took an action on this PR • (08/28/26)1 assignee was added and 3 reviewers were added to this PR based on Siyu Jiang (See-You John)'s automation. |
What changed
Replaces the ai-toolkit reusable workflow call with the CLI from Uniswap/internal-tools:
_generate-pr-metadata.yml->@uniswap/describe-clivia.github/workflows/describe.ymlReview automation in this repo already runs on review-cli and is untouched by this PR. Same describe shape already running in Uniswap/universe, backend, tjar, uniswap-ai, and ai-toolkit. The CLI installs pinned from GitHub Packages before the PR's code is checked out; the Claude Code binary is version-pinned and GPG-verified.
Why
ai-toolkit is retiring the reusable PR-metadata workflow. describe-cli classifies the description lifecycle (cold / diff-changed / human-edited / stale), writes additively inside its markers, and backs off from human-edited descriptions instead of overwriting them.
Behavior changes
generation_mode: "description,deferred-title", so titles were already deferred rather than auto-applied;check-pr-title.yamlstill enforces conventional-commit titles.changeset-release/skip is dropped as redundant:changeset-release/mainmatches the canonical guard's!contains(github.head_ref, 'release/'). The canonical guard also adds acursor[bot]andcherry-pick/skip.Before merging (repo/org admin)
describe-clipackage: Uniswap/internal-tools -> Packages -> package settings -> Manage Actions access. Without it the install step fails with a 403 and a self-explanatory error.ANTHROPIC_API_KEYworks as-is;CLAUDE_CODE_OAUTH_TOKENis preferred if available.DESCRIBE_CLI_VERSION,CLAUDE_CODE_VERSION.Verified
describe.ymlis byte-identical to the canonical file and parses as valid YAML.BUN_CONFIG_FILEexplicitly, so the repo-rootbunfig.toml(npmjs registry pin + 3-dayminimumReleaseAge) neither blocks nor is bypassed by it; every post-checkout bun call setsBUN_CONFIG_FILE=/dev/null.Also in this PR:
.claude/review.yml's model pin rolled fromclaude-opus-4-8toclaude-opus-5(current Opus generation).