anti-stub-scanlisted
Install: claude install-skill Acendas/shipyard
# Anti-Stub Scan
A diff scanner that flags code claimed as complete but not actually wired. Runs on the orchestrator side after `dispatching-task-loop` returns. Findings re-dispatch the subagent with the specific lines listed.
**This file is the SPEC, not the runtime.** The pattern catalog, placeholder-marker semantics, and output shape documented below are implemented by `shipyard-data scan-stubs <base>..<head> [--lang <x>]` (`bin/scan-stubs.mjs`) — a CLI subcommand, not model-driven `Bash` + `grep`/`awk`. The orchestrator invokes the CLI directly; see "Implementation Notes for the Orchestrator" below for the exact invocation and exit-code contract.
**Why both this AND the prompt-level Iron Law?** The Iron Law (`NO STUBS IN CODE YOU CLAIM IS COMPLETE`) lives in the subagent's prompt and works most of the time. This scanner is the second line: when the subagent rationalizes past the rule, the orchestrator catches the stub before flipping the task to done. Belt and suspenders.
## When to Invoke
From the orchestrator side:
1. After `dispatching-task-loop` returns `STATUS: COMPLETE`.
2. Before marking the task `status: done` in its task file.
3. Before merging the worktree branch back to the working branch.
Do NOT invoke during the subagent's own loop — the prompt-level Iron Law is the in-loop check.
## Inputs
- `base_ref` — git ref / sha that this task's commit branched from (typically the working branch HEAD before the wave started).
- `head_ref` — the subagent's comm