Quickstart: reproduce the defects & verify the fixes
All repros use an isolated temp git repo + the installed spec-kitty. Never uv run (it re-syncs the venv).
#2533 — redundant coord topology on --start-branch (WP-A)
git init -b main repo && cd repo && git commit --allow-empty -m init
spec-kitty init --ai claude --non-interactive && git add -A && git commit -m sk
spec-kitty agent mission create m --friendly-name M --purpose-tldr x --purpose-context xxxx \
--json --pr-bound --branch-strategy already-confirmed --start-branch fix/m | grep -o '"topology": "[^"]*"'
- Before:
topology: coord(redundant; coord branch stranded). - After (DD-2):
topology: single_branch; no coordination branch minted;git branch --list 'kitty/*'empty.
B16-c2 folded into #2533 — no stranded/mislabelled coord branch (WP-A regression)
Create two concurrent coord missions on an unprotected primary; assert no coord branch label sits on a sibling mission's commit. After DD-2 the missions are SINGLE_BRANCH, so no coord branch exists to strand. (Pre-fix evidence: scratchpad/b16repro2, research E-006.)
#2300 — three-command skip-vs-refuse unification (WP-B)
On a coord + protected-main mission, run each command against a primary-kind artifact:
spec-kitty agent tasks move-task ... # before: exit 0 (silent skip)
spec-kitty agent tasks mark-status ... # before: exit 0 (swallowed warning)
spec-kitty agent tasks map-requirements ... # before: exit 1 (refuse)
- After (DD-1): all three exit 1 with the same real remedy; genuine no-ops still exit 0 with a typed
reason. Verify via the golden characterization diff (tests/.../characterization).
DD-3 — fail-loud on missing mid8 (WP-C)
Corrupt/truncate a mission's meta.json so _resolve_mid8 returns None, then attempt a coord commit.
- Before: silent fallback to the primary checkout (wrong surface).
- After: fail-loud error naming the mission; no silent primary write.
Gate before PR
PWHEADLESS=1 .venv/bin/python -m pytest tests/ -n auto --dist loadfile -p no:cacheprovider
pytest tests/architectural/test_no_legacy_terminology.py
ruff check . && mypy src/specify_cli/...(changed files)