spec-kitty-spdd-reasons
Drive REASONS Canvas authoring and review for missions that opted in to
Structured-Prompt-Driven Development (SPDD) via charter selection. The
canvas is a thin, agent-curated reasoning layer that sits next to the spec,
plan, and tasks; it is not a duplicate system mirror.
This skill is documentation for the agent. It assumes the SPDD/REASONS
doctrine pack (paradigm, tactics, styleguide, directive, template) has
already been shipped under src/doctrine/ and that activation can be
detected via the helper described below.
What this skill does
- Detects whether the SPDD/REASONS pack is active for the current project.
- Loads mission context:
spec.md, plan.md, tasks.md, per-WP prompts,
charter context, glossary, research notes, contracts, and relevant code.
- Generates or updates
kitty-specs/<mission>/reasons-canvas.md from the
seven-section template fragment.
- Compiles per-WP REASONS summaries when an implementer or reviewer asks
for one (a focused slice of the canvas scoped to a single work package).
- Runs comparison-mode review: traces a diff against the canvas and
classifies divergences using the drift taxonomy.
What this skill does NOT do
- It does NOT mirror the code as prose. The canvas references source
artifacts; it does not duplicate them. Code remains the source of truth
for current behavior.
- It does NOT overwrite user-authored mission artifacts. When a canvas
section already contains user content, the skill merges by appending
or refining, never by silent rewrite.
- It does NOT silently enforce SPDD on projects that did not opt in via
charter. If the user demands enforcement and the charter is not
configured, escalate to the charter workflow.
Activation rules
Three branches:
- Active — charter selected the SPDD/REASONS pack (paradigm
structured-prompt-driven-development, tactic reasons-canvas-fill,
tactic reasons-canvas-review, or directive DIRECTIVE_038). Proceed
with canvas authoring or review using the seven-section template at
src/doctrine/templates/fragments/reasons-canvas-template.md.
- Inactive + ad-hoc request — user asked to "use REASONS" once,
without charter opt-in. Proceed, but stamp the canvas header with a
"not formally opted in via charter" note so reviewers know the canvas
is advisory only.
- Inactive + enforcement demand — user wants REASONS enforced as a
gate but the charter has not selected the pack. Do NOT enforce. Escalate
to the charter workflow: suggest running the charter interview to add
the paradigm or directive, then return to this skill.
How to detect activation
Programmatic (preferred):
from doctrine.spdd_reasons.activation import is_spdd_reasons_active
active = is_spdd_reasons_active(repo_root)
The helper inspects .kittify/charter/governance.yaml and
.kittify/charter/directives.yaml and returns True iff any of the four
selectors is present:
- paradigm
structured-prompt-driven-development
- tactic
reasons-canvas-fill
- tactic
reasons-canvas-review
- directive
DIRECTIVE_038
Manual fallback: read .kittify/charter/governance.yaml directly and look
for the same selectors under doctrine.selected_paradigms,
doctrine.selected_tactics, or doctrine.selected_directives.
How to author the canvas
- Read mission artifacts:
kitty-specs/<mission>/spec.md, plan.md,
tasks.md, per-WP prompts, research/*, contracts/*, the project
glossary, and any source files the spec or plan calls out.
- Map content to the seven sections using the template at
src/doctrine/templates/fragments/reasons-canvas-template.md:
- Requirements — problem statement, acceptance criteria, DoD.
- Entities — domain concepts, relationships, canonical glossary
terms.
- Approach — selected strategy and tradeoffs considered.
- Structure — code surfaces affected, components, dependencies,
ownership boundaries.
- Operations — ordered implementation steps, test strategy.
- Norms — coding/style conventions, observability and team rules.
- Safeguards — hard constraints, security rules, performance limits,
things not to break.
- Link, don't duplicate: prefer
[see spec.md §X](../spec.md#x) over
inlining spec content. The canvas is a reasoning layer, not a copy.
- Preserve user content: if the canvas already exists, read it before
writing. Merge new content into existing sections; never blow away
user-authored prose.
- Append-only Deviations: the
## Deviations section is append-only.
New entries go at the bottom in the form
- <date> — <wp> — <description> — <rationale>. Never rewrite or
re-order existing entries.
Output path: kitty-specs/<mission>/reasons-canvas.md.
How to review with the canvas
Comparison-mode review pairs an implementation diff against the canvas:
- Trace every changed file in the diff to a Requirement and an
Operation step in the canvas. Unmapped changes are signal.
- Detect uninvented entities — files, functions, modules, or domain
terms that appear in the diff but not in the canvas, the spec, the
plan, or the glossary.
- Verify the diff respects the canvas Norms and Safeguards
(style/observability/security/performance/invariants).
- Classify every divergence using the drift taxonomy from
data-model.md §Drift classification:
approved — diff matches canvas exactly.
approved_with_deviation — small, documented divergence; record in
the canvas Deviations section.
canvas_update_needed — implementation is correct, canvas is stale.
glossary_update_needed — new canonical term surfaced; escalate to
glossary skill.
charter_follow_up — divergence touches charter policy; escalate.
follow_up_mission — divergence is real but out of scope for this
mission; file a follow-up.
scope_drift_block — diff exceeds mission scope; block.
safeguard_violation_block — diff violates a Safeguard; block hard.
Surface the classification in the review output. Two of the eight
classifications (scope_drift_block, safeguard_violation_block) block
landing; the rest are advisory or escalate.
Charter precedence
The charter is the governance source of truth. If a directive, tactic, or
norm declared in the charter conflicts with content in the canvas, the
charter wins. The canvas must update; the charter does not. Treat any
canvas claim that contradicts the charter as canvas_update_needed.
Glossary discipline
When canvas authoring or review surfaces a term that is missing,
ambiguous, or in conflict with the project glossary, do NOT redefine the
term inline. Escalate to the glossary skill (spec-kitty-glossary-context)
so the canonical entry is updated once and propagated everywhere.
Reference paths
- Template fragment:
src/doctrine/templates/fragments/reasons-canvas-template.md
- Activation helper:
src/doctrine/spdd_reasons/activation.py (is_spdd_reasons_active)
- Charter governance config:
.kittify/charter/governance.yaml
- Drift taxonomy:
kitty-specs/<mission>/data-model.md §Drift classification
1---2name: spec-kitty-spdd-reasons3description: Drive REASONS Canvas authoring and review for Spec Kitty missions that opted in to Structured-Prompt-Driven Development (SPDD) via charter selection. Triggers: "use SPDD", "use REASONS", "generate a REASONS canvas", "apply structured prompt driven development", "make this mission SPDD". Does NOT handle: enforcing SPDD on projects whose charter has not selected the doctrine pack (escalate to charter workflow instead). Does NOT mirror code as prose; code remains the source of truth for current behavior.4---5
6# spec-kitty-spdd-reasons
7
8Drive REASONS Canvas authoring and review for missions that opted in to
9Structured-Prompt-Driven Development (SPDD) via charter selection. The
10canvas is a thin, agent-curated reasoning layer that sits next to the spec,
11plan, and tasks; it is **not** a duplicate system mirror.
12
13This skill is documentation for the agent. It assumes the SPDD/REASONS
14doctrine pack (paradigm, tactics, styleguide, directive, template) has
15already been shipped under `src/doctrine/` and that activation can be
16detected via the helper described below.
17
18---
19
20## What this skill does
21
22- Detects whether the SPDD/REASONS pack is active for the current project.
23- Loads mission context: `spec.md`, `plan.md`, `tasks.md`, per-WP prompts,
24 charter context, glossary, research notes, contracts, and relevant code.
25- Generates or updates `kitty-specs/<mission>/reasons-canvas.md` from the
26 seven-section template fragment.
27- Compiles per-WP REASONS summaries when an implementer or reviewer asks
28 for one (a focused slice of the canvas scoped to a single work package).
29- Runs comparison-mode review: traces a diff against the canvas and
30 classifies divergences using the drift taxonomy.
31
32## What this skill does NOT do
33
34- It does NOT mirror the code as prose. The canvas references source
35 artifacts; it does not duplicate them. Code remains the source of truth
36 for current behavior.
37- It does NOT overwrite user-authored mission artifacts. When a canvas
38 section already contains user content, the skill **merges** by appending
39 or refining, never by silent rewrite.
40- It does NOT silently enforce SPDD on projects that did not opt in via
41 charter. If the user demands enforcement and the charter is not
42 configured, escalate to the charter workflow.
43
44## Activation rules
45
46Three branches:
47
481. **Active** — charter selected the SPDD/REASONS pack (paradigm
49 `structured-prompt-driven-development`, tactic `reasons-canvas-fill`,
50 tactic `reasons-canvas-review`, or directive `DIRECTIVE_038`). Proceed
51 with canvas authoring or review using the seven-section template at
52 `src/doctrine/templates/fragments/reasons-canvas-template.md`.
532. **Inactive + ad-hoc request** — user asked to "use REASONS" once,
54 without charter opt-in. Proceed, but stamp the canvas header with a
55 "not formally opted in via charter" note so reviewers know the canvas
56 is advisory only.
573. **Inactive + enforcement demand** — user wants REASONS enforced as a
58 gate but the charter has not selected the pack. Do NOT enforce. Escalate
59 to the charter workflow: suggest running the charter interview to add
60 the paradigm or directive, then return to this skill.
61
62## How to detect activation
63
64Programmatic (preferred):
65
66```python
67from doctrine.spdd_reasons.activation import is_spdd_reasons_active
68
69active = is_spdd_reasons_active(repo_root)
70```
71
72The helper inspects `.kittify/charter/governance.yaml` and
73`.kittify/charter/directives.yaml` and returns `True` iff any of the four
74selectors is present:
75
76- paradigm `structured-prompt-driven-development`
77- tactic `reasons-canvas-fill`
78- tactic `reasons-canvas-review`
79- directive `DIRECTIVE_038`
80
81Manual fallback: read `.kittify/charter/governance.yaml` directly and look
82for the same selectors under `doctrine.selected_paradigms`,
83`doctrine.selected_tactics`, or `doctrine.selected_directives`.
84
85## How to author the canvas
86
871. **Read mission artifacts**: `kitty-specs/<mission>/spec.md`, `plan.md`,
88 `tasks.md`, per-WP prompts, `research/*`, `contracts/*`, the project
89 glossary, and any source files the spec or plan calls out.
902. **Map content to the seven sections** using the template at
91 `src/doctrine/templates/fragments/reasons-canvas-template.md`:
92 - **Requirements** — problem statement, acceptance criteria, DoD.
93 - **Entities** — domain concepts, relationships, canonical glossary
94 terms.
95 - **Approach** — selected strategy and tradeoffs considered.
96 - **Structure** — code surfaces affected, components, dependencies,
97 ownership boundaries.
98 - **Operations** — ordered implementation steps, test strategy.
99 - **Norms** — coding/style conventions, observability and team rules.
100 - **Safeguards** — hard constraints, security rules, performance limits,
101 things not to break.
1023. **Link, don't duplicate**: prefer `[see spec.md §X](../spec.md#x)` over
103 inlining spec content. The canvas is a reasoning layer, not a copy.
1044. **Preserve user content**: if the canvas already exists, read it before
105 writing. Merge new content into existing sections; never blow away
106 user-authored prose.
1075. **Append-only Deviations**: the `## Deviations` section is append-only.
108 New entries go at the bottom in the form
109 `- <date> — <wp> — <description> — <rationale>`. Never rewrite or
110 re-order existing entries.
111
112Output path: `kitty-specs/<mission>/reasons-canvas.md`.
113
114## How to review with the canvas
115
116Comparison-mode review pairs an implementation diff against the canvas:
117
1181. **Trace** every changed file in the diff to a Requirement and an
119 Operation step in the canvas. Unmapped changes are signal.
1202. **Detect** uninvented entities — files, functions, modules, or domain
121 terms that appear in the diff but not in the canvas, the spec, the
122 plan, or the glossary.
1233. **Verify** the diff respects the canvas Norms and Safeguards
124 (style/observability/security/performance/invariants).
1254. **Classify** every divergence using the drift taxonomy from
126 `data-model.md §Drift classification`:
127 - `approved` — diff matches canvas exactly.
128 - `approved_with_deviation` — small, documented divergence; record in
129 the canvas Deviations section.
130 - `canvas_update_needed` — implementation is correct, canvas is stale.
131 - `glossary_update_needed` — new canonical term surfaced; escalate to
132 glossary skill.
133 - `charter_follow_up` — divergence touches charter policy; escalate.
134 - `follow_up_mission` — divergence is real but out of scope for this
135 mission; file a follow-up.
136 - `scope_drift_block` — diff exceeds mission scope; block.
137 - `safeguard_violation_block` — diff violates a Safeguard; block hard.
138
139Surface the classification in the review output. Two of the eight
140classifications (`scope_drift_block`, `safeguard_violation_block`) block
141landing; the rest are advisory or escalate.
142
143## Charter precedence
144
145The charter is the governance source of truth. If a directive, tactic, or
146norm declared in the charter conflicts with content in the canvas, the
147charter wins. The canvas must update; the charter does not. Treat any
148canvas claim that contradicts the charter as `canvas_update_needed`.
149
150## Glossary discipline
151
152When canvas authoring or review surfaces a term that is missing,
153ambiguous, or in conflict with the project glossary, do NOT redefine the
154term inline. Escalate to the glossary skill (`spec-kitty-glossary-context`)
155so the canonical entry is updated once and propagated everywhere.
156
157---
158
159## Reference paths
160
161- Template fragment:
162 `src/doctrine/templates/fragments/reasons-canvas-template.md`
163- Activation helper:
164 `src/doctrine/spdd_reasons/activation.py` (`is_spdd_reasons_active`)
165- Charter governance config:
166 `.kittify/charter/governance.yaml`
167- Drift taxonomy:
168 `kitty-specs/<mission>/data-model.md §Drift classification`