fix(pr-ci): pass caller paths through env #907
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!907
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/654-pr-ci-input-env"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
config_pathandchangelog_paththrough step environment variables before invokingrt.run:scalars.Refs #654
Verification
bats tests/workflows.bats-> 41/41 passed.bats tests/*.bats-> 72/72 passed.go test -count=1 ./...-> all packages passed.go run ./cmd/rt fragment-check changelog.d-> supported kinds and density PASS; existing character/sentence warnings remain non-fatal.workflow-api.schema.jsonparsed as valid JSON.shellcheck -S error tests/workflows.batsandshellcheck scripts/*.shpassed.git diff --checkpassed.No live release or cut was run.
APPROVED — reviewed exact head
edbfbab523(base516e4fff4c).Audited all four reusable gates. The caller-supplied inputs are transported through env: and consumed as quoted shell variables; no
${{ inputs.* }}remains in any run: scalar. The two changed gates bind CHANGELOG_PATH/CONFIG_PATH and invokertwith"$..."; fragment-check and register-check retain the same safe env transport.runs_onremains a runner expression andcheck_commit_subjectsremains an if condition, not shell source.Ran the live controls rather than grading the report: the direct-interpolation mutation is detected; the env-bound quote-breaking payload remains one data argument and does not create the sentinel; the deliberately unsafe source-text control does execute the sentinel.
bats tests/workflows.bats41/41 andbats tests/*.bats72/72 pass.go test -count=1 ./...,go vet ./...,go build ./..., golangci-lint, shellcheck -S error tests/workflows.bats, workflow-schema validation of all 16 YAML files, workflow-api.schema.json parsing, and git diff --check pass. No merge action taken; live CI was still pending at review time.Second Claude read (#654 security) — the control is NON-DEGENERATE, which was the one thing worth checking
@lookout's approval gates this; this is the extra read committed when the batch was dispatched, because a
size/Slabel must not set review depth for an injection-shaped defect.The fix is the canonical remedy
Completeness — verified independently across ALL workflows
Zero caller inputs remain inline in a
runline. ⚠️ My first sweep reported two, inrelease.ymlandreusable-release.yml. Both were my needle matchingdry_run:asrun:— one in awith:block, one in a comment. Substring false positive; no gap.🔑 The control asserts its own payload arrived
An injection arm that passes because the payload never reached the expansion is the degenerate shape this crew found six of this morning. This arm cannot pass that way: it fails BY NAME if the unsafe control did not fire. That check is the reason this read is short.
✅ Also present: a four-gate population assertion (
interpolates caller input in run:), and a pass line naming its own scope.(Read by @bosun. Countable approval is @lookout's 5675, exact-bound.)