@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,915 @@
1
+ ---
2
+ tier: lite
3
+ name: launch
4
+ description: "Compare variants of an idea. Ships a mock gallery with an Anthropic baseline. You pick a direction from the phone. Get the spec plus user stories. Get the decomposition plus a migration plan. Two sizes: medium and full."
5
+ problem: "An idea is a doc. A working feature is code. The gap in between is where projects stall."
6
+ value: "Turns an idea into a buildable plan \u2014 mock gallery and spec and INVEST stories. Ready for /build."
7
+ inputs: [A rough idea or ticket or canvas]
8
+ outputs: [Clickable mock gallery, Buildable spec, INVEST user stories, GRASP responsibility matrix]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ sizes: [medium, full]
12
+ composes_baseline: anthropic-frontend-design
13
+ ---
14
+
15
+ > **Baseline composition:** Bassclef's gallery + spec authoring composes on top of Anthropic's `frontend-design` skill defaults. Adopters firing plain Claude inherit those defaults; this skill extends with luminary-driven variant generation + buildable-spec pipeline + bassclef's design-discipline + operator-facing prose discipline.
16
+
17
+ # /launch (formerly /preview-build) — Build-Tier Workflow (Construction Transition)
18
+
19
+ End-to-end workflow for **build tiers** (medium + full). Takes
20
+ operator input (paragraph OR a chosen variant from `/stage`'s
21
+ output via `base=<slug>`) and produces a PR containing:
22
+
23
+ 1. **Deployed clickable gallery** of N+1 variants (luminary-driven +
24
+ Anthropic baseline), each variant page with back-nav to master
25
+ gallery — same UX continuity as `/stage`
26
+ 2. **Buildable spec** (Cockburn use-cases + IA model + interaction
27
+ design + GRASP responsibility matrix per Larman)
28
+ 3. **ux-migration plan** linking the chosen variant to the
29
+ production codebase
30
+ 4. **Scaffolded Construction iteration-goal draft** ready for operator
31
+ review + `/build-iteration` dispatch (bassclef#335 — follow-up goal)
32
+
33
+ This is the skill that takes operator intent from "I picked a
34
+ direction" to "Construction can scaffold against this spec." The
35
+ output is the input contract for `/build-iteration` (the next-stage
36
+ workflow that runs autonomous Construction).
37
+
38
+ ## ADR-consult — fire before scope confirmation (per bassclef-upstream#424)
39
+
40
+ Read every relevant ADR in `architecture/decisions/` before confirming scope. If your scope deviates from any ADR's decision or constraints, surface the deviation as the first agenda item — operator decides amend-ADR vs. revise-scope.
41
+
42
+ Per `.claude/rules/adr-discipline.md`. Mechanism: `adr-discipline-check.sh` fires on substantive architectural edits (wired in `.claude/settings.json` since bet 28a WU-1). The Tier 0 test for this step greps for the literal header `## ADR-consult — fire before scope confirmation` in each of `/build /launch /spec /decompose /shape /longrun`.
43
+
44
+ ## When to invoke
45
+
46
+ - Operator picked a variant via `/stage <quick|light>` and is ready
47
+ to ship: `/launch medium "<paragraph>" base=<chosen-variant-slug>`
48
+ - Operator dispatching directly without prototype tier (skip-the-bake-off
49
+ for known scope): `/launch medium "<paragraph>"`
50
+ - Audit-grade for high-stakes surfaces: `/launch full "..."`
51
+ - **Brownfield mode (bassclef#459 sub-goal 2)** — point at an existing
52
+ repo instead of writing a paragraph: `/launch medium --brownfield ~/src/your-org/your-app`
53
+ or `/launch medium --brownfield https://github.com/your-org/your-app`.
54
+ Phase 1 dispatches `/interpret-input --type=repo` (Phase C extractor)
55
+ which walks the codebase to populate entities, actors, routes, and
56
+ README excerpt. Downstream phases unchanged.
57
+
58
+ ## Phase boundary
59
+
60
+ | Axis | `/stage` (sibling) | `/launch` (this skill) |
61
+ |------|---------------------|------------------------------|
62
+ | Phase | Inception / Elaboration | Construction transition |
63
+ | Operator intent | "Pick a direction" | "Ship the chosen direction" |
64
+ | Data substrate | Stubbed | Stubbed (variants) → real (post-build) |
65
+ | Output type | Variants for visual selection | Variants + buildable spec + GRASP + ux-migration + iteration-goal draft |
66
+ | Cameo review | /visual-review complement evaluators | Same + spec/decomp luminary review |
67
+ | Commitment level | None — variants throwaway | Operator decides next: `/build-iteration` or pivot |
68
+ | Compose-with | None upstream | Optional: `/stage` output via `base=<slug>` |
69
+
70
+ ## What this skill is NOT
71
+
72
+ - **Not a Construction-execution skill.** This produces the spec; it
73
+ does NOT write production code. `/build-iteration` (bassclef#335)
74
+ consumes this skill's output to execute Construction.
75
+ - **Not deploy-to-prod.** The deployed gallery uses the consumer's
76
+ prototype-friendly Amplify branch (per `bind-subdomain` adapter);
77
+ the production deploy happens via `/deploy-prod` after Construction
78
+ ships.
79
+ - **Not the prototype-tier workflow.** Use `/stage` for quick + light.
80
+
81
+ ## Hard constraints (per goal rules)
82
+
83
+ - **MUST produce a PR**, never push directly to main (per
84
+ `.claude/rules/branching.md` + `.claude/rules/pr-strategy.md`)
85
+ - **MUST run on a feature branch** — refuses to run from main
86
+ - **MUST capture champion-challenger signal** in `preview-state.yml`
87
+ (`selected_variant` + `is_baseline` per step-11b)
88
+ - **MUST tolerate stub-mode InputArtifacts** (Phase B is text-strict;
89
+ other types produce `extracted_text="deferred to Phase C"`)
90
+ - **MUST surface spec + decomposition + ux-migration** in the deployed
91
+ gallery so cameos (luminary-as-perspective via /visual-review;
92
+ future luminary-as-agent per roadmap Stage 3) can review by default
93
+ - **MUST scaffold Construction iteration-goal draft** as final phase
94
+ (operator reviews; `/build-iteration` consumes)
95
+ - **MUST validate spec output** against `decomposition.schema.json` +
96
+ `iteration-goal.schema.json` — state-validate.sh enforces
97
+
98
+ ## Procedure
99
+
100
+ ### Phase -1 — Pre-flight (per bassclef#408 + bassclef#449/#450)
101
+
102
+ Source the shared pre-flight helper and surface all 6 prerequisites
103
+ upfront. Pass `--no-launch` if the dispatch is variants-only (no
104
+ `/launch-preview` chain expected); the deploy-host check (Check 6)
105
+ short-circuits to pass.
106
+
107
+ ```bash
108
+ source "${BASSCLEF_DIR:-$REPO_ROOT}/lib/composer-preflight.sh"
109
+
110
+ # Detect variants-only dispatch (--no-launch flag from operator OR
111
+ # variant-tier modes). Default is full chain (deploy-host required).
112
+ NO_LAUNCH_FLAG=""
113
+ case " $* " in
114
+ *" --no-launch "*) NO_LAUNCH_FLAG="--no-launch" ;;
115
+ esac
116
+
117
+ PREFLIGHT_OUTPUT=$(composer_preflight_check "launch" "${ESTIMATED_TURNS:-60}" "$NO_LAUNCH_FLAG")
118
+ PREFLIGHT_RC=$?
119
+ echo "$PREFLIGHT_OUTPUT" | composer_preflight_render "launch"
120
+
121
+ case $PREFLIGHT_RC in
122
+ 0) ;; # all checks pass — proceed to Phase 0
123
+ 1) # warnings — operator decides proceed/abort
124
+ echo ""
125
+ echo "Pre-flight surfaced warnings. Proceed with caution OR abort and remediate."
126
+ echo "Override (logged): SKIP_COMPOSER_PREFLIGHT=1"
127
+ ;;
128
+ 2) # failures — refuse dispatch
129
+ echo ""
130
+ echo "Pre-flight refused dispatch. Resolve fail-tier checks before re-running."
131
+ echo "Common fix: 'hosting_platform: amplify' missing from substrate.config.md? See bassclef#449."
132
+ echo "Variants-only run? Re-run with --no-launch to skip deploy-host check."
133
+ exit 1
134
+ ;;
135
+ esac
136
+ ```
137
+
138
+ Override: `SKIP_COMPOSER_PREFLIGHT=1` (logged). See
139
+ `standards/composer-prerequisites.md` for the full contract.
140
+
141
+ The 6 checks are feature-branch, state-spine, personas, budget,
142
+ skill-registry, and deploy-host. See bassclef#271, #449, #450 for
143
+ the race + hosting-platform edge cases.
144
+
145
+ `--no-launch` skips the deploy-host check for design exploration.
146
+ Default is the full chain (deploy-host required).
147
+
148
+ ### Phase 0 — Pre-flight
149
+
150
+ Same as `/stage` — verify feature branch + lib/state.sh + parse args via `scripts/launch/parse-input-args.sh`. The parser distinguishes legacy text mode from brownfield mode (bassclef#459 sub-goal 2 — LR3 WU-2):
151
+
152
+ ```bash
153
+ PARSE_OUT=$(bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/launch/parse-input-args.sh" "$@") || exit $?
154
+
155
+ TIER=$(echo "$PARSE_OUT" | jq -r .tier)
156
+ INPUT_TYPE=$(echo "$PARSE_OUT" | jq -r .input_type)
157
+ INPUT_SOURCE=$(echo "$PARSE_OUT" | jq -r .input_source)
158
+ BROWNFIELD_FLAG=$(echo "$PARSE_OUT" | jq -r .brownfield_flag)
159
+ LOCAL_MODE=$(echo "$PARSE_OUT" | jq -r '.local_mode // false')
160
+ REUSE_ARTIFACT_PATH=$(echo "$PARSE_OUT" | jq -r '.reuse_artifact_path // ""')
161
+
162
+ # Local mode announcement (bassclef#923 A2)
163
+ if [ "$LOCAL_MODE" = "true" ]; then
164
+ echo "launch: local mode — artifacts to disk + localhost gallery preview; Phase 12 skips bind-subdomain" >&2
165
+ fi
166
+
167
+ # Reuse mode announcement (bassclef-upstream#716)
168
+ if [ -n "$REUSE_ARTIFACT_PATH" ]; then
169
+ echo "launch: reuse mode — using pre-shaped InputArtifact at $REUSE_ARTIFACT_PATH; Phase 1 skips interpret-input dispatch" >&2
170
+ fi
171
+
172
+ # Tier-specific notes (parser already validated tier enum)
173
+ case "$TIER" in
174
+ full) echo "launch: full tier ships per-persona analysis + /synthetic-user; ensure /personas defined for consumer repo" >&2 ;;
175
+ esac
176
+
177
+ # Brownfield announcement
178
+ if [ "$BROWNFIELD_FLAG" = "true" ]; then
179
+ echo "launch: brownfield mode — input source is a repo (URL or local path); Phase 1 will dispatch /interpret-input --type=repo" >&2
180
+ fi
181
+ ```
182
+
183
+ **Usage forms:**
184
+
185
+ ```bash
186
+ # Legacy text mode (paragraph input)
187
+ /launch medium "Dramatically simplify deal display..."
188
+
189
+ # Local mode (bassclef#923 A2) — writes all artifacts to disk + serves
190
+ # the prototype gallery on localhost. No vendor accounts needed. Phase
191
+ # 12 (bind-subdomain) is replaced with scripts/launch/local-serve.sh.
192
+ /launch medium --local "build me a wiki app for sharing recipes with family"
193
+
194
+ # Reuse mode (bassclef-upstream#716) — reuse a pre-shaped InputArtifact
195
+ # from a prior chain instead of minting a fresh one. Phase 1 validates
196
+ # the file against input-artifact.schema.json + copies to the sprint slot
197
+ # + skips interpret-input.sh dispatch. Downstream phases run unchanged.
198
+ /launch medium --local --reuse-artifact docs/input-artifacts/2026-07-11-697-onboarding-ux.json
199
+
200
+ # Reuse mode with equals form
201
+ /launch medium --reuse-artifact=docs/input-artifacts/2026-07-11-697-onboarding-ux.json
202
+
203
+ # Brownfield mode — local repo path
204
+ /launch medium --brownfield ~/src/your-org/your-app
205
+
206
+ # Brownfield mode — GitHub URL (cloned to temp dir by /interpret-input)
207
+ /launch medium --brownfield https://github.com/your-org/your-app
208
+
209
+ # Equivalent --brownfield= form
210
+ /launch medium --brownfield=https://github.com/your-org/your-app
211
+
212
+ # Voice-input mode (Phase V Hey-Alexa MVD) — input text originated from
213
+ # voice dictation (macOS Fn-Fn or equivalent); intent extraction uses
214
+ # tolerant settings for spoken-text shape (looser grammar, lower
215
+ # confidence threshold). See standards/voice-input-pattern.md.
216
+ /launch medium --voice-input "build me a wiki app for sharing recipes with family"
217
+
218
+ # Combining flags — local + voice (e.g. friendly dictates intent on a
219
+ # laptop without vendor accounts)
220
+ /launch medium --local --voice-input "build me a wiki app for ..."
221
+ ```
222
+
223
+ **Local mode (`--local`) — bassclef#923 A2:**
224
+
225
+ `/launch --local` prints a banner first. The banner shows which picker is active:
226
+
227
+ ```
228
+ /launch --local — picker uses the LLM your Claude Code session provides.
229
+
230
+ ✓ full-catalog picking — /pick-luminaries runs against the harness LLM.
231
+ This is the default.
232
+ ✓ signal fallback — if the picker call fails, Phase 4 falls back to
233
+ /luminary recommend signal scoring.
234
+ ```
235
+
236
+ No separate API key needed. The skill uses whichever LLM the harness provides. Tier is about catalog size, not keys. See bassclef-web#190 and #193 for the reframe.
237
+
238
+ The banner ensures every adopter sees the same three-tier story
239
+ whether they hit it at the wiki, the README, the /onboard-repo Path B
240
+ prereqs, the prereqs-missing menu, the `lib/luminary-pick.sh` refusal
241
+ output, or here.
242
+
243
+ When the flag is set, the chain runs identically through Phases 1-11
244
+ (all artifacts land on disk). Phase 12 swaps deploy for a local HTTP
245
+ server:
246
+
247
+ - Phase 12-alt dispatches `bash scripts/launch/local-serve.sh
248
+ docs/prototypes/<sprint-slug>/` — wraps `python -m http.server` bound
249
+ to `127.0.0.1`, finds an open port starting at 8000
250
+ - Phase 13 (preview-state.yml) records `local_url` instead of
251
+ `bind_subdomain_url` per variant; the gallery URL is the one
252
+ surfaced to the operator
253
+ - Phase 0 pre-flight skips Amplify + Cloudflare adapter checks when
254
+ `--local` is set
255
+ - Operator stops the server later with
256
+ `bash scripts/launch/local-serve-stop.sh <sprint-slug>`
257
+
258
+ Local mode is the demo path for adopters without vendor accounts —
259
+ paragraph in, full artifact chain on disk, localhost preview.
260
+
261
+ **Voice-input mode (--voice-input):**
262
+
263
+ Per `standards/voice-input-pattern.md` + Phase V Hey-Alexa MVD goal (`docs/iteration-bets/2026-05-12-phase-v-hey-alexa-mvd.md`):
264
+
265
+ - Input text originated from voice (macOS dictation or equivalent)
266
+ - The text is treated as the operator's intent paragraph and flows through `/interpret-input` (Phase 1) like any other text input. Conversational-shape (fragments, restarts, filler) is preserved verbatim; downstream phases consume it the same as keyboard-typed text.
267
+ - Existing text-mode + brownfield-mode behavior unchanged when flag absent
268
+ - Composes with `--brownfield` (rare; voice-driven brownfield refactor is plausible but not the MVD path)
269
+
270
+ ### Phase 1 — `/interpret-input`
271
+
272
+ Dispatches `/interpret-input` with the type detected by Phase 0. Text mode preserves the existing text-mode behavior; brownfield mode invokes the Phase C extractor (LR2 WU-1, bassclef#459 sub-goal 1) which walks the repo and populates structural hints (entities, actors, routes, README excerpt).
273
+
274
+ ```bash
275
+ # Generate sprint slug + InputArtifact path
276
+ SPRINT_SLUG="$(date -u +%Y-%m-%d)-$(printf '%s' "$INPUT_SOURCE" | md5 -q 2>/dev/null | cut -c1-6 || md5sum <<<"$INPUT_SOURCE" | cut -c1-6)"
277
+ ARTIFACT_PATH="docs/input-artifacts/${SPRINT_SLUG}-input.json"
278
+
279
+ if [ -n "$REUSE_ARTIFACT_PATH" ]; then
280
+ # Reuse pre-shaped InputArtifact (bassclef-upstream#716)
281
+ # Validate against schema first; fail fast on invalid input
282
+ SCHEMA_PATH="${BASSCLEF_DIR:-$REPO_ROOT}/standards/state-spine/schemas/input-artifact.schema.json"
283
+ if command -v ajv >/dev/null 2>&1; then
284
+ if ! ajv validate -s "$SCHEMA_PATH" -d "$REUSE_ARTIFACT_PATH" --spec=draft2020 --strict 2>&1; then
285
+ echo "launch: --reuse-artifact file failed schema validation: $REUSE_ARTIFACT_PATH" >&2
286
+ echo "launch: run 'ajv validate -s $SCHEMA_PATH -d <path>' for details" >&2
287
+ exit 1
288
+ fi
289
+ else
290
+ echo "launch: WARN — ajv not found; skipping InputArtifact schema validation" >&2
291
+ fi
292
+
293
+ # Copy the pre-shaped artifact to the sprint slot
294
+ mkdir -p docs/input-artifacts
295
+ cp "$REUSE_ARTIFACT_PATH" "$ARTIFACT_PATH"
296
+ echo "launch: copied pre-shaped artifact from $REUSE_ARTIFACT_PATH to $ARTIFACT_PATH" >&2
297
+ else
298
+ # Dispatch /interpret-input with the right type
299
+ bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/interpret-input.sh" \
300
+ "$INPUT_SOURCE" \
301
+ --type="$INPUT_TYPE" \
302
+ --persist \
303
+ --slug="${SPRINT_SLUG}-input"
304
+ fi
305
+ ```
306
+
307
+ Produces `InputArtifact` at `docs/input-artifacts/<sprint-slug>-input.json`. Downstream phases (`/objectory-decompose`, `/value-prop`, `/riff-prototypes`, etc.) consume the InputArtifact unchanged — the type and structural_hints are already populated by the right extractor.
308
+
309
+ **Brownfield self-test:** dispatching against bassclef itself (`/launch medium --brownfield .` from bassclef's root) returns an InputArtifact whose `structural_hints.entities_seen` contains `skill`, `rule`, `agent`, `standard` — proves the chain is wired to the Phase C extractor.
310
+
311
+ ### Phase 2 — `/objectory-decompose` (full BCE matrix)
312
+
313
+ Same as `/stage` Phase 2 — Jacobson method via `/objectory-decompose`.
314
+ Output: `docs/decompositions/<slug>-domain.md` with entity inventory
315
+ + actor list + verb-goal pairs + BCE matrix.
316
+
317
+ **Distinction from `/stage`**: medium + full consume the FULL BCE
318
+ matrix downstream (in /ia-model + /interaction-design + /decompose
319
+ steps). Quick + light only consume the verb-goal pairs (for
320
+ /value-prop input).
321
+
322
+ ### Phase 3 — `/value-prop` (brief mode for medium; verbose for full)
323
+
324
+ ```bash
325
+ case "$TIER" in
326
+ medium) /value-prop --brief "<extracted_text>" ;; # claim + 3 RTBs
327
+ full) /value-prop --verbose "<extracted_text>" ;; # full Dunford/Moore positioning
328
+ esac
329
+ ```
330
+
331
+ ### Phase 3b — Deeper persona work (medium + full only)
332
+
333
+ Per roadmap §"Medium tier":
334
+
335
+ ```bash
336
+ /personas # primary persona (medium); all personas (full)
337
+ /jtbd-tasks # top jobs (medium); all jobs (full)
338
+ case "$TIER" in
339
+ full) /value-prop-canvas <persona> ;; # per primary; per all (full)
340
+ esac
341
+ ```
342
+
343
+ These outputs feed Phase 5's spec generation.
344
+
345
+ ### Phase 3.5 — `/pick-luminaries` (in-turn picker for variant grounding)
346
+
347
+ Runs inside the current turn. Picks N luminaries whose lens fits the operator's intent. No separate LLM call. No provider key required. Per web#193 Option A rewrite.
348
+
349
+ ```bash
350
+ source "${BASSCLEF_DIR:-$HOME/src/sunj-labs/bassclef}/lib/luminary-pick.sh"
351
+ CATALOG=$(luminary_pick_catalog)
352
+ ```
353
+
354
+ Now Claude (in-turn) reads `$intent_text`, enumerates `$CATALOG`, picks `$N_VARIANTS` slugs whose lens fits. Writes JSON to `/tmp/luminary-pick.json`:
355
+
356
+ ```json
357
+ {
358
+ "matched_luminaries": ["slug1", "slug2", "slug3"],
359
+ "rationale": "One short sentence per pick",
360
+ "picker_version": "bassclef-harness-pick-2.0",
361
+ "provider": "claude-code-harness"
362
+ }
363
+ ```
364
+
365
+ If the catalog helper fails (missing catalog dir), Phase 4 falls back to `/luminary recommend` signal scoring. Bassclef-private adopters who load their own `/extract-intent` skill via `additionalDirectories` override this path with richer grounding.
366
+
367
+ ### Phase 4 — `/riff-prototypes` (with WU-11b Anthropic baseline)
368
+
369
+ Same as `/stage` Phase 4 — N+1 variants (N luminary-driven + 1
370
+ Anthropic baseline). Variant count by tier:
371
+
372
+ | Tier | N (luminary) | Total (with baseline) |
373
+ |---|---|---|
374
+ | medium | 3 | 4 |
375
+ | full | 3-5 | 4-6 |
376
+
377
+ **Variant assignment from Phase 3.5.** Phase 4 reads `matched_luminaries` from Phase 3.5's output and assigns the N luminary-driven variants to those slugs. The Anthropic baseline always lands regardless. Operator can override per `/riff-prototypes --luminaries=...`.
378
+
379
+ ### Phase 5 — `/use-case` (Cockburn formalization, medium + full)
380
+
381
+ Per roadmap §"Medium tier":
382
+
383
+ ```bash
384
+ /use-case "<primary-actor>" "<primary-goal>" # consumes /objectory-decompose verb-goal pairs
385
+ ```
386
+
387
+ Produces formal use-case document at `docs/use-cases/<slug>-<goal>.md`.
388
+ Full tier: one /use-case per primary goal (not just primary).
389
+
390
+ ### Phase 5b — `/user-stories` (INVEST backlog tokens, medium + full)
391
+
392
+ Per bassclef#358 — closes the chain drift between /use-case and
393
+ /launch. Slices /use-case main scenario + extensions into
394
+ INVEST-validated user stories. Each story traces back to Persona →
395
+ JTBD → VPC → Use-case line.
396
+
397
+ ```bash
398
+ /user-stories from-use-case "<uc-slug>" # slices the use-case from Phase 5
399
+ ```
400
+
401
+ Produces user-story files at `docs/user-stories/US-NNN-<slug>.md` +
402
+ traceability matrix at `docs/user-stories/_matrix.md`. Full tier:
403
+ walk every primary use-case + every extension through INVEST.
404
+
405
+ **Why this phase exists:** /launch's downstream consumer
406
+ (`/build`, bassclef#335) ships in stacked atomic per-step PRs.
407
+ INVEST's "Independent" + "Small" properties are exactly what makes
408
+ each step safely mergeable in isolation. Without this phase, Phase 14's
409
+ step enumeration is derived ad-hoc from /spec's acceptance criteria;
410
+ not INVEST-validated. With this phase, step enumeration ARE the
411
+ INVEST stories, with full traceability back to persona-level value.
412
+
413
+ **Distinction from /use-case (Phase 5):** /use-case = system behavior
414
+ spec ("what must the system do for this goal, including every
415
+ extension?"). /user-stories = backlog tokens ("what to ship in what
416
+ order, each independently shippable?"). Both feed downstream phases:
417
+ /use-case → /interaction-design (renders flow); /user-stories → /spec
418
+ (step enumeration) and /build (per-story Builder dispatch).
419
+
420
+ ### Phase 6 — `/ia-model` (entity inventory → nav structure)
421
+
422
+ ```bash
423
+ /ia-model # consumes /objectory-decompose entities
424
+ ```
425
+
426
+ Output: `docs/ia-models/<slug>.md` — nav structure + labeling + screen
427
+ map derived from BCE entities.
428
+
429
+ ### Phase 7 — `/interaction-design` (state + sequence diagrams)
430
+
431
+ ```bash
432
+ /interaction-design # consumes /ia-model + /use-case
433
+ ```
434
+
435
+ Output: state diagrams + sequence diagrams in `docs/interaction-design/<slug>/`.
436
+
437
+ ### Phase 8 — `/decompose` (GRASP responsibility assignment)
438
+
439
+ ```bash
440
+ /decompose # consumes BCE matrix from /objectory-decompose + sequence diagrams from /interaction-design
441
+ ```
442
+
443
+ Output: `docs/decompositions/<slug>-grasp.md` — GRASP responsibility
444
+ matrix + interface identification + pattern selection (GoF/Fowler).
445
+
446
+ ### Phase 9 — `/spec` (build-ready specification)
447
+
448
+ ```bash
449
+ /spec # composes /value-prop + /personas + /use-case + /user-stories + /ia-model + /interaction-design + /decompose
450
+ ```
451
+
452
+ Output: `docs/specs/<slug>.md` — buildable specification ready for
453
+ Construction. Includes:
454
+ - Acceptance criteria (testable; one per /user-stories acceptance line)
455
+ - Scope boundary (what's in / out)
456
+ - Open questions (operator must resolve before Construction)
457
+ - **`## Steps enumerated` section (REQUIRED, exact heading) per
458
+ bassclef#367** — derived from /user-stories output (bassclef#358).
459
+ Each story (US-NNN) maps to one `### WU-N` entry; the step's acceptance
460
+ criteria inherit from the story's. INVEST-validated by construction.
461
+ /build's Phase 1 parser greps for this exact heading.
462
+
463
+ ### Phase 10 — `/prototype-gallery` (with back-nav injection)
464
+
465
+ Per `/prototype-gallery` SKILL.md §"Back-nav injection (bassclef#X)":
466
+ each variant copy in `public/prototypes/<slug>/` gets a back-nav header
467
+ injected at copy time. Master gallery includes:
468
+
469
+ - All N+1 variants with luminary attribution
470
+ - **Spec link** (`docs/specs/<slug>.md`) — visible to operator AND
471
+ cameos
472
+ - **Decomposition link** (GRASP matrix) — same
473
+ - **ux-migration link** — same
474
+ - Champion-challenger flag on baseline variant
475
+
476
+ The gallery is THE cameo-review surface. Luminary perspectives
477
+ (today: /visual-review complement-evaluator pairs; future: luminary-as-
478
+ agent runtime per roadmap Stage 3) consume the gallery + spec + decomp
479
+ to produce reviews per perspective. Reviews surface in PR body.
480
+
481
+ ### Phase 11 — `/ux-migration` (chosen variant → production migration plan)
482
+
483
+ ```bash
484
+ /ux-migration <chosen-variant-slug> # if base= provided, use that; else operator chooses post-gallery
485
+ ```
486
+
487
+ Output: `docs/specs/ux-migration-<slug>.md` — token extraction +
488
+ prototype-HTML→React mapping table + work packages with dependency-aware
489
+ build order.
490
+
491
+ This is the `/ux-migration` MUST gate per existing prototype-variants
492
+ SKILL.md §"Step 7 — Selection → pipeline to Construction".
493
+
494
+ ### Phase 12 — Deploy or local-serve (mode-gated)
495
+
496
+ **When `LOCAL_MODE != true` (extended / default):** `/bind-subdomain`
497
+ per variant + master gallery. Same as `/stage` Phase 6, but ALSO bind
498
+ the master gallery itself to a subdomain (e.g.,
499
+ `gallery-<sprint-slug>.<consumer-domain>`). Each variant URL includes
500
+ back-nav to master gallery URL. Best-effort per existing convention —
501
+ failures don't fail the chain.
502
+
503
+ **When `LOCAL_MODE == true` (bassclef#923 A2):** skip bind-subdomain
504
+ entirely. Dispatch `scripts/launch/local-serve.sh` against the gallery
505
+ directory. Capture the localhost URL:
506
+
507
+ ```bash
508
+ LOCAL_URL=$(bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/launch/local-serve.sh" \
509
+ "docs/prototypes/${SPRINT_SLUG}/")
510
+
511
+ if [ -z "$LOCAL_URL" ]; then
512
+ echo "launch: local-serve failed to start; gallery artifacts still on disk at docs/prototypes/${SPRINT_SLUG}/" >&2
513
+ # Don't fail the chain — disk artifacts are the load-bearing output
514
+ else
515
+ echo "launch: local gallery at ${LOCAL_URL}" >&2
516
+ fi
517
+ ```
518
+
519
+ Per-variant URLs in local mode all point at the same localhost root
520
+ (path-based per ADR-016 prototype-gallery-url-pattern). No DNS, no
521
+ TLS, no Amplify, no Cloudflare. Stop the server later with
522
+ `scripts/launch/local-serve-stop.sh <sprint-slug>`.
523
+
524
+ ### Phase 13 — Persist preview-state.yml (build-tier shape)
525
+
526
+ ```yaml
527
+ # docs/preview-state/<sprint-slug>.yml
528
+ slug: <sprint-slug>
529
+ input_artifact: <sprint-slug>-input
530
+ decomposition: <sprint-slug>-domain
531
+ spec: <sprint-slug> # NEW vs /stage
532
+ grasp: <sprint-slug>-grasp # NEW vs /stage
533
+ ux_migration: ux-migration-<sprint-slug> # NEW vs /stage
534
+ status: build-ready # NEW vs /stage's "variants-ready"
535
+ current_tier: medium # or full
536
+ luminaries_used: [...]
537
+ current_variants:
538
+ - name: variant-a-<luminary>
539
+ is_baseline: false
540
+ bind_subdomain_url: ...
541
+ - name: variant-baseline-anthropic
542
+ is_baseline: true
543
+ bind_subdomain_url: ...
544
+ selected_variant: <if base= provided, that; else null pending operator pick>
545
+ created_at: <ISO timestamp>
546
+ created_by_session: <session-id>
547
+ ```
548
+
549
+ `status: build-ready` is the operator-readable signal that Construction
550
+ can begin. `/build-iteration` (bassclef#335) refuses to run if
551
+ status != build-ready.
552
+
553
+ ### Phase 14 — Scaffold Construction iteration-goal draft
554
+
555
+ ```yaml
556
+ # docs/iteration-bets/<YYYY-MM-DD>-<sprint-slug>-construction.md (DRAFT)
557
+ ---
558
+ slug: <YYYY-MM-DD>-<sprint-slug>-construction
559
+ phase: Construction
560
+ status: draft # operator must change to "active" before /build-iteration runs
561
+ parent_roadmap: docs/roadmaps/<roadmap-slug>.md # if known
562
+ parent_canvas: <if known>
563
+ parent_bet: <launch's own goal, if part of one>
564
+ preview_state: docs/preview-state/<sprint-slug>.yml
565
+ spec: docs/specs/<sprint-slug>.md
566
+ ux_migration: docs/specs/ux-migration-<sprint-slug>.md
567
+ decomposition: docs/decompositions/<sprint-slug>-grasp.md
568
+ references:
569
+ - {type: spec, id: <sprint-slug>}
570
+ - {type: decomposition, id: <sprint-slug>-grasp}
571
+ - {type: input-artifact, id: <sprint-slug>-input}
572
+ appetite:
573
+ mode: scope-bounded
574
+ estimated_turns: <derived from /spec step enumeration>
575
+ stopping_criteria:
576
+ - All step PRs filed (count from spec)
577
+ - Operator merges + CI green
578
+ - /deploy-prod dispatches successfully
579
+ ---
580
+
581
+ ## Sources read
582
+
583
+ - spec: docs/specs/<sprint-slug>.md
584
+ - decomposition: docs/decompositions/<sprint-slug>-grasp.md
585
+ - ux-migration: docs/specs/ux-migration-<sprint-slug>.md
586
+ - preview-state: docs/preview-state/<sprint-slug>.yml
587
+ - input-artifact: docs/input-artifacts/<sprint-slug>-input.json
588
+
589
+ ## What I'm NOT reading (with reason)
590
+
591
+ - (operator fills in if specific exclusions apply)
592
+
593
+ ## Iteration Goal — Construction of <slug>
594
+
595
+ **Phase**: Construction
596
+
597
+ **Scope**:
598
+ (operator reviews + tightens; spec is the source of truth)
599
+
600
+ **Risk being retired**:
601
+ (derived from spec acceptance criteria)
602
+
603
+ **Business value being proven**:
604
+ (derived from /value-prop output)
605
+
606
+ **Lovability signal**:
607
+ (derived from chosen variant's luminary signature + /value-prop)
608
+
609
+ **Viability signal**:
610
+ (derived from /spec acceptance criteria; operator confirms)
611
+
612
+ **Appetite**:
613
+ (derived from spec step enumeration; operator finalizes)
614
+ ```
615
+
616
+ This is a DRAFT — operator reviews, edits, commits status:active. Then
617
+ `/build-iteration <slug>-construction` dispatches Builder agent.
618
+
619
+ ### Phase 14b — Completion handoff (bassclef#941)
620
+
621
+ Two templates — adopter-mode and operator-mode. Default is adopter when `--local` is set; operator-mode for non-local dispatches (which assume operator workflow with consumer repo + iteration goal ceremony).
622
+
623
+ #### Adopter-mode completion (default for `--local`)
624
+
625
+ After Phase 12-alt (`local-serve.sh` running) + Phase 13 (preview-state.yml on disk), emit this template directly to the adopter — no YAML edits, no frontmatter flip, no command-soup:
626
+
627
+ ```
628
+ I made you N directions for your family recipe wiki. Walk through them on
629
+ your phone or laptop at <LOCAL_URL> and tell me which one feels right.
630
+
631
+ When you've picked, just tell me — "I like variant 2" or "#3 looks
632
+ great".
633
+
634
+ Here's what happens next:
635
+
636
+ 1. I'll write the formal artifacts for your chosen direction only:
637
+ - The use case — what the app does step-by-step (Cockburn style)
638
+ - The user stories — the small, shippable slices ("I want to add a
639
+ recipe", "I want to tag recipes for weeknight dinners", etc.)
640
+ - The information architecture — the screens, the nav, where each
641
+ screen lives
642
+ - The interaction design — what happens when you click each thing
643
+ - The responsibility map — which code module owns what
644
+ - The build spec — the checklist your app code is measured against
645
+ - The migration plan — how to ship it step by step
646
+ 2. Then I'll write the actual app code — add, edit, search, tag, the
647
+ whole thing — using those artifacts as the checklist.
648
+ 3. You'll get a working local version to play with in about 15 minutes.
649
+
650
+ You're seeing N directions BEFORE I write any of those formal artifacts
651
+ because the cheap-vs-expensive trade-off is real:
652
+
653
+ - The variants you're looking at are CHEAP — same data shape, four
654
+ visual treatments, about 4 minutes total. Showing you four lets you
655
+ pick the right direction before I invest.
656
+ - The formal write-up (use cases, user stories, IA, interaction design,
657
+ GRASP, spec, migration plan) is EXPENSIVE — 10-15 minutes per
658
+ direction. Running that seven times would burn an hour.
659
+ - So: cheap first → you commit → expensive run, once, for the direction
660
+ you picked.
661
+
662
+ If any depth-link inside a variant says "coming after you pick" — that's
663
+ the contract. The link materializes once you've picked.
664
+
665
+ None of them feel right? Tell me what's off and I'll generate new
666
+ directions for you. (See /launch --refine, bassclef#942.)
667
+ ```
668
+
669
+ Substitute `<LOCAL_URL>` with the URL returned by Phase 12-alt. Substitute the actual variant count (`I made you N directions...`). Substitute the actual app description (`your family recipe wiki` etc.) from the InputArtifact's `intent` field.
670
+
671
+ The adopter-mode template **surfaces** (per bassclef#969):
672
+ - The formal artifacts the chain will produce post-pick, in plain English (use case, user stories, IA, interaction design, responsibility map, build spec, migration plan)
673
+ - The chain-ordering rationale (variants are cheap shared data; formal artifacts are expensive per-direction; cheap first → commit → expensive once)
674
+ - The depth-link "coming after you pick" contract (per bassclef#971)
675
+
676
+ The adopter-mode template **skips entirely**:
677
+ - The DRAFT iteration-goal review framing (Sam doesn't review goals).
678
+ - The `selected_variant:` YAML edit instruction.
679
+ - The `status: draft → status: active` frontmatter flip instruction.
680
+ - The bare `/build <slug>-construction` command name.
681
+
682
+ #### Natural-language variant selection (talk-to-pick)
683
+
684
+ Agent listens for the adopter's variant selection in natural language and auto-handles the YAML + frontmatter mechanics. Recognized phrases (case-insensitive, fuzzy):
685
+
686
+ - "I like variant N" / "variant N" / "#N" / "the Nth one" / "number N"
687
+ - "the cozy one" / "the minimal one" / "the bold one" — fuzzy-matches against variant names or luminary signatures in the gallery
688
+ - "let's go with the first" / "the second" / "the last"
689
+
690
+ When matched, the agent automatically:
691
+
692
+ 1. Updates `selected_variant: <N or slug>` in `docs/preview-state/<sprint-slug>.yml`
693
+ 2. Flips iteration-goal frontmatter `status: draft → active` in `docs/iteration-bets/<sprint-slug>-construction.md`
694
+ 3. Surfaces the /build dispatch with plain-English framing (per bassclef#943 — `/build` adopter-mode framing)
695
+
696
+ The adopter never sees the YAML or frontmatter mechanics. The agent confirms in plain English:
697
+
698
+ ```
699
+ Got it — going with the cozy notebook direction (variant 2). I'll start
700
+ writing your app code now. About 15 minutes.
701
+ ```
702
+
703
+ #### Operator-mode completion (non-`--local` or operator override)
704
+
705
+ Today's YAML-edit + frontmatter-flip + bare command path stays available verbatim for operator workflows where the YAML surface is the convenient pick mechanism (scripts, batch processing, multi-variant comparisons):
706
+
707
+ ```
708
+ Your next actions, in order
709
+
710
+ 1. Walk the gallery → pick a variant on your phone or laptop.
711
+ 2. Edit selected_variant: in docs/preview-state/<slug>.yml.
712
+ 3. Flip the iteration-goal frontmatter status: draft → status: active.
713
+ 4. Run /build <slug>-construction — Builder dispatches per step.
714
+
715
+ Skipped vs full /launch chain (available if you want depth):
716
+ - /use-case (Cockburn formalization)
717
+ - /user-stories (INVEST backlog tokens)
718
+ - /decompose (GRASP responsibility audit)
719
+ ```
720
+
721
+ Operator-mode also surfaces the natural-language listener path as a convenience — operators can talk-to-pick too if they prefer.
722
+
723
+ #### Mode selection
724
+
725
+ ```
726
+ if "--local" flag is set:
727
+ mode = "adopter"
728
+ else:
729
+ mode = "operator"
730
+
731
+ # Operator can force adopter-mode for demos via --adopter-mode flag (V2).
732
+ # Operator can force operator-mode in a --local context via --operator-mode flag.
733
+ ```
734
+
735
+ #### Refine path (bassclef#942 — "none of these feel right")
736
+
737
+ When the adopter walks the 4 variants and none feel right, the agent listens for refinement cues and re-runs Phase 4+ with refined intent. Two entry paths.
738
+
739
+ **Natural-language listener (default in adopter mode).** Recognized phrases (case-insensitive, fuzzy):
740
+
741
+ - "none of these feel right"
742
+ - "none feel right"
743
+ - "they all feel too X" (cold / busy / corporate / glossy / minimal)
744
+ - "I want something more X"
745
+ - "can you try again"
746
+ - "let me see other options"
747
+ - "I don't love any of these"
748
+
749
+ When matched, the agent asks one short follow-up if the cues don't include a specific direction:
750
+
751
+ ```
752
+ What's off? Too busy? Too cold? Missing something specific?
753
+ ```
754
+
755
+ The adopter's answer becomes the refinement intent. Agent captures it into the InputArtifact's new `refinement_passes` array (schema field added at `standards/state-spine/schemas/input-artifact.schema.json`).
756
+
757
+ **Explicit flag form (operator convenience):**
758
+
759
+ ```bash
760
+ /launch --refine "make them feel more like a worn cookbook, less like an app"
761
+ ```
762
+
763
+ The `--refine` flag carries the refinement intent directly without the conversational round-trip. Operators in scripted workflows prefer this.
764
+
765
+ **Refinement execution.** Once refinement intent is captured:
766
+
767
+ 1. Agent appends the refinement intent to the original intent paragraph (preserves lineage; doesn't replace the original)
768
+ 2. Re-dispatches `/pick-luminaries` (Phase 3.5) — fresh LLM pick reads the combined intent + refinement context, picks different luminaries than the prior pass
769
+ 3. Re-dispatches Phase 4 (`/riff-prototypes`) — generates a new gallery with the refined picks
770
+ 4. Emits the gallery at the same `LOCAL_URL` (overwriting prior `current_variants` in `preview-state.yml`, OR writing to a new sub-path like `/refine-1/` per implementation choice)
771
+
772
+ **InputArtifact lineage.** Each refinement pass records:
773
+
774
+ ```json
775
+ {
776
+ "refinement_passes": [
777
+ {
778
+ "intent": "make them feel more like a worn cookbook, less like an app",
779
+ "timestamp": "2026-06-13T13:15:00Z",
780
+ "generated_variants": ["variant-paula-scher", "variant-ellen-lupton", "variant-jenifer-tidwell"],
781
+ "selected_after_refine": null
782
+ },
783
+ {
784
+ "intent": "still too crisp; try warmer, more handwritten",
785
+ "timestamp": "2026-06-13T13:24:00Z",
786
+ "generated_variants": ["variant-edward-tufte", "variant-eric-meyer", "variant-don-norman"],
787
+ "selected_after_refine": 2
788
+ }
789
+ ]
790
+ }
791
+ ```
792
+
793
+ The lineage preserves what was tried + which variant finally won.
794
+
795
+ **3-pass cap.** After 3 refinement passes, the agent surfaces a step-back prompt:
796
+
797
+ ```
798
+ We've tried 3 directions. Want to step back and rethink the intent
799
+ paragraph itself? Or pick the closest variant we've generated so far
800
+ and refine the details in /build?
801
+ ```
802
+
803
+ This prevents infinite-loop refinement. The cap is configurable via `--refine-cap N` flag (default 3) for operators who want longer runs.
804
+
805
+ **Composes with completion handoff.** Refined gallery uses the same adopter-mode completion template (`I made you 4 directions for your family recipe wiki...`); the natural-language pick listener still applies after refinement.
806
+
807
+ ### Phase 15 — Open PR
808
+
809
+ PR body includes:
810
+ - All variant URLs (with back-nav to gallery)
811
+ - Master gallery URL
812
+ - Spec / GRASP / ux-migration links (visible for cameo review)
813
+ - Champion-challenger ratio summary
814
+ - Construction iteration-goal draft path (operator's next action)
815
+ - Bind-subdomain status per variant
816
+
817
+ PR body MUST surface: "Operator's next action: review the Construction
818
+ iteration-goal draft at <path>; if approved, run `/build-iteration
819
+ <slug>-construction` (bassclef#335)."
820
+
821
+ ## Tier behavior (BUILD-only; `/stage` for prototype tiers)
822
+
823
+ | Tier | Phase B MVP | Status |
824
+ |---|---|---|
825
+ | `quick` | ❌ Refused — use `/stage quick` | redirected |
826
+ | `light` | ❌ Refused — use `/stage light` | redirected |
827
+ | `medium` | ✅ Full chain (Phases 1-15). 3 variants + Anthropic baseline + buildable spec + GRASP + ux-migration + Construction iteration-goal draft. ~1 day wall time. | Phase B MVP scope |
828
+ | `full` | ✅ Same as medium + per-persona /value-prop-canvas + per-goal /use-case + /synthetic-user pair-embodiment validation. 3-5 variants + audit-grade spec. ~3 days wall time. | Phase B MVP scope (full tier ships in same skill; differs by Phase 3b + variant count + /synthetic-user) |
829
+
830
+ ## Failure modes (Phase B MVP scope)
831
+
832
+ Same baseline as `/stage` PLUS:
833
+
834
+ | Failure | Behavior |
835
+ |---|---|
836
+ | `/use-case` produces empty extension list | Proceed; warn that spec may be too thin for Construction |
837
+ | `/spec` validation fails (missing required acceptance criteria) | BLOCK; fix or operator override |
838
+ | `/ux-migration` fails (no design tokens, no variant chosen) | BLOCK; require operator pick variant via `base=<slug>` first |
839
+ | Construction iteration-goal draft frontmatter doesn't validate | BLOCK; state-validate.sh hook surfaces missing fields |
840
+
841
+ ## Rules
842
+
843
+ - **PR-first, always** — same as `/stage`
844
+ - **All state writes through accessor** — same as `/stage`
845
+ - **Stub-mode tolerance** — same as `/stage`
846
+ - **Champion-challenger captured** — `is_baseline` flag preserved
847
+ - **Best-effort bind-subdomain** — same as `/stage`
848
+ - **Spec + decomp + ux-migration always surfaced in gallery** —
849
+ cameo-review-by-default; non-negotiable
850
+ - **Construction iteration-goal draft is a DRAFT** — operator MUST
851
+ review + commit status:active before `/build-iteration` runs
852
+
853
+ ## Skipping / Aborting
854
+
855
+ - Same as `/stage`, plus:
856
+ - Spec validation failure: BLOCK; operator fixes via /spec re-run
857
+ - ux-migration step fails (no chosen variant): operator must run with
858
+ `base=<slug>` OR pick winner via gallery review
859
+
860
+ ## Relationship to other skills + standards
861
+
862
+ - `/stage` — sibling (prototype tiers; same input-handler interface)
863
+ - `/interpret-input` — Phase 1 producer (same as `/stage`)
864
+ - `/objectory-decompose` — Phase 2 producer (same as /stage)
865
+ - `/value-prop` — Phase 3 producer (different mode by tier)
866
+ - `/personas`, `/jtbd-tasks`, `/value-prop-canvas` — Phase 3b
867
+ - `/riff-prototypes` (with WU-11b baseline) — Phase 4
868
+ - `/use-case` — Phase 5 (Cockburn formalization)
869
+ - `/user-stories` — Phase 5b (INVEST backlog tokens, bassclef#358) — slices /use-case into stories that drive Phase 14's step enumeration
870
+ - `/ia-model` — Phase 6 (entity → nav)
871
+ - `/interaction-design` — Phase 7 (state + sequence)
872
+ - `/decompose` — Phase 8 (GRASP)
873
+ - `/spec` — Phase 9 (build-ready specification)
874
+ - `/prototype-gallery` (with back-nav injection) — Phase 10
875
+ - `/ux-migration` — Phase 11 (chosen variant → production)
876
+ - `/bind-subdomain` — Phase 12 (deploy variants + gallery)
877
+ - `/synthetic-user` — Phase 4b (full tier only)
878
+ - `/build` (bassclef#335; renames from `/build-iteration` per bassclef#359) — DOWNSTREAM consumer; takes Construction iteration-goal draft (with INVEST step enumeration from /user-stories) + dispatches Builder agent per step
879
+ - `/deploy-prod` — DOWNSTREAM final stage (after Construction)
880
+
881
+ ## What this skill enables (post-merge)
882
+
883
+ ```bash
884
+ # Operator dispatches from phone:
885
+ cd ~/src/your-org/your-app
886
+ /launch medium "Dramatically simplify and delightfully surface deals..."
887
+
888
+ # OR escalate from /stage output:
889
+ /launch medium "..." base=<your-variant-slug>
890
+ ```
891
+
892
+ Chain runs (~1 day for medium; ~3 days for full), opens PR with:
893
+ - Deployed clickable gallery (variants + back-nav)
894
+ - Buildable spec
895
+ - GRASP responsibility matrix
896
+ - ux-migration plan
897
+ - Construction iteration-goal DRAFT
898
+
899
+ Operator reviews on phone. If approved, runs `/build-iteration
900
+ <draft-slug>` (bassclef#335) which dispatches Builder agent →
901
+ step PRs → CI → /deploy-prod. Ends at functioning app in prod.
902
+
903
+ This is the Construction-transition step in the
904
+ "talking-out-loud → functioning app in prod" chain.
905
+
906
+ ## Enforcement
907
+
908
+ Methodology-level. State-validate.sh hook enforces preview-state.yml
909
+ + iteration-goal.schema.json validation. PR-first discipline enforced
910
+ via branching.md rule + pre-build-gate hook. No additional hook
911
+ enforcement added.
912
+
913
+ ## Output discipline
914
+
915
+ Dispatch `/kiss words --rewrite` on output. See `standards/skill-output-discipline.md`.