Repository navigation
fix(pr-pipeline): reject skill activities whose effect is not read - #15393
Conversation
A skill runs only in pr-run-activity-read.yml, which holds no write token. The schema and resolve-config (rejection 17, skill-not-read) now refuse a skill whose effect is not read at config load, in any lane. Every skill in pr-pipeline.yaml already has effect read. With no config able to reach it, the write runner's skill path is removed: the claude-code-action step, the lane commit branch and promote step, the turn-cap, model-turn and verdict checks, the reply upload, the lane-outcome record and the unused OAuth secret. The write runner now fails red before the mint for any skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
pr-pipeline releases from fragments, so the change is described under .changes/pr-pipeline/ and the hand CHANGELOG entry is reverted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
…ills pr-pipeline-sandbox#326 makes fix-marker a read skill and removes check-write-effect and audit-env-write; the central grant row follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
Codex Review Summary: ✅ CompletedThis 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 #15393, no findingsI found no security issues. The change narrows what the automation trusts and widens nothing. This lane already reviewed an earlier head ( critical-findings: 0 Trust controls checkedresolve-config (the token broker's signer inputs)
Schema (
Untrusted text reaching a lane
The docs, tests, fixtures, example config and Settled and prior
Embedded text
Coverage
|
|
claude-review reviewed Code review (blocking only): PR #15393Scope. This lane already reviewed earlier heads of this PR, so this round looks for blocking findings only. I read every hunk of all 22 listed files in No blocking findings. I checked the four places the removal is most likely to break something:
Earlier finding. The thread at Embedded text. The PR context, settled-threads and prior-findings files contain no instructions aimed at this lane. Verification. I ran nothing. The test pass counts and the sandbox broker probe in the PR description are the author's claims, and I have not checked them. Manifest. No |
…runner The write runner runs no skill, so it outputs no lane record and runs no subprocess isolation or setup-env install for one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe
No related issue: owner-requested change to the PR pipeline config contract.
Summary
Every skill activity in
docs/conventions/pr-pipeline.yamlhas effectreadand runs inpr-run-activity-read.yml. This makes that a rule: the schema and resolve-config refuse a skill whose effect is notread, and the write runner's skill path, which no config can then reach, is removed.Fix
resolve.mjscheckLeaves: new rejectionskill-not-readfor a skill leaf whose effect is notread(rejection 17 in the resolve-config README).pr-pipeline.schema.json: a leaf withskillmust haveeffect: read; theedit-runnerdef and descriptions drop the non-read skill branch;no-head-test-checkis removed.pr-run-activity-write.yml: one pre-mint assert refuses any skill (skill-in-write-runner); removed the claude-code-action step and its lane branch, promote, turn-cap, model-turn, verdict, reply-upload, lane-record and.gitremoval steps, and the unusedclaude-code-oauth-tokensecret.act-outcomeis the script step's outcome.applied-by.patchto anapply-patchscript; tests that covered only the removed steps are removed or narrowed.lane-grants.json: the sandbox's pr-refine row matches pr-pipeline-sandbox#326..changes/pr-pipeline/fragment (minor).Verification
node --test --test-concurrency=4over.github/actions/resolve-config/*.test.mjs, check-signed-commits, log-api-budget, lane-run-report post, label-unblocked, gate-source, publish-feedback, apply-patch, refire-refused and report-outcome tests: 2579 pass, 0 fail.scripts/write-runner-never-rules.test.sh(75 pass),write-runner-hold-labels.test.sh(12),act-turns-denied.test.sh(34),write-runner-revoke-step,check-app-key-references,check-read-caller-keys,read-lane-broker-check,pr-unblock-trusted-base: all pass. shellcheck clean; actionlint reports no new findings.read: fix-docs, resolve-conflicts, address-feedback, review-dependency, fix-ci, resolve-issue, apply-changelog.pr-run-activity-write.ymlpassesclaude-code-oauth-token.Follow-ups
collect-base-activity's staging branch for a skill whose effect is notread(mutate-branch | mutate-tracker | publish-artifact | merge, with the commit tools and thecan-commitprompt) is now unreachable. Removing it rewrites most of the 98 tests incollect-base-activity.test.mjs, whose default stage is a mutate-branch skill.roleinput is now unused. Removing it touches all 15 caller jobs here and the sandbox's synced callers at once, plus the role-consistency checks incallers.test.mjs.Related
loadConfigwith this branch's resolve-config over the sandbox main's broker files) returns ok.pr-pipeline-sandbox(the two repositories inlane-grants.json).🤖 Generated with Claude Code
https://claude.ai/code/session_01VQb9Q2ceZLXhTR4d1vkTCe