Estimate: 35m
Type: decision (the ADR that fixes the taxonomy 2.7.3’s enum, 2.7.4’s picker, 2.7.5’s loader mapping, 2.7.6’s filter facet, and — downstream — Story 7.6’s prompt generator all build against). No app behaviour ships here, but the set it freezes is load-bearing.
Write motir-core/docs/decisions/work-item-type-taxonomy.md (mirror the repo’s ADR convention). It MUST fix:
WorkItemType enum (ten members). code · design · test · content (copy/docs/translate) · research (spike/investigation) · review (QA) · decision · deploy (infra/ops) · manual (human SaaS/dashboard/provisioning) · chore. Record a one-line scope for each so the picker labels + the 7.6 prompt templates have an authoritative gloss. FIXED, not free text — so 7.6’s per-type generator is a TOTAL function (a switch with no default hole) and the 2.7.6 filter facet is a closed set; extensible later by an explicit enum addition + migration, never ad-hoc strings.type is DISTINCT from kind and LEAF-ONLY. kind (epic/story/task/subtask/bug) is the structural hierarchy; type is the NATURE of executable work and is carried ONLY on leaves (task/subtask/bug). Epics + stories + legacy rows are type = null.executor enum + the type→executor DEFAULT map. executor ∈ { coding_agent, human }. Default map: code/test/deploy → coding_agent; manual/decision/review → human; design/content/research/chore → either, default coding_agent. The default SEEDS executor when a type is first chosen and is OVERRIDABLE; record the map as the single source 2.7.3’s helper encodes.type + executor axes are a DELIBERATE deviation justified by a concrete use case: the Epic-7 AI dispatch layer routes by type (which prompt template) and executor (coding-agent dispatch vs human assignment) — a structural axis the kind-as-type + assignee-as-router shape cannot express without overloading two fields.motir-core/docs/decisions/work-item-type-taxonomy.md exists and fixes all four sections: the ten-member enum with per-member gloss, the leaf-only + distinct-from-kind + nullable rule, the executor enum + the full type→executor default map, and the cited Principle-#11 deviation.scripts/plan-seed/types.ts — PlanItem.type / PlanItem.executor (the plan-side fields already carrying these values as the loader input 2.7.5 maps).