Context and Problem Statement
Spec Kitty currently carries multiple conflicting ontologies for the same set of objects.
The main collisions are:
Missionsometimes means the reusable workflow blueprint (software-dev,research,documentation).Missionsometimes means the concrete tracked item underkitty-specs/<slug>/.Mission Runalready exists in runtime/state code as the persisted execution/session instance under.kittify/runtime/, but parts of the ongoing rename effort also usemission runto mean the tracked item.Featureis still the dominant tracked-item term in large parts of the CLI, API, dashboard, docs, tutorials, skills, and website language even though that noun only fits software delivery naturally.Workflow,phase,action,step contract, andprocedureare used interchangeably in places where they should describe different layers.
Issue #241 surfaced the
first concrete collision: --feature was proposed to become --mission, but
--mission already meant mission blueprint/type selection.
PR #348 moved the system
toward mission type and mission run, but the branch still leaves one
critical ambiguity unresolved: mission run is already a runtime/session term
in the codebase.
Epic #364 and design spike #367 make the deeper architectural requirement explicit: Spec Kitty needs one noun per layer, not a rotating set of aliases.
Decision Drivers
- One noun, one layer — each canonical term must name exactly one object in the domain model.
- Support all mission types — the core tracked-item term must work for software development, research, documentation, and future mission types.
- Preserve runtime clarity — runtime/session identity must remain distinct from planning/delivery identity.
- Migration tractability — existing
featureandmission-runcompatibility surfaces must be migratable without breaking every script at once. - API and event safety — persisted fields and command flags must not reuse the same noun for different entities.
Considered Options
- Option 1: Keep
Featureas the canonical tracked item, useMission Typefor the blueprint, and reserveMission Runfor runtime. - Option 2: Generalize
Missionto the canonical tracked item, useMission Typefor the blueprint, reserveMission Runfor runtime/session instances, and keepFeatureonly as a compatibility alias for software-dev missions. - Option 3: Use
Mission Runas the canonical tracked item and rename the runtime/session concept to something else.
Decision Outcome
Chosen option: Option 2, because it gives Spec Kitty one portable tracked
item noun across all mission types while preserving mission run for the
runtime/session layer where it already exists.
Core Terminology Model
| Canonical term | Layer | Definition |
|---|---|---|
Mission Type |
Reusable blueprint | A reusable workflow definition that specifies lifecycle actions, guards, templates, artifacts, action indices, and default doctrine bindings. |
Mission |
Concrete tracked item | The concrete thing being planned, executed, reviewed, and integrated in a repository. Stored under kitty-specs/<mission-slug>/. |
Mission Run |
Runtime/session instance | One persisted runtime execution instance for a mission. Stored under .kittify/runtime/ and identified by mission_run_id. |
Work Package |
Planning/review slice | One decomposed slice of work inside a mission. |
Mission Action |
Outer lifecycle node | A public lifecycle action such as specify, plan, implement, or review. |
Step Contract |
Action contract | A structured contract that decomposes one mission action into internal steps and delegation hooks. |
Procedure |
Reusable subworkflow | A doctrine-level reusable playbook that a step contract may delegate to. |
Tactic |
Technique | A smaller reusable technique applied within a procedure or step contract. |
Directive |
Constraint | A rule or policy that constrains behavior. |
Specific Naming Rules
Mission Typeis the only canonical name for the reusable blueprint layer. Usemission type, not plainmission, when the subject issoftware-dev,research,documentation, or another reusable template.Missionis the only canonical name for the concrete tracked item currently represented bykitty-specs/<slug>/,meta.json,tasks.md, work package status, acceptance, and integration.Mission Runis reserved exclusively for the runtime/session instance. It MUST NOT be used to name the tracked item, directory slug, or top-level planning scope.Featureis not a canonical architecture noun anymore. It remains an allowed compatibility alias for aMissionwhosemission_typeissoftware-dev.Workflowis an umbrella prose term only. It is not a primary tracked object. When precision matters, usemission type,mission action,step contract, orprocedure.Phaseis allowed as explanatory prose for high-level lifecycle discussion, but technical contracts, APIs, events, docs, and help text should prefermission actionorstepwhen referring to concrete runtime nodes.
Command, API, and State Naming Rules
--mission-typeis the canonical selector for the reusable blueprint.--missionis the canonical selector for the concrete tracked mission.--mission-runis reserved for runtime/session selectors only.--featureis a compatibility alias for--missionon software-dev legacy surfaces during migration.feature_slugis a compatibility field name only. The canonical tracked item identifier ismission_slug.mission_run_idis the canonical runtime/session identifier and must never alias a tracked mission slug.
Compatibility and Migration Policy
- Existing user-facing and machine-facing surfaces may dual-read and dual-write legacy names during migration.
- Canonical docs, glossary entries, architecture docs, and new APIs MUST use the terminology in this ADR immediately.
- Compatibility aliases must be explicitly labeled as aliases or deprecated surfaces. They must not be presented as co-equal canonical terms.
Featuremay remain in examples, tutorials, and public marketing copy only when the text is specifically about software delivery outcomes, not when describing the generic product model.
Decision on Step Contracts and Procedures
Mission Typedefines the outer lifecycle and the available mission actions.Step Contractis the executable action contract for one mission action.Procedureis a reusable doctrine playbook used by a step contract to supply structured guidance for part of an action.- A procedure is not a mission, not a mission action, and not a mission run.
Decision on Existing Technical Artifact Names
mission-runtime.yaml remains an established technical filename for the
mission-type runtime DAG. It is not a Mission Run artifact and must not be
described that way in docs or code comments.
Consequences
Positive
- The tracked-item noun now works across software, research, documentation, and future mission types.
- Runtime/session identity stays cleanly separate from planning/delivery identity.
- Step contract and procedure language can be defined without overloading
workflow. - Public docs can explain the system without forcing every non-software use
case into the word
feature.
Negative
- Some of PR #348's
mission-runtracked-item naming will need to be reversed or deprecated. - CLI, API, dashboard, tutorial, and website copy will all require coordinated updates.
- Event/API compatibility fields such as
feature_slugwill need a deprecation plan instead of an ad-hoc drift.
Neutral
- Existing legacy files, commands, and docs may temporarily preserve old names as compatibility wrappers while the migration runs.
- Public marketing copy may still use ordinary English words like
featurewhen describing software outcomes, so long as it does not redefine the product model.
Confirmation
This decision is validated when all of the following are true:
- No canonical doc or glossary entry uses
mission runto mean the tracked mission underkitty-specs/<slug>/. - No canonical CLI help text or API contract uses
--mission-runto select a tracked mission slug. - Runtime/state code uses
mission_run_idonly for execution/session identity. - The generic product model in docs and website copy says
Mission Type -> Mission -> Mission Run, withFeatureclearly marked as a software-dev compatibility alias. Step ContractandProcedureare described consistently across doctrine, runtime, docs, skills, and public explanations.
Pros and Cons of the Options
Option 1: Keep Feature as the canonical tracked item
Pros:
- Lowest short-term migration cost.
- Matches current 2.x filesystem and many existing docs.
Cons:
- Makes research and documentation missions sound like software features.
- Keeps the product model biased toward one mission type.
- Leaves the broader terminology problem only partially solved.
Option 2: Generalize Mission as the canonical tracked item
Pros:
- Gives one generic tracked-item noun across all mission types.
- Preserves
Mission Runfor runtime/session identity where it already exists. - Makes issue #367's outer-lifecycle model easier to explain cleanly.
Cons:
- Requires a larger rename and compatibility program.
- Forces explicit migration rules for
featureandmission-runlegacy surfaces.
Option 3: Use Mission Run as the canonical tracked item
Pros:
- Avoids renaming the tracked item back away from some of PR #348's current help text.
Cons:
- Directly collides with the existing runtime/session use of
mission run. - Forces a second rename for
mission_run_id, runtime state, and run-index files. - Makes the domain model less precise, not more.
More Information
Related Issues:
Related Pull Request:
Related ADRs:
2026-02-17-1-canonical-next-command-runtime-loop.md2026-02-17-2-runtime-owned-mission-discovery-loading.md2026-04-03-1-execution-lanes-own-worktrees-and-mission-branches.md2026-04-03-3-feature-acceptance-runs-on-the-integrated-mission-branch.md