<!--
Completion-time counterpart to _coding-conventions-preflight.md. The preflight
gate runs BEFORE the first edit; this gate runs BEFORE the executor claims
done. Same delivery paths: the native-session executor reads this file directly;
a CLI-wrapper executor cannot read it outside its sandbox, so the lead appends
this file's body into the persisted executor prompt at dispatch time
(see `okstra_ctl.initial_prompt_materialization.materialize_initial_prompts()`).
-->

# Implementation self-check (BLOCKING — before you claim done)

Before declaring the change complete, confirm each item below against the ACTUAL
diff — not from memory. This is a re-derivation, not a rubber stamp: enumerate the
changed files (`git diff --name-only <stage-base>..HEAD`) and, for the per-file
items, write the confirming evidence per file, not one global "✓". If any item
fails, fix it or surface the violation — do not claim done on a failing item.

- diff-review done: the `Pre-commit diff review sweep` ran over the full diff and its `Coverage:` footer is in your audit sidecar — every changed file named, with each applied rule set carrying its outcome (`clean` or `fixed <n>`). No footer, or entries with no outcome → the sweep is unfinished; do not claim done.
- functions: every new/edited function ≤50 effective lines, single purpose — cite the longest function's actual line count, not "all under 50"
- conventions: applied the routed pack + project patterns (name which ones)
- names & comments: names say what, comments say why; no obvious-restatement comments; no truthful-name violations
- verification: ran the actual build/test — paste the exact command line and its real exit code / output tail, never a paraphrased "tests pass"
- acceptance: each implemented plan step's `Acceptance:` condition is observably met — cite the RED→GREEN test (or the command output) proving it per step, not one global "acceptance met"; and each `Test case (success|boundary|failure)` the plan declared for this stage has a matching test in the diff (name the test), so declared edge/failure cases are not silently uncovered
- mutation check: enumerate every branch this diff adds (`catch`, guard, early return, `else`), plus at least one test it added or changed. For each entry, break what it covers on purpose — delete the branch body, return the wrong value, skip the write — confirm a test FAILS, then restore; cite the branch (or test) and the observed failure per entry, not one global "mutation verified". A branch whose deletion leaves the suite green is untested, not covered — an untested recovery path is indistinguishable from one that cannot fire. "Verified" claimed without this check plus the real command output above is not a verified claim
- cleanup: no dead or commented-out code left behind, and no caller-less identifier — list every identifier this diff added or whose last caller it removed, and cite the caller you grepped for each one (or the plan step / non-project-code contract point that justifies keeping it with none). "No new identifiers" is a valid answer; a global "cleaned up" is not

Close with a `Self-check coverage:` line naming the files you verified the
per-file items against, so the Coverage footer above and this gate reconcile.
