feat(runner-policy): review issue-triage-label.yml@c5e729c reusable contract - #236
Conversation
…ontract Registers ci-workflows' issue-triage-label reusable (merged as ci-workflows#191, dogfooded via ci-workflows#195's self-caller and proven end-to-end by ci-workflows#192) as a runner-input contract: allowedInputs covers its full workflow_call surface (runner, label, label-prefix), no secrets, and allowedCallerPermissions limited to the issues: write the reusable's job actually needs. Closes #235
|
Claude finished @kyle-sexton's task in 1m 42s —— View job PR Review
File reviewed: Summary: Clean, minimal addition. The new contract is structurally consistent with its peers, the permission surface is tight, and no secrets are introduced. No blocking issues found. Structural correctnessThe new entry conforms to every pattern established by existing
The SHA is a pinned, immutable commit reference ( Security (REVIEW.md "always check" criteria)
Minor observationThe Verdict: LGTM. The entry is minimal, correctly structured, and the permission surface matches what label-only issue operations require. |
|
Operator basis recorded (in-session approval, 2026-07-21 ~16:5xZ): operator approved merging this runner-policy allowlist entry via explicit in-session confirmation to the control tower. 227/227 policy tests green; the workflow it authorizes is merged and runtime-proven (ci-workflows#192 e2e). Merging under that recorded basis. This was generated by AI (control tower, session 6). |
Closes #235
Summary
Registers ci-workflows'
issue-triage-labelreusable workflow as areviewed
runner-inputcontract incomponents/runner-policy/policy.json,pinned to its merged SHA
c5e729c0af0e55ffed4675ec85c1b57356fef79e:allowedInputscovers the reusable's fullworkflow_call.inputssurface(
runner,label,label-prefix) — a caller may pass any subset.allowedSecrets: {}— the reusable takes no secrets.allowedCallerPermissions: { issues: write }— the reusable's job needsexactly
issues: writeto read and add labels; nocontents(no checkout).selectorResultInput— the reusable has no chained-selector(
prerequisite-result-style) input.Locally verified:
npm run test:runner-policy(227/227 passing),npm run lint:runner-policy("Runner policy passed."),npm run lint:md,npm run lint:hooks, pluslefthook's pre-commit gate (typos, gitleaks,editorconfig, biome) on commit.
Related
pinned at this same merged SHA.
actually applies the floor label live.
this contract (its
Runner policycheck fails without it).Test plan
npm run test:runner-policy(227 passing)npm run lint:runner-policy("Runner policy passed.")npm run lint:mdnpm run lint:hookslefthookpre-commit gate (typos, gitleaks, editorconfig, biome)