ceremony/changelog.d/215.md
clad2 69d674cb67
All checks were successful
CI / test (pull_request) Successful in 3m16s
CI / release-exercise (pull_request) Successful in 11s
CI / self-guards (pull_request) Successful in 7s
CI / action-exercise (pull_request) Successful in 6s
CI / docs-sync-exercise (pull_request) Successful in 6s
Refs guard / refs-not-closing (pull_request) Successful in 6s
labels / labels (pull_request) Successful in 8s
docs(changelog): split the test entry under the 300-character bound
Pushed the previous commit with this red — the cite check names the bound and
I read only the first failure it printed. Refs #215
2026-08-05 21:08:51 +00:00

1.3 KiB

Fixed

  • The sweep's bootstrap value crosses the workflow_call boundary as a declared input passed by the caller — a called workflow cannot read the caller's dispatch inputs on this forge (#215).

  • Before the bridge, github.event.inputs was empty inside the called workflow, so every dispatch-woken sweep bootstrapped: ~20 label upserts on each board event (#215).

  • The caller maps an empty top-level value to no explicitly, so a cron-woken sweep can never bootstrap; the declared input also defaults to no, so a consumer that passes nothing gets the safe path (#215).

  • The gate feeds the declared input to labels-reconcile unchanged, so an invalid value meets the action's own yes|no refusal instead of being silently coerced (#215).

  • docs/CONSUMERS.md's published sweep stub carries the same pass-through — without it every consumer inherits the defect ceremony fixed for itself (#215).

Added

  • test/labels-bootstrap.test.sh pins the bridge at every hop: the declared boundary, both gate sites as the identity, no expression reading github.event.inputs, and the caller and stub pass-throughs byte-exact (#215).

  • The same test drives the four value paths — schedule-empty, no, yes, invalid — through the shipped expressions into the action's real validator (#215).