Skip to content

fix(repo): make the deploy guard fire, and record the deletion of musher-dev/specs - #58

Merged
justinmerrell merged 2 commits into
mainfrom
fix/deploy-guard-and-specs-retirement
Aug 19, 2026
Merged

fix(repo): make the deploy guard fire, and record the deletion of musher-dev/specs#58
justinmerrell merged 2 commits into
mainfrom
fix/deploy-guard-and-specs-retirement

Conversation

@justinmerrell

Copy link
Copy Markdown
Contributor

Closes #51. Unblocks the repository half of #56.

The deploy guard never fired

taskfiles/build.Taskfile.yml guarded site:deploy with
requires: vars: [CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID], and both
pages.yml and ADR 0012 §6 state that this "refuses to run without both, so a
missing secret fails the job instead of deploying anonymously". It does not.
GitHub Actions defines an env: key whose secret is missing — as an empty
string — and Task counts empty as set. Reproduced against Task 3.52.0, the
version CI pins:

$ CLOUDFLARE_API_TOKEN= CLOUDFLARE_ACCOUNT_ID= task site:deploy --dry
task: [site:deploy] .../wrangler pages deploy site --project-name=musher-schemas --branch=main

$ env -u CLOUDFLARE_API_TOKEN -u CLOUDFLARE_ACCOUNT_ID task site:deploy --dry
task: Task "site:deploy" cancelled because it is missing required variables: ...

The guard fired only when the variables were genuinely undefined, which is the
one state CI never produces. Both failed Pages runs on main show the
consequence: wrangler ran and emitted its own error.

A precondition testing for emptiness now fires in all three failure states —
unset, empty, and one of the two missing — and passes only when both are
non-empty. pages.yml's comment gains the reason, because the failure mode is
not visible from the file that depends on it.

musher-dev/specs is deleted, not archived

ADR 0012 §5 decided the superseded repository would be archived, reasoning that
deletion 404s every inbound reference including ADR 0001's own account of why
this repository exists. That reasoning is not withdrawn. What changed is that
the harm it was weighed against went live: musher-dev/infra#336 has merged and
applied, schemas.musher.dev resolves, and the archived repository's README
still advertises URLs on that hostname for the bundle-definition schema the
platform no longer ships.

ADR 0014 supersedes §5, states the cost rather than mitigating it away, and
closes ADR 0012 follow-up 2 by dropping specs from the organisation's
pr-workflow ruleset (14207433). Per #51's "Not doing", spec is not
added in its place.

ADR 0001 and ADR 0012 are left exactly as written. An accepted ADR records what
was decided and why; editing one to hide a dead link would cost more than the
dead link does. The four references this repository holds to the deleted
repository will 404, and ADR 0014 says so under Consequences.

Out of scope, and still yours

Setting CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID (#56) and deleting
the repository itself. Neither can be done from here.

Verification

task check passes. The guard was exercised in all four states:

CLOUDFLARE_API_TOKEN CLOUDFLARE_ACCOUNT_ID Result
unset unset refused
empty empty refused — the CI case, which previously passed
set empty refused
set set reaches wrangler

🤖 Generated with Claude Code

justinmerrell and others added 2 commits August 19, 2026 12:50
`requires: vars:` fires only when a variable is undefined. GitHub Actions
defines an `env:` key whose secret is unset -- as an empty string -- so the
guard passed in the one environment it exists for, and wrangler reached the
network unauthenticated and emitted its own error instead. Both failed Pages
runs on `main` show exactly that.

A precondition testing for emptiness fires in all three failure states:
unset, empty, and one of the two missing. This makes true what pages.yml
and ADR 0012 section 6 already claim.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Justin Merrell <merrelljustin@gmail.com>
…hived

ADR 0012 section 5 decided `musher-dev/specs` would be archived rather than
deleted, on the grounds that deletion 404s every inbound reference including
ADR 0001's own account of why this repository exists. That reasoning is not
withdrawn, but the harm it weighed against has gone live: schemas.musher.dev
now resolves to this repository's origin, while the archived repository's
README still advertises URLs on that hostname for a retired concept.

ADR 0014 supersedes section 5, states the cost rather than arguing it away,
and closes ADR 0012 follow-up 2 by dropping `specs` from the organisation's
pr-workflow ruleset. ADR 0001 and ADR 0012 are left as written -- an accepted
ADR records what was decided, and editing one to hide a dead link would cost
more than the dead link does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Justin Merrell <merrelljustin@gmail.com>
@justinmerrell
justinmerrell merged commit 71458f6 into main Aug 19, 2026
6 checks passed
@justinmerrell
justinmerrell deleted the fix/deploy-guard-and-specs-retirement branch August 19, 2026 13:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Retire musher-dev/specs — ADR 0001 §1 says it is superseded and will be deleted

1 participant