@thebassclef/lite 1.0.3 → 1.1.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 (275) hide show
  1. package/dist/cli.cjs +92 -6
  2. package/dist/cli.js +92 -6
  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/.claude/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +1 -1
@@ -0,0 +1,384 @@
1
+ ---
2
+ tier: lite
3
+ name: stage
4
+ description: "Turn an idea into clickable mock variants on a deployed subdomain. Two sizes: quick (~30 min, 2 variants) and light (~2h, 3 variants plus an Anthropic baseline). Operator picks a direction from phone before committing to build work."
5
+ problem: "A UI idea needs to be seen before it can be judged. Prose and wireframes lose the story."
6
+ value: "Turns an idea into clickable mocks on a deployed subdomain. Operator taps through and picks."
7
+ inputs: [A UI intent or design goal, Optional size — quick or light]
8
+ outputs: [Deployed mock at a subdomain URL, Multiple variants to compare]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ sizes: [quick, light]
12
+ ---
13
+
14
+ # /stage (formerly /preview) — Prototype-Tier Workflow (Inception/Elaboration)
15
+
16
+ End-to-end workflow for **prototype tiers** (quick + light). Takes
17
+ operator input (text in Phase B; URL / image / repo / transcript /
18
+ napkin in Phase C) and produces a PR containing deployed prototype
19
+ variants + clickable comparison gallery (with back-navigation from
20
+ each variant) + bind-subdomain wiring.
21
+
22
+ After this skill + dependencies ship + merge, operator can dispatch
23
+ a paragraph from phone to any consumer repo and
24
+ `/stage quick "<paragraph>"` runs the chain end-to-end.
25
+
26
+ **For Construction-input tiers (medium / full)**, use
27
+ `.claude/skills/launch/SKILL.md`. The boundary is operator
28
+ intent: `/stage` = "still picking direction"; `/launch` =
29
+ "committing to ship this".
30
+
31
+ ## Phase boundary
32
+
33
+ | Axis | `/stage` (this skill) | `/launch` (sibling) |
34
+ |------|------------------------|---------------------------|
35
+ | Phase | Inception / Elaboration | Construction transition |
36
+ | Operator intent | "Pick a direction" | "Ship the chosen direction" |
37
+ | Data substrate | Stubbed / hardcoded | Stubbed (variants) → real (post-build) |
38
+ | Output | Variants for visual selection | Spec + GRASP + ux-migration + iteration-goal draft |
39
+ | Cameo review | /visual-review with complement evaluators | Same + spec/decomp review |
40
+ | Commitment level | None — variants are throwaway | Operator decides next: scaffold Construction or pivot |
41
+
42
+ Quick + light produce visual artifacts only. Medium + full cross the
43
+ prototype/production boundary by producing buildable specs (in
44
+ `/launch`).
45
+
46
+ ## When to invoke
47
+
48
+ - Operator dispatches new UX rework intent: `/stage quick "<paragraph>"`
49
+ - Bake-off against existing surface: `/stage quick "<paragraph>" base=<existing-slug>`
50
+ - Multi-variant exploration: `/stage quick "<paragraph>" variants=3`
51
+ - Medium tier (Phase D follow-up): `/stage medium "<input>"` returns
52
+ "deferred to Phase D" stub in this MVP
53
+
54
+ ## What this skill is NOT
55
+
56
+ | Skill | Altitude | Output |
57
+ |-------|----------|--------|
58
+ | `/stage` | **Pipeline** | PR with full chain output |
59
+ | `/interpret-input` | Input normalization | InputArtifact (one step of preview) |
60
+ | `/objectory-decompose` | Jacobson analysis | Decomposition (one step of preview) |
61
+ | `/riff-prototypes` | Variant generation | Variants in docs/prototypes/ (one step) |
62
+ | `/prototype-gallery` | Variant index page | Gallery scaffolding (one step) |
63
+ | `/bind-subdomain` | Amplify deployment | Subdomain DNS + cert (one step) |
64
+
65
+ `/stage` orchestrates these — it does NOT replace any of them. Each
66
+ step's skill remains independently invocable for debugging or
67
+ out-of-band work.
68
+
69
+ ## Hard constraints (per goal rules)
70
+
71
+ - **MUST produce a PR**, never push directly to main (per
72
+ `.claude/rules/branching.md` + `.claude/rules/pr-strategy.md`)
73
+ - **MUST run on a feature branch** — refuses to run from main
74
+ - **MUST capture champion-challenger signal** in `preview-state.yml`
75
+ (`selected_variant` + `is_baseline` per step-11b)
76
+ - **MUST tolerate stub-mode InputArtifacts** (Phase B is text-strict;
77
+ other types produce `extracted_text="deferred to Phase C"`)
78
+ - **MUST NOT touch app-repo files outside the chain's expected paths**
79
+ (`docs/input-artifacts/`, `docs/decompositions/`, `docs/prototypes/`,
80
+ `docs/preview-state/`, plus consumer's gallery scaffolding paths
81
+ per `/prototype-gallery`)
82
+
83
+ ## Procedure
84
+
85
+ ### Phase 0 — Pre-flight
86
+
87
+ ```bash
88
+ # Verify on feature branch (fail fast on main)
89
+ CURRENT=$(git branch --show-current)
90
+ case "$CURRENT" in
91
+ main|master)
92
+ echo "preview: refuses to run on $CURRENT — create a feature branch first" >&2
93
+ exit 2
94
+ ;;
95
+ esac
96
+
97
+ # Verify accessor library available
98
+ [ -f lib/state.sh ] || { echo "preview: lib/state.sh not found; spine v0 not installed" >&2; exit 4; }
99
+ source lib/state.sh
100
+
101
+ # Validate args: <tier> "<input>" [variants=N] [base=<slug>]
102
+ TIER="$1"; INPUT="$2"; shift 2
103
+ case "$TIER" in
104
+ quick) ;;
105
+ medium) echo "preview: medium tier returns stub (Phase D deferred); proceeding with stub output" >&2 ;;
106
+ *) echo "preview: unknown tier '$TIER' (must be: quick|medium)" >&2; exit 2 ;;
107
+ esac
108
+ [ -z "$INPUT" ] && { echo "preview: input required" >&2; exit 2; }
109
+ ```
110
+
111
+ Parse remaining args:
112
+ - `variants=N` (default 2-3 per `/riff-prototypes` ceiling; max 4 luminary + 1 baseline = 5)
113
+ - `base=<slug>` (optional — re-bake on existing prototype slug)
114
+
115
+ ### Phase 1 — `/interpret-input`
116
+
117
+ ```bash
118
+ SPRINT_SLUG="$(date -u +%Y-%m-%d)-preview-$(echo "$INPUT" | md5 -q 2>/dev/null | cut -c1-6 \
119
+ || echo "$INPUT" | md5sum 2>/dev/null | cut -c1-6)"
120
+
121
+ INPUT_ARTIFACT_PATH=$(bash scripts/interpret-input.sh "$INPUT" --persist --slug="${SPRINT_SLUG}-input")
122
+ # State-validate.sh hook validates schema at write; failure → BLOCKED
123
+ ```
124
+
125
+ Output: `docs/input-artifacts/<slug>-input.json`
126
+
127
+ If the artifact is stub-mode (auto-detected as url/image/repo/transcript/
128
+ napkin), surface a warning that downstream extraction will be empty
129
+ but proceed — the chain validates the interface even without real
130
+ extraction.
131
+
132
+ ### Phase 2 — `/objectory-decompose`
133
+
134
+ The agent invokes the skill via Skill tool with:
135
+
136
+ ```
137
+ /objectory-decompose ${SPRINT_SLUG}-input
138
+ ```
139
+
140
+ (Skill reads InputArtifact, applies Jacobson method, writes
141
+ `docs/decompositions/${SPRINT_SLUG}-input-domain.md`)
142
+
143
+ If extraction is empty (stub-mode upstream), surface to operator
144
+ that variant generation will be working from minimal domain context.
145
+
146
+ ### Phase 3 — `/value-prop`
147
+
148
+ The agent invokes:
149
+
150
+ ```
151
+ /value-prop --brief "<extracted_text from InputArtifact>"
152
+ ```
153
+
154
+ Captures a brief value-prop (claim + 3 RTBs) for the prototype-variants
155
+ step to consume.
156
+
157
+ In Phase B MVP, value-prop output goes inline into the PR body (does
158
+ not persist to disk — `/value-prop` outputs are typically ephemeral).
159
+
160
+ ### Phase 3.5 — `/pick-luminaries` (in-turn picker for variant grounding)
161
+
162
+ Runs inside the current turn. Picks N luminaries whose lens fits the intent. No separate LLM call. No provider key required. Per web#193 Option A rewrite. Sibling adopters can override the picker with their own `/extract-intent`.
163
+
164
+ ```bash
165
+ source "${BASSCLEF_DIR:-$HOME/src/sunj-labs/bassclef}/lib/luminary-pick.sh"
166
+ CATALOG=$(luminary_pick_catalog)
167
+ ```
168
+
169
+ Now Claude (in-turn) reads `$intent_text`, enumerates `$CATALOG`, picks `${VARIANTS:-3}` slugs whose lens fits. Writes JSON to `/tmp/luminary-pick.json`:
170
+
171
+ ```json
172
+ {
173
+ "matched_luminaries": ["slug1", "slug2", "slug3"],
174
+ "rationale": "One short sentence per pick",
175
+ "picker_version": "bassclef-harness-pick-2.0",
176
+ "provider": "claude-code-harness"
177
+ }
178
+ ```
179
+
180
+ If the catalog helper fails (missing catalog dir), Phase 4 falls back to `/luminary recommend` signal scoring.
181
+
182
+ ### Phase 4 — `/riff-prototypes` (with WU-11b Anthropic baseline)
183
+
184
+ The agent invokes:
185
+
186
+ ```
187
+ /riff-prototypes
188
+ scope: "${INPUT}"
189
+ decomposition: docs/decompositions/${SPRINT_SLUG}-input-domain.md
190
+ value_prop: "<step 3 output>"
191
+ grounding: /tmp/luminary-pick.json # from Phase 3.5; matched luminaries drive variants
192
+ variants: ${VARIANTS:-3} # luminary-driven count
193
+ base: "${BASE:-}" # optional re-bake target
194
+ ```
195
+
196
+ Per WU-11b, `/riff-prototypes` ALWAYS emits N luminary-driven
197
+ variants + 1 Anthropic `/frontend-design` baseline. Output:
198
+ `docs/prototypes/${SPRINT_SLUG}/variant-*/` (N+1 directories).
199
+
200
+ ### Phase 5 — `/prototype-gallery`
201
+
202
+ The agent invokes:
203
+
204
+ ```
205
+ /prototype-gallery
206
+ ```
207
+
208
+ (Scaffolds gallery index page with all variants. Per WU-11b, the
209
+ gallery flags the `variant-baseline-anthropic/` directory visibly.)
210
+
211
+ ### Phase 6 — `/bind-subdomain` per variant
212
+
213
+ For each variant, the agent dispatches:
214
+
215
+ ```
216
+ /bind-subdomain
217
+ product_slug: ${SPRINT_SLUG}-${VARIANT_NAME}
218
+ ```
219
+
220
+ If `/bind-subdomain` fails (e.g., consumer's `substrate.config.md`
221
+ lacks `deploy_targets` / `amplify.yml` not configured), surface the
222
+ failures BUT proceed — bind-subdomain is best-effort in Phase B; the
223
+ PR still ships with prototype HTML and gallery for local review.
224
+
225
+ ### Phase 7 — Persist preview-state.yml
226
+
227
+ ```yaml
228
+ # docs/preview-state/${SPRINT_SLUG}.yml
229
+ slug: ${SPRINT_SLUG}
230
+ input_artifact: ${SPRINT_SLUG}-input
231
+ decomposition: ${SPRINT_SLUG}-input-domain
232
+ status: variants-ready # operator picks; status moves to "selected" / "rejected"
233
+ current_tier: quick
234
+ luminaries_used: [<list from /riff-prototypes output>]
235
+ current_variants:
236
+ - name: variant-a-<luminary>
237
+ is_baseline: false
238
+ bind_subdomain_url: <if successful>
239
+ - name: variant-b-<luminary>
240
+ is_baseline: false
241
+ bind_subdomain_url: <if successful>
242
+ - name: variant-baseline-anthropic
243
+ is_baseline: true
244
+ bind_subdomain_url: <if successful>
245
+ selected_variant: null # operator fills post-review
246
+ created_at: <ISO timestamp>
247
+ created_by_session: <session-id>
248
+ ```
249
+
250
+ State-validate.sh validates against `preview-state.schema.json` (v0
251
+ catalog). Champion-challenger signal lives in `current_variants[*]
252
+ .is_baseline` + `selected_variant` (when operator picks).
253
+
254
+ ### Phase 8 — Open PR
255
+
256
+ ```bash
257
+ git add docs/input-artifacts/${SPRINT_SLUG}-input.json \
258
+ docs/decompositions/${SPRINT_SLUG}-input-domain.md \
259
+ docs/prototypes/${SPRINT_SLUG}/ \
260
+ docs/preview-state/${SPRINT_SLUG}.yml \
261
+ public/prototypes/${SPRINT_SLUG}/ \
262
+ src/app/page.tsx # if gallery scaffold updated
263
+
264
+ git commit -m "feat(preview): /stage quick — ${SPRINT_SLUG}
265
+
266
+ InputArtifact: docs/input-artifacts/${SPRINT_SLUG}-input.json
267
+ Decomposition: docs/decompositions/${SPRINT_SLUG}-input-domain.md
268
+ Variants: N+1 (N luminary-driven + 1 Anthropic baseline per step-11b)
269
+ Gallery: <route>
270
+ Bind-subdomain: <success/failure summary>"
271
+
272
+ git push -u origin <branch>
273
+
274
+ gh pr create --title "/stage ${TIER}: ${SPRINT_SLUG}" --body "<body summarizing chain output + variant URLs + champion-challenger>"
275
+ ```
276
+
277
+ PR body must follow `.claude/rules/pr-body-shape.md` — Flash + Tweet + `## Goal` first section. Then include:
278
+ - Variant URLs (one per variant, including baseline)
279
+ - Bind-subdomain status per variant
280
+ - Pointer to `docs/preview-state/${SPRINT_SLUG}.yml`
281
+ - Operator's next action: "Review variants. Pick winner. Update
282
+ `selected_variant` in preview-state.yml. Merge PR."
283
+
284
+ ## Tier behavior (PROTOTYPE-only — see /launch (formerly /preview-build) for build tiers)
285
+
286
+ | Tier | Phase B MVP | Status |
287
+ |---|---|---|
288
+ | `quick` | ✅ Full chain (Phases 1-8). 2 variants + Anthropic baseline. ~30 min wall time. Mobile-dispatchable. | shipped |
289
+ | `light` | ✅ Full chain + carry-forward ledger if `base=<slug>` provided. 3 variants + Anthropic baseline. ~2h wall time. Adds `/personas` (operator default OK), `/jtbd-tasks` (top jobs only), `/user-stories` (3-5). | shipped (Phase 4 dispatch fans out to multi-skill chain when `--tier=light`) |
290
+ | `medium` | ❌ Refused — use `/launch medium` instead. Construction-input tier; produces buildable spec + GRASP + ux-migration. | redirected |
291
+ | `full` | ❌ Refused — use `/launch full` instead. Audit-grade tier; same as medium + per-persona analysis + /synthetic-user. | redirected |
292
+
293
+ When operator dispatches `/stage medium "..."` or `/stage full "..."`, this skill:
294
+ 1. Surfaces a clear error: "medium/full tiers ship buildable specs, not just visual variants — use `/launch <tier> '<input>'` instead. See the phase-boundary section above for the prototype/production boundary."
295
+ 2. Exits without dispatching the chain.
296
+
297
+ Operator who wants medium/full's deeper analysis but ALSO wants a shorter exploratory pass first runs `/stage light` first (3 variants), picks a winner, then runs `/launch medium "..." base=<winner-slug>` for the buildable spec.
298
+
299
+ ## Failure modes (Phase B MVP scope)
300
+
301
+ | Failure | Behavior |
302
+ |---|---|
303
+ | Stub-mode InputArtifact | Proceed; warn that downstream extraction is minimal |
304
+ | `/objectory-decompose` produces empty inventory | Proceed; warn that variants will lack domain language |
305
+ | `/bind-subdomain` fails (no amplify.yml in consumer) | Proceed; PR ships without deployed URLs; operator handles Amplify wiring out-of-band |
306
+ | `/prototype-gallery` fails (consumer not Next.js) | Proceed; surface gallery error in PR body; variants still committed |
307
+ | state-validate.sh BLOCKs any write | Hard fail; surface BLOCK to operator; do not commit partial chain |
308
+ | On main branch | Refuse with exit 2 (per branching.md) |
309
+ | Empty input | Refuse with exit 2 |
310
+
311
+ ## Rules
312
+
313
+ - **PR-first, always** — per `.claude/rules/branching.md` and
314
+ `.claude/rules/pr-strategy.md`. Never push directly to main.
315
+ - **All state writes through accessor** — preview-state.yml writes
316
+ use `state_preview_state_set` (or equivalent); state-validate.sh
317
+ hook gates schema conformance
318
+ - **Stub-mode gracefully proceeds** — Phase B is text-strict; other
319
+ input modes don't break the chain, they produce stubs that
320
+ downstream consumers handle
321
+ - **Champion-challenger captured** — `is_baseline` flag preserved
322
+ through to preview-state.yml; future runs can audit ratio
323
+ - **Best-effort bind-subdomain** — failures don't fail the chain;
324
+ operator wires Amplify config in consumer repo separately
325
+
326
+ ## Skipping / Aborting
327
+
328
+ - Operator interrupts mid-chain: agent commits whatever's complete +
329
+ surfaces "preview interrupted at Phase N" in the partial PR body
330
+ - Hard ceiling hit (per `guardrails.md`): pause + surface to operator
331
+ - Schema validation block: stop chain; do not commit
332
+
333
+ ## Reserved-names check
334
+
335
+ `preview` is NOT on `standards/reserved-skill-names.md` list. Verified
336
+ during WU-9 goal shape and at branch creation time.
337
+
338
+ ## Relationship to other skills + standards
339
+
340
+ - `standards/input-handler-interface.md` — InputArtifact contract
341
+ (Phase 1 dispatch)
342
+ - `.claude/skills/interpret-input/SKILL.md` — Phase 1 producer
343
+ - `.claude/skills/objectory-decompose/SKILL.md` — Phase 2 consumer
344
+ - `.claude/skills/value-prop/SKILL.md` — Phase 3 producer
345
+ - `.claude/skills/prototype-variants/SKILL.md` — Phase 4 (with WU-11b
346
+ baseline)
347
+ - `.claude/skills/prototype-gallery/SKILL.md` — Phase 5
348
+ - `.claude/skills/bind-subdomain/SKILL.md` — Phase 6
349
+ - `standards/state-spine/schemas/preview-state.schema.json` — Phase 7 schema
350
+ - `.claude/rules/branching.md` + `.claude/rules/pr-strategy.md` — Phase 8 PR discipline
351
+ - `docs/iteration-bets/<goal-slug>.md` —
352
+ parent goal defining the full pipeline ambition (this MVP ships subset)
353
+
354
+ ## What this skill enables (post-merge)
355
+
356
+ After this skill + dependencies ship + merge:
357
+
358
+ 1. Operator dispatches a paragraph from phone:
359
+ ```
360
+ cd ~/src/your-org/your-app
361
+ /stage quick "Dramatically simplify and delightfully surface deals..."
362
+ ```
363
+ 2. Chain runs end-to-end (~5 min wall time on quick tier)
364
+ 3. PR opens with InputArtifact + decomposition + N+1 variants + gallery
365
+ 4. Operator reviews PR (mobile-friendly via GitHub mobile app)
366
+ 5. Operator picks winner; updates `selected_variant` in preview-state.yml
367
+ 6. Operator merges PR; CI deploys variants to Amplify (if consumer has wiring)
368
+ 7. Operator decides: ship winner via `/ux-migration` (Phase D follow-up)
369
+ OR re-bake with different variants
370
+
371
+ This is the mobile-dispatchable SDLC the parent goal was shaped for.
372
+ Phase B MVP ships the dispatch path; Phase D ships the migration path
373
+ to Construction.
374
+
375
+ ## Enforcement
376
+
377
+ Methodology-level. State-validate.sh hook enforces preview-state.yml
378
+ schema. PR-first discipline enforced via branching.md rule + pre-build-gate
379
+ hook. Reserved-names check passes. No additional hook enforcement
380
+ added by this skill.
381
+
382
+ ## Output discipline
383
+
384
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,185 @@
1
+ ---
2
+ tier: lite
3
+ name: state-a-problem
4
+ description: "Draft a problem statement for a PR, issue, canvas, or spec. Two sizes: brief (\u2264500 chars, opener, framework implicit) and para (\u22641200 chars, 5-block Who/What/When/Why-now/Outcome template). Runs /kiss --grade8 inline by default."
5
+ problem: "PR bodies and issue bodies open with framing that hides the user pain. Readers scroll past."
6
+ value: "One statement that leads with who hurts and what breaks and why fix it now. Ready to paste."
7
+ inputs: [A ticket ref or doc path or scope description, Optional size — brief or para]
8
+ outputs: [A problem statement that leads with user pain]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ sizes: [brief, para]
12
+ composes_with: [kiss, value-prop]
13
+ ---
14
+
15
+ # /state-a-problem
16
+
17
+ ## What you get
18
+
19
+ A problem statement that leads with user pain. Two sizes.
20
+
21
+ `brief` fits a PR or issue opener. Cap 500 chars. 3-4 sentences carry the 5W framework — Who, What, When, Why now, Outcome. Labels stay implicit.
22
+
23
+ `para` fits a canvas Thesis or spec Problem section. Cap 1200 chars. 5 blocks name each W.
24
+
25
+ Output runs through `/kiss --grade8` inline by default. The statement lands in plain English ready to paste.
26
+
27
+ ## When to use it
28
+
29
+ Use this when opening a doc a reader will scan for "why does this exist?" — a PR body, an issue body, a canvas Thesis, a spec Problem section, an ADR Context section. Pair with `/value-prop` when both problem and value belong at the opener.
30
+
31
+ Skip it for one-line status updates. Skip it for chat asides. The 5W framework earns its cost on scan surfaces.
32
+
33
+ ## FAQ
34
+
35
+ ### What's the difference between brief and para?
36
+
37
+ `brief` (default) drafts 3-4 sentences in ≤500 chars. The framework labels stay implicit. Sentence structure carries the Who / What / When / Why now / Outcome without spelling them out. Use it for PR and issue openers where scan speed matters.
38
+
39
+ `para` drafts the same content as 5 labeled blocks in ≤1200 chars. Use it for a canvas Thesis or spec Problem section. Named blocks help readers find each W.
40
+
41
+ ### What does the 5W framework cover?
42
+
43
+ - **Who** — the user role that hits the pain. Agent, operator, adopter, end user, future reader. Specific — not "everyone."
44
+ - **What** — the pain or gap. Stated with verbs. Concrete — not "the experience is poor."
45
+ - **When** — the trigger. "On every commit." "When authoring a PR body." "After the third tab open."
46
+ - **Why now** — the insight that makes this iteration the right time. A new signal, a fresh incident, a downstream block.
47
+ - **Outcome we want** — the observable change once the work ships. Not the fix — the result.
48
+
49
+ If "why now" is "it has always been this way" — surface to the operator. The problem may not be urgent.
50
+
51
+ ### Why /kiss runs inline by default?
52
+
53
+ We use what we ship. A skill that drafts plain English must itself emit plain English. The default runs BLOCK plus ADVISE substitution. It reads the wordlist at `standards/bassclef-internal-jargon.md`. Use `--no-kiss` when you want to inspect the raw draft. Rare.
54
+
55
+ ### What if the draft runs over the char cap?
56
+
57
+ The skill surfaces the overage with the AS-IS draft. You decide. Condense further. Or accept the overage with a note. Trim adjectives first. Then condense the When clause. Then merge sentences.
58
+
59
+ ### How does this pair with /value-prop?
60
+
61
+ `/state-a-problem` states the pain. `/value-prop` states the solution claim. Together they open a PR body that reads pain-first, value-next, diff-after. Run them in sequence when a feature-scope PR wants both framings.
62
+
63
+ ### What are the three references behind the template?
64
+
65
+ NN/g (Nielsen Norman Group) — the 5W1H plus insight framework. UX Design Institute — the User / Problem / Outcome template that seeds the para-mode block names. OpinionX — the discovery framing that anchors "Why now" as the insight worth addressing. All three converge on the same form. The skill synthesizes them.
66
+
67
+ ## Details below the fold
68
+
69
+ ### Procedure
70
+
71
+ **Step 0 — Read the situation.**
72
+
73
+ The operator pastes the situation. Or links the ticket. Or describes it verbally. Read every artifact named. The ticket body. Prior PRs. The iteration goal. Sibling tickets. The 5W answers come from the situation. Not from imagination.
74
+
75
+ If the situation is thin ("draft a problem statement for bassclef#NNNN") — read the ticket body first.
76
+
77
+ **Step 1 — Extract the five Ws.**
78
+
79
+ Ask each block's question. Land a concrete answer. If any block reads as vague — "everyone", "the experience is poor", "it has always been this way" — pause. Surface to the operator.
80
+
81
+ **Step 2 — Draft at the requested size.**
82
+
83
+ For `brief` — compose 3-4 sentences. Aim ~400 chars. Cap 500. Order — When plus Who plus What sets the situation. Why-now grounds urgency. Outcome names the change. Labels stay implicit.
84
+
85
+ Sample form — `Today [Who] [What] when [When]. [Why now]. The change we want is [Outcome].`
86
+
87
+ For `para` — use the 5-block named template. Aim 80-200 chars per block. Cap the whole at 1200.
88
+
89
+ ```
90
+ **Who:** [1-2 sentences naming the user role]
91
+ **What:** [1-2 sentences naming the pain or gap, with verbs]
92
+ **When:** [1 sentence naming the trigger context]
93
+ **Why now:** [1-2 sentences naming the insight or new evidence]
94
+ **Outcome we want:** [1 sentence naming the measurable change]
95
+ ```
96
+
97
+ **Step 3 — Run /kiss --grade8 inline (default).**
98
+
99
+ Unless `--no-kiss` is set — pass the draft through `/kiss --grade8` substitution.
100
+
101
+ - Replaces BLOCK-tier terms per `standards/bassclef-internal-jargon.md`
102
+ - Replaces ADVISE-tier terms per the same standard
103
+ - Preserves ALLOW-tier terms (substrate, bassclef, cameo, Studio, Band, bandleader per bassclef#763)
104
+ - Preserves standard tech vocab (API, hook, schema, etc.)
105
+
106
+ **Step 4 — Verify length + return.**
107
+
108
+ Check the output fits within the requested size's char cap. If over — surface to the operator with the AS-IS draft.
109
+
110
+ Return the cleaned statement. If `--no-kiss` — return the raw draft with a one-line note.
111
+
112
+ ### Example output — brief mode
113
+
114
+ For bassclef#1178 (this skill's parent ticket):
115
+
116
+ ```
117
+ Today PR + issue body openers use Flash + Tweet — both solution-framed,
118
+ neither stating the user pain. Readers scan from "what this PR ships"
119
+ straight to the diff without seeing why the work exists. UX research
120
+ frameworks center user pain before solution; applied at PR + issue
121
+ opener, the same template gives readers a clean entry. The change we
122
+ want is one problem-grounded section per opener, drafted by a skill
123
+ that runs /kiss --grade8 inline so adopters get plain English by
124
+ default.
125
+ ```
126
+
127
+ 478 chars — fits the ≤500 cap.
128
+
129
+ ### Example output — para mode
130
+
131
+ For bassclef#1178 (same ticket, canvas Thesis size):
132
+
133
+ ```
134
+ **Who:** Agents and operators authoring PR + issue bodies, and the
135
+ readers scanning those bodies.
136
+
137
+ **What:** Today's PR + issue opener uses Flash (≤180) + Tweet (≤280) —
138
+ both solution-framed. Neither states the user pain. Readers jump from
139
+ "what this PR ships" to the diff without seeing why the work exists.
140
+
141
+ **When:** Every PR-body or issue-body draft. The skip happens at the
142
+ first scan, every time.
143
+
144
+ **Why now:** Three UX research frameworks (NN/g, UX Design Institute,
145
+ OpinionX) converge on a stable template — Who/What/When/Why-now/
146
+ Outcome — that centers user pain. The substrate already ships /kiss +
147
+ /value-prop as the discipline layer; one more skill locks in the shape.
148
+
149
+ **Outcome we want:** Every feature-scope PR + issue opens with a
150
+ problem-grounded section drafted by /state-a-problem and run through
151
+ /kiss --grade8 inline. Reader orientation costs drop; adopters get
152
+ plain English by default.
153
+ ```
154
+
155
+ ~1100 chars — fits the ≤1200 cap.
156
+
157
+ ### Composes with
158
+
159
+ - `/kiss --grade8` — runs inline by default on the skill's output
160
+ - `/value-prop` — pairs at solution framing. Problem first, value next.
161
+ - `/ticket` — this skill drafts the opener. `/ticket` drafts the INVEST story or epic that follows.
162
+ - `/spec` — `/state-a-problem para` drafts the Problem section. `/spec` drafts the rest.
163
+
164
+ ### Distinct from
165
+
166
+ - `/value-prop` — states the solution claim. Not the pain. Complements. Does not replace.
167
+ - `/feynman` — explains a concept in plain English. Different intent. Explain vs orient.
168
+ - `/kiss` — substitutes jargon line by line. Different scope. Line edit vs section draft.
169
+
170
+ ### Refs
171
+
172
+ - bassclef#906 — original PR-body contract being retired
173
+ - bassclef#484 — issue-body Flash + Tweet rule being retired
174
+ - bassclef#1178 — this skill's parent ticket
175
+ - bassclef#1181 — sister audit ticket for inline /kiss default across other skills operators read
176
+ - `.claude/rules/pr-body-shape.md` — the contract this skill's output ships into
177
+ - `.claude/rules/github-issue-flash-tweet.md` — sister rule at issue surface
178
+ - `.claude/rules/assert-only-after-verify.md` — Toulmin argument (My claim + Evidence + Why the evidence supports the claim)
179
+ - `standards/bassclef-internal-jargon.md` — wordlist `/kiss --grade8` reads from
180
+ - `standards/opener-discipline.md` — the three-block opener discipline this skill drafts the Problem block for
181
+ - NN/g, UX Design Institute, OpinionX — the three references synthesized in the template
182
+
183
+ ## Output discipline
184
+
185
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,108 @@
1
+ ---
2
+ tier: lite
3
+ name: temperance
4
+ description: "Pause and think before you code. Asks \u2014 am I building the right thing AND building it the right way? Fires before every non-trivial action."
5
+ problem: "Sessions dive into edits before the operator asks whether it's the right work or the right shape."
6
+ value: "A pause-and-think gate at every scope decision boundary. Six questions before code."
7
+ inputs: [Optional scope decision context]
8
+ outputs: [Right-thing answer, Right-way answer, Drift trigger for future watch]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Temperance
14
+
15
+ A pause before you write code. Two questions that every other governance mechanism misses.
16
+
17
+ Question one — am I building the right thing?
18
+
19
+ Question two — am I building it the right way?
20
+
21
+ ## When to invoke
22
+
23
+ - Before starting any non-trivial task.
24
+ - When you feel the urge to "just ship it."
25
+ - When the approach has more than 3 steps.
26
+ - When you are about to touch auth, middleware, data pipeline, or external services.
27
+ - When the user says "just do it" or "go fast" — that is exactly when to slow down.
28
+
29
+ ## The temperance checklist
30
+
31
+ Answer these honestly before writing code.
32
+
33
+ ### 0. Right thing check — are you building the right thing?
34
+
35
+ - Does this trace to a real need? A canvas, spec, issue, or user request.
36
+ - Can you state the business signal this proves in one sentence?
37
+ - If this ships and nobody uses it, was it still worth building?
38
+ - Are you building this because the spec says so, because the user asked, or because it feels like a good idea?
39
+ - At standard or full level — is this in the declared iteration scope? Retiring the declared risk? Proving the declared value?
40
+
41
+ If you cannot answer "why does this matter?" in one sentence, stop. The most expensive thing you can build is a well-engineered feature nobody wanted.
42
+
43
+ ### 1. Simplicity check — building it the right way
44
+
45
+ - Is this the simplest correct approach?
46
+ - Are you adding complexity to handle scenarios that may not happen?
47
+ - Could you solve this with config instead of code?
48
+ - Would a senior engineer look at this and ask "why didn't you just...?"
49
+
50
+ ### 2. Brute-force check
51
+
52
+ - Are you brute-forcing to make the user happy instead of designing properly?
53
+ - Are you trying many approaches hoping one works?
54
+ - Did you run `/diagnose` before jumping to a fix?
55
+ - Are you treating symptoms or root causes?
56
+
57
+ ### 3. Blast radius check
58
+
59
+ - What else does this change affect?
60
+ - What working parts could break?
61
+ - Have you verified the "before" state so you can confirm "after"?
62
+
63
+ ### 4. Verification check
64
+
65
+ - How will you know this works — not just that it compiles?
66
+ - What is the smallest test you can run?
67
+ - Can you verify in under 2 minutes? If not, the approach may be too complex.
68
+
69
+ ### 5. Reversibility check
70
+
71
+ - If this is wrong, how hard is it to undo?
72
+ - Are you about to do something destructive? Force push. Schema change. Delete data.
73
+ - Should you commit what you have first, before the change?
74
+
75
+ ## The decision
76
+
77
+ State these five lines after the checklist:
78
+
79
+ - **Why this matters** — one sentence naming the need this serves.
80
+ - **Approach** — what you are going to do.
81
+ - **Why this is the simplest correct approach** — one sentence.
82
+ - **What you are NOT doing** — the temptations you resist.
83
+ - **Verification plan** — how you will know it works.
84
+
85
+ Then write the gate marker. BOTH the ephemeral flag AND the durable git-tracked marker. The pre-build-gate hook accepts either. The durable marker lets the 5-session compliance counter see mobile firings that would evaporate at sandbox teardown.
86
+
87
+ ```bash
88
+ BRANCH=$(git branch --show-current)
89
+ BRANCH_SLUG=$(echo "$BRANCH" | tr '/' '-')
90
+ BRANCH_HASH=$(echo "$BRANCH" | md5 -q 2>/dev/null || echo "$BRANCH" | md5sum 2>/dev/null | cut -d' ' -f1)
91
+ SESSION_ID=${CLAUDE_SESSION_ID:-$$}
92
+
93
+ # Ephemeral flag (existing pre-build-gate contract)
94
+ touch "/tmp/claude-temperance-done-${SESSION_ID}-${BRANCH_HASH}"
95
+
96
+ # Durable git-tracked marker
97
+ mkdir -p state/markers/temperance
98
+ date -u +%Y-%m-%dT%H:%M:%SZ > "state/markers/temperance/${BRANCH_SLUG}.marker"
99
+ git add "state/markers/temperance/${BRANCH_SLUG}.marker"
100
+ ```
101
+
102
+ The durable marker commits with the branch's normal flow. `state/markers/` is git-tracked per `.claude/rules/mobile-ephemeral-session.md` section 2.
103
+
104
+ Then proceed with the work.
105
+
106
+ ## Output discipline
107
+
108
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.