Verify: does Forgejo Actions error on an undeclared workflow_call input? (#172 migration) #223

Closed
opened 2026-06-28 00:47:13 +02:00 by engineer · 1 comment
Owner

Verify: does Forgejo Actions error on an undeclared workflow_call input?

#172 removed the toolkit_ref workflow_call input from the reusables. A consumer who bumps uses:@<post-#172-ref> but leaves a stale toolkit_ref: line in their with: block would pass an undeclared input. Whether Forgejo Actions errors on that (GitHub-Actions parity) or ignores it is currently unverified — the toolkit's own wrappers don't pass toolkit_ref post-#172, so green CI on #172 does NOT exercise this case (Surveyor 3177 review catch).

Why it matters

  • If Forgejo errors: external consumers MUST remove toolkit_ref: as they bump @ref (the migration note in integration.md + the #172 fragment already say this; an error makes it a hard requirement, not advice).
  • If Forgejo ignores: the stale line is inert; migration is cosmetic.

Probe shape (same as #172 fork-C probe #221 — logs API is UI-only, so status-encode the answer)

  1. Tiny reusable on: workflow_call declaring only runs_on (no toolkit_ref).
  2. Tiny consumer calling it at a real tag, passing with: { runs_on: go, toolkit_ref: whatever } (an undeclared input).
  3. The run's conclusion IS the answer: job fails to start / errors → Forgejo rejects undeclared inputs; job runs green → Forgejo ignores them.
  4. Clean up (throwaway branch + tag + PR, like #221).

Outcome

Update the integration.md migration note to state definitively ("removing toolkit_ref: is REQUIRED / is OPTIONAL"), and close. Low priority — the migration note already covers the safe ordering either way.

## Verify: does Forgejo Actions error on an undeclared `workflow_call` input? #172 removed the `toolkit_ref` workflow_call input from the reusables. A consumer who bumps `uses:@<post-#172-ref>` but leaves a stale `toolkit_ref:` line in their `with:` block would pass an **undeclared** input. Whether Forgejo Actions **errors** on that (GitHub-Actions parity) or **ignores** it is currently **unverified** — the toolkit's own wrappers don't pass `toolkit_ref` post-#172, so green CI on #172 does NOT exercise this case (Surveyor 3177 review catch). ### Why it matters - If Forgejo **errors**: external consumers MUST remove `toolkit_ref:` as they bump `@ref` (the migration note in integration.md + the #172 fragment already say this; an error makes it a hard requirement, not advice). - If Forgejo **ignores**: the stale line is inert; migration is cosmetic. ### Probe shape (same as #172 fork-C probe #221 — logs API is UI-only, so status-encode the answer) 1. Tiny reusable `on: workflow_call` declaring only `runs_on` (no `toolkit_ref`). 2. Tiny consumer calling it at a real tag, passing `with: { runs_on: go, toolkit_ref: whatever }` (an undeclared input). 3. The run's conclusion IS the answer: job **fails to start / errors** → Forgejo rejects undeclared inputs; job **runs green** → Forgejo ignores them. 4. Clean up (throwaway branch + tag + PR, like #221). ### Outcome Update the integration.md migration note to state definitively ("removing `toolkit_ref:` is REQUIRED / is OPTIONAL"), and close. Low priority — the migration note already covers the safe ordering either way.

Empirically answered (clean migration path) — 2026-06-28

cellblock#171 merged at 72812ac after Surveyor's APPROVED review 3215. The PR bumps cellblock's pin from v0.10.1-rc.1 → v0.18.0 with the clean migration shape: drop toolkit_ref: input + bump @<ref> on the renamed reusable-*.yml. CI-pass post-merge is the runtime gate that closes this half of #223 empirically.

Scope precision (per Surveyor d7d9)

What the clean migration test certifies:

  • Drop-and-bump path works end-to-end on a real consumer (the recommended adopter path)
  • Does NOT exercise the undeclared-input-passed path (bump @<ref> but KEEP toolkit_ref: — does Forgejo error or silently ignore?)

If we want the must-drop-vs-can-lazily-leave answer for adopter guidance documentation, that's a separate one-line probe (a deliberately-malformed consumer wrapper that bumps the ref but retains the retired input). The post-#172 substrate behavior is the empirically unknown side.

Disposition

Closing this tracker as clean-migration-path empirically validated. The lazy-leave probe is a separate question with adopter-documentation value — filing as a follow-up.

Refs:

  • cellblock#171 (the clean migration, merged 2026-06-28)
  • release-toolkit#155 (rename arc → v0.18.0)
  • release-toolkit#172 (toolkit_ref retirement → v0.16.0)
  • Surveyor's review 3215 (cellblock#171)
## Empirically answered (clean migration path) — 2026-06-28 **cellblock#171** merged at 72812ac after Surveyor's APPROVED review 3215. The PR bumps cellblock's pin from v0.10.1-rc.1 → v0.18.0 with the **clean migration** shape: drop `toolkit_ref:` input + bump `@<ref>` on the renamed `reusable-*.yml`. CI-pass post-merge is the runtime gate that closes this half of #223 empirically. ## Scope precision (per Surveyor d7d9) What the clean migration test certifies: - ✅ **Drop-and-bump path** works end-to-end on a real consumer (the recommended adopter path) - ❌ Does NOT exercise the **undeclared-input-passed path** (bump `@<ref>` but KEEP `toolkit_ref:` — does Forgejo error or silently ignore?) If we want the must-drop-vs-can-lazily-leave answer for adopter guidance documentation, that's a separate one-line probe (a deliberately-malformed consumer wrapper that bumps the ref but retains the retired input). The post-#172 substrate behavior is the empirically unknown side. ## Disposition Closing this tracker as **clean-migration-path empirically validated**. The lazy-leave probe is a separate question with adopter-documentation value — filing as a follow-up. Refs: - cellblock#171 (the clean migration, merged 2026-06-28) - release-toolkit#155 (rename arc → v0.18.0) - release-toolkit#172 (toolkit_ref retirement → v0.16.0) - Surveyor's review 3215 (cellblock#171)
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/release-toolkit#223
No description provided.