Repository navigation
ci(intake): run refine-issue on run-claude-cli with the intake key first - #10557
Conversation
refine-issue in intake-triage.yml moves from anthropics/claude-code-action to ci-workflows' run-claude-cli (v0.65.15 pin), as the intake role. The refine-issue job runs on INTAKE_CLAUDE_API_KEY alone; when its key leg hands off (a credit stop, or a 401 or 402) or the key is empty, the new refine-issue-subscription job runs the same steps on a fresh VM on INTAKE_CLAUDE_CODE_OAUTH_TOKEN alone. apply-refinement reads whichever leg uploaded the refinement. Both legs keep contents: read, dontAsk, the same prompt and schema, Read on the context directory plus Read, Grep and Glob in the checkout, and WebFetch on the same six docs hosts; every other tool is denied. The context moves under the workspace because --restricted confines the file tools to the working directory. The structured output is kept only after check-permission-mode.sh confirms the leg ran in dontAsk. lane-funding.json and callers.test.mjs follow. Refs: #6967 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 Incremental review of 41743ee..afef76f, covering critical-findings: 0
|
|
claude-review reviewed Incremental review of
|
The parity check compared only the prompt step's text, the launcher's inputs minus the credential and the collect step's MODE. It now compares each leg's full step list in order and lets them differ only in the credential check's env and run, the launcher's credential input, the key leg's handoff report (now id: handoff) and the last step's if. A second test mutates the subscription leg (continue-on-error, timeout, env, the managed-settings and isolation order, collect, upload, credential if, context check, a dropped step) and shows each mutation fails the check. Refs: #6967 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #6967
Summary
Intake's
refine-issuewas the last lane inintake-triage.ymlstill onanthropics/claude-code-action. It now runs on ci-workflows'run-claude-cli(the same v0.65.15 pin the other lanes use), as theintakerole, with the INTAKE API key first. The job shape copies pr-verify's key-then-subscription jobs from e9e9c32 (#8577): the subscription job is gated directly on the key job'shandoffand credential outputs. #9673 set the precedent for running a lane's key first.refine-issueruns onINTAKE_CLAUDE_API_KEYalone.refine-issue-subscription(new) runs the same steps on a fresh VM onINTAKE_CLAUDE_CODE_OAUTH_TOKENalone. It runs only when the key leg hands off (a credit stop, or a 401 or 402) or the key is empty.apply-refinementreads whichever leg uploadedrefinement-<attempt>.Fix
RUNNER_TEMPand passed asprompt-fileandjson-schema-file.mcp__*are denied. The run usespermission-mode: dontAsk.refine-data/), because--restrictedconfines the file tools to the working directory.check-permission-mode.shconfirms the leg ran in dontAsk.apply-claude-managed-settingsruns before runner isolation, as the launcher requires. An empty (default) model fails the prompt step.contents: readonly, and the model gets no GitHub token. Writes still go only throughapply-refinement's lanes App token.--setting-sources useris replaced by the launcher's--restricted, which loads no user, project or local settings.settings-json(CLAUDE_CODE_SUBAGENT_MODEL) is dropped; it had no effect because Agent is denied.lane-funding.json:refine-issuenow uses launcherrun-claude-cliwith the key.refine-issue-subscriptionis added with the token.callers.test.mjs: replaces the claude-code-action assertions. The new ones cover the launcher pin, dontAsk, the exact tool, allow and deny lists, and that the allow list's hosts match the prompt's. They also check that both legs build the same prompt and differ only in the credential, and they cover the new job's needs,if:, permissions and concurrency.Verification
node --test .github/actions/resolve-config/callers.test.mjs: 194 pass, 0 fail.read-runner-dispatcher-gate.test.sh: 9check-permission-mode.test.sh: passmorning-brief.test.sh: 487post-merge-demotion-alert.test.sh: 154node .github/standards/runner-policy/runner-policy.mjs --root .: passed.actionlint .github/workflows/intake-triage.yml: clean.zizmor --offline: no findings.scripts/check-changelog-fragments.sh --checkand--check-required origin/mainpass. No plugin or convention files changed, so no fragment is needed.test_merge_holds_sync.py: 10 passed.Related
refine-issueruns on the subscription token alone, and this change keeps that token as the second leg.🤖 Generated with Claude Code