Repository navigation
fix(intake): admit listed humans by id and triage dispatched issues - #7924
Conversation
The reusable intake lane's author gate read author_association, which a webhook reports as CONTRIBUTOR for the org owner's private membership, so every intake run skipped triage. Pass allowed-author-ids from the trusted-actor list's human ids, which check-born-triaged now emits. Add workflow_dispatch with an issue-number input, since issues a job's GITHUB_TOKEN files start no issues run. github-actions[bot] (41898282) and the lanes App are admitted as dispatching bots. Pin is a save point on an unreleased ci-workflows commit; repin to the release that carries ci-workflows#773 and #774 before opening the PR. Refs: #7886 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019bQ8pL7fJgVy7YjQ7wK1Zw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019bQ8pL7fJgVy7YjQ7wK1Zw
) Refs: melodic-software/claude-code-plugins#7924 ## Summary Registers ci-workflows v0.49.0 `intake-triage.yml` (`ff8cd36321423de961381e608e4a31563e74adb3`) in runner policy. claude-code-plugins#7924 repins its intake caller to that SHA, and its runner-policy gate fails today with `runner-target-contract: ... no reviewed runner-input contract (auto-approval declined: inputs changed since the previously reviewed ...intake-triage.yml@182aca3...)`. **Owner sign-off pending.** The README rollout paragraph says "sign-off pending"; replace that with "signed off by hand on <date>" when you sign it off, then mark this ready. ## Fix - `components/runner-policy/policy.json`: a new `intake-triage.yml@ff8cd36` entry that copies the v0.45.0 entry (`3c8a4b2`) and adds three inputs to `allowedInputs`: `issue-number`, `allowed-author-ids` and `allowed-bot-sender-ids`. Secrets (`CLAUDE_CODE_OAUTH_TOKEN`) and caller permissions (`contents: read`, `issues: write`) are unchanged. - `components/runner-policy/README.md`: the rollout paragraph for v0.49.0, sign-off pending. - `components/runner-policy/runner-policy.test.mjs`: a test that the v0.49.0 entry is exactly the v0.45.0 entry plus those three inputs, and that it is the only v0.49.0 key. ### Input diff, v0.45.0 to v0.49.0 `workflow_call` Read from both files at their SHAs (ci-workflows#773 and #774 are the only intake commits in the range): | Input | v0.45.0 | v0.49.0 | Registered here | |---|---|---|---| | `issue-number` | absent | added | yes | | `allowed-author-ids` | absent | added | yes | | `skipped-label` | absent | added | no: no caller passes it (same rule v0.45.0 applied to `allowed-bot-sender-ids`) | | `allowed-bot-sender-ids` | declared, unregistered | declared | yes: the #7924 caller now passes it | The other seven inputs, the outputs (`triage-failed`, `failure-class`) and the one secret are unchanged. ### Security note - Each new input is a numeric-id allowlist or an issue number. `allowed-author-ids` and `allowed-bot-sender-ids` are comma-separated numeric user ids. The job `if:` rejects an empty list and a leading, trailing or doubled comma, then matches `,<id>,` exactly. `issue-number` is checked against `^[1-9][0-9]{0,9}$` in a "Resolve the issue" step, read from the API, and refused when it is a pull request. - The OWNER or MEMBER `author_association` gate is replaced by the id allowlist. An `opened` issue runs only when its author opened it and the author's id is listed (a bot's sender id in the bot list). - The `workflow_dispatch` path is admitted only for an actor whose `github.actor_id` is in one of the two lists. Only a listed dispatching bot's login reaches `allowed_bots`. - A new `skipped` job (`issues: write`, inside the caller's grant) posts a notice and, when `skipped-label` is set, applies that label after checking it exists. No secret reaches it. - No secret, `runs-on` routing or caller-permission change. ## Verification - Runner-policy tests: `ℹ tests 314`, `ℹ pass 314`, `ℹ fail 0`, including `✔ intake-triage at the v0.49.0 tag copies its v0.45.0 entry and adds only the author-gate inputs`. - `node components/runner-policy/runner-policy.mjs --root .` in this repository: `Runner policy passed.` - Against the claude-code-plugins#7924 worktree (`fix/7886-intake-author-ids`, `--repository-visibility public`): - with its current vendored policy: `.github/workflows/intake-triage.yml#intake-triage: runner-target-contract: the reusable workflow path@SHA has no reviewed runner-input contract (auto-approval declined: inputs changed since the previously reviewed melodic-software/ci-workflows@182aca3)` - with `--policy` set to this branch's `policy.json`: `Runner policy passed.` - with this branch's `runner-policy.mjs`: `Runner policy passed.` - That worktree was not modified (`--policy` flag, no file copy). - Pre-commit hooks: typos, editorconfig, markdownlint, gitleaks and biome clean. ## Related - claude-code-plugins#7924 passes its runner-policy gate once this merges and the policy syncs to that repository. - Precedent: #797 (v0.45.0 entries). 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A workflow_dispatch from another branch would read that branch's trusted-actor list, models block and AGENTS.md. The born-triaged gate now runs only for an issues event or a dispatch on refs/heads/main; skipped, it leaves claude-args empty and intake does not run. Also corrects the failed-gate text (the reusable now turns away every person when human-ids is empty), quotes the human-ids output description, and tests the id wiring, the bot id list and a wrong-version trusted-actor list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
|
claude-security-review reviewed Security review: PR #7924 (head 6fa815c)No security findings. This change lets the intake lane admit listed humans by id and adds a
|
|
claude-review reviewed No findings on PR #7924 at 6fa815c. What I checked
Not verified
Closing issue |
Refs: #7886
Summary
The intake caller moves to ci-workflows v0.49.0 (
ff8cd36), which gates intake by author id (ci-workflows#773) and triages an issue named by aworkflow_dispatchrun (ci-workflows#774). v0.49.0 drops the OWNER/MEMBER admit rule, so this caller now passes the listed humans' ids explicitly.Fix
check-born-triagedemitshuman-ids: the trusted-actor list'skind: humanids, comma-joined, and empty when the list is unreadable.intake-triage.ymlpassesallowed-author-ids(those ids) andallowed-bot-sender-ids(41898282, github-actions[bot], plus the lanes App id whenAUTOMATION_LANES_APP_SENDER_IDis set). It also gains aworkflow_dispatchtrigger withissue-numberand passes that number through. A dispatch runs only frommain, so the trusted-actor list, models block and AGENTS.md always come from the default branch.allowed-bot-sender-ids. This is the owner's decision: issues the lanes App opens get intake.ff8cd36321423de961381e608e4a31563e74adb3 # v0.49.0. The repin also brings in v0.46.0 through v0.48.0.git diff --stat v0.45.0 v0.48.0touches onlypr-review.ymland a compose-args test, so none of those changes reach this caller. v0.49.0 changesintake-triage.ymland nothing that file uses (report-lane-outcomeis unchanged).Verification
node --test .github/actions/check-born-triaged/check-born-triaged.test.mjs .github/actions/resolve-config/callers.test.mjs: 31 pass, 0 fail, including the dispatch guard, the id wiring and the bot id list.actionlintandzizmor --offlineon the touched workflow and action: clean.runner-policy.mjs --root .: passes after merging main, which carries the standards sync #8058 of the reviewedintake-triagecontract (standards#802).Related
🤖 Generated with Claude Code
https://claude.ai/code/session_019bQ8pL7fJgVy7YjQ7wK1Zw