feat(ipr): cross-repo callable workflow + GitHub App support#3134
Merged
feat(ipr): cross-repo callable workflow + GitHub App support#3134
Conversation
Adds LEDGER_DIR env var to scripts/ipr/check-and-record.mjs so the script can read/write signatures and run git ops in a directory other than cwd. Defaults to cwd, so adcp's existing workflow stays unchanged. Adds .github/workflows/ipr-check-callable.yml — a reusable workflow that downstream AAO repos invoke from their own ipr-agreement.yml. The callable mints a GitHub App installation token scoped to adcp, checks the central ledger out into .ipr-ledger/, and runs the same script against it. PR comments and the IPR Policy / Signature commit status both stay on the caller repo via its default GITHUB_TOKEN; the git push back to adcp uses the App token. Aligns adcp's existing concurrency group to adcp-ipr-signature-write (was ipr-signature-write) so signatures from any AAO repo serialize against each other on the shared JSON file. governance/ipr-bot-setup.md documents the GitHub App configuration, permissions, install scope, secret rotation, revocation, and the per-repo adoption checklist. Per-repo caller workflows for adcp-client / adcp-client-python / adcp-go / creative-agent ship as separate PRs once this lands. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Code review: - Delete the misleading "cross-repo concurrency" claim from comments and docs. GitHub Actions concurrency is scoped per-repo, so the shared group name does NOT serialize between adcp's local workflow and the callable in downstream repos. Real serialization comes from the rebase-retry loop in commitSignaturesChange. - Bump rebase-retry attempts from 3 to 5 for higher contention from up to 5 sibling repos pushing to the same JSON file. Security review: - Add explicit "do not add a caller checkout" guard comment in the callable workflow. PR-head code must never run in this job; the App token + caller's GITHUB_TOKEN are both in env. - Validate LEDGER_DIR's `origin` remote URL matches adcontextprotocol/adcp before any git push. Removes a class of "future workflow edit changes which checkout backs LEDGER_DIR" footguns. - Fix governance/ipr-bot-setup.md: org secrets with selected-repository visibility require explicitly adding the new repo, not "default". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced Apr 25, 2026
Merged
ci(ipr): use adcp's reusable callable workflow + GitHub App
adcontextprotocol/adcp-client-python#276
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 1 of Batch C: enable AAO repositories beyond adcp to write back to the central IPR signature ledger via a GitHub App installation token. After this lands and the App is verified working in adcp itself, four follow-up PRs (one per downstream repo) add the tiny caller workflows.
What's in this PR
LEDGER_DIRenv var inscripts/ipr/check-and-record.mjsso the script can run against a checked-out clone of the central ledger rather than cwd. Defaults to cwd — adcp's own workflow keeps working unchanged..github/workflows/ipr-check-callable.yml. Downstream repos invoke it via:.ipr-ledger/, runs the script. PR comments + status check stay on the event repo via its defaultGITHUB_TOKEN.adcp-ipr-signature-writegroup as the callable, so signatures from any repo serialize against each other.governance/ipr-bot-setup.md— App configuration, secret rotation, revocation procedure, per-repo adoption checklist.Pre-requisites (already done by @bokelley)
adcontextprotocolorgContents:RW + Pull-requests:W + Statuses:W + Metadata:RIPR_APP_IDandIPR_APP_PRIVATE_KEYstored as org-level secrets, scoped to those reposTest plan
node --check scripts/ipr/check-and-record.mjs— script parsesadcp@main:signatures/ipr-signatures.jsonFollow-ups still queued
mainrequiringIPR Policy / Signature(separate ops PR — needs to be coordinated with the cross-repo rollout so we don't lock out our own bot before it works).🤖 Generated with Claude Code