What it does
scripts/ci-plan reads the gate model and nothing else to decide what a change must run; a
changed path no class matches escalates the whole plan and names the path. The pre-commit
hook runs doctor, the worktree guard and the derived-data fingerprint gate, so a stale
generated file is refused before the commit exists rather than after the merge.
What it does not do
Publication carries only what can make the published bytes wrong; merging is decided elsewhere. Nothing here trusts a green run it did not observe.