ceremony/test
cluade-reviewer-andresmgsl 06f05aebec fix(198): the workflow declares and refuses instead of being exempted by name (#198)
@codex-reviewer-andresmgsl's blocker 1 is right and the filename exemption was
the wrong shape. It exempted the whole FILE — any later `gh` call anywhere in
labels.yml would have ridden in free — and it let the merge ship a step that
dies with `command not found` on every sweep on this forge, which #197's bar
does not permit.

The declaration mechanism already existed; a workflow simply could not reach
it. It can: `CEREMONY_FORGE_CLIENT: gh` in the step's env is the same
declaration actions/refs-not-closing carries, and the refusal that a script
gets from forge_preflight is inline here because a workflow has no shell to
call it from. The dispatch now warns by name, cites #205, and exits 0 rather
than reddening every sweep for a known gap.

So the guard needs no exemption list at all. It now requires the pair —
declared AND refusing — and reports a declaration that carries no refusal,
which is a permission slip for `command not found`.

That predicate was wrong on its first write, and its mutation test caught it:
`refuses_when_unavailable` matched the word `forge_preflight` inside
labels.yml's own comment explaining that it has NO forge_preflight to call. A
guard reading prose as evidence is the blind sweep again, in the guard written
to forbid it. Comments are stripped now, as gh_calls already stripped them.

Blocker 4: the nudge strips a trailing slash from the server URL. Reverting the
strip reds two cases.

Blockers 2 and 3 were already fixed in 97e63ac, before either review landed.

test/run.sh 28 files 0 failed under CI's env; shellcheck 0.10.0 (CI's pin),
actionlint, self-ref, marker, vendored and changelog-armed all clean, with
every file tracked this time.

Refs #198
2026-08-05 12:16:53 +00:00
..
fixtures Merge pull request #29 from codex-bot-andresmgsl/build/4-changelog-section 2026-07-22 20:12:01 +01:00
attention.test.sh test: cover attention target diagnostics 2026-08-03 19:53:25 +00:00
changelog-armed.test.sh test(changelog): the cite rule's own cases, both callers asserted 2026-08-04 12:11:09 +00:00
changelog-assemble.test.sh test(changelog): the cite rule's own cases, both callers asserted 2026-08-04 12:11:09 +00:00
changelog-assembled.test.sh test(changelog): every fragment fixture carries a terminal cite 2026-08-04 12:08:54 +00:00
changelog-monotonic.test.sh test: changelog-monotonic contract suite — constructed git histories 2026-07-22 21:11:46 +00:00
changelog.test.sh fix(changelog): one fragment, one diagnosis, wherever the long entry sits 2026-08-04 12:38:13 +00:00
closes_references.test.sh feat(forge): replace both gh api graphql sites with REST + a body parser 2026-08-02 18:41:03 +00:00
decide.test.sh feat: lib/decide.sh — the merge door's decision, pure and exhaustively tested 2026-07-22 18:59:29 +00:00
docs-sync.test.sh test(guards): the manifest guard drives the whole test plan 2026-08-04 10:16:27 +00:00
drill-recorded.test.sh feat: actions/drill-recorded — a release carries its evidence 2026-07-22 21:28:06 +00:00
facts.test.sh fix(forge): the release doors speak the shim, and an unread fact refuses (#191) 2026-08-04 11:31:06 +00:00
forge-backends.test.sh fix(forge): percent-encode asset names, and stop the docs naming a client 2026-08-04 12:11:06 +00:00
forge.test.sh fix(labels-scope): jq 1.6 cannot parse $label — the runner image ships 1.6 2026-08-02 20:34:02 +00:00
harness.sh feat(forge): port every reconciler call site onto the shim 2026-08-02 19:43:58 +00:00
issueflow-reconcile.test.sh fix(198): the workflow declares and refuses instead of being exempted by name (#198) 2026-08-05 12:16:53 +00:00
labels-reconcile.test.sh merge upstream 0.6.0 onto the forge tree, and port every gh call site it brought (#198) 2026-08-05 11:56:23 +00:00
labels-scope.test.sh fix: the labeler map learns lib/attention.sh and the surfaces it never knew (#302) 2026-08-04 17:28:37 +00:00
labels-triggers.test.sh labels: detach the reconcile sweep from PR-triggered runs (#209) 2026-08-01 16:20:00 +00:00
labels.test.sh merge upstream 0.6.0 onto the forge tree, and port every gh call site it brought (#198) 2026-08-05 11:56:23 +00:00
marker-check.test.sh test: document marker fixture incidents 2026-08-04 09:57:51 +00:00
no-runtime-gh.test.sh fix(198): the workflow declares and refuses instead of being exempted by name (#198) 2026-08-05 12:16:53 +00:00
refs-not-closing.test.sh fix(refs-not-closing): report and skip on a forge it cannot speak, rather than reddening every PR (#198) 2026-08-05 12:09:05 +00:00
release-chain.test.sh fix(forge): the release doors speak the shim, and an unread fact refuses (#191) 2026-08-04 11:31:06 +00:00
release-path.test.sh merge upstream 0.6.0 onto the forge tree, and port every gh call site it brought (#198) 2026-08-05 11:56:23 +00:00
ruling.test.sh merge upstream 0.6.0 onto the forge tree, and port every gh call site it brought (#198) 2026-08-05 11:56:23 +00:00
run.sh ci: scaffold test and lint workspace 2026-07-22 16:56:25 +00:00
runner-isolated.test.sh test(guards): runner-isolated fixture matrix — 12 spec rows plus the block-sequence cases (#58) 2026-07-23 12:03:55 +00:00
self-ref.test.sh feat: the reusable release workflow — both doors, one implementation 2026-07-22 19:55:39 +00:00
vendored.test.sh fix(consumers): the manifest is readable at 0.1.0, not 0.5.0 2026-08-04 10:29:44 +00:00
version.test.sh feat: lib/version.sh — one version abstraction, two backends 2026-07-22 18:19:50 +00:00