claude/lib
Bastien Chanot 4d191354c6 fix(design-gate): fail-visible on unverified tools (no silent READY)
When `claude` is unreachable, the plugin/MCP checks (magic, ui-ux-pro-max —
the most important design tools) return `unknown`. The old verdict folded that
into a silent `READY` exit 0 — a fail-OPEN: the gate granted "proceed" exactly
when it had verified nothing. Contradicts the fail-closed-on-uncertainty rule.

Now fail-VISIBLE (not strict fail-closed — claude can be merely slow, false
blocks would get the gate ignored): a third outcome READY BUT UNVERIFIED with a
distinct exit 11. It proceeds, but says so loudly and names the unchecked tools,
telling the user to confirm with `claude mcp list` / `claude plugin list`. The
distinct non-zero code also stops a naive `if gate; then proceed` shell caller
from silently passing. Also covers the non-reproducible "transient claude absent
after apply" flake seen in live testing.

design-gate.md §DECISION updated: exit-code line + a real branch-3 state for 11.

Verified: shellcheck clean; reachable+active -> READY exit 0; claude off PATH ->
READY BUT UNVERIFIED exit 11 naming magic+ui-ux-pro-max; magic off -> INCOMPLETE
exit 10 (trip branch intact after the restructure).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 11:57:48 +02:00
..
profiles feat(design-gate): profile-based toolchain gate + design-tool-gate.sh 2026-06-21 11:21:48 +02:00
project-archetypes refactor(onboard,init-project): migrate file paths to .claude/ 2026-04-23 16:06:14 +02:00
animation-lib-check.sh feat(animation): auto-install motion lib + detection across init/onboard/advisor 2026-04-27 15:32:46 +02:00
archetype-detector.md feat(archetypes): add project archetype library + detection algorithm 2026-04-21 22:37:07 +02:00
design-gate.md fix(design-gate): fail-visible on unverified tools (no silent READY) 2026-06-21 11:57:48 +02:00
design-tool-gate.sh fix(design-gate): fail-visible on unverified tools (no silent READY) 2026-06-21 11:57:48 +02:00
detect-plugins.sh chore(caveman): purge plugin + always-on integration 2026-06-19 19:08:40 +02:00
profile.sh feat(profile): list counters + grouped show + --plain parse mode 2026-06-19 19:59:19 +02:00
toggle-external.sh feat(secrets): .env source-of-truth in ~/.claude + repo symlink 2026-06-21 11:44:47 +02:00