@thebassclef/lite 0.1.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +431 -135
  2. package/dist/cli.js +433 -137
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
  8. package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
  9. package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
  10. package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
  11. package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
  12. package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
  13. package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
  14. package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
  15. package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
  16. package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
  17. package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
  18. package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
  19. package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
  20. package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
  21. package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
  22. package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
  23. package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
  24. package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
  25. package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
  26. package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
  27. package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
  28. package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
  29. package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
  30. package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
  31. package/dist/lite/.claude/settings.json +212 -0
  32. package/dist/lite/CLAUDE.md +41 -0
  33. package/dist/lite/gitignore +58 -0
  34. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  35. package/dist/lite/whereami.md +24 -0
  36. package/package.json +8 -2
  37. package/substrate/.bassclef/lite-manifest.json +0 -2701
  38. package/substrate/.claude/agents/architect.md +0 -70
  39. package/substrate/.claude/agents/builder.md +0 -114
  40. package/substrate/.claude/agents/designer.md +0 -156
  41. package/substrate/.claude/agents/reviewer.md +0 -88
  42. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  43. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,640 +0,0 @@
1
- ---
2
- tier: lite
3
- name: build
4
- description: "Take a buildable plan and ship it. Reads a spec from /launch. Dispatches a builder per user story. Runs /verify. Opens PRs. Gates prod deploy on a human. Refuses auth, schema, security, and tenant work. --explain narrates first."
5
- problem: "A buildable plan sits on disk. Nothing ships until someone writes code and PRs and gates prod."
6
- value: "Reads the plan and ships it. Runs the whole cycle so you can watch instead of type."
7
- inputs: [A goal slug pointing to a spec on disk]
8
- outputs: [One PR per user story, Verify report, Reviewer sign-off, Prod deploy gated on a human]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- requires:
12
- cli: [git, gh]
13
- network: true
14
- ---
15
-
16
- # /build — Construction Execution Composer
17
-
18
- Closes the substrate gap between `/launch` (which produces
19
- Construction iteration-goal drafts) and a deployed working app.
20
- Tonight: Phase 0-3 LIVE, Phase 4-7 STUB. Live execution ships in
21
- follow-up goal AFTER operator-supervised first run.
22
-
23
- ## ADR-consult — fire before scope confirmation (per bassclef-upstream#424)
24
-
25
- 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.
26
-
27
- 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`.
28
-
29
- ## Usage
30
-
31
- ```
32
- /build <goal-slug> → run all phases. Phase 0-3 LIVE; Phase 4-7 STUB tonight (emit "TODO: live execution" strings).
33
- /build <goal-slug> --explain → same + verbose narration at each phase. When live mode ships: pauses between Phase 3 and Phase 4 for operator confirmation.
34
- ```
35
-
36
- **No `--dry-run` mode** — Phase 0's mechanical hard-floor refusal is
37
- the safety primitive. Phase 4-7 stubs make tonight's default behavior
38
- equivalent to "preview only." When live mode ships, default runs
39
- live; `--explain` becomes the operator preview-and-confirm path.
40
-
41
- ## Tier boundary
42
-
43
- `/build` ships `tier: lite`. Sam and Louis get the full plan-to-ship
44
- chain from cold — `/launch` → `/build` → deployed app.
45
-
46
- Two phases dispatch skills at `tier: standard`:
47
-
48
- - **Phase 7** dispatches `/deploy-prod` (requires orchestrator-gated
49
- mode + prod credentials). Lite adopters see the STUB message and
50
- route prod deploy through their own path.
51
- - **Phase 7.5** dispatches `/architect-review` (system-level review;
52
- needs the standard-tier reviewer agent context). Same pattern:
53
- lite adopters see the STUB message; standard+ adopters get live
54
- dispatch.
55
-
56
- This mirrors `/longrun`'s pattern — a lite skill can name standard
57
- dispatches at specific phases without breaking the cold-adopter chain.
58
- The stubs make the tier boundary visible in the operator surface.
59
-
60
- ## Position in the /mock /frame /build triple
61
-
62
- ```
63
- operator paragraph
64
-
65
- /mock (today: /stage) — Inception/Elaboration: clickable mock UI gallery
66
-
67
- /frame (today: /launch) — Construction transition: + structural bones (spec + decomp + ux-migration + iteration-goal draft)
68
-
69
- /build ← THIS SKILL — Construction execution: → deployed working app
70
- ```
71
-
72
- ## Hard ceiling — load-bearing forever
73
-
74
- /build refuses at Phase 0 if input artifacts reference any of these
75
- paths. Mechanical. No `SKIP_BLAST_RADIUS_FLOOR` env var. No override.
76
- The floor is the floor.
77
-
78
- - `src/lib/auth/**`, `src/middleware.ts` (auth code)
79
- - `prisma/schema.prisma`, `prisma/migrations/**` (schema beyond state-spine)
80
- - `src/lib/security/**` (security primitives)
81
- - Tenant-isolation paths (any `tenant_*` query, tenant context resolution)
82
- - `.github/workflows/deploy*.yml` (production CI/CD)
83
- - Production env-var config files
84
-
85
- If a /launch (formerly /preview-build) output references any floor path, the operator
86
- must shape the work outside /build (manual /autonomous start with
87
- explicit per-step operator approval). /build does not handle these.
88
-
89
- Per `.claude/rules/manual-prod-approval.md`: /build STAGES the
90
- prod-deploy via /deploy-prod. /build NEVER bypasses the GitHub
91
- Environment + required-reviewer rail. The rail is the load-bearing
92
- approval surface — operator approves prod via GitHub UI from phone.
93
-
94
- ## Procedure
95
-
96
- ### Step 0. Lead with `/value-prop flash` + `/kiss words` (bassclef#357)
97
-
98
- Open every /build invocation with:
99
-
100
- - **Flash line** (≤180 chars): one-sentence claim of what /build is
101
- about to do. Plain language.
102
- - **Kiss summary** (2-3 sentences, grade-10): what's the goal. what
103
- will ship, what gates the operator at.
104
-
105
- Walls of structured Phase 0-7 detail come AFTER this block.
106
-
107
- ### Phase -1 — Composer pre-flight (per bassclef#408)
108
-
109
- Before Phase 0 (which is /build's blast-radius floor refusal), source
110
- the shared pre-flight helper to surface composer prerequisites:
111
-
112
- ```bash
113
- source "${BASSCLEF_DIR:-$REPO_ROOT}/lib/composer-preflight.sh"
114
- PREFLIGHT_OUTPUT=$(composer_preflight_check "build" "${ESTIMATED_TURNS:-100}")
115
- PREFLIGHT_RC=$?
116
- echo "$PREFLIGHT_OUTPUT" | composer_preflight_render "build"
117
-
118
- case $PREFLIGHT_RC in
119
- 0) ;; # all checks pass — proceed to Phase 0
120
- 1) # warnings — operator decides proceed/abort
121
- echo ""
122
- echo "Pre-flight surfaced warnings. Proceed with caution OR abort and remediate."
123
- echo "Override (logged): SKIP_COMPOSER_PREFLIGHT=1"
124
- ;;
125
- 2) # failures — refuse dispatch
126
- echo ""
127
- echo "Pre-flight refused dispatch. Resolve fail-tier checks before re-running."
128
- exit 1
129
- ;;
130
- esac
131
- ```
132
-
133
- Phase -1 is independent from Phase 0's blast-radius refusal (auth,
134
- schema, security, tenant, prod-infra). Phase -1 catches missing
135
- prerequisites; Phase 0 catches dangerous changes. Both fire.
136
-
137
- Override Phase -1 only: `SKIP_COMPOSER_PREFLIGHT=1`. Phase 0 is
138
- NEVER overridable.
139
-
140
- See `standards/composer-prerequisites.md` for full discipline.
141
-
142
- ### Phase 0 — Pre-flight + blast-radius floor refusal
143
-
144
- Mechanical refusal before any other phase runs. Each check is a hard
145
- exit; no override path.
146
-
147
- ```bash
148
- # Refuse if running from main
149
- CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
150
- if [ "$CURRENT_BRANCH" = "main" ]; then
151
- echo "/build: refuse to run from main; create a feature branch first" >&2
152
- exit 2
153
- fi
154
-
155
- # Parse args
156
- EXPLAIN_MODE=false
157
- if echo "$@" | grep -q -- '--explain'; then
158
- EXPLAIN_MODE=true
159
- fi
160
-
161
- # Resolve goal via accessor
162
- source lib/state.sh
163
- BET_SLUG="$1"
164
- BET_JSON=$(state_iteration_bet_get "$BET_SLUG" 2>/dev/null) || {
165
- echo "/build: goal '$BET_SLUG' not found via state_iteration_bet_get" >&2
166
- exit 1
167
- }
168
-
169
- # Check status active
170
- STATUS=$(echo "$BET_JSON" | jq -r '.status // empty')
171
- if [ "$STATUS" != "active" ]; then
172
- echo "/build: goal status is '$STATUS', must be 'active'. Operator marks active before /build runs." >&2
173
- exit 1
174
- fi
175
-
176
- # Resolve referenced artifacts (spec, decomp, ux-migration)
177
- SPEC_PATH=$(echo "$BET_JSON" | jq -r '.references[]? | select(.type == "spec") | .id // empty')
178
- DECOMP_PATH=$(echo "$BET_JSON" | jq -r '.references[]? | select(.type == "decomposition") | .id // empty')
179
- UX_MIG_PATH=$(echo "$BET_JSON" | jq -r '.references[]? | select(.type == "ux-migration") | .id // empty')
180
-
181
- # Validate references exist
182
- for ref_type in spec decomposition; do
183
- ref_id=$(echo "$BET_JSON" | jq -r --arg t "$ref_type" '.references[]? | select(.type == $t) | .id // empty')
184
- if [ -n "$ref_id" ]; then
185
- state_reference_check "$ref_type" "$ref_id" || {
186
- echo "/build: reference dangling: $ref_type/$ref_id" >&2
187
- exit 4
188
- }
189
- fi
190
- done
191
-
192
- # Blast-radius floor scan
193
- FLOOR_PATTERN='src/lib/auth/|src/middleware\.ts|prisma/schema\.prisma|prisma/migrations/|src/lib/security/|tenant_|\.github/workflows/deploy.*\.yml|production env'
194
-
195
- # Floor scan checks STRUCTURED content only — step acceptance criteria + file-path refs.
196
- # NOT prose descriptions or code blocks (which legitimately mention floor paths in skill
197
- # specs that DESCRIBE the floor). Per bassclef#366 — the crude grep had false positives
198
- # on /build's own spec because the spec describes what /build refuses on.
199
- ACCEPTANCE_CONTENT=$(awk '
200
- /^```/{in_code = !in_code; next}
201
- in_code{next}
202
- /^### WU-/{in_wu=1; next}
203
- /^## /{in_wu=0}
204
- in_wu && /^- \[ \]/ {print}
205
- ' "docs/specs/${SPEC_PATH}.md" "docs/decompositions/${DECOMP_PATH}.md" 2>/dev/null)
206
-
207
- # File-path-shaped references (id starts with src/, prisma/, .github/, etc.)
208
- REFS_CONTENT=$(echo "$BET_JSON" | jq -r '.references[]? | select(.id | type == "string") | .id' 2>/dev/null | grep -E '^(src/|prisma/|\.github/|production)' || true)
209
-
210
- VIOLATIONS=$(printf "%s\n%s\n" "$ACCEPTANCE_CONTENT" "$REFS_CONTENT" | grep -E "$FLOOR_PATTERN" || true)
211
- if [ -n "$VIOLATIONS" ]; then
212
- echo "/build: BLAST-RADIUS FLOOR VIOLATION — refusing" >&2
213
- echo "Floor pattern matches in step acceptance criteria or file-path references:" >&2
214
- echo "$VIOLATIONS" >&2
215
- exit 3
216
- fi
217
- ```
218
-
219
- **Why this is precise (per bassclef#366):** the scan only looks at
220
- step acceptance criteria (lines starting `- [ ]` under `### WU-N`
221
- headings, outside code blocks) plus file-path-shaped references in
222
- the goal's frontmatter. Prose paragraphs that DESCRIBE the floor (like
223
- this section) don't trigger refusal. Code blocks that document the
224
- floor don't trigger refusal. Only structured ACTIONS the agent would
225
- take (acceptance criteria + references) are scanned.
226
-
227
- If any check fails, /build exits with the documented exit code and
228
- stderr message. Operator-readable; no silent failure.
229
-
230
- ### Phase 0.5 — Amendment B1: OOAD predecessor chain check (per #1150 + #1167)
231
-
232
- After the blast-radius floor scan clears, check the goal's OOAD predecessor chain per `.claude/bassclef-orientation.md` L100-108:
233
-
234
- ```
235
- Canvas → Spec → Personas → JTBD → Task-scenarios / Use-case → IA-model → Interaction-design → Decompose
236
- ```
237
-
238
- For each of the 9 chain steps, check the goal frontmatter `references` array for a matching artifact:
239
-
240
- - Canvas — reference type `canvas` OR path under `docs/canvases/`
241
- - Spec — reference type `spec` OR path under `docs/specs/`
242
- - Personas — reference type `personas` OR path under `docs/personas/`
243
- - JTBD — reference type `jtbd-tasks` OR path under `docs/jtbd/`
244
- - Task-scenarios — reference type `task-scenarios` OR path under `docs/task-scenarios/`
245
- - Use-case — reference type `use-case` OR path under `docs/use-cases/`
246
- - IA-model — reference type `ia-model` OR path under `docs/ia-models/`
247
- - Interaction-design — reference type `interaction-design` OR path under `docs/interaction-designs/`
248
- - Decomposition — reference type `decomposition` OR path under `docs/decompositions/`
249
-
250
- Emit one-line note per gap. Do not BLOCK. Operator picks proceed-or-shape per gap. B1 fires after `state_iteration_bet_get` resolves the goal (existing Phase 0 behavior preserved).
251
-
252
- ```bash
253
- # After Phase 0 blast-radius scan clears:
254
- CHAIN_STEPS="canvas spec personas jtbd-tasks task-scenarios use-case ia-model interaction-design decomposition"
255
- CHAIN_GAPS=""
256
- for step in $CHAIN_STEPS; do
257
- present=$(echo "$BET_JSON" | jq -r --arg t "$step" '.references[]? | select(.type == $t) | .id // empty' | head -1)
258
- if [ -z "$present" ]; then
259
- CHAIN_GAPS="$CHAIN_GAPS $step"
260
- fi
261
- done
262
- if [ -n "$CHAIN_GAPS" ]; then
263
- echo "/build: OOAD chain gap notes (advisory; operator picks proceed-or-shape):" >&2
264
- for gap in $CHAIN_GAPS; do
265
- echo " - missing: $gap" >&2
266
- done
267
- fi
268
- ```
269
-
270
- ### Phase 1 — InputParser
271
-
272
- Parse the validated goal's structure:
273
-
274
- ```bash
275
- # Already have BET_JSON, SPEC_PATH, DECOMP_PATH, UX_MIG_PATH from Phase 0
276
- # Read spec body for step enumeration. Per bassclef#367, spec MUST have
277
- # the exact heading `## Steps enumerated` (pinned in /spec SKILL.md
278
- # rules + templates/spec-template.md). /launch's Phase 9
279
- # emits this heading by contract. Specs that lack the section → exit 4.
280
- SPEC_FILE="docs/specs/${SPEC_PATH}.md"
281
- WU_LIST=$(awk '/^## Steps enumerated/,/^## /' "$SPEC_FILE" | grep -E '^### WU-')
282
-
283
- # Each WU should reference at least one story (US-NNN)
284
- WU_COUNT=$(echo "$WU_LIST" | grep -c '^### WU-' || echo 0)
285
- ```
286
-
287
- Build structured object: `{ bet, spec_path, decomp_path, ux_migration_path, wus[] }`.
288
-
289
- ### Phase 2 — Reference validation
290
-
291
- Verify each step traces to at least one story. Refuse if any step lacks
292
- story traceability.
293
-
294
- ```bash
295
- ORPHAN_WUS=$(echo "$WU_LIST" | grep -v 'US-' || true)
296
- if [ -n "$ORPHAN_WUS" ]; then
297
- echo "/build: step enumeration lacks story traceability (bassclef#358 violation)" >&2
298
- echo "Orphan steps (no US-NNN ref):" >&2
299
- echo "$ORPHAN_WUS" >&2
300
- exit 4
301
- fi
302
- ```
303
-
304
- ### Phase 2b — Adopter-mode framing (bassclef#943)
305
-
306
- Two paths — adopter-mode and operator-mode. Default is adopter when the parent /launch used `--local` (cold-adopter context); operator-mode otherwise. Mode detection reads `docs/preview-state/<slug>.yml`: when `local_url` is present, /launch shipped via the adopter path, so /build follows.
307
-
308
- #### Adopter-mode pre-dispatch surface
309
-
310
- Before Phase 3's dry-run plan fires, emit a plain-English summary the cold adopter can act on. No "WU", no "GRASP", no "Phase". The agent reads concrete numbers from the spec (step count, estimated lines from the decomposition, file list from /interpret-input's structural_hints) and substitutes them in.
311
-
312
- ```
313
- Got it — variant <N> (<variant short name>). Here's what I'm about to do:
314
-
315
- 1. Write the <stack name> app code for <CRUD verb 1>, <CRUD verb 2>,
316
- <CRUD verb 3>, and <CRUD verb 4> — about <line-count-range> lines
317
- across <file-count> files
318
- 2. Set up a local <database> database for your <domain noun>
319
- 3. Wire the <styling system> styling so it looks like the variant you picked
320
- 4. Run the tests to make sure everything works
321
- 5. Print a localhost URL when it's ready (about <time-estimate> minutes from now)
322
-
323
- You don't need to do anything while this runs. I'll let you know when
324
- your <app description> is up.
325
-
326
- Want me to start? [Y/n]
327
- ```
328
-
329
- Variable substitutions:
330
-
331
- | Placeholder | Source |
332
- |---|---|
333
- | `<N>` | `preview-state.yml`'s `selected_variant` |
334
- | `<variant short name>` | Variant's luminary signature (e.g., "cozy shared notebook") from the gallery |
335
- | `<stack name>` | Spec's chosen stack (e.g., "Next.js + SQLite + Tailwind") |
336
- | `<CRUD verb 1-4>` | InputArtifact's `structural_hints.verb_goal_pairs` first 4 items (e.g., "add", "edit", "search", "tag") |
337
- | `<line-count-range>` | Sum of decomposition step line estimates ± 25% range |
338
- | `<file-count>` | Count of files in decomposition's expected output |
339
- | `<database>` | Spec's chosen DB (e.g., "SQLite", "Postgres") |
340
- | `<domain noun>` | InputArtifact's `structural_hints.entities_seen` first item (e.g., "recipes", "tasks") |
341
- | `<styling system>` | Spec's chosen styling (e.g., "Tailwind") |
342
- | `<time-estimate>` | Sum of step baseline turns × ~30sec per turn (e.g., 25 turns × 30s = ~12 min) |
343
- | `<app description>` | InputArtifact's `intent` paragraph compressed to 5-7 words (e.g., "family recipe wiki") |
344
-
345
- Adopter answers `Y` → proceeds to Phase 3 dry-run + Phase 4 dispatch. Adopter answers `n` → /build exits cleanly.
346
-
347
- #### Adopter-mode during-dispatch progress messages
348
-
349
- Progress messages emitted between Phase 4 (BuilderDispatcher) and Phase 5 (VerifyOrchestrator) use plain English. The agent substitutes per-step descriptive language read from the spec's user stories:
350
-
351
- ```
352
- Writing the <story 1 description, e.g., "add-recipe screen">...
353
- Setting up the <story 2 description, e.g., "recipe database table">...
354
- Adding the <story 3 description, e.g., "search feature">...
355
- Running tests to make sure it all works...
356
- ```
357
-
358
- NOT: "Builder dispatching WU-3 of 6" / "GRASP responsibility matrix applied" / "Phase 12 deploy gate."
359
-
360
- #### Adopter-mode post-dispatch success surface
361
-
362
- After Phase 5 (VerifyOrchestrator) passes + Phase 6 (Merge orchestration) completes in --local context, emit:
363
-
364
- ```
365
- Done. Your <app description> is running at http://127.0.0.1:<port>
366
-
367
- Try it out:
368
- - <action 1 + interaction hint, e.g., "Click + to add a recipe">
369
- - <action 2 + interaction hint, e.g., "Tap any recipe to edit it">
370
- - <action 3 + interaction hint, e.g., "Search by ingredient with the bar at the top">
371
- - <action 4 + interaction hint, e.g., "Tap the heart to tag favorites">
372
-
373
- Want me to deploy it somewhere your family can use it? That's a few
374
- more steps and you'll need a <deploy host> account.
375
- ```
376
-
377
- Variable substitutions:
378
-
379
- | Placeholder | Source |
380
- |---|---|
381
- | `<app description>` | Same as pre-dispatch |
382
- | `<port>` | Local server port (default 3000 for Next.js; from spec) |
383
- | `<action N + interaction hint>` | Each verb-goal pair from InputArtifact's `structural_hints.verb_goal_pairs` + a sensible interaction verb ("Click", "Tap", "Type", "Drag") |
384
- | `<deploy host>` | Spec's deploy target or "Vercel or Fly.io" if not yet chosen |
385
-
386
- The deploy offer respects `.claude/rules/guardrails.md` — operator must confirm before any external account binding.
387
-
388
- #### Operator-mode preserved verbatim
389
-
390
- Today's Phase 3 dry-run + Phase 4 stub + structured output stays the default for operator workflows (no `--local` parent, no adopter context):
391
-
392
- ```
393
- **Flash:** /build dry-run for <goal-slug> — N steps planned, ~M turns, ~T hours wall, prod approval staged.
394
-
395
- **Kiss:** I would ship N user stories from <goal-slug> as N atomic PRs.
396
- [detailed phase-by-phase plan]
397
- ```
398
-
399
- Mode selection:
400
-
401
- ```
402
- if preview_state.local_url is present:
403
- mode = "adopter"
404
- else:
405
- mode = "operator"
406
- ```
407
-
408
- Operator can force adopter-mode via `--adopter-mode` flag (V2). Operator can force operator-mode via `--operator-mode` flag (V2).
409
-
410
- ### Phase 3 — DryRunPlanner
411
-
412
- Walk step enumeration; for each, plan what would happen in live mode:
413
-
414
- ```
415
- For each step in spec:
416
- - Branch name: feature/<goal-slug>-stack-<N>-<wu-slug>
417
- - Story refs: US-NNN
418
- - Acceptance criteria: inherited from story
419
- - Builder dispatch context: spec section + decomp matrix entry
420
- - /verify gate: matches change type (UI / unit / integration)
421
- - PR open: stacked-atomic per pr-strategy.md
422
- - Estimated turns: ~25 per step baseline (refine per spec complexity)
423
- ```
424
-
425
- Emit structured output per spec (see "Dry-run output structure"
426
- in `docs/specs/2026-04-30b-build-skill.md`):
427
-
428
- ```markdown
429
- **Flash:** /build dry-run for <goal-slug> — N steps planned, ~M turns, ~T hours wall, prod approval staged.
430
-
431
- **Kiss:** I would ship N user stories from <goal-slug> as N atomic
432
- PRs. Each WU dispatches Builder, runs /verify, opens PR. Operator
433
- merges inline. After all merge + CI green, /deploy-prod stages a
434
- prod deploy you approve from phone via GitHub Environment.
435
-
436
- ---
437
-
438
- ## Phase 0 — Pre-flight ✅
439
- - Goal slug, status, branch, blast-radius scan all PASSED.
440
-
441
- ## Phase 1 — Input contract
442
- - Spec, decomp, ux-migration paths
443
- - Stories: N (US-001 .. US-NNN)
444
-
445
- ## Phase 2 — Reference validation ✅
446
- - All steps reference stories
447
- - All acceptance criteria inherit from stories
448
-
449
- ## Phase 3 — Planned steps (in order)
450
- [per-step breakdown]
451
-
452
- ## Phase 4-7 (LIVE — STUBBED tonight)
453
- TODO: live execution — operator-supervised first run only.
454
- [detailed would-happen description per phase]
455
-
456
- ## Estimated totals
457
- - Turns: <sum>
458
- - Wall: <sum> hours
459
- - PRs: N + 1 (deploy)
460
- - Operator-tap moments: 1 (prod deploy approval via GitHub Environment)
461
- ```
462
-
463
- ### Phase 4 — BuilderDispatcher (LIVE — STUBBED)
464
-
465
- **Amendment per #1171 — Builder inputs name OOAD artifacts.**
466
-
467
- Tonight emits literal:
468
-
469
- ```
470
- TODO: live execution — operator-supervised first run only. Would:
471
- dispatch Builder against step <slug> with context from spec section
472
- <X> + decomp matrix entry <Y> + paired OOAD artifacts (decomposition
473
- + interaction-design + use-case per goal doc references). Branch:
474
- feature/<goal-slug>-stack-<N>.
475
- ```
476
-
477
- The string `TODO: live execution` is grep-able for audit. Live mode
478
- (future PR) replaces stub with `/autonomous start --from-spec=<path>
479
- --wu=<slug>` invocation. Builder receives paired OOAD artifacts named
480
- in the goal doc `references` array — decomposition (grep for
481
- `type: decomposition`), interaction-design (grep for
482
- `type: interaction-design`), use-case (grep for `type: use-case`).
483
- Per #1171 — every OOAD artifact consulted for any engineering change.
484
-
485
- ### Phase 5 — VerifyOrchestrator (LIVE — STUBBED)
486
-
487
- Tonight emits literal:
488
-
489
- ```
490
- TODO: live execution — would run /verify gate against branch <name>.
491
- Match change type (UI smoke / unit / integration) and BLOCK on
492
- failure with line-numbered output.
493
- ```
494
-
495
- ### Phase 5.5 — Amendment B2: /pattern-review trigger reads decomposition (per #1150 + #1167)
496
-
497
- When the goal references a decomposition doc AND that doc contains `@pattern` references, dispatch `/pattern-review` with the decomposition path as input. Skip when the decomposition names no `@pattern`. Contract per `.claude/rules/pattern-annotation.md` L57-62.
498
-
499
- Advisory in V1 per adr-deviation-challenge calibration pattern. Non-blocking; emits findings to operator surface for review at PR review time.
500
-
501
- ```bash
502
- # After Phase 5 /verify passes:
503
- DECOMP_PATH=$(echo "$BET_JSON" | jq -r '.references[]? | select(.type == "decomposition") | .id // empty' | head -1)
504
- if [ -n "$DECOMP_PATH" ] && [ -f "docs/decompositions/${DECOMP_PATH}.md" ]; then
505
- if grep -qE '^\s*-?\s*@pattern' "docs/decompositions/${DECOMP_PATH}.md"; then
506
- echo "/build: Phase 5.5 dispatching /pattern-review (decomposition names @pattern refs)" >&2
507
- # TODO: live execution — /pattern-review dispatch when Phase 5.5 flips from advisory to live
508
- echo "TODO: live execution — would dispatch /pattern-review $DECOMP_PATH" >&2
509
- fi
510
- fi
511
- ```
512
-
513
- ### Phase 6 — Merge orchestration (LIVE — STUBBED)
514
-
515
- Tonight emits literal:
516
-
517
- ```
518
- TODO: live execution — would open PR (stacked-atomic per pr-strategy)
519
- + retarget-before-merge per branch-stacking.md if dependent stack PR
520
- already open. Operator merges inline.
521
- ```
522
-
523
- ### Phase 7 — ApprovalGateLink (LIVE — STUBBED)
524
-
525
- Tonight emits literal:
526
-
527
- ```
528
- TODO: live execution — when all steps merged + CI green, would dispatch
529
- /deploy-prod. /deploy-prod routes through GitHub Environment +
530
- required-reviewer rail per manual-prod-approval.md. Operator approves
531
- prod deploy via GitHub UI from phone. /build NEVER bypasses this rail.
532
- ```
533
-
534
- <!-- FKGL-EXEMPT: Phase 7.5 references paths + skip criteria per architect-review SKILL; technical dispatch stub matches sibling STUB pattern -->
535
- ### Phase 7.5 — /architect-review auto-dispatch (LIVE — STUBBED, per #1437 Step 2 wiring)
536
-
537
- After Phase 6 merges land + CI green + before Phase 7 approval-gate fires. Check skip criteria per `.claude/skills/architect-review/SKILL.md` § Skip criteria. When skip criteria hold (docs-only session, single-file quick-fix, under 10 commits since last review, operator explicit-defer), log the skip in the build summary and continue to Phase 7. Otherwise dispatch `/architect-review`; the review produces its own report at `docs/architecture/reviews/YYYY-MM-DD.md` + finding tickets; return summary line into the build's operator surface.
538
-
539
- See `.claude/skills/architect-review/SKILL.md` § Distinct from Reviewer agent for boundary vs the per-PR CodeReviewer agent — /build's per-PR CodeReviewer dispatch (via Reviewer agent per Phase 6) is orthogonal to this Phase 7.5 architectural sweep.
540
-
541
- Tonight emits literal:
542
-
543
- ```
544
- TODO: live execution — would evaluate skip criteria + either skip with log
545
- line OR dispatch /architect-review + fold summary into build operator surface.
546
- Skip criteria check + dispatch both stubbed pending #1437 Step 3 (Tier 0 test
547
- for dispatch behavior).
548
- ```
549
- <!-- /FKGL-EXEMPT -->
550
-
551
- ### Phase 8 — Operator surface (StatusSurface)
552
-
553
- At every phase boundary, emit the bassclef#357 flash + kiss block.
554
- The Phase 0-3 output IS the operator's preview surface. Full structure
555
- in `docs/specs/2026-04-30b-build-skill.md` §"Dry-run output structure".
556
-
557
- ## Hard constraints
558
-
559
- - **MUST refuse from main branch** — feature branch required
560
- - **MUST resolve goal via state_iteration_bet_get** — no ad-hoc parsing
561
- - **MUST validate references exist** — state_reference_check; fail fast
562
- - **MUST enforce blast-radius floor at Phase 0** — mechanical, no override
563
- - **MUST cite bassclef#357 flash + kiss in operator output** — Step 0 of procedure
564
- - **MUST emit literal "TODO: live execution" strings in Phase 4-7** — grep-able for audit
565
- - **MUST NOT execute live Phase 4-7 work tonight** — stubs only until follow-up goal validates first supervised run
566
-
567
- ## Reserved-names check
568
-
569
- `build` not on `standards/reserved-skill-names.md` list (verified
570
- 2026-04-30 during bassclef#359 filing).
571
-
572
- ## Failure mode summary
573
-
574
- | Exit code | Phase | Condition |
575
- |---|---|---|
576
- | 0 | All | Phase 0-3 output produced + Phase 4-7 stub trace; no errors |
577
- | 1 | 0 | Goal not found OR not active |
578
- | 2 | 0 | Running from main branch |
579
- | 3 | 0 | Blast-radius floor violation |
580
- | 4 | 1-2 | Reference dangling OR step orphan (no story traceability) |
581
-
582
- ## Test fixtures (synthetic — see scripts/tests/build-skill.test.sh)
583
-
584
- - `valid-bet` — well-shaped; Phase 0-3 PASS; produces expected output
585
- - `floor-violation-bet` — references `src/lib/auth/login.ts`; Phase 0 exit 3
586
- - `dangling-ref-bet` — frontmatter references nonexistent spec; Phase 1 exit 4
587
- - `no-story-traceability-bet` — step enumeration without US-NNN; Phase 2 exit 4
588
-
589
- ## Composes with
590
-
591
- - `/launch` — UPSTREAM producer (Phase 14 iteration-goal draft)
592
- - `/autonomous start` — DOWNSTREAM dispatch (live mode; STUBBED tonight)
593
- - `/verify` — DOWNSTREAM gate (live mode; STUBBED tonight)
594
- - `/deploy-prod` — DOWNSTREAM stage (live mode; STUBBED tonight)
595
- - `/longrun` — composes for long goals (>50t); /build invocation can
596
- trigger /longrun automatically (designed; not implemented tonight)
597
- - `/value-prop` (flash mode) — Step 0 operator surface
598
- - `/kiss` (words mode) — Step 0 operator surface
599
-
600
- ## Distinct from
601
-
602
- - `/auto-fix` — narrow defect lane (one fix, one PR). /build is full
603
- Construction execution (multiple steps, multiple PRs, deploy).
604
- - `/launch` — produces the input. /build consumes it.
605
- - `/autonomous start` — primitive /build composes. /build is the
606
- composer; /autonomous start is one of the things it dispatches.
607
-
608
- ## Why this skill exists
609
-
610
- Per bassclef#335 epic: "Missing: a composer skill that closes the
611
- gap — takes a /launch (formerly /preview-build) output, dispatches Builder agent,
612
- tracks step PRs, triggers /deploy-prod on completion. This is the
613
- skill that turns 'talking-out-loud → functioning app in prod' into
614
- a single dispatch."
615
-
616
- Tonight ships the SHAPE + SCAFFOLD + DRY-RUN. Tomorrow's
617
- operator-supervised first live run validates the input contract +
618
- blast-radius enforcement + dry-run accuracy. Live execution paths
619
- go from STUBBED to implemented in a follow-up goal AFTER first run
620
- ships clean.
621
-
622
- ## Open questions (for live-mode follow-up)
623
-
624
- - When STUB Phase 4-7 become live: how does /build resume on
625
- interruption? Likely composes /longrun recovery primitives.
626
- - Should `/build <slug>` automatically compose `/longrun` if
627
- estimated step count > 50t? Operator-friendly default.
628
- - /stage (formerly /preview) /launch (formerly /preview-build) renames (bassclef#359) — operator
629
- approves rename goal; /build's references update mechanically.
630
-
631
- ## Closes (when this PR ships + first live run validates)
632
-
633
- - bassclef#335 (the /build composer epic — partial; live mode in
634
- follow-up)
635
- - Locks /build name (bassclef#359 sequencing)
636
- - Validates /launch (formerly /preview-build)'s post-bassclef#358 output contract
637
-
638
- ## Output discipline
639
-
640
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.