Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 beh
.claude/skills/priivacy-ai-spec-kitty-spdd-reasons/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 1136% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 374% | 0% |
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/charter/offering/ and that activation can be detected via the helper described below.
spec.md, plan.md, tasks.md, per-WP prompts,charter context, glossary, research notes, contracts, and relevant code.
kitty-specs/<mission>/reasons-canvas.md from theseven-section template fragment.
for one (a focused slice of the canvas scoped to a single work package).
classifies divergences using the drift taxonomy.
artifacts; it does not duplicate them. Code remains the source of truth for current behavior.
section already contains user content, the skill merges by appending or refining, never by silent rewrite.
charter. If the user demands enforcement and the charter is not configured, escalate to the charter workflow.
Three branches:
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/charter/offering/templates/fragments/reasons-canvas-template.md.
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.
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.
Programmatic (preferred):
pythonfrom charter.offering.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:
structured-prompt-driven-developmentreasons-canvas-fillreasons-canvas-reviewDIRECTIVE_038Manual fallback: read .kittify/charter/governance.yaml directly and look for the same selectors under charter.offering.selected_paradigms, charter.offering.selected_tactics, or charter.offering.selected_directives.
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.
src/charter/offering/templates/fragments/reasons-canvas-template.md:
terms.
ownership boundaries.
things not to break.
[see spec.md §X](../spec.md#x) overinlining spec content. The canvas is a reasoning layer, not a copy.
writing. Merge new content into existing sections; never blow away user-authored prose.
## 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.
Comparison-mode review pairs an implementation diff against the canvas:
Operation step in the canvas. Unmapped changes are signal.
terms that appear in the diff but not in the canvas, the spec, the plan, or the glossary.
(style/observability/security/performance/invariants).
data-model.md §Drift classification:
approved — diff matches canvas exactly.approved_with_deviation — small, documented divergence; record inthe canvas Deviations section.
canvas_update_needed — implementation is correct, canvas is stale.glossary_update_needed — new canonical term surfaced; escalate toglossary skill.
charter_follow_up — divergence touches charter policy; escalate.follow_up_mission — divergence is real but out of scope for thismission; 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.
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.
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.
src/charter/offering/templates/fragments/reasons-canvas-template.md
src/charter/offering/spdd_reasons/activation.py (is_spdd_reasons_active)
.kittify/charter/governance.yaml
kitty-specs/<mission>/data-model.md §Drift classification
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,550 | 17,048 | +17% | 1 | 1 | 0% | 278 | 2,271 | +717% | 0 | 0 | — |
case-02 | fail→pass | 19,741 | 18,205 | -8% | 1 | 1 | 0% | 2,392 | 4,342 | +82% | 0 | 0 | — |
case-03 | fail→fail | 23,187 | 16,152 | -30% | 1 | 1 | 0% | 3,242 | 2,259 | -30% | 0 | 0 | — |
case-04 | fail→pass | 14,481 | 15,380 | +6% | 1 | 1 | 0% | 1,687 | 3,747 | +122% | 0 | 0 | — |
case-05 | fail→pass | 16,296 | 10,548 | -35% | 1 | 1 | 0% | 2,109 | 2,941 | +39% | 0 | 0 | — |
case-06 | fail→pass | 15,473 | 16,816 | +9% | 1 | 1 | 0% | 323 | 3,993 | +1136% | 0 | 0 | — |
case-07 | fail→pass | 20,261 | 11,926 | -41% | 1 | 1 | 0% | 685 | 3,246 | +374% | 0 | 0 | — |
case-08 | fail→pass | 19,401 | 10,833 | -44% | 1 | 1 | 0% | 2,508 | 3,036 | +21% | 0 | 0 | — |
case-09 | fail→pass | 31,483 | 27,225 | -14% | 1 | 1 | 0% | 4,581 | 4,298 | -6% | 0 | 0 | — |
case-10 | fail→fail | 16,769 | 10,355 | -38% | 1 | 1 | 0% | 1,924 | 2,851 | +48% | 0 | 0 | — |
case-11 | fail→pass | 15,695 | 10,884 | -31% | 1 | 1 | 0% | 1,620 | 2,947 | +82% | 0 | 0 | — |
case-12 | fail→pass | 13,174 | 9,191 | -30% | 1 | 1 | 0% | 1,290 | 2,638 | +104% | 0 | 0 | — |
case-13 | fail→pass | 12,737 | 9,142 | -28% | 1 | 1 | 0% | 1,270 | 2,642 | +108% | 0 | 0 | — |
case-14 | fail→pass | 14,169 | 8,533 | -40% | 1 | 1 | 0% | 1,643 | 2,516 | +53% | 0 | 0 | — |
case-15 | pass→pass | 14,305 | 9,357 | -35% | 1 | 1 | 0% | 1,549 | 2,649 | +71% | 0 | 0 | — |
case-16 | fail→fail | 19,183 | 14,500 | -24% | 1 | 1 | 0% | 2,331 | 3,746 | +61% | 0 | 0 | — |
case-17 | pass→pass | 15,949 | 15,744 | -1% | 1 | 1 | 0% | 1,767 | 3,808 | +116% | 0 | 0 | — |
case-18 | fail→fail | 15,411 | 6,554 | -57% | 1 | 1 | 0% | 1,768 | 2,130 | +20% | 0 | 0 | — |
case-19 | pass→pass | 13,719 | 9,630 | -30% | 1 | 1 | 0% | 1,452 | 2,738 | +89% | 0 | 0 | — |
case-20 | pass→fail | 15,126 | 16,334 | +8% | 1 | 1 | 0% | 1,641 | 3,335 | +103% | 0 | 0 | — |
case-21 | fail→pass | 11,613 | 9,033 | -22% | 1 | 1 | 0% | 999 | 2,547 | +155% | 0 | 0 | — |
case-22 | fail→pass | 15,034 | 12,491 | -17% | 1 | 1 | 0% | 1,526 | 3,256 | +113% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 9/2/2026 | +50% |
| gemini-3.6-flash | verified | 8/13/2026 | +68% |
Other measured skills in the registry, with their headline benchmark lift.