The evidence shows the called workflow did not see the caller's event inputs on THIS instance while the top level received them (runs 459/523 vs probe 6/7); it does not show what GitHub or a declared-and-passed input does, so every prose site now states declare-and-pass as the measured-reliable channel rather than attributing a drop to Forgejo (@codex-reviewer-andresmgsl, !218 blocker 2). Refs #215
1.4 KiB
Fixed
-
The sweep's
bootstrapvalue crosses theworkflow_callboundary as a declared input, explicitly passed by the caller — the one channel measured to work; the called workflow did not see the caller's event inputs as an implicit substitute on this instance (#215). -
Before the bridge,
github.event.inputswas 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
noexplicitly, so a cron-woken sweep can never bootstrap; the declared input also defaults tono, so a consumer that passes nothing gets the safe path (#215). -
The gate feeds the declared input to
labels-reconcileunchanged, so an invalid value meets the action's ownyes|norefusal 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.shpins the bridge at every hop: the declared boundary, both gate sites as the identity, no expression readinggithub.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).