Added
- Review loop stabilization (mission 066) — new
src/specify_cli/review/module with 6 submodules:artifacts.py— persisted review-cycle artifacts atkitty-specs/<mission>/tasks/<WP-slug>/review-cycle-{N}.mdwith YAML frontmatter. Replaces ephemeral.git/spec-kitty/feedback/storage. Backward-compatiblefeedback://pointer resolution retained (#432, #433).fix_prompt.py— focused fix-mode prompt generation from review-cycle artifacts. Rejected WPs get ~40-line targeted prompts instead of replaying 400-500 line full WP prompts (#430).dirty_classifier.py— dirty-state classification for review handoff. Partitionsgit status --porcelainoutput into blocking (WP-owned files) vs benign (status artifacts, other WP files, metadata). External reviewers no longer need--forcefor unrelated dirtiness (#439).baseline.py— baseline test capture at implement time viapytest --junitxml+ JUnit XML parsing. Review prompts include "Baseline Context" section distinguishing pre-existing failures from regressions. Configurablereview.test_commandfor non-pytest projects (#444).lock.py— concurrent review serialization via.spec-kitty/review-lock.json. Stale lock detection via PID check. Opt-in env-var isolation for projects that configurereview.concurrent_isolationin config.yaml (#440).arbiter.py— structured arbiter checklist with 5 standard rationale categories (pre-existing failure, wrong context, cross-scope, infra/environmental, custom). Override detection on forward--forcefrom planned after rejection event. Decisions persisted in review-cycle artifact frontmatter (#441).
- 147 new tests across the review module (avg 93% coverage, range 91-99%)
- Implement-review skill update — parallel sprint pattern, merge/conflict resolution guide, dead-code detection warning, post-merge validation steps
- Tasks template handoff —
/spec-kitty.tasksnow offers to invoke/spec-kitty-implement-reviewskill at completion for automated full-sprint execution
Fixed
- ReviewLock wired into live command path —
ReviewLock.acquire()called inworkflow.py review()after workspace resolution;ReviewLock.release()called intasks.py move-taskon review completion - Removed dead
wp_prompt_pathparameter fromgenerate_fix_prompt()and all callers