Startup Upgrade Check
Run this at most once per active agent session before the first Spec Kitty command workflow.
If you already ran spec-kitty upgrade --agent-check --json in this session, reuse that result and skip this block.
Do not run or announce an upgrade check again for later Spec Kitty commands in the same session.
Otherwise, before continuing, run:
spec-kitty upgrade --agent-check --json
If JSON action is none, continue.
If action is auto_upgrade, run upgrade_command before continuing. If it fails, tell the user and continue with the current Spec Kitty version.
If action is guidance, show upgrade_note briefly, then continue.
If action is prompt, ask the user with the host-native question UI when available:
Spec Kitty {latest_version} is available. You are on {installed_version}. Upgrade now?
Use these choices:
- Upgrade now (recommended) - record
upgrade_now, run upgrade_command, then continue.
- Always keep me up to date - record
always, run upgrade_command, then continue.
- Not now - record
not_now, then continue.
- Never ask again - record
never_ask, then continue.
Record the selected choice before continuing:
spec-kitty upgrade --agent-choice <upgrade_now|always|not_now|never_ask> --agent-latest <latest_version> --json
If no host-native question UI is available, present the same four choices in plain text and wait for the user.
In non-interactive hosts, choose not_now and continue.
/spec-kitty.plan - Create Implementation Plan
Version: 0.11.0+
📍 WORKING DIRECTORY: Stay in the repository root checkout
IMPORTANT: Plan works in the repository root checkout. NO worktrees created.
# Run from project root (same directory as /spec-kitty.specify):
# You should already be here if you just ran /spec-kitty.specify
# Creates:
# - kitty-specs/<mission_slug>/plan.md → In repository root checkout
# (the NNN- prefix in the directory listing is display-only metadata)
# - Commits to target branch
# - NO worktrees created
Do NOT cd anywhere. Stay in the repository root checkout.
Mission Handle Rule
/spec-kitty.plan operates on an existing mission, so use --mission <handle>
when the CLI needs a mission selector.
<handle> can be the mission's mission_id (ULID), mid8 (first 8 chars of
the ULID), or mission_slug.
- Prefer
mission_id or mid8 when the repo has multiple similarly named
missions.
- The resolver disambiguates by
mission_id and returns a structured
MISSION_AMBIGUOUS_SELECTOR error on ambiguity — there is no silent fallback.
User Input
The content of the user's message that invoked this skill (everything after the skill invocation token, e.g. after /spec-kitty.<command> or $spec-kitty.<command>) is the User Input referenced elsewhere in these instructions.
You MUST consider this user input before proceeding (if not empty).
Commit Boundary (issue #846)
/spec-kitty.plan will refuse to advance the plan phase unless two
gates pass:
Entry gate. spec.md must already be both committed (tracked +
present at HEAD) and substantive (at least one populated FR-###
row — not just template placeholders). If either check fails, the CLI
returns phase_complete=false with a blocked_reason naming "committed
AND substantive" and does not create or commit plan.md.
Exit gate. plan.md is only auto-committed when its Technical Context
section contains a real Language/Version value (and at least one peer
field) — not the [e.g., …] / [NEEDS CLARIFICATION …] placeholders.
- The FIRST
setup-plan call after the entry gate passes scaffolds
plan.md from the template. This is a non-error state: the CLI
returns result: "success" with scaffold_only: true and
phase_complete: false — it means "plan.md is ready for you to
populate", not a failure. Do not treat this call as blocked; proceed
to fill in the Technical Context.
- Once
plan.md has been edited but its Technical Context is still not
substantive, the CLI returns result: "blocked" with
phase_complete: false and a populated-but-insufficient
blocked_reason naming the missing field(s) — populate the section and
re-run.
Section presence is the only signal — adding arbitrary prose without the
required structural rows does not count as substantive (no byte-length
escape hatch).
To advance: populate the Technical Context with real values, then re-run
spec-kitty agent mission setup-plan --mission <mission-slug> --json. The substantive plan will be
auto-committed and phase_complete will report true.
Reference: kitty-specs/charter-e2e-827-followups-01KQAJA0/contracts/specify-plan-commit-boundary.md.
Branch Strategy Confirmation (MANDATORY)
Before asking planning questions or generating artifacts, you must make the branch contract explicit.
- Never describe the landing branch vaguely. Always name the actual branch value.
- If the user says the feature should land somewhere else, stop and resolve that before writing
plan.md.
- You must repeat the branch contract twice during this command:
- immediately after parsing
setup-plan --json
- again in the final report before suggesting
/spec-kitty.tasks
Charter Context Bootstrap (required)
Before planning interrogation, load charter context for this action:
spec-kitty charter context --action plan --json
- If JSON
mode is bootstrap, apply JSON text as first-run governance context and follow referenced docs as needed.
- If JSON
mode is compact, continue with condensed governance context.
Location Check (0.11.0+)
This command runs in the repository root checkout, not in a worktree.
- Resolve branch context from deterministic JSON output, not from
meta.json inspection:
- Run
spec-kitty agent mission setup-plan --mission <mission-slug> --json
- Use
current_branch, target_branch / base_branch, and planning_base_branch / merge_target_branch (plus uppercase aliases) from that payload
- Use
branch_matches_target from that payload to detect branch mismatch; do not probe branch state manually inside the prompt
- Planning artifacts live in
kitty-specs/<mission_slug>/ (the NNN- prefix is display-only metadata)
- The plan template is committed to the target branch after generation
Path reference rule: When you mention directories or files, provide either the absolute path or a path relative to the project root (for example, kitty-specs/<mission>/tasks/). Never refer to a folder by name alone.
Agent Context Files (do not mutate)
This command does not update agent-specific context files.
- Do not search for or mutate
CLAUDE.md, AGENTS.md, or similar
agent-specific files as part of /spec-kitty.plan.
- Do not hunt for updater scripts or imaginary
spec-kitty agent context update
commands. No supported context-update command exists in this release.
- Planning outputs are the mission planning artifacts only:
plan.md
research.md
data-model.md
contracts/
quickstart.md
occurrence_map.yaml when bulk-edit planning applies
Decision Moment Protocol
Before asking any clarifying question during plan elaboration, you MUST:
Run spec-kitty agent decision open to mint a decision_id:
spec-kitty agent decision open \
--mission <mission-slug> \
--flow plan \
--slot-key plan.<section>.<question-slug> \
--input-key <snake_case_key> \
--question "<question text>" \
[--options '["option1","option2","Other"]']
Capture the returned decision_id from the JSON output.
Ask the question to the user in chat.
After the user answers, run exactly one of:
- Resolved:
spec-kitty agent decision resolve <decision_id> --mission <slug> --final-answer "<answer>"
- Deferred:
spec-kitty agent decision defer <decision_id> --mission <slug> --rationale "<reason>"
- Canceled:
spec-kitty agent decision cancel <decision_id> --mission <slug> --rationale "<reason>"
When deferring, write the inline marker into plan.md:
[NEEDS CLARIFICATION: <brief description>] <!-- decision_id: <decision_id> -->
Before finishing this command, run:
spec-kitty agent decision verify --mission <slug>
Resolve all findings (DEFERRED_WITHOUT_MARKER, MARKER_WITHOUT_DECISION,
STALE_MARKER) before proceeding.
Important constraints:
--slot-key format: plan.<section>.<question-slug> (e.g.,
plan.architecture.db-choice).
--input-key is the snake_case programmatic key (e.g., db_choice).
- The
decision_id on the wire is a plain ULID (26 chars). The DM- prefix
appears only in artifact filenames, not in CLI arguments.
- The verifier cross-checks
[NEEDS CLARIFICATION: …] <!-- decision_id: <id> -->
sentinels in plan.md against the decisions index and exits non-zero on drift.
- Widening is represented by the CLI/SaaS widen flow; if that flow returns
canonical thread metadata, it must be recorded as
DecisionPointWidened.
- Local-only; no SaaS calls needed.
Planning Interrogation (mandatory)
Before executing any scripts or generating artifacts you must interrogate the specification and stakeholders.
Scope proportionality (CRITICAL): FIRST, assess the feature's complexity from the spec:
- Trivial/Test Features (hello world, simple static pages, basic demos): Ask 1-2 questions maximum about tech stack preference, then proceed with sensible defaults
- Simple Features (small components, minor API additions): Ask 2-3 questions about tech choices and constraints
- Complex Features (new subsystems, multi-component features): Ask 3-5 questions covering architecture, NFRs, integrations
- Platform/Critical Features (core infrastructure, security, payments): Full interrogation with 5+ questions
Scenario-to-design handoff: For non-trivial features, anchor planning
questions in the concrete user flows from the spec rather than generic
architecture preferences.
Domain rule follow-through: When the spec implies approvals, lifecycle
states, irreversible operations, or business-critical validations, ask 1-2
targeted questions about invariants, transitions, atomicity, and externally
visible events or integrations. Skip this for trivial features.
User signals to reduce questioning: If the user says "use defaults", "just make it simple", "skip to implementation", "vanilla HTML/CSS/JS" - recognize these as signals to minimize planning questions and use standard approaches.
First response rule:
- For TRIVIAL features: Ask ONE tech stack question, then if answer is simple (e.g., "vanilla HTML"), proceed directly to plan generation
- For other features: Ask a single architecture question tied to the riskiest scenario, rule, or lifecycle constraint and end with
WAITING_FOR_PLANNING_INPUT
If the user has not provided plan context, keep interrogating with one question at a time.
Conversational cadence: After each reply, assess if you have SUFFICIENT context for this feature's scope. For trivial features, knowing the basic stack is enough. Only continue if critical unknowns remain.
Planning requirements (scale to complexity):
- Maintain a Planning Questions table internally covering questions appropriate to the feature's complexity (1-2 for trivial, up to 5+ for platform-level). Track columns
#, Question, Why it matters, and Current insight. Do not render this table to the user.
- For trivial features, standard practices are acceptable (vanilla HTML, simple file structure, no build tools). Only probe if the user's request suggests otherwise.
- When you have sufficient context for the scope, summarize into an Engineering Alignment note and confirm. Include invariant, state-transition, or event assumptions when they materially affect the design.
- If user explicitly asks to skip questions or use defaults, acknowledge and proceed with best practices for that feature type.
Bulk-Edit Check (if applicable)
If this mission is marked change_mode: bulk_edit in meta.json — or if the
spec describes renaming the same string (identifier, path, key, label, term)
across many files — load the spec-kitty-bulk-edit-classification skill and
follow it. You will produce kitty-specs/<mission>/occurrence_map.yaml
alongside the other planning artifacts. Every one of the 8 standard categories
(code_symbols, import_paths, filesystem_paths, serialized_keys, cli_commands,
user_facing_strings, tests_fixtures, logs_telemetry) must have an explicit
action. Without that artifact, the implement command will refuse to start
the first WP.
If the mission is not a bulk edit, skip this step.
Outline
Check planning discovery status:
- If any planning questions remain unanswered or the user has not confirmed the Engineering Alignment summary, stay in the one-question cadence, capture the user's response, update your internal table, and end with
WAITING_FOR_PLANNING_INPUT. Do not surface the table. Do not run the setup command yet.
- Once every planning question has a concrete answer and the alignment summary is confirmed by the user, continue.
Resolve mission context deterministically (CRITICAL - prevents wrong mission selection):
- Prefer an explicit mission slug from user direction or from the current directory path (
kitty-specs/<mission-slug>/...)
- The resolver requires
--mission — always pass an explicit handle. Running setup-plan without --mission returns PLAN_CONTEXT_UNRESOLVED even when exactly one mission is present.
- Resolve the handle first:
spec-kitty agent context resolve --action plan --mission <handle> --json, then pass the resolved slug to setup-plan
- If the context resolve call returns an ambiguity error with
available_missions, stop and pick one explicit mission slug before continuing
Setup: If step 2 did not already return a successful setup payload, run spec-kitty agent mission setup-plan --mission <mission-slug> --json from the repository root and parse JSON for:
result: "success" or error message
scaffold_only: true only on the first happy-path scaffold write (plan.md freshly copied from the template, untouched). This is result: "success" and NOT an error — populate the Technical Context and re-run setup-plan to commit. phase_complete stays false until then.
mission_slug: Resolved feature slug
spec_file: Absolute path to resolved spec.md
plan_file: Absolute path to the created plan.md
feature_dir: Absolute path to the feature directory
current_branch: branch checked out when planning started
target_branch / base_branch (deterministic branch contract for downstream commands)
planning_base_branch / merge_target_branch: explicit aliases for planning and merge intent
branch_strategy_summary: canonical sentence describing the branch strategy
Before proceeding, explicitly state to the user:
- Current branch at plan start
- Intended planning/base branch
- Final merge target for completed changes
- Whether
branch_matches_target says the current branch matches that intended target
Example:
# Resolve the active mission handle, then pass it to setup-plan.
# The --mission flag accepts mission_id (ULID), mid8 (first 8 chars), or mission_slug.
# The resolver disambiguates by mission_id; ambiguous handles become structured errors.
# --action is required for context resolve; use the action matching this step.
spec-kitty agent context resolve --action plan --mission <handle> --json
spec-kitty agent mission setup-plan --mission <handle> --json
Error handling: If the command fails with "Cannot detect mission", "Multiple missions found", or MISSION_AMBIGUOUS_SELECTOR, pass an unambiguous handle — the mission_id or its 8-char prefix mid8 always disambiguates.
Load context: Read spec_file from setup-plan JSON output and .kittify/charter/charter.md if it exists. If the charter file is missing, skip Charter Check and note that it is absent. Load IMPL_PLAN template (already copied).
Execute plan workflow: Follow the structure in IMPL_PLAN template, using the validated planning answers as ground truth:
- Update Technical Context with explicit statements from the user or discovery research; mark
[NEEDS CLARIFICATION: …] <!-- decision_id: <id> --> only when the user deliberately postpones a decision (call decision defer before writing each such marker)
- If a charter exists, fill Charter Check section from it and challenge any conflicts directly with the user. If no charter exists, mark the section as skipped.
- Evaluate gates (ERROR if violations unjustified or questions remain unanswered)
- Phase 0: Generate research.md (commission research to resolve every outstanding clarification, prioritizing unresolved domain rules, lifecycle questions, and event/integration behavior before generic tech comparisons)
- Phase 1: Generate data-model.md, contracts/, quickstart.md based on confirmed intent; when applicable, capture entities/value objects, invariants, state transitions, and externally visible events in the design artifacts
- Re-evaluate Charter Check post-design, asking the user to resolve new gaps before proceeding
STOP and report: This command ends after Phase 1 planning. Report branch, IMPL_PLAN path, and generated artifacts (including the Implementation Concern Map if present).
⚠️ CRITICAL: DO NOT proceed to task generation! The user must explicitly run /spec-kitty.tasks to translate implementation concerns from plan.md into executable work packages. Your job is COMPLETE after reporting the planning artifacts.
Phases
Phase 0: Outline & Research
Extract unknowns from Technical Context above:
- For each NEEDS CLARIFICATION → research task
- For each unresolved rule, invariant, lifecycle edge, or event/integration ambiguity → domain research task
- For each dependency → best practices task
- For each integration → patterns task
Generate and dispatch research agents:
For each unknown in Technical Context:
Task: "Research {unknown} for {feature context}"
For each unresolved domain rule:
Task: "Clarify invariant, state transition, or event behavior for {feature context}"
For each technology choice:
Task: "Find best practices for {tech} in {domain}"
Consolidate findings in research.md using format:
- Decision: [what was chosen]
- Rationale: [why chosen]
- Alternatives considered: [what else evaluated]
Output: research.md with all NEEDS CLARIFICATION resolved
Phase 1: Design & Contracts
Prerequisites: research.md complete
Extract entities from feature spec → data-model.md:
- Entity name, fields, relationships
- Validation rules from requirements
- Invariants or atomicity boundaries if applicable
- State transitions if applicable
Generate API contracts from functional requirements:
- For each user action → endpoint
- For each externally visible event, webhook, or integration callback → contract or payload shape when applicable
- Use standard REST/GraphQL patterns
- Output OpenAPI/GraphQL schema to
/contracts/
Output: data-model.md, /contracts/*, quickstart.md
Key rules
- Use absolute paths
- ERROR on gate failures or unresolved clarifications
⛔ MANDATORY STOP POINT
This command is COMPLETE after generating planning artifacts.
After reporting:
plan.md path
research.md path (if generated)
data-model.md path (if generated)
contracts/ contents (if generated)
YOU MUST STOP HERE.
Do NOT:
- ❌ Generate
tasks.md
- ❌ Create work package (WP) files
- ❌ Create
tasks/ subdirectories
- ❌ Proceed to implementation
/spec-kitty.tasks translates implementation concerns from plan.md into executable work packages. The user will run it when they are ready.
Next suggested command: /spec-kitty.tasks (user must invoke this explicitly)
1---2name: spec-kitty-plan3description: Create an implementation plan4---5## Startup Upgrade Check67Run this at most once per active agent session before the first Spec Kitty command workflow.8If you already ran `spec-kitty upgrade --agent-check --json` in this session, reuse that result and skip this block.9Do not run or announce an upgrade check again for later Spec Kitty commands in the same session.10Otherwise, before continuing, run:1112```bash13spec-kitty upgrade --agent-check --json14```1516If JSON `action` is `none`, continue.17If `action` is `auto_upgrade`, run `upgrade_command` before continuing. If it fails, tell the user and continue with the current Spec Kitty version.18If `action` is `guidance`, show `upgrade_note` briefly, then continue.19If `action` is `prompt`, ask the user with the host-native question UI when available:2021`Spec Kitty {latest_version} is available. You are on {installed_version}. Upgrade now?`2223Use these choices:24251. Upgrade now (recommended) - record `upgrade_now`, run `upgrade_command`, then continue.262. Always keep me up to date - record `always`, run `upgrade_command`, then continue.273. Not now - record `not_now`, then continue.284. Never ask again - record `never_ask`, then continue.2930Record the selected choice before continuing:3132```bash33spec-kitty upgrade --agent-choice <upgrade_now|always|not_now|never_ask> --agent-latest <latest_version> --json34```3536If no host-native question UI is available, present the same four choices in plain text and wait for the user.37In non-interactive hosts, choose `not_now` and continue.383940# /spec-kitty.plan - Create Implementation Plan4142**Version**: 0.11.0+4344## 📍 WORKING DIRECTORY: Stay in the repository root checkout4546**IMPORTANT**: Plan works in the repository root checkout. NO worktrees created.4748```bash49# Run from project root (same directory as /spec-kitty.specify):50# You should already be here if you just ran /spec-kitty.specify5152# Creates:53# - kitty-specs/<mission_slug>/plan.md → In repository root checkout54# (the NNN- prefix in the directory listing is display-only metadata)55# - Commits to target branch56# - NO worktrees created57```5859**Do NOT cd anywhere**. Stay in the repository root checkout.6061## Mission Handle Rule6263`/spec-kitty.plan` operates on an existing mission, so use `--mission <handle>`64when the CLI needs a mission selector.6566- `<handle>` can be the mission's `mission_id` (ULID), `mid8` (first 8 chars of67 the ULID), or `mission_slug`.68- Prefer `mission_id` or `mid8` when the repo has multiple similarly named69 missions.70- The resolver disambiguates by `mission_id` and returns a structured71 `MISSION_AMBIGUOUS_SELECTOR` error on ambiguity — there is no silent fallback.7273## User Input7475The content of the user's message that invoked this skill (everything after the skill invocation token, e.g. after `/spec-kitty.<command>` or `$spec-kitty.<command>`) is the User Input referenced elsewhere in these instructions.7677You **MUST** consider this user input before proceeding (if not empty).7879## Commit Boundary (issue #846)8081`/spec-kitty.plan` will refuse to advance the plan phase unless **two**82gates pass:83841. **Entry gate.** `spec.md` must already be both **committed** (tracked +85 present at HEAD) and **substantive** (at least one populated `FR-###`86 row — not just template placeholders). If either check fails, the CLI87 returns `phase_complete=false` with a `blocked_reason` naming "committed88 AND substantive" and does **not** create or commit `plan.md`.89902. **Exit gate.** `plan.md` is only auto-committed when its Technical Context91 section contains a real `Language/Version` value (and at least one peer92 field) — not the `[e.g., …]` / `[NEEDS CLARIFICATION …]` placeholders.9394 - The FIRST `setup-plan` call after the entry gate passes scaffolds95 `plan.md` from the template. This is a **non-error** state: the CLI96 returns `result: "success"` with `scaffold_only: true` and97 `phase_complete: false` — it means "plan.md is ready for you to98 populate", not a failure. Do **not** treat this call as blocked; proceed99 to fill in the Technical Context.100 - Once `plan.md` has been edited but its Technical Context is still not101 substantive, the CLI returns `result: "blocked"` with102 `phase_complete: false` and a populated-but-insufficient103 `blocked_reason` naming the missing field(s) — populate the section and104 re-run.105106Section presence is the only signal — adding arbitrary prose without the107required structural rows does **not** count as substantive (no byte-length108escape hatch).109110To advance: populate the Technical Context with real values, then re-run111`spec-kitty agent mission setup-plan --mission <mission-slug> --json`. The substantive plan will be112auto-committed and `phase_complete` will report `true`.113114Reference: `kitty-specs/charter-e2e-827-followups-01KQAJA0/contracts/specify-plan-commit-boundary.md`.115116## Branch Strategy Confirmation (MANDATORY)117118Before asking planning questions or generating artifacts, you must make the branch contract explicit.119120- Never describe the landing branch vaguely. Always name the actual branch value.121- If the user says the feature should land somewhere else, stop and resolve that before writing `plan.md`.122- You must repeat the branch contract twice during this command:123 1. immediately after parsing `setup-plan --json`124 2. again in the final report before suggesting `/spec-kitty.tasks`125126## Charter Context Bootstrap (required)127128Before planning interrogation, load charter context for this action:129130```bash131spec-kitty charter context --action plan --json132```133134- If JSON `mode` is `bootstrap`, apply JSON `text` as first-run governance context and follow referenced docs as needed.135- If JSON `mode` is `compact`, continue with condensed governance context.136137## Location Check (0.11.0+)138139This command runs in the **repository root checkout**, not in a worktree.140141- Resolve branch context from deterministic JSON output, not from `meta.json` inspection:142 - Run `spec-kitty agent mission setup-plan --mission <mission-slug> --json`143 - Use `current_branch`, `target_branch` / `base_branch`, and `planning_base_branch` / `merge_target_branch` (plus uppercase aliases) from that payload144 - Use `branch_matches_target` from that payload to detect branch mismatch; do not probe branch state manually inside the prompt145- Planning artifacts live in `kitty-specs/<mission_slug>/` (the `NNN-` prefix is display-only metadata)146- The plan template is committed to the target branch after generation147148**Path reference rule:** When you mention directories or files, provide either the absolute path or a path relative to the project root (for example, `kitty-specs/<mission>/tasks/`). Never refer to a folder by name alone.149150## Agent Context Files (do not mutate)151152This command does **not** update agent-specific context files.153154- Do **not** search for or mutate `CLAUDE.md`, `AGENTS.md`, or similar155 agent-specific files as part of `/spec-kitty.plan`.156- Do **not** hunt for updater scripts or imaginary `spec-kitty agent context update`157 commands. No supported context-update command exists in this release.158- Planning outputs are the mission planning artifacts only:159 - `plan.md`160 - `research.md`161 - `data-model.md`162 - `contracts/`163 - `quickstart.md`164 - `occurrence_map.yaml` when bulk-edit planning applies165166## Decision Moment Protocol167168Before asking **any** clarifying question during plan elaboration, you MUST:1691701. Run `spec-kitty agent decision open` to mint a decision_id:171 ```172 spec-kitty agent decision open \173 --mission <mission-slug> \174 --flow plan \175 --slot-key plan.<section>.<question-slug> \176 --input-key <snake_case_key> \177 --question "<question text>" \178 [--options '["option1","option2","Other"]']179 ```180 Capture the returned `decision_id` from the JSON output.1811822. Ask the question to the user in chat.1831843. After the user answers, run **exactly one** of:185 - Resolved:186 `spec-kitty agent decision resolve <decision_id> --mission <slug> --final-answer "<answer>"`187 - Deferred:188 `spec-kitty agent decision defer <decision_id> --mission <slug> --rationale "<reason>"`189 - Canceled:190 `spec-kitty agent decision cancel <decision_id> --mission <slug> --rationale "<reason>"`1911924. When deferring, write the inline marker into `plan.md`:193 ```194 [NEEDS CLARIFICATION: <brief description>] <!-- decision_id: <decision_id> -->195 ```1961975. Before finishing this command, run:198 `spec-kitty agent decision verify --mission <slug>`199 Resolve all findings (`DEFERRED_WITHOUT_MARKER`, `MARKER_WITHOUT_DECISION`,200 `STALE_MARKER`) before proceeding.201202**Important constraints:**203- `--slot-key` format: `plan.<section>.<question-slug>` (e.g.,204 `plan.architecture.db-choice`).205- `--input-key` is the snake_case programmatic key (e.g., `db_choice`).206- The `decision_id` on the wire is a plain ULID (26 chars). The `DM-` prefix207 appears only in artifact filenames, not in CLI arguments.208- The verifier cross-checks `[NEEDS CLARIFICATION: …] <!-- decision_id: <id> -->`209 sentinels in `plan.md` against the decisions index and exits non-zero on drift.210- Widening is represented by the CLI/SaaS widen flow; if that flow returns211 canonical thread metadata, it must be recorded as `DecisionPointWidened`.212- Local-only; no SaaS calls needed.213214## Planning Interrogation (mandatory)215216Before executing any scripts or generating artifacts you must interrogate the specification and stakeholders.217218- **Scope proportionality (CRITICAL)**: FIRST, assess the feature's complexity from the spec:219 - **Trivial/Test Features** (hello world, simple static pages, basic demos): Ask 1-2 questions maximum about tech stack preference, then proceed with sensible defaults220 - **Simple Features** (small components, minor API additions): Ask 2-3 questions about tech choices and constraints221 - **Complex Features** (new subsystems, multi-component features): Ask 3-5 questions covering architecture, NFRs, integrations222 - **Platform/Critical Features** (core infrastructure, security, payments): Full interrogation with 5+ questions223224- **Scenario-to-design handoff**: For non-trivial features, anchor planning225 questions in the concrete user flows from the spec rather than generic226 architecture preferences.227228- **Domain rule follow-through**: When the spec implies approvals, lifecycle229 states, irreversible operations, or business-critical validations, ask 1-2230 targeted questions about invariants, transitions, atomicity, and externally231 visible events or integrations. Skip this for trivial features.232233- **User signals to reduce questioning**: If the user says "use defaults", "just make it simple", "skip to implementation", "vanilla HTML/CSS/JS" - recognize these as signals to minimize planning questions and use standard approaches.234235- **First response rule**:236 - For TRIVIAL features: Ask ONE tech stack question, then if answer is simple (e.g., "vanilla HTML"), proceed directly to plan generation237 - For other features: Ask a single architecture question tied to the riskiest scenario, rule, or lifecycle constraint and end with `WAITING_FOR_PLANNING_INPUT`238239- If the user has not provided plan context, keep interrogating with one question at a time.240241- **Conversational cadence**: After each reply, assess if you have SUFFICIENT context for this feature's scope. For trivial features, knowing the basic stack is enough. Only continue if critical unknowns remain.242243Planning requirements (scale to complexity):2442451. Maintain a **Planning Questions** table internally covering questions appropriate to the feature's complexity (1-2 for trivial, up to 5+ for platform-level). Track columns `#`, `Question`, `Why it matters`, and `Current insight`. Do **not** render this table to the user.2462. For trivial features, standard practices are acceptable (vanilla HTML, simple file structure, no build tools). Only probe if the user's request suggests otherwise.2473. When you have sufficient context for the scope, summarize into an **Engineering Alignment** note and confirm. Include invariant, state-transition, or event assumptions when they materially affect the design.2484. If user explicitly asks to skip questions or use defaults, acknowledge and proceed with best practices for that feature type.249250## Bulk-Edit Check (if applicable)251252If this mission is marked `change_mode: bulk_edit` in `meta.json` — or if the253spec describes renaming the same string (identifier, path, key, label, term)254across many files — load the `spec-kitty-bulk-edit-classification` skill and255follow it. You will produce `kitty-specs/<mission>/occurrence_map.yaml`256alongside the other planning artifacts. Every one of the 8 standard categories257(code_symbols, import_paths, filesystem_paths, serialized_keys, cli_commands,258user_facing_strings, tests_fixtures, logs_telemetry) must have an explicit259action. Without that artifact, the `implement` command will refuse to start260the first WP.261262If the mission is not a bulk edit, skip this step.263264## Outline2652661. **Check planning discovery status**:267 - If any planning questions remain unanswered or the user has not confirmed the **Engineering Alignment** summary, stay in the one-question cadence, capture the user's response, update your internal table, and end with `WAITING_FOR_PLANNING_INPUT`. Do **not** surface the table. Do **not** run the setup command yet.268 - Once every planning question has a concrete answer and the alignment summary is confirmed by the user, continue.2692702. **Resolve mission context deterministically** (CRITICAL - prevents wrong mission selection):271 - Prefer an explicit mission slug from user direction or from the current directory path (`kitty-specs/<mission-slug>/...`)272 - The resolver requires `--mission` — always pass an explicit handle. Running `setup-plan` without `--mission` returns `PLAN_CONTEXT_UNRESOLVED` even when exactly one mission is present.273 - Resolve the handle first: `spec-kitty agent context resolve --action plan --mission <handle> --json`, then pass the resolved slug to `setup-plan`274 - If the context resolve call returns an ambiguity error with `available_missions`, stop and pick one explicit mission slug before continuing2752763. **Setup**: If step 2 did not already return a successful setup payload, run `spec-kitty agent mission setup-plan --mission <mission-slug> --json` from the repository root and parse JSON for:277 - `result`: "success" or error message278 - `scaffold_only`: `true` only on the first happy-path scaffold write (plan.md freshly copied from the template, untouched). This is `result: "success"` and NOT an error — populate the Technical Context and re-run `setup-plan` to commit. `phase_complete` stays `false` until then.279 - `mission_slug`: Resolved feature slug280 - `spec_file`: Absolute path to resolved spec.md281 - `plan_file`: Absolute path to the created plan.md282 - `feature_dir`: Absolute path to the feature directory283 - `current_branch`: branch checked out when planning started284 - `target_branch` / `base_branch` (deterministic branch contract for downstream commands)285 - `planning_base_branch` / `merge_target_branch`: explicit aliases for planning and merge intent286 - `branch_strategy_summary`: canonical sentence describing the branch strategy287288 Before proceeding, explicitly state to the user:289 - Current branch at plan start290 - Intended planning/base branch291 - Final merge target for completed changes292 - Whether `branch_matches_target` says the current branch matches that intended target293294 **Example**:295 ```bash296 # Resolve the active mission handle, then pass it to setup-plan.297 # The --mission flag accepts mission_id (ULID), mid8 (first 8 chars), or mission_slug.298 # The resolver disambiguates by mission_id; ambiguous handles become structured errors.299 # --action is required for context resolve; use the action matching this step.300 spec-kitty agent context resolve --action plan --mission <handle> --json301 spec-kitty agent mission setup-plan --mission <handle> --json302 ```303304 **Error handling**: If the command fails with "Cannot detect mission", "Multiple missions found", or `MISSION_AMBIGUOUS_SELECTOR`, pass an unambiguous handle — the `mission_id` or its 8-char prefix `mid8` always disambiguates.3053064. **Load context**: Read `spec_file` from setup-plan JSON output and `.kittify/charter/charter.md` if it exists. If the charter file is missing, skip Charter Check and note that it is absent. Load IMPL_PLAN template (already copied).3073085. **Execute plan workflow**: Follow the structure in IMPL_PLAN template, using the validated planning answers as ground truth:309 - Update Technical Context with explicit statements from the user or discovery research; mark `[NEEDS CLARIFICATION: …] <!-- decision_id: <id> -->` only when the user deliberately postpones a decision (call `decision defer` before writing each such marker)310 - If a charter exists, fill Charter Check section from it and challenge any conflicts directly with the user. If no charter exists, mark the section as skipped.311 - Evaluate gates (ERROR if violations unjustified or questions remain unanswered)312 - Phase 0: Generate research.md (commission research to resolve every outstanding clarification, prioritizing unresolved domain rules, lifecycle questions, and event/integration behavior before generic tech comparisons)313 - Phase 1: Generate data-model.md, contracts/, quickstart.md based on confirmed intent; when applicable, capture entities/value objects, invariants, state transitions, and externally visible events in the design artifacts314 - Re-evaluate Charter Check post-design, asking the user to resolve new gaps before proceeding3153166. **STOP and report**: This command ends after Phase 1 planning. Report branch, IMPL_PLAN path, and generated artifacts (including the Implementation Concern Map if present).317318 **⚠️ CRITICAL: DO NOT proceed to task generation!** The user must explicitly run `/spec-kitty.tasks` to translate implementation concerns from `plan.md` into executable work packages. Your job is COMPLETE after reporting the planning artifacts.319320## Phases321322### Phase 0: Outline & Research3233241. **Extract unknowns from Technical Context** above:325 - For each NEEDS CLARIFICATION → research task326 - For each unresolved rule, invariant, lifecycle edge, or event/integration ambiguity → domain research task327 - For each dependency → best practices task328 - For each integration → patterns task3293302. **Generate and dispatch research agents**:331 ```332 For each unknown in Technical Context:333 Task: "Research {unknown} for {feature context}"334 For each unresolved domain rule:335 Task: "Clarify invariant, state transition, or event behavior for {feature context}"336 For each technology choice:337 Task: "Find best practices for {tech} in {domain}"338 ```3393403. **Consolidate findings** in `research.md` using format:341 - Decision: [what was chosen]342 - Rationale: [why chosen]343 - Alternatives considered: [what else evaluated]344345**Output**: research.md with all NEEDS CLARIFICATION resolved346347### Phase 1: Design & Contracts348349**Prerequisites:** `research.md` complete3503511. **Extract entities from feature spec** → `data-model.md`:352 - Entity name, fields, relationships353 - Validation rules from requirements354 - Invariants or atomicity boundaries if applicable355 - State transitions if applicable3563572. **Generate API contracts** from functional requirements:358 - For each user action → endpoint359 - For each externally visible event, webhook, or integration callback → contract or payload shape when applicable360 - Use standard REST/GraphQL patterns361 - Output OpenAPI/GraphQL schema to `/contracts/`362363**Output**: data-model.md, /contracts/*, quickstart.md364365## Key rules366367- Use absolute paths368- ERROR on gate failures or unresolved clarifications369370---371372## ⛔ MANDATORY STOP POINT373374**This command is COMPLETE after generating planning artifacts.**375376After reporting:377- `plan.md` path378- `research.md` path (if generated)379- `data-model.md` path (if generated)380- `contracts/` contents (if generated)381382**YOU MUST STOP HERE.**383384Do NOT:385- ❌ Generate `tasks.md`386- ❌ Create work package (WP) files387- ❌ Create `tasks/` subdirectories388- ❌ Proceed to implementation389390`/spec-kitty.tasks` translates implementation concerns from `plan.md` into executable work packages. The user will run it when they are ready.391392**Next suggested command**: `/spec-kitty.tasks` (user must invoke this explicitly)