@thebassclef/lite 0.1.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +238 -127
  2. package/dist/cli.js +240 -129
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/dist/lite/.claude/settings.json +212 -0
  8. package/dist/lite/CLAUDE.md +41 -0
  9. package/dist/lite/gitignore +58 -0
  10. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  11. package/dist/lite/whereami.md +24 -0
  12. package/package.json +8 -2
  13. package/substrate/.bassclef/lite-manifest.json +0 -2701
  14. package/substrate/.claude/agents/architect.md +0 -70
  15. package/substrate/.claude/agents/builder.md +0 -114
  16. package/substrate/.claude/agents/designer.md +0 -156
  17. package/substrate/.claude/agents/reviewer.md +0 -88
  18. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +0 -357
  19. package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
  20. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
  21. package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
  22. package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
  23. package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
  24. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  25. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
  26. package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
  27. package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
  28. package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
  29. package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
  30. package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
  31. package/substrate/.claude/hooks/session-end.sh +0 -433
  32. package/substrate/.claude/hooks/session-reflection.sh +0 -303
  33. package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
  34. package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
  35. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  36. package/substrate/.claude/hooks/state-validate.sh +0 -271
  37. package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
  38. package/substrate/.claude/hooks/temperance-gate.sh +0 -147
  39. package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
  40. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
  41. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
  42. package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
  43. package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,268 +0,0 @@
1
- ---
2
- tier: lite
3
- name: user-stories
4
- description: "Produce INVEST-shaped user stories that trace back to personas, JTBDs, and value-prop-canvas entries. Backlog-intake artifact for incremental delivery. Distinct from /task-scenarios (UX narrative) and /use-case (system behavior)."
5
- problem: "Stories get written from developer intent not persona need. INVEST shape drifts."
6
- value: "INVEST-shaped stories that trace back to personas and JTBDs and value prop."
7
- inputs: [A feature scope plus personas ref]
8
- outputs: [INVEST user stories per persona, Acceptance criteria per story]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- ---
12
-
13
- # /user-stories — INVEST Backlog Intake
14
-
15
- Produce backlog-ready user stories shaped per INVEST (Independent,
16
- Negotiable, Valuable, Estimable, Small, Testable). Each story traces
17
- to a persona, a JTBD, and (when present) a value-prop-canvas entry +
18
- a use-case line. Backlog-intake artifact, not UX research, not
19
- system spec.
20
-
21
- ## When to invoke
22
-
23
- - After `/personas` (and ideally `/jtbd-tasks` + `/value-prop-canvas`) have produced upstream artifacts
24
- - When converting an iteration scope into a tracked backlog
25
- - Before `/spec` and `/interaction-design` — stories scope what they cover
26
-
27
- ## Distinction from adjacent artifacts
28
-
29
- Per @luminary alistair-cockburn (2024) and NN/G: **user stories ≠ task scenarios ≠ use cases**. Each is a distinct artifact with a distinct purpose.
30
-
31
- | Artifact | Purpose | Format | Primary consumer |
32
- |----------|---------|--------|------------------|
33
- | **JTBDs** | WHY (job the user is hiring the product for) | Outcome statement | PM, strategist (problem framing) |
34
- | **Task scenarios** (NN/G) | CONTEXT (narrative day-in-the-life with mental state, obstacles, environment) | Story prose ("Sam is stuck in traffic…") | UX researcher, `/synthetic-user` tester, designer |
35
- | **User stories** (this skill) | WHAT (feature/requirement for incremental delivery) | Formulaic As-a-I-want-So-that + INVEST + acceptance criteria | Developer, sprint planner |
36
- | **Use cases** (Cockburn) | SPEC (system behavior for a complete user goal) | Structured (begin/middle/end + extensions + pre/post) | Architect, `/decompose`, `/verify` |
37
-
38
- All four coexist. `/user-stories` does not replace any of them. It produces backlog tokens for incremental work — it intentionally splits a use-case (when one exists) into smaller, independently shippable units.
39
-
40
- ## Sources read
41
-
42
- - @luminary alistair-cockburn — *Unifying user stories, use cases, and story maps* (2024). Establishes the user-story↔use-case distinction this skill is built on: stories slice use-case lines into INVEST-shaped delivery tokens. The four-artifact non-overlap (JTBD / task scenario / user story / use case) comes directly from this work.
43
- - Mike Cohn — *User Stories Applied* (2004). Origin of the bassclef As-a-I-want-So-that template + INVEST principles
44
- - Jeff Patton — *User Story Mapping* (2014). Story-as-conversation-token framing; backlog ordering via story map
45
- - Bill Wake — INVEST acronym (2003). Independent, Negotiable, Valuable, Estimable, Small, Testable
46
- - Nielsen Norman Group — *Task Scenarios in Usability Testing* (cited for the user-stories vs task-scenarios distinction)
47
- - Quorum #52 — original `/promote` ticket; bassclef #208 — companion
48
- - `.claude/skills/personas/SKILL.md`, `.claude/skills/jtbd-tasks/SKILL.md`, `.claude/skills/value-prop-canvas/SKILL.md` — upstream artifacts this skill reads
49
- - `standards/user-story-invest.md` — companion standard (this skill's standard; codifies INVEST validation)
50
- - `templates/user-story-template.md` — bassclef template
51
-
52
- ## What I'm NOT reading (with reason)
53
-
54
- - `.claude/skills/task-scenarios/SKILL.md` — sibling skill in the chain. /task-scenarios is currently muddled (conflates NN/G scenarios + Agile stories + BDD). Cleanup is tracked as a separate bassclef-evolution ticket; this skill explicitly stays in its lane (backlog intake) so the boundary is clean even before /task-scenarios is refocused
55
- - `/use-case` skill — not yet built (filed as separate bassclef-evolution ticket). When it lands, /user-stories will read use-case lines as input; until then, it reads /jtbd-tasks output directly + falls back to scope statement
56
-
57
- ## Usage
58
-
59
- ```
60
- /user-stories → produce stories from current iteration goal scope
61
- /user-stories [ticket-ref] → produce from a specific ticket / spec / canvas
62
- /user-stories from-jtbd [JTBD slug] → derive stories for one JTBD
63
- /user-stories from-use-case [UC slug] → split a use-case into stories (when /use-case exists)
64
- /user-stories validate → audit existing stories at docs/user-stories/ against INVEST
65
- ```
66
-
67
- ## Procedure
68
-
69
- ### Step 1: Resolve inputs
70
-
71
- Read upstream artifacts in this order. Halt with a useful warning if a required input is missing:
72
-
73
- 1. **Personas** — `docs/personas/*.md` (preferred) or `docs/design/personas/*.md` (legacy). If none exist, run `/personas default` and proceed with operator-default (warn that stories will have weak persona grounding).
74
- 2. **JTBDs** — `docs/design/personas/[persona]/jtbds.md` or whatever path `/jtbd-tasks` writes to. If none exist, ask the operator which jobs are in scope OR fall back to inferring from the iteration goal scope statement (warn).
75
- 3. **Value Prop Canvas** (optional but high-value) — `docs/value-prop-canvas/*.md`. When present, the canvas's Pain-Relievers + Gain-Creators ground the `<benefit>` clause of stories.
76
- 4. **Use case** (when /use-case exists) — `docs/use-cases/*.md`. Each story slices a use-case line; carry the line reference in the traceability block.
77
-
78
- ### Step 2: Map jobs/use-case-lines to candidate stories
79
-
80
- For each JTBD (or use-case main-success line), draft candidate stories. Each story:
81
-
82
- - Has ONE persona (no "as a user" — be specific)
83
- - Has ONE outcome (not a list of features — split into multiple stories)
84
- - Has a `<benefit>` clause that traces to a VPC Gain-Creator or Pain-Reliever (when VPC exists)
85
-
86
- Format per the template (`templates/user-story-template.md`):
87
-
88
- ```markdown
89
- ### US-NNN — [imperative title]
90
-
91
- **As a** [persona slug — couple-founders, not "user"]
92
- **I want to** [observable, testable outcome — not internal mechanism]
93
- **So that** [benefit grounded in VPC entry or JTBD]
94
-
95
- **Traceability**:
96
- - Persona: [slug] (docs/personas/[slug].md)
97
- - JTBD: [job statement] (docs/design/personas/[persona]/jtbds.md#J-N)
98
- - VPC: [PR-N or GC-N from value-prop canvas] (docs/value-prop-canvas/[persona].md)
99
- - Use-case (when present): [UC-N step Xa] (docs/use-cases/[uc-slug].md)
100
-
101
- **Acceptance criteria**:
102
- - [ ] [observable behavior — written as a test assertion]
103
- - [ ] [edge case from CTA decision points or use-case extension]
104
- - [ ] [non-functional concern if applicable: performance threshold, accessibility, etc.]
105
-
106
- **INVEST self-check**:
107
- - I (Independent): [why this story can ship without others]
108
- - N (Negotiable): [what's flexible vs. fixed]
109
- - V (Valuable): [observable value to the persona]
110
- - E (Estimable): [Small enough to estimate confidently]
111
- - S (Small): [≤ N days of work]
112
- - T (Testable): [acceptance criteria are concrete and observable]
113
- ```
114
-
115
- ### Step 3: INVEST validation
116
-
117
- Walk every drafted story through INVEST per `standards/user-story-invest.md`:
118
-
119
- | Letter | Test | Fail signal |
120
- |--------|------|-------------|
121
- | **I**ndependent | Can ship without other stories shipping first? | If "needs X first," either resequence or merge |
122
- | **N**egotiable | Is this a conversation, not a contract? | If exact wording is mandatory, you wrote a use case |
123
- | **V**aluable | Does the persona get observable value when this ships? | If only internal/refactor value, it's a tech-debt task — not a story |
124
- | **E**stimable | Can the team estimate it within ~30 min? | If no, it's too vague — split or research |
125
- | **S**mall | Fits in one iteration / sprint? | If multi-sprint, it's an epic — split |
126
- | **T**estable | Acceptance criteria are concrete + observable? | If not, criteria need rewrite |
127
-
128
- Stories that fail any INVEST letter get marked WARN; stories that fail multiple get FAIL and require rewrite before they're backlog-ready.
129
-
130
- ### Step 4: Anti-pattern check
131
-
132
- Reject (or rewrite) stories that exhibit any of:
133
-
134
- - **Solution-as-story** — "Add a sidebar" is a solution; the story should be the user outcome that motivates the sidebar
135
- - **Implementation leak** — "Use Redis to cache X" is implementation detail; story is about user-facing behavior, not how
136
- - **Persona inflation** — "As a user" is too broad; reference a persona slug from `/personas`
137
- - **Benefit absent** — "So that" clause empty or generic ("so that I can use the app"); ground in VPC entry or JTBD outcome
138
- - **Acceptance criteria as pseudocode** — criteria should be observable behaviors, not function signatures
139
-
140
- ### Step 5: Emit + traceability matrix
141
-
142
- Write each story to `docs/user-stories/US-NNN-[slug].md` (one file per story for granular Git history) OR append to `docs/user-stories/[iteration-slug].md` for batch (operator preference).
143
-
144
- Emit a traceability matrix at `docs/user-stories/_matrix.md`:
145
-
146
- ```markdown
147
- | Story | Persona | JTBD | VPC | Use-case | INVEST | Status |
148
- |-------|---------|------|-----|----------|--------|--------|
149
- | US-001 | couple-founders | J1 | GC2 | UC-3:4a | PASS | new |
150
- | US-002 | cofounder-pair | J2 | PR1 | UC-3:4b | WARN-S | new |
151
- | ... | ... | ... | ... | ... | ... | ... |
152
- ```
153
-
154
- The matrix surfaces:
155
- - **Coverage gaps**: a JTBD with no stories = unserved user need
156
- - **Orphan stories**: a story with no JTBD trace = solution looking for a problem (red flag)
157
- - **INVEST health**: aggregate PASS/WARN/FAIL ratio for the iteration
158
-
159
- ### Step 6: Output summary
160
-
161
- Print a compact summary:
162
-
163
- ```markdown
164
- ## User stories produced
165
-
166
- **Iteration**: [iteration goal slug]
167
- **Personas covered**: N
168
- **JTBDs covered**: N
169
- **Use-cases sliced**: N (if applicable)
170
- **Stories produced**: N
171
- **INVEST**: N PASS / M WARN / K FAIL
172
-
173
- **Coverage gaps**: [JTBDs with zero stories]
174
- **Orphans**: [stories with no JTBD trace — should be 0]
175
- ```
176
-
177
- ## Worked example — INVEST validation in action
178
-
179
- To make the INVEST rule concrete, here's a deliberate WARN catch:
180
-
181
- **Persona**: cofounder-pair (two technical co-founders, ChatGPT Business friction)
182
- **JTBD**: J1 — share AI-discovered context across the cofounder pair without re-explaining
183
-
184
- **Story drafted** (US-001):
185
-
186
- > **As a** cofounder-pair member
187
- > **I want to** see what my partner asked the AI yesterday
188
- > **So that** I can pick up the thread without making them re-explain
189
- >
190
- > **Acceptance**:
191
- > - [ ] Yesterday's AI conversations from the partner appear in a "shared digest" pane
192
- > - [ ] Each entry shows: timestamp, partner-name, conversation summary, link to full thread
193
-
194
- **INVEST check**:
195
- - I: ✅ Ships independently of any other story
196
- - N: ✅ Wording is suggested, not mandatory
197
- - V: ✅ Observable value — operator stops re-explaining
198
- - E: ✅ Estimable (~2-3 days)
199
- - **S**: ⚠️ WARN — "shared digest pane" implies UI surface + backend digest job + partner-account linkage. Three concerns; might be too big.
200
- - T: ✅ Testable
201
-
202
- **Resolution**: split into US-001a (backend digest job) + US-001b (UI pane) + US-001c (partner-account linkage). Each ships independently, each is small, each is testable.
203
-
204
- Without the **S** check, US-001 ships as a 3-week mega-story and we lose all the INVEST benefits. The check forces the split before sprint planning, not after.
205
-
206
- ## Common pitfalls
207
-
208
- - **Treating /user-stories as a replacement for /task-scenarios** — they're different artifacts. Task scenarios provide narrative context for UX research + synthetic-user testing; user stories are backlog tokens. Keep both.
209
- - **Skipping persona grounding** — "As a user" is a code smell. Always reference a persona slug.
210
- - **Writing stories without a use-case when one would help** — for goal-level features (multi-step flows, complex behaviors), write the use-case first, then split into stories. The use-case gives you the spec; the stories slice it.
211
- - **Padding INVEST** — every letter should be a real check, not a checkbox. If you can't articulate WHY a story is Independent, it probably isn't.
212
- - **Acceptance criteria as wishes** — "Works well" is not a criterion. "Loads in <2s on 4G" is.
213
-
214
- ## Relationship to other skills
215
-
216
- | Skill | Relationship |
217
- |-------|-------------|
218
- | `/personas` | Upstream — provides the persona slug for the `<As a>` clause |
219
- | `/jtbd-tasks` | Upstream — provides JTBD outcome statements that ground the `<so that>` clause |
220
- | `/value-prop-canvas` | Upstream — Pain-Relievers + Gain-Creators inform the benefit phrasing |
221
- | `/value-prop` | Sibling — value-prop is for positioning; user-stories are for backlog. Both consume personas + VPC. |
222
- | `/use-case` (future) | Direct upstream when present — user-stories slice use-case lines with traceability back |
223
- | `/interaction-design` | Downstream — diagrams render the story flows |
224
- | `/decompose` | Downstream — responsibilities assigned per story (or per use-case if one exists) |
225
- | `/spec` | Downstream — spec consumes stories + use-cases as input |
226
- | `/task-scenarios` | Sibling, NOT replacement — task-scenarios are narrative day-in-the-life for UX research; user-stories are backlog tokens. Both coexist. |
227
- | `/synthetic-user` | Indirect — synthetic-user reads /task-scenarios for journey context, NOT stories. Stories are not the right shape for testing journeys (too granular). |
228
- | `/sprint` | Downstream — sprint reads the user-story matrix to surface candidate work |
229
-
230
- ## Chain position
231
-
232
- ```
233
- /personas (WHO)
234
-
235
- /jtbd-tasks (WHY) ─────────────┐
236
- ↓ ├─→ /task-scenarios (CONTEXT for /synthetic-user)
237
- /value-prop-canvas (FIT) │
238
- ↓ │
239
- /use-case (SPEC, future) │
240
- ↓ │
241
- /user-stories (BACKLOG) ←──────┘ ← THIS SKILL
242
-
243
- /interaction-design (RENDERS) + /decompose (RESPONSIBILITIES)
244
-
245
- /spec (BUILD)
246
- ```
247
-
248
- ## Provenance & evolution
249
-
250
- - Drafted in an operator project during user-centric chain shaping
251
- - Promoted to bassclef via issue #208
252
- - Cockburn-aligned (user-stories ≠ use-cases) and NN/G-aligned (user-stories ≠ task-scenarios)
253
-
254
- Future related promotions (separate bassclef-evolution tickets):
255
- - `/use-case` — Cockburn-style behavior spec
256
- - `/story-map` — Patton 2D backlog grid
257
- - `/shape` — composer for tiered shaping (quick-spike / light / medium / full-blown)
258
- - Refocus `/task-scenarios` on NN/G narrative scenarios (strip stories + BDD overlap)
259
- - Wire `/synthetic-user` to read `/task-scenarios` for journey context
260
-
261
- ## Closes
262
-
263
- - bassclef #208
264
- - Part of follow-up to iteration `2026-04-19e-persona-vpc-promotions`
265
-
266
- ## Output discipline
267
-
268
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -1,251 +0,0 @@
1
- ---
2
- tier: lite
3
- name: value-prop
4
- description: "Draft a value prop for a ticket, goal, or feature. Three sizes: tweet (\u2264280 chars claim + sharpener), brief (claim + 3 reasons), verbose (full Dunford / Moore positioning). Pick the size that matches your audience attention."
5
- problem: "PR bodies and ticket bodies open with solution-framing. The reader has no reason to care."
6
- value: "One line that names claim plus sharpener. Three sizes \u2014 tweet and brief and verbose."
7
- inputs: [A ticket ref or doc path or scope description, Optional size — tweet or brief or verbose]
8
- outputs: [Claim plus sharpener at chosen size, Ready to paste as opener]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- sizes: [tweet, brief, verbose]
12
- ---
13
-
14
- # /value-prop
15
-
16
- ## What you get
17
-
18
- A value proposition for a ticket, iteration goal, feature, or product concept. Three sizes along a single axis — how much scaffolding around the claim? `tweet` gives you a claim plus one sharpener in ≤280 chars for status updates and Slack. `brief` (default) gives you a ≤180-char claim plus 3 evidence-backed Reasons to Believe plus sources — deck-ready. `verbose` gives you the full Dunford 5-part sales pitch plus Moore positioning — long-form material for landing pages and pitches.
19
-
20
- ## When to use it
21
-
22
- Any time you need to state the value of a ticket or feature at a specific size. Pick the size by audience attention:
23
-
24
- | Context | Mode |
25
- |---|---|
26
- | Status update / Slack message / quick social share | `tweet` |
27
- | Deck, landing page, internal framing doc, pitch prep | `brief` (default) |
28
- | Technical ticket (internal audience) | `brief` — framed for engineering value (e.g., "reduces deploy time by 40%" is proof) |
29
- | External launch / long-form pitch / website hero + supporting | `verbose` |
30
-
31
- Skip for conversational asides or when the value is self-evident from context.
32
-
33
- ## Grace window on flash mode
34
-
35
- The `flash` mode (≤180 chars claim only) retired 2026-07-17 per ADR-040 Decision 3. Sessions from before the retirement still work — the compat layer through 2026-10-31 accepts `/value-prop flash` and returns a tweet-mode output with a note. New sessions use `tweet` for the compressed claim.
36
-
37
- ## FAQ
38
-
39
- ### Why did flash retire?
40
-
41
- Per Toulmin, flash carried only the claim and failed the minimum argument shape (claim + evidence + warrant). Per Ousterhout, flash was a shallow interface with no hidden work. Per Beck, the minimum planning artifact is goal + steps + done-markers — not a fragment. The compression discipline (short opening line) folded into the tweet mode's sharpener clause.
42
-
43
- ADR-040 Decision 3 pins the retirement. The `/state-a-problem brief` skill covers the Problem-side of what flash used to do at planning surfaces; `tweet` mode covers the Value-side.
44
-
45
- ### What's the difference between tweet and brief?
46
-
47
- `tweet` is one glance — a claim in ≤280 chars, optionally followed by one sharpening clause (who it's for, what it replaces, or one credibility signal). No Reasons to Believe.
48
-
49
- `brief` is deck-ready — a ≤180-char claim plus 3 evidence-backed Reasons to Believe plus sources. Use tweet when the operator just needs orientation; use brief when someone will ask "why should I believe this?" and you want the answer on the same page.
50
-
51
- ### What sources back the templates?
52
-
53
- Two industry-standard B2B product marketing sources — Geoffrey Moore (positioning statement template from *Crossing the Chasm* 1991) and April Dunford (5-part sales pitch framework from *Sales Pitch* 2023 and *Obviously Awesome* 2019). All three modes use Moore positioning compressed differently. Brief adds 3 Dunford proofs. Verbose gives you the full 5-part Dunford + Moore positioning as one section.
54
-
55
- ### What are Reasons to Believe?
56
-
57
- Evidence-backed claims — not aspirational. "Faster than X" is assertion; "7x faster in benchmark Y" is proof. Each RTB is independent — you should be able to remove any one and still have a defensible pitch. Aim for exactly 3 (pattern recognition needs three points; deck space is expensive).
58
-
59
- ### What if the artifact is thin?
60
-
61
- Ask for the missing signals rather than inventing them. Fabricated value props fail silently — they look plausible but don't survive customer contact.
62
-
63
- ## Details below the fold
64
-
65
- ### Usage
66
-
67
- ```
68
- /value-prop → brief mode (default), use current iteration goal
69
- /value-prop [ticket-ref] → brief, from specific ticket
70
- /value-prop brief → same as default
71
- /value-prop tweet → claim + sharpener, ≤280 chars
72
- /value-prop tweet [ticket-ref] → tweet for a specific ticket
73
- /value-prop verbose → verbose mode
74
- /value-prop verbose [ticket-ref]
75
- ```
76
-
77
- Ticket references accepted:
78
-
79
- - GitHub issue: `#NNN` or `owner/repo#NNN`
80
- - File path: `docs/iteration-bets/YYYY-MM-DD-slug.md`
81
- - Spec path: `docs/specs/NNN-feature.md`
82
- - Canvas path: `docs/strategy/canvases/YYYY-MM-DD-slug.md`
83
- - Freeform: `/value-prop for [description]`
84
-
85
- ### Procedure
86
-
87
- **Step 1 — Extract signals from the ticket.**
88
-
89
- | Signal | Where to find |
90
- |---|---|
91
- | **Target user** | Canvas personas, spec actors, iteration goal user field |
92
- | **Problem** | Ticket "What" section, canvas Thesis, iteration goal "risk being retired" |
93
- | **Current alternatives** | Canvas "alternatives considered," spec "out of scope," or inferred |
94
- | **Key benefit** | Iteration goal "business value being proven," spec "success criteria" |
95
- | **Differentiator** | What makes THIS approach different (technical, UX, timing, cost) |
96
- | **Evidence available** | Quantified outcomes, prior proof points, pilot results |
97
-
98
- **Step 2 — Draft tweet mode.**
99
-
100
- Structure — 1-2 sentences, ≤280 chars total. Claim plus optional sharpening clause (who it's for, what it replaces, or one credibility signal).
101
-
102
- Rules:
103
-
104
- - ≤280 chars total, no exceptions
105
- - Sharpening clause is optional. If the claim already lands short, don't pad
106
- - If you add a clause, pick exactly one — not a list
107
- - No Reasons to Believe — this is a handoff, not a pitch
108
- - Reads as one thought
109
-
110
- Purpose — one-glance share-ready (Slack, quick social post, status update).
111
-
112
- **Step 3 — Draft brief mode (default).**
113
-
114
- Structure:
115
-
116
- ```markdown
117
- ## Value proposition
118
- [≤180 characters. Moore-compressed — target + benefit + differentiator in one sentence. Scannable. Deck-ready.]
119
-
120
- ## Reasons to Believe
121
- 1. **[claim]** — [evidence: quantified outcome, proof point, prior result]
122
- 2. **[claim]** — [evidence]
123
- 3. **[claim]** — [evidence]
124
-
125
- ## Sources
126
- - Positioning: Geoffrey Moore, *Crossing the Chasm* (1991)
127
- - Proof structure: April Dunford, *Sales Pitch* (2023)
128
- ```
129
-
130
- Rules:
131
-
132
- - Value prop ≤180 chars. If it does not fit, the positioning is not tight enough. Iterate.
133
- - RTBs are evidence-backed, not aspirational
134
- - Each RTB is independent
135
- - 3 RTBs — not 2 (pattern recognition needs three points), not 5 (cut to the three strongest)
136
- - No jargon in value prop — user vocabulary, not internal domain terms
137
-
138
- **Step 4 — Draft verbose mode.**
139
-
140
- Structure (Dunford 5-part + Moore positioning):
141
-
142
- ```markdown
143
- ## Positioning statement (Moore)
144
-
145
- For [target customer]
146
- Who [statement of need or opportunity]
147
- The [product name] is a [product category]
148
- That [statement of key benefit].
149
- Unlike [primary alternative], our product [differentiation].
150
-
151
- ## Sales pitch (Dunford 5-part)
152
-
153
- ### 1. Insight
154
- [The market/customer shift everyone is wrestling with. The thing changing that makes current alternatives inadequate.]
155
-
156
- ### 2. Alternatives + trade-offs
157
- [What is on the table today. For each alternative, the inherent trade-off that creates the opening.]
158
- - Alternative A — trade-off
159
- - Alternative B — trade-off
160
- - Status quo / DIY — trade-off
161
-
162
- ### 3. Perfect world
163
- [What an ideal solution would do. Do not pitch the product yet — articulate the goal the buyer would endorse.]
164
-
165
- ### 4. Introduction
166
- [Our product, cast as the perfect-world solution. Brief.]
167
-
168
- ### 5. Proof (Reasons to Believe)
169
- [Each claim evidence-backed. More than 3 acceptable in verbose mode. Target 5-7.]
170
- 1. **[claim]** — [evidence]
171
- 2. **[claim]** — [evidence]
172
- ...
173
-
174
- ## Sources
175
- - Moore positioning: *Crossing the Chasm* (1991), *Inside the Tornado*
176
- - Dunford framework: *Obviously Awesome* (2019), *Sales Pitch* (2023)
177
- ```
178
-
179
- **Step 5 — Output.**
180
-
181
- If invoked within an iteration goal, consider appending to the goal doc under `## Value proposition` after Scope. If standalone, output to conversation only. Do not overwrite existing sections.
182
-
183
- ### Common pitfalls
184
-
185
- - **Aspirational RTBs** — "We'll be the best at X" is not a reason to believe. Past performance, benchmarks, or testimonial beats promise.
186
- - **Feature-list masquerading as value** — "Has integration with X, Y, Z" is features, not value. Value is the outcome the integration enables.
187
- - **Target too broad** — "Every team" is not a target. "PE operators managing 50+ active deals" is a target.
188
- - **180 becomes 220** — if you are over, cut. Do not let scope creep the character limit.
189
- - **Proof by asserting proof** — "Proven to work" is not evidence. Evidence names a number, a prior customer, or a controlled study.
190
-
191
- ### Example — tweet mode
192
-
193
- For `/personas` bassclef skill:
194
-
195
- ```
196
- One shared format for describing who your users are — so every tool that reasons about them speaks the same language. Replaces the ad-hoc per-project persona shapes most teams reinvent.
197
- ```
198
-
199
- (187 characters)
200
-
201
- For `/value-prop-canvas` bassclef skill:
202
-
203
- ```
204
- A diagnostic for your value prop — checks that every benefit you promise actually addresses a pain your user has named. Catches "features looking for problems" before they hit your roadmap.
205
- ```
206
-
207
- (191 characters)
208
-
209
- One sharpener added to the claim — for /personas it is what-it-replaces; for /value-prop-canvas it is the credibility signal. Not a list, just one sharpener.
210
-
211
- ### Example — brief mode
212
-
213
- For an iteration goal about `/decompose`:
214
-
215
- ```markdown
216
- ## Value proposition
217
- For engineering leaders building with AI agents, /decompose prevents cross-cutting concerns being bolted into implementations instead of resolved as proper abstractions — unlike ad-hoc code review.
218
-
219
- ## Reasons to Believe
220
- 1. **Catches the class of error that cost 6 CI failures in one POA session** — Langfuse-inside-implementation pattern recurred until /decompose Phase 2 NFR check codified the decorator as the answer.
221
- 2. **Produces concrete interfaces as output, not principle citations** — Responsibility matrix names the interface; Builder gets drop-in schema instead of GRASP theory.
222
- 3. **Works regardless of starting artifact** — canvas, epic, defect, or bug all produce a decomposition (Entry Point states landed 2026-04-12b).
223
-
224
- ## Sources
225
- - Positioning: Moore, *Crossing the Chasm*
226
- - Proof structure: Dunford, *Sales Pitch*
227
- ```
228
-
229
- ### Composes with
230
-
231
- | Skill | Relationship |
232
- |---|---|
233
- | `/state-a-problem` | Problem-side pair; sits alongside `/value-prop` in the three-block opener discipline |
234
- | `/canvas` | Canvas Thesis stage feeds value prop input |
235
- | `/spec` | Spec success criteria maps to RTB evidence |
236
- | `/journal` | Journal entries often open with value prop compression |
237
- | `/feynman` | Value prop is adjacent to plain-English explanation but has specific structure |
238
- | Amazon PR/FAQ | Long-form cousin; `/value-prop` is the compressed version |
239
-
240
- ### Refs
241
-
242
- - `.claude/rules/assert-only-after-verify.md` — a value prop is a claim that needs data + warrant per Toulmin's argument model. The brief and verbose modes ship Reasons to Believe cells that ARE Toulmin's data + warrant.
243
- - `.claude/luminaries/stephen-toulmin.md` — anchor luminary for the argument shape
244
- - `standards/opener-discipline.md` — the three-block opener that pairs `/value-prop tweet` with `/state-a-problem brief`
245
- - ADR-040 Decision 3 — flash mode retirement rationale
246
- - Bet 2026-07-18c — this rewrite (Step 5 flash retirement + template application)
247
- - bassclef#204 — original flash + tweet mode addition (2026-04-19, retired 2026-07-17)
248
-
249
- ## Output discipline
250
-
251
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.