Quickstart: 3.2.0a5 Tranche 1 Verification
End-to-end validation flow for the tranche. Run from the repository root checkout (/Users/robert/spec-kitty-dev/spec-kitty-20260427-190321-KGr7VE/spec-kitty).
Each section maps to one or more contracts in contracts/.
Prerequisites
cd /Users/robert/spec-kitty-dev/spec-kitty-20260427-190321-KGr7VE/spec-kitty
git status --short # should be clean (or only this mission's artifacts)
git branch --show-current # release/3.2.0a5-tranche-1
uv run --version
uv run python -V # 3.11+
uv run spec-kitty --version # 3.2.0a5 after WP02
1. FR-002 — Upgrade post-state coherence
Contract: upgrade_post_state.contract.md
# Set up a fresh tmp project, then:
spec-kitty upgrade --yes # exits 0
yq '.spec_kitty.schema_version' .kittify/metadata.yaml # prints 3
spec-kitty agent mission branch-context --json | jq -e '.result == "success"'
# No PROJECT_MIGRATION_NEEDED block.
2. FR-001 — .python-version and strict mypy
cat .python-version # 3.11
grep '^requires-python' pyproject.toml # >=3.11
uv run --extra lint mypy --strict src/specify_cli/mission_step_contracts/executor.py
# Exit 0, "Success: no issues found in 1 source file"
3. NFR-002 — Release metadata coherence
grep '^version' pyproject.toml # 3.2.0a5
head -20 CHANGELOG.md | grep -E '^\#\# \[3\.2\.0a5\]' # one match
head -20 CHANGELOG.md | grep -E '^\#\# \[Unreleased\]' # one match (above 3.2.0a5)
PWHEADLESS=1 uv run --extra test python -m pytest tests/release/ -q
# All green
4. FR-003 — /spec-kitty.checklist removed from agent surface
Contract: checklist_surface_removed.contract.md
# Should print 0 for every line:
grep -rln "spec-kitty\.checklist" src/specify_cli/missions/ 2>/dev/null | wc -l
grep -rln "spec-kitty\.checklist" tests/specify_cli/regression/_twelve_agent_baseline/ 2>/dev/null | wc -l
grep -rln "spec-kitty\.checklist" tests/specify_cli/skills/__snapshots__/ 2>/dev/null | wc -l
grep -rln "/spec-kitty\.checklist" docs/ README.md 2>/dev/null | wc -l
# But the canonical requirements artifact still gets created:
PWHEADLESS=1 uv run --extra test python -m pytest \
tests/specify_cli/skills/test_registry.py \
tests/specify_cli/skills/test_command_renderer.py \
tests/specify_cli/skills/test_installer.py \
tests/missions/test_command_templates_canonical_path.py -q
5. FR-005 — init non-git message
Contract: init_non_git_message.contract.md
TMP=$(mktemp -d)
cd "$TMP"
spec-kitty init my-project 2>&1 | tee /tmp/init-out.txt
# Expect exactly one line containing both "not a git repository" and "git init"
grep -c "git init" /tmp/init-out.txt # 1
test ! -d my-project/.git # init did NOT auto-init git
ls my-project/.kittify/ # populated as expected
cd - >/dev/null
rm -rf "$TMP"
6. FR-006 — --feature hidden from help
Contract: feature_alias_hidden.contract.md
# Spot-check several CLI subcommand --help outputs:
spec-kitty --help | grep -c -- "--feature" # 0
spec-kitty agent --help | grep -c -- "--feature" # 0
spec-kitty agent mission --help | grep -c -- "--feature" # 0
spec-kitty implement --help | grep -c -- "--feature" # 0
spec-kitty merge --help | grep -c -- "--feature" # 0
# But existing call sites still work (regression test exercises this):
PWHEADLESS=1 uv run --extra test python -m pytest \
tests/specify_cli/cli/test_no_visible_feature_alias.py -q
7. FR-007 — Decision command shape consistency
Contract: decision_command_help.contract.md
spec-kitty agent decision --help | head -20
# Subcommands: open / resolve / defer / cancel / verify
# Doc / help / snapshot consistency:
PWHEADLESS=1 uv run --extra test python -m pytest \
tests/specify_cli/cli/test_decision_command_shape_consistency.py -q
8. FR-008 + FR-009 — Mission-create clean output and dedup
Contract: mission_create_clean_output.contract.md
# Drive a sample create against a tmp project:
TMP=$(mktemp -d)
cd "$TMP"
spec-kitty init demo
cd demo
spec-kitty agent mission create "demo-feature" \
--friendly-name "Demo Feature" \
--purpose-tldr "demo" \
--purpose-context "demo context paragraph for verification only" \
--json > /tmp/create.out 2> /tmp/create.err
# Assertions:
tail -1 /tmp/create.out | grep -q '^}$' # JSON closes cleanly
grep -c "Not authenticated, skipping sync" /tmp/create.out /tmp/create.err # ≤ 1
grep -ci "error" /tmp/create.err # 0 red error lines
cd /; rm -rf "$TMP"
# Plus the new e2e test:
PWHEADLESS=1 uv run --extra test python -m pytest \
tests/e2e/test_mission_create_clean_output.py \
tests/sync/test_diagnostic_dedup.py -q
9. Aggregate verification
PWHEADLESS=1 uv run --extra test python -m pytest \
tests/release \
tests/specify_cli/skills \
tests/specify_cli/cli \
tests/specify_cli/upgrade \
tests/sync \
tests/auth \
tests/missions \
tests/e2e \
-q
uv run --extra lint mypy --strict src/specify_cli/mission_step_contracts/executor.py
uv run --extra lint ruff check .python-version pyproject.toml src/specify_cli tests
All green = tranche meets start-here.md "Done Criteria".