cast/test
dan-claude-bot f51ef29b79 fix(labels): never name a label the repo lacks, and do not read an unreadable rollup as green
Round-1 review fixes, canonical across box/rig/cast.

`gh issue edit --add-label` rejects the WHOLE call on one unknown label name,
applying nothing. Batching state and blockers into a single edit for
anti-flicker meant one missing `blocker:*` would take the `state:*`
convergence down with it — and since the taxonomy was only ever created by a
manual workflow_dispatch, the first sweep after the two-axis change would have
healed nothing on exactly the PRs it exists to fix, surfacing only as a log
line. The add side is now filtered against the repo's real label set, read
once per sweep. Removals need no filter (built from has_label, so they
provably exist); an unreadable label set filters nothing rather than
everything, because a failed read must not silently strip the board.

`checks_state` returns UNREADABLE when the `statusCheckRollup` key is absent —
what a failed `gh pr view` leaves behind — distinct from NONE for a
present-but-empty array. Collapsing the two let an API hiccup present as
"nothing is failing", i.e. as mergeable-by-a-human: the unknown-certified-as-
green shape this machine exists to stop, surviving where the #128 fix never
looked. The sweep now leaves that PR exactly as it is. Deliberately not a
blocker: blocking would flap the whole board on one bad call.

`blocker:unrequested` also fires on a STALE round, not just a MISSING one.
Both mean this head has no verdict from that reviewer and both owe an ask; the
stale round is the worse of the two, since it carries approvals on the page
that no longer describe the tree.

Fixtures 64 -> 68.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 17:50:03 +00:00
..
fixtures feat(service): set and diff per-container service hostnames via urls (#72) 2026-07-16 15:14:29 +00:00
apply.test.ts fix(diff): compare non-secret env vars against fresh value, not stale real_value (#78) 2026-07-16 14:53:00 +00:00
backup-cli.test.ts feat: diff and apply a database's backup schedule (#51) 2026-07-14 23:07:54 +00:00
bindings.test.ts fix: smoke resolves its target inside the project it was declared under (#29) 2026-07-13 20:08:35 +00:00
capture-cli.test.ts feat(capture): --generated-only, the bootstrap's missing pass 2 2026-07-14 22:32:07 +00:00
capture.test.ts Merge pull request #58 from claude-hdb/feat/capture-generated-only 2026-07-14 23:49:49 +01:00
cli.test.ts fix: smoke resolves its target inside the project it was declared under (#29) 2026-07-13 20:08:35 +00:00
config.test.ts feat: select the Coolify instance by name instead of editing .coolify.env (#14) 2026-07-13 16:42:45 +00:00
coolify.test.ts fix(draft): read backup schedules and emit backup blocks (#75) 2026-07-16 18:25:34 +00:00
destroy.test.ts feat(destroy): a scoped teardown verb, gated in state (#43) 2026-07-14 22:52:17 +00:00
diff.test.ts fix(diff): compare non-secret env vars against fresh value, not stale real_value (#78) 2026-07-16 14:53:00 +00:00
domain-preflight.test.ts feat(service): set and diff per-container service hostnames via urls (#72) 2026-07-16 15:14:29 +00:00
draft-cli.test.ts feat(draft): capture service hostnames via per-service GET (#83) 2026-07-16 18:30:49 +00:00
draft.test.ts Merge pull request #95 from dan-claude-bot/feat/draft-service-domains 2026-07-18 21:25:37 +01:00
envtemplate.test.ts feat(resolve): derive base-URL env vars from manifest domains via ${domain:...} (#66) 2026-07-15 12:02:33 +00:00
fleet-cli.test.ts fix: a manifest with no ${…} refs applies without a store (#104) 2026-07-19 13:06:34 +00:00
fleet.test.ts feat: --all — every project in an environment, and a report that says so (#26) 2026-07-13 20:23:23 +00:00
github-app-cli.test.ts fix: resolve the GitHub App only when the manifest declares applications (#103) 2026-07-19 12:26:35 +00:00
greenfield-cli.test.ts fix: a manifest with no ${…} refs applies without a store (#104) 2026-07-19 13:06:34 +00:00
install-sh.test.ts feat: release flow — tagged releases with a prebuilt dist asset (#96) 2026-07-18 22:27:55 +00:00
inventory.test.ts feat: read-side coordinates (#17, #18) + cast inventory (#19) 2026-07-13 18:20:53 +00:00
labels-reconcile.sh fix(labels): never name a label the repo lacks, and do not read an unreadable rollup as green 2026-07-20 17:50:03 +00:00
layout-cli.test.ts refactor: rescope to versioned installations — the release flow moves out 2026-07-18 21:17:59 +00:00
live-lookup.test.ts feat(draft): capture service hostnames via per-service GET (#83) 2026-07-16 18:30:49 +00:00
manifest.test.ts fix(apply): express static-site build settings so a monorepo app is served, not run (#63) 2026-07-14 23:46:14 +00:00
placement-cli.test.ts fix: the first apply against a fresh multi-destination box (#40, #41) 2026-07-14 17:25:29 +00:00
read-side-cli.test.ts feat: --resource, the third name a hand-built box does not share with you 2026-07-13 18:50:06 +00:00
release.test.ts fix: the arming guard names the section that ships, not the top one 2026-07-19 20:33:49 +00:00
reserved.test.ts fix(diff): Coolify's own generated vars are not orphans (#87) 2026-07-16 16:56:34 +00:00
resolve.test.ts feat(service): set and diff per-container service hostnames via urls (#72) 2026-07-16 15:14:29 +00:00
secrets.test.ts fix: CAST_AGE_KEY_FILE_<ENV> maps to a name a shell can set (#102) 2026-07-19 13:09:17 +00:00
smoke-cli.test.ts fix: smoke resolves its target inside the project it was declared under (#29) 2026-07-13 20:08:35 +00:00
smoke.test.ts feat: cast — the Coolify executor, extracted from the infra state repo 2026-07-11 12:25:44 +00:00
sweep-cli.test.ts feat: inventory sweeps the instance — a discovery verb that needed you to have discovered 2026-07-13 19:07:17 +00:00
team.test.ts feat: assert the token's team before touching Coolify (fail-closed) 2026-07-12 20:55:04 +00:00
version-cli.test.ts refactor: rescope to versioned installations — the release flow moves out 2026-07-18 21:17:59 +00:00
wire.test.ts fix: resolve the GitHub App only when the manifest declares applications (#103) 2026-07-19 12:26:35 +00:00