Contracts

refusal-codes.md

Contract: refusal codes

CodeRaised byExitMeaningRemedy printed
COORD_TEARDOWN_KEPT_ONLY_COPYconsolidate, consolidate --abort teardown76 (defined in coordination/teardown.py)The landing is done; the coordination worktree holds the only copy of the listed files, so the coordination branch, worktree and marker were keptCommit the files on the coordination branch, or move them out, then spec-kitty consolidate --resume
DESTRUCTIVE_OP_ONLY_COPYany guard entry pointcaller-defined (consolidate: 1, after rollback)A destructive op would discard files that exist nowhere elseCommit, stash or move the listed files, then re-run
BRANCH_HAS_UNIQUE_COMMITSguarded_branch_deletecaller-definedThe branch holds commits no other ref reachesMerge or keep the branch; nothing was deleted
TOOL_OWNED_PATH_UNPROVENremove_tool_owned_treecaller-definedThe path is not under a tool-owned rootProgramming error; nothing was deleted

Every refusal names each kept file (first 20 plus a count) and one recovery step (NFR-002). Nothing is mutated before a refusal.