Quickstart — Verifying Mission-Type Doctrine Authority

How to confirm the mission's behaviour once implemented. All commands run in the spec-kitty-gate-doctrine clone with uv run (clone isolation).

1. Non-software governance is correct (SC-001, FR-002)

Resolve governance for a documentation mission and confirm it contains documentation doctrine and no software-dev-only doctrine:

uv run pytest tests/doctrine -k "mission_type_governance and (documentation or research or plan)" -q
uv run pytest tests/integration -k "non_software_governance" -q

Expect: each non-software type resolves its own doctrine; the software-dev-only denylist is disjoint (non-leakage), and the non-vacuity twin proves software-dev does resolve the denylist through a shared action name.

2. Software-dev is unchanged (SC-003, NFR-001)

While the transitional parity scaffold exists (before its removal):

uv run pytest tests/ -k "software_dev_parity" -q     # transitional; deleted before merge

Expect: resolved governance + resolved gate set for software-dev identical before/after. After merge, the enduring check is behavioural (software-dev resolves its known doctrine), not a byte snapshot.

3. Unknown type fails loudly; typeless degrades (SC-002, FR-003/FR-003a)

uv run pytest tests/doctrine -k "unknown_mission_type or mission_less_degrade" -q

Expect: an unrecognised typed mission raises a clear, remediable error on every governance path; a typeless/mission-less caller degrades neutrally (never software-dev).

4. Determinism (NFR-007)

uv run pytest tests/doctrine -k "resolved_governance_deterministic" -q

Expect: two resolutions of identical inputs render byte-identical.

5. Reduced specify_cli dependence (SC-005, NFR-004)

uv run spec-kitty doctor doctrine --json | python3 -c "import sys,json; print(json.load(sys.stdin).get('healthy'))"
grep -rl "specify_cli/missions/.*expected-artifacts" src/ || echo "no readers of the specify_cli gate copies"

Expect (when the detachable flip has landed): dossier reads the doctrine tree; no readers of the specify_cli gate copies; those copies deleted. If the flip deferred on deep drift, the reconciliation has still landed and the deferral is recorded.

6. Gates stay green

uv run ruff check .
PWHEADLESS=1 uv run pytest tests/architectural/ -q          # layer rules, terminology, non-leakage
uv run python -m mypy --strict src/charter src/doctrine     # (scope to changed modules)
uv run spec-kitty doctrine regenerate-graph --check         # DRG freshness after authoring