@thebassclef/lite 0.0.1 → 0.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.
- package/LICENSE +202 -0
- package/README.md +85 -4
- package/dist/cli.cjs +1610 -0
- package/dist/cli.js +1587 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +51 -3
- package/substrate/.bassclef/lite-manifest.json +1794 -0
- package/substrate/.claude/agents/architect.md +70 -0
- package/substrate/.claude/agents/builder.md +114 -0
- package/substrate/.claude/agents/designer.md +156 -0
- package/substrate/.claude/agents/reviewer.md +88 -0
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
- package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
- package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
- package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
- package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
- package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
- package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
- package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +452 -0
- package/substrate/.claude/hooks/session-end.sh +433 -0
- package/substrate/.claude/hooks/session-reflection.sh +303 -0
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
- package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
- package/substrate/.claude/hooks/state-validate.sh +271 -0
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
- package/substrate/.claude/hooks/temperance-gate.sh +147 -0
- package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +434 -0
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
- package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
- package/substrate/.claude/luminaries/alan-cooper.md +170 -0
- package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
- package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/substrate/.claude/luminaries/ash-maurya.md +121 -0
- package/substrate/.claude/luminaries/bill-buxton.md +210 -0
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
- package/substrate/.claude/luminaries/don-norman.md +173 -0
- package/substrate/.claude/luminaries/edward-tufte.md +179 -0
- package/substrate/.claude/luminaries/eric-evans.md +160 -0
- package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
- package/substrate/.claude/luminaries/gang-of-four.md +157 -0
- package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
- package/substrate/.claude/luminaries/karl-popper.md +132 -0
- package/substrate/.claude/luminaries/kent-beck.md +168 -0
- package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
- package/substrate/.claude/luminaries/martin-fowler.md +164 -0
- package/substrate/.claude/luminaries/michael-feathers.md +125 -0
- package/substrate/.claude/luminaries/michael-nygard.md +118 -0
- package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
- package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/substrate/.claude/luminaries/sophia-prater.md +193 -0
- package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
- package/substrate/.claude/rules/artifact-ingestion.md +179 -0
- package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
- package/substrate/.claude/rules/blocked-items.md +146 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
- package/substrate/.claude/rules/operator-facing-prose.md +196 -0
- package/substrate/.claude/rules/plain-english-discipline.md +154 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
- package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
- package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
- package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +924 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +426 -0
- package/substrate/.claude/skills/luminary/SKILL.md +481 -0
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/substrate/.claude/skills/onboard-repo/SKILL.md +2190 -0
- package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
- package/substrate/.claude/skills/personas/SKILL.md +207 -0
- package/substrate/.claude/skills/promote/SKILL.md +283 -0
- package/substrate/.claude/skills/requirement/SKILL.md +98 -0
- package/substrate/.claude/skills/retro/SKILL.md +117 -0
- package/substrate/.claude/skills/riff/SKILL.md +114 -0
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/substrate/.claude/skills/session-end/SKILL.md +309 -0
- package/substrate/.claude/skills/session-log/SKILL.md +299 -0
- package/substrate/.claude/skills/skills/SKILL.md +228 -0
- package/substrate/.claude/skills/spec/SKILL.md +105 -0
- package/substrate/.claude/skills/sprint/SKILL.md +392 -0
- package/substrate/.claude/skills/stage/SKILL.md +384 -0
- package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/substrate/.claude/skills/temperance/SKILL.md +108 -0
- package/substrate/.claude/skills/use-case/SKILL.md +417 -0
- package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
- package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
- package/substrate/.claude/skills/verify/SKILL.md +160 -0
- package/substrate/.claude/skills/whereami/SKILL.md +307 -0
- package/substrate/AGENTS.md +79 -0
- package/substrate/CLAUDE-lite.md +85 -0
- package/substrate/CODE_OF_CONDUCT.md +28 -0
- package/substrate/CONTRIBUTING.md +177 -0
- package/substrate/README.md +173 -0
- package/substrate/SECURITY.md +19 -0
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/substrate/lib/clean-artifacts-sweep.sh +112 -0
- package/substrate/lib/code-comment-discipline.sh +144 -0
- package/substrate/lib/composer-preflight.sh +459 -0
- package/substrate/lib/hook-inject.sh +255 -0
- package/substrate/lib/luminary-pick.sh +96 -0
- package/substrate/lib/output-discipline.sh +143 -0
- package/substrate/lib/rewrite-check.sh +214 -0
- package/substrate/lib/state.sh +1372 -0
- package/substrate/lib/telemetry.sh +205 -0
- package/substrate/lib/tier-check.sh +138 -0
- package/substrate/lib/tier-dependency-audit.sh +933 -0
- package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
- package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/substrate/scripts/aggregate-telemetry.sh +217 -0
- package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
- package/substrate/scripts/generate-lite-manifest.sh +489 -0
- package/substrate/scripts/generate-tier-manifest.sh +28 -0
- package/substrate/scripts/intent-drift-check.sh +456 -0
- package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
- package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
- package/substrate/standards/bassclef-configs-schema.md +232 -0
- package/substrate/standards/bassclef-evolution.md +143 -0
- package/substrate/standards/bassclef-internal-jargon.md +244 -0
- package/substrate/standards/bassclef-managed-sentinel.md +96 -0
- package/substrate/standards/bassclef-source-config.md +228 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/lite-manifest-schema-changes.md +75 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/ogilvy-writing-rules.md +225 -0
- package/substrate/standards/opener-discipline.md +96 -0
- package/substrate/standards/operator-facing-prose-discipline.md +201 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/tech-stack-config.md +109 -0
- package/substrate/standards/tier-dependency-analysis.md +167 -0
- package/substrate/standards/tier-runtime-deps/lite.md +57 -0
- package/substrate/standards/tier-tag-schema.md +155 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,924 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: launch
|
|
4
|
+
description: "Turn an idea into a buildable plan. Produces a clickable mock gallery PLUS the spec, user stories, decomposition, and migration plan. Two sizes (medium, full). Two deploy modes — extended deploys mocks to a configured subdomain; --local writes everything to disk and serves the gallery on localhost (Anthropic API key only; no vendor accounts). For variants-only, use /stage."
|
|
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 Composer (Construction Transition)
|
|
18
|
+
|
|
19
|
+
End-to-end composer 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
|
+
composer 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 composer.** 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 — Composer 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 via trace-helper). Use
|
|
139
|
+
sparingly — defeats the purpose. See
|
|
140
|
+
`standards/composer-prerequisites.md` for full discipline.
|
|
141
|
+
|
|
142
|
+
The 6 checks: feature-branch, state-spine (auto-prep), personas,
|
|
143
|
+
budget, skill-registry (bassclef#271 race detection), deploy-host
|
|
144
|
+
(bassclef#449/#450 — refuses dispatch when `hosting_platform=none`
|
|
145
|
+
and `/launch-preview` would have nowhere to land).
|
|
146
|
+
|
|
147
|
+
The `--no-launch` mode is the variants-only escape hatch: produces
|
|
148
|
+
the prototype gallery without committing to launch a deploy host.
|
|
149
|
+
Use when `/stage` (light) or `/launch` is dispatched purely
|
|
150
|
+
for design exploration. Default is full chain (deploy-host required).
|
|
151
|
+
|
|
152
|
+
### Phase 0 — Pre-flight
|
|
153
|
+
|
|
154
|
+
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):
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
PARSE_OUT=$(bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/launch/parse-input-args.sh" "$@") || exit $?
|
|
158
|
+
|
|
159
|
+
TIER=$(echo "$PARSE_OUT" | jq -r .tier)
|
|
160
|
+
INPUT_TYPE=$(echo "$PARSE_OUT" | jq -r .input_type)
|
|
161
|
+
INPUT_SOURCE=$(echo "$PARSE_OUT" | jq -r .input_source)
|
|
162
|
+
BROWNFIELD_FLAG=$(echo "$PARSE_OUT" | jq -r .brownfield_flag)
|
|
163
|
+
LOCAL_MODE=$(echo "$PARSE_OUT" | jq -r '.local_mode // false')
|
|
164
|
+
REUSE_ARTIFACT_PATH=$(echo "$PARSE_OUT" | jq -r '.reuse_artifact_path // ""')
|
|
165
|
+
|
|
166
|
+
# Local mode announcement (bassclef#923 A2)
|
|
167
|
+
if [ "$LOCAL_MODE" = "true" ]; then
|
|
168
|
+
echo "launch: local mode — artifacts to disk + localhost gallery preview; Phase 12 skips bind-subdomain" >&2
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
# Reuse mode announcement (bassclef-upstream#716)
|
|
172
|
+
if [ -n "$REUSE_ARTIFACT_PATH" ]; then
|
|
173
|
+
echo "launch: reuse mode — using pre-shaped InputArtifact at $REUSE_ARTIFACT_PATH; Phase 1 skips interpret-input dispatch" >&2
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
# Tier-specific notes (parser already validated tier enum)
|
|
177
|
+
case "$TIER" in
|
|
178
|
+
full) echo "launch: full tier ships per-persona analysis + /synthetic-user; ensure /personas defined for consumer repo" >&2 ;;
|
|
179
|
+
esac
|
|
180
|
+
|
|
181
|
+
# Brownfield announcement
|
|
182
|
+
if [ "$BROWNFIELD_FLAG" = "true" ]; then
|
|
183
|
+
echo "launch: brownfield mode — input source is a repo (URL or local path); Phase 1 will dispatch /interpret-input --type=repo" >&2
|
|
184
|
+
fi
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Usage forms:**
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Legacy text mode (paragraph input)
|
|
191
|
+
/launch medium "Dramatically simplify deal display..."
|
|
192
|
+
|
|
193
|
+
# Local mode (bassclef#923 A2) — writes all artifacts to disk + serves
|
|
194
|
+
# the prototype gallery on localhost. No vendor accounts needed. Phase
|
|
195
|
+
# 12 (bind-subdomain) is replaced with scripts/launch/local-serve.sh.
|
|
196
|
+
/launch medium --local "build me a wiki app for sharing recipes with family"
|
|
197
|
+
|
|
198
|
+
# Reuse mode (bassclef-upstream#716) — reuse a pre-shaped InputArtifact
|
|
199
|
+
# from a prior chain instead of minting a fresh one. Phase 1 validates
|
|
200
|
+
# the file against input-artifact.schema.json + copies to the sprint slot
|
|
201
|
+
# + skips interpret-input.sh dispatch. Downstream phases run unchanged.
|
|
202
|
+
/launch medium --local --reuse-artifact docs/input-artifacts/2026-07-11-697-onboarding-ux.json
|
|
203
|
+
|
|
204
|
+
# Reuse mode with equals form
|
|
205
|
+
/launch medium --reuse-artifact=docs/input-artifacts/2026-07-11-697-onboarding-ux.json
|
|
206
|
+
|
|
207
|
+
# Brownfield mode — local repo path
|
|
208
|
+
/launch medium --brownfield ~/src/your-org/your-app
|
|
209
|
+
|
|
210
|
+
# Brownfield mode — GitHub URL (cloned to temp dir by /interpret-input)
|
|
211
|
+
/launch medium --brownfield https://github.com/your-org/your-app
|
|
212
|
+
|
|
213
|
+
# Equivalent --brownfield= form
|
|
214
|
+
/launch medium --brownfield=https://github.com/your-org/your-app
|
|
215
|
+
|
|
216
|
+
# Voice-input mode (Phase V Hey-Alexa MVD) — input text originated from
|
|
217
|
+
# voice dictation (macOS Fn-Fn or equivalent); intent extraction uses
|
|
218
|
+
# tolerant settings for spoken-text shape (looser grammar, lower
|
|
219
|
+
# confidence threshold). See standards/voice-input-pattern.md.
|
|
220
|
+
/launch medium --voice-input "build me a wiki app for sharing recipes with family"
|
|
221
|
+
|
|
222
|
+
# Combining flags — local + voice (e.g. friendly dictates intent on a
|
|
223
|
+
# laptop without vendor accounts)
|
|
224
|
+
/launch medium --local --voice-input "build me a wiki app for ..."
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Local mode (`--local`) — bassclef#923 A2:**
|
|
228
|
+
|
|
229
|
+
`/launch --local` prints a banner first. The banner shows which picker is active:
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
/launch --local — picker uses the LLM your Claude Code session provides.
|
|
233
|
+
|
|
234
|
+
✓ full-catalog picking — /pick-luminaries runs against the harness LLM.
|
|
235
|
+
This is the default.
|
|
236
|
+
✓ signal fallback — if the picker call fails, Phase 4 falls back to
|
|
237
|
+
/luminary recommend signal scoring.
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
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.
|
|
241
|
+
|
|
242
|
+
The banner ensures every adopter sees the same three-tier story
|
|
243
|
+
whether they hit it at the wiki, the README, the /onboard-repo Path B
|
|
244
|
+
prereqs, the prereqs-missing menu, the `lib/luminary-pick.sh` refusal
|
|
245
|
+
output, or here.
|
|
246
|
+
|
|
247
|
+
When the flag is set, the chain runs identically through Phases 1-11
|
|
248
|
+
(all artifacts land on disk). Phase 12 swaps deploy for a local HTTP
|
|
249
|
+
server:
|
|
250
|
+
|
|
251
|
+
- Phase 12-alt dispatches `bash scripts/launch/local-serve.sh
|
|
252
|
+
docs/prototypes/<sprint-slug>/` — wraps `python -m http.server` bound
|
|
253
|
+
to `127.0.0.1`, finds an open port starting at 8000
|
|
254
|
+
- Phase 13 (preview-state.yml) records `local_url` instead of
|
|
255
|
+
`bind_subdomain_url` per variant; the gallery URL is the one
|
|
256
|
+
surfaced to the operator
|
|
257
|
+
- Phase 0 pre-flight skips Amplify + Cloudflare adapter checks when
|
|
258
|
+
`--local` is set
|
|
259
|
+
- Operator stops the server later with
|
|
260
|
+
`bash scripts/launch/local-serve-stop.sh <sprint-slug>`
|
|
261
|
+
|
|
262
|
+
Local mode is the demo path for adopters without vendor accounts —
|
|
263
|
+
paragraph in, full artifact chain on disk, localhost preview.
|
|
264
|
+
|
|
265
|
+
**Voice-input mode (--voice-input):**
|
|
266
|
+
|
|
267
|
+
Per `standards/voice-input-pattern.md` + Phase V Hey-Alexa MVD goal (`docs/iteration-bets/2026-05-12-phase-v-hey-alexa-mvd.md`):
|
|
268
|
+
|
|
269
|
+
- Input text originated from voice (macOS dictation or equivalent)
|
|
270
|
+
- 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.
|
|
271
|
+
- Existing text-mode + brownfield-mode behavior unchanged when flag absent
|
|
272
|
+
- Composes with `--brownfield` (rare; voice-driven brownfield refactor is plausible but not the MVD path)
|
|
273
|
+
|
|
274
|
+
### Phase 1 — `/interpret-input`
|
|
275
|
+
|
|
276
|
+
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).
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Generate sprint slug + InputArtifact path
|
|
280
|
+
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)"
|
|
281
|
+
ARTIFACT_PATH="docs/input-artifacts/${SPRINT_SLUG}-input.json"
|
|
282
|
+
|
|
283
|
+
if [ -n "$REUSE_ARTIFACT_PATH" ]; then
|
|
284
|
+
# Reuse pre-shaped InputArtifact (bassclef-upstream#716)
|
|
285
|
+
# Validate against schema first; fail fast on invalid input
|
|
286
|
+
SCHEMA_PATH="${BASSCLEF_DIR:-$REPO_ROOT}/standards/state-spine/schemas/input-artifact.schema.json"
|
|
287
|
+
if command -v ajv >/dev/null 2>&1; then
|
|
288
|
+
if ! ajv validate -s "$SCHEMA_PATH" -d "$REUSE_ARTIFACT_PATH" --spec=draft2020 --strict 2>&1; then
|
|
289
|
+
echo "launch: --reuse-artifact file failed schema validation: $REUSE_ARTIFACT_PATH" >&2
|
|
290
|
+
echo "launch: run 'ajv validate -s $SCHEMA_PATH -d <path>' for details" >&2
|
|
291
|
+
exit 1
|
|
292
|
+
fi
|
|
293
|
+
else
|
|
294
|
+
echo "launch: WARN — ajv not found; skipping InputArtifact schema validation" >&2
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
# Copy the pre-shaped artifact to the sprint slot
|
|
298
|
+
mkdir -p docs/input-artifacts
|
|
299
|
+
cp "$REUSE_ARTIFACT_PATH" "$ARTIFACT_PATH"
|
|
300
|
+
echo "launch: copied pre-shaped artifact from $REUSE_ARTIFACT_PATH to $ARTIFACT_PATH" >&2
|
|
301
|
+
else
|
|
302
|
+
# Dispatch /interpret-input with the right type
|
|
303
|
+
bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/interpret-input.sh" \
|
|
304
|
+
"$INPUT_SOURCE" \
|
|
305
|
+
--type="$INPUT_TYPE" \
|
|
306
|
+
--persist \
|
|
307
|
+
--slug="${SPRINT_SLUG}-input"
|
|
308
|
+
fi
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
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.
|
|
312
|
+
|
|
313
|
+
**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.
|
|
314
|
+
|
|
315
|
+
### Phase 2 — `/objectory-decompose` (full BCE matrix)
|
|
316
|
+
|
|
317
|
+
Same as `/stage` Phase 2 — Jacobson method via `/objectory-decompose`.
|
|
318
|
+
Output: `docs/decompositions/<slug>-domain.md` with entity inventory
|
|
319
|
+
+ actor list + verb-goal pairs + BCE matrix.
|
|
320
|
+
|
|
321
|
+
**Distinction from /stage (formerly /preview)**: medium + full consume the FULL BCE
|
|
322
|
+
matrix downstream (in /ia-model + /interaction-design + /decompose
|
|
323
|
+
steps). Quick + light only consume the verb-goal pairs (for
|
|
324
|
+
/value-prop input).
|
|
325
|
+
|
|
326
|
+
### Phase 3 — `/value-prop` (brief mode for medium; verbose for full)
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
case "$TIER" in
|
|
330
|
+
medium) /value-prop --brief "<extracted_text>" ;; # claim + 3 RTBs
|
|
331
|
+
full) /value-prop --verbose "<extracted_text>" ;; # full Dunford/Moore positioning
|
|
332
|
+
esac
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Phase 3b — Deeper persona work (medium + full only)
|
|
336
|
+
|
|
337
|
+
Per roadmap §"Medium tier":
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
/personas # primary persona (medium); all personas (full)
|
|
341
|
+
/jtbd-tasks # top jobs (medium); all jobs (full)
|
|
342
|
+
case "$TIER" in
|
|
343
|
+
full) /value-prop-canvas <persona> ;; # per primary; per all (full)
|
|
344
|
+
esac
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
These outputs feed Phase 5's spec generation.
|
|
348
|
+
|
|
349
|
+
### Phase 3.5 — `/pick-luminaries` (in-turn picker for variant grounding)
|
|
350
|
+
|
|
351
|
+
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.
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
source "${BASSCLEF_DIR:-$HOME/src/sunj-labs/bassclef}/lib/luminary-pick.sh"
|
|
355
|
+
CATALOG=$(luminary_pick_catalog)
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Now Claude (in-turn) reads `$intent_text`, enumerates `$CATALOG`, picks `$N_VARIANTS` slugs whose lens fits. Writes JSON to `/tmp/luminary-pick.json`:
|
|
359
|
+
|
|
360
|
+
```json
|
|
361
|
+
{
|
|
362
|
+
"matched_luminaries": ["slug1", "slug2", "slug3"],
|
|
363
|
+
"rationale": "One short sentence per pick",
|
|
364
|
+
"picker_version": "bassclef-harness-pick-2.0",
|
|
365
|
+
"provider": "claude-code-harness"
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
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.
|
|
370
|
+
|
|
371
|
+
### Phase 4 — `/riff-prototypes` (with WU-11b Anthropic baseline)
|
|
372
|
+
|
|
373
|
+
Same as `/stage` Phase 4 — N+1 variants (N luminary-driven + 1
|
|
374
|
+
Anthropic baseline). Variant count by tier:
|
|
375
|
+
|
|
376
|
+
| Tier | N (luminary) | Total (with baseline) |
|
|
377
|
+
|---|---|---|
|
|
378
|
+
| medium | 3 | 4 |
|
|
379
|
+
| full | 3-5 | 4-6 |
|
|
380
|
+
|
|
381
|
+
**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=...`.
|
|
382
|
+
|
|
383
|
+
### Phase 5 — `/use-case` (Cockburn formalization, medium + full)
|
|
384
|
+
|
|
385
|
+
Per roadmap §"Medium tier":
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
/use-case "<primary-actor>" "<primary-goal>" # consumes /objectory-decompose verb-goal pairs
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Produces formal use-case document at `docs/use-cases/<slug>-<goal>.md`.
|
|
392
|
+
Full tier: one /use-case per primary goal (not just primary).
|
|
393
|
+
|
|
394
|
+
### Phase 5b — `/user-stories` (INVEST backlog tokens, medium + full)
|
|
395
|
+
|
|
396
|
+
Per bassclef#358 — closes the chain drift between /use-case and
|
|
397
|
+
/launch. Slices /use-case main scenario + extensions into
|
|
398
|
+
INVEST-validated user stories. Each story traces back to Persona →
|
|
399
|
+
JTBD → VPC → Use-case line.
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
/user-stories from-use-case "<uc-slug>" # slices the use-case from Phase 5
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Produces user-story files at `docs/user-stories/US-NNN-<slug>.md` +
|
|
406
|
+
traceability matrix at `docs/user-stories/_matrix.md`. Full tier:
|
|
407
|
+
walk every primary use-case + every extension through INVEST.
|
|
408
|
+
|
|
409
|
+
**Why this phase exists:** /launch's downstream consumer
|
|
410
|
+
(`/build`, bassclef#335) ships in stacked atomic per-step PRs.
|
|
411
|
+
INVEST's "Independent" + "Small" properties are exactly what makes
|
|
412
|
+
each step safely mergeable in isolation. Without this phase, Phase 14's
|
|
413
|
+
step enumeration is derived ad-hoc from /spec's acceptance criteria;
|
|
414
|
+
not INVEST-validated. With this phase, step enumeration ARE the
|
|
415
|
+
INVEST stories, with full traceability back to persona-level value.
|
|
416
|
+
|
|
417
|
+
**Distinction from /use-case (Phase 5):** /use-case = system behavior
|
|
418
|
+
spec ("what must the system do for this goal, including every
|
|
419
|
+
extension?"). /user-stories = backlog tokens ("what to ship in what
|
|
420
|
+
order, each independently shippable?"). Both feed downstream phases:
|
|
421
|
+
/use-case → /interaction-design (renders flow); /user-stories → /spec
|
|
422
|
+
(step enumeration) and /build (per-story Builder dispatch).
|
|
423
|
+
|
|
424
|
+
### Phase 6 — `/ia-model` (entity inventory → nav structure)
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
/ia-model # consumes /objectory-decompose entities
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
Output: `docs/ia-models/<slug>.md` — nav structure + labeling + screen
|
|
431
|
+
map derived from BCE entities.
|
|
432
|
+
|
|
433
|
+
### Phase 7 — `/interaction-design` (state + sequence diagrams)
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
/interaction-design # consumes /ia-model + /use-case
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Output: state diagrams + sequence diagrams in `docs/interaction-design/<slug>/`.
|
|
440
|
+
|
|
441
|
+
### Phase 8 — `/decompose` (GRASP responsibility assignment)
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
/decompose # consumes BCE matrix from /objectory-decompose + sequence diagrams from /interaction-design
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Output: `docs/decompositions/<slug>-grasp.md` — GRASP responsibility
|
|
448
|
+
matrix + interface identification + pattern selection (GoF/Fowler).
|
|
449
|
+
|
|
450
|
+
### Phase 9 — `/spec` (build-ready specification)
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
/spec # composes /value-prop + /personas + /use-case + /user-stories + /ia-model + /interaction-design + /decompose
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
Output: `docs/specs/<slug>.md` — buildable specification ready for
|
|
457
|
+
Construction. Includes:
|
|
458
|
+
- Acceptance criteria (testable; one per /user-stories acceptance line)
|
|
459
|
+
- Scope boundary (what's in / out)
|
|
460
|
+
- Open questions (operator must resolve before Construction)
|
|
461
|
+
- **`## Steps enumerated` section (REQUIRED, exact heading) per
|
|
462
|
+
bassclef#367** — derived from /user-stories output (bassclef#358).
|
|
463
|
+
Each story (US-NNN) maps to one `### WU-N` entry; the step's acceptance
|
|
464
|
+
criteria inherit from the story's. INVEST-validated by construction.
|
|
465
|
+
/build's Phase 1 parser greps for this exact heading.
|
|
466
|
+
|
|
467
|
+
### Phase 10 — `/prototype-gallery` (with back-nav injection)
|
|
468
|
+
|
|
469
|
+
Per `/prototype-gallery` SKILL.md §"Back-nav injection (bassclef#X)":
|
|
470
|
+
each variant copy in `public/prototypes/<slug>/` gets a back-nav header
|
|
471
|
+
injected at copy time. Master gallery includes:
|
|
472
|
+
|
|
473
|
+
- All N+1 variants with luminary attribution
|
|
474
|
+
- **Spec link** (`docs/specs/<slug>.md`) — visible to operator AND
|
|
475
|
+
cameos
|
|
476
|
+
- **Decomposition link** (GRASP matrix) — same
|
|
477
|
+
- **ux-migration link** — same
|
|
478
|
+
- Champion-challenger flag on baseline variant
|
|
479
|
+
|
|
480
|
+
The gallery is THE cameo-review surface. Luminary perspectives
|
|
481
|
+
(today: /visual-review complement-evaluator pairs; future: luminary-as-
|
|
482
|
+
agent runtime per roadmap Stage 3) consume the gallery + spec + decomp
|
|
483
|
+
to produce reviews per perspective. Reviews surface in PR body.
|
|
484
|
+
|
|
485
|
+
### Phase 11 — `/ux-migration` (chosen variant → production migration plan)
|
|
486
|
+
|
|
487
|
+
```bash
|
|
488
|
+
/ux-migration <chosen-variant-slug> # if base= provided, use that; else operator chooses post-gallery
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
Output: `docs/specs/ux-migration-<slug>.md` — token extraction +
|
|
492
|
+
prototype-HTML→React mapping table + work packages with dependency-aware
|
|
493
|
+
build order.
|
|
494
|
+
|
|
495
|
+
This is the `/ux-migration` MUST gate per existing prototype-variants
|
|
496
|
+
SKILL.md §"Step 7 — Selection → pipeline to Construction".
|
|
497
|
+
|
|
498
|
+
### Phase 12 — Deploy or local-serve (mode-gated)
|
|
499
|
+
|
|
500
|
+
**When `LOCAL_MODE != true` (extended / default):** `/bind-subdomain`
|
|
501
|
+
per variant + master gallery. Same as `/stage` Phase 6, but ALSO bind
|
|
502
|
+
the master gallery itself to a subdomain (e.g.,
|
|
503
|
+
`gallery-<sprint-slug>.<consumer-domain>`). Each variant URL includes
|
|
504
|
+
back-nav to master gallery URL. Best-effort per existing convention —
|
|
505
|
+
failures don't fail the chain.
|
|
506
|
+
|
|
507
|
+
**When `LOCAL_MODE == true` (bassclef#923 A2):** skip bind-subdomain
|
|
508
|
+
entirely. Dispatch `scripts/launch/local-serve.sh` against the gallery
|
|
509
|
+
directory. Capture the localhost URL:
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
LOCAL_URL=$(bash "${BASSCLEF_DIR:-$REPO_ROOT}/scripts/launch/local-serve.sh" \
|
|
513
|
+
"docs/prototypes/${SPRINT_SLUG}/")
|
|
514
|
+
|
|
515
|
+
if [ -z "$LOCAL_URL" ]; then
|
|
516
|
+
echo "launch: local-serve failed to start; gallery artifacts still on disk at docs/prototypes/${SPRINT_SLUG}/" >&2
|
|
517
|
+
# Don't fail the chain — disk artifacts are the load-bearing output
|
|
518
|
+
else
|
|
519
|
+
echo "launch: local gallery at ${LOCAL_URL}" >&2
|
|
520
|
+
fi
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
Per-variant URLs in local mode all point at the same localhost root
|
|
524
|
+
(path-based per ADR-016 prototype-gallery-url-pattern). No DNS, no
|
|
525
|
+
TLS, no Amplify, no Cloudflare. Stop the server later with
|
|
526
|
+
`scripts/launch/local-serve-stop.sh <sprint-slug>`.
|
|
527
|
+
|
|
528
|
+
### Phase 13 — Persist preview-state.yml (build-tier shape)
|
|
529
|
+
|
|
530
|
+
```yaml
|
|
531
|
+
# docs/preview-state/<sprint-slug>.yml
|
|
532
|
+
slug: <sprint-slug>
|
|
533
|
+
input_artifact: <sprint-slug>-input
|
|
534
|
+
decomposition: <sprint-slug>-domain
|
|
535
|
+
spec: <sprint-slug> # NEW vs /stage
|
|
536
|
+
grasp: <sprint-slug>-grasp # NEW vs /stage
|
|
537
|
+
ux_migration: ux-migration-<sprint-slug> # NEW vs /stage
|
|
538
|
+
status: build-ready # NEW vs /stage's "variants-ready"
|
|
539
|
+
current_tier: medium # or full
|
|
540
|
+
luminaries_used: [...]
|
|
541
|
+
current_variants:
|
|
542
|
+
- name: variant-a-<luminary>
|
|
543
|
+
is_baseline: false
|
|
544
|
+
bind_subdomain_url: ...
|
|
545
|
+
- name: variant-baseline-anthropic
|
|
546
|
+
is_baseline: true
|
|
547
|
+
bind_subdomain_url: ...
|
|
548
|
+
selected_variant: <if base= provided, that; else null pending operator pick>
|
|
549
|
+
created_at: <ISO timestamp>
|
|
550
|
+
created_by_session: <session-id>
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
`status: build-ready` is the operator-readable signal that Construction
|
|
554
|
+
can begin. `/build-iteration` (bassclef#335) refuses to run if
|
|
555
|
+
status != build-ready.
|
|
556
|
+
|
|
557
|
+
### Phase 14 — Scaffold Construction iteration-goal draft
|
|
558
|
+
|
|
559
|
+
```yaml
|
|
560
|
+
# docs/iteration-bets/<YYYY-MM-DD>-<sprint-slug>-construction.md (DRAFT)
|
|
561
|
+
---
|
|
562
|
+
slug: <YYYY-MM-DD>-<sprint-slug>-construction
|
|
563
|
+
phase: Construction
|
|
564
|
+
status: draft # operator must change to "active" before /build-iteration runs
|
|
565
|
+
parent_roadmap: docs/roadmaps/<roadmap-slug>.md # if known
|
|
566
|
+
parent_canvas: <if known>
|
|
567
|
+
parent_bet: <launch's own goal, if part of one>
|
|
568
|
+
preview_state: docs/preview-state/<sprint-slug>.yml
|
|
569
|
+
spec: docs/specs/<sprint-slug>.md
|
|
570
|
+
ux_migration: docs/specs/ux-migration-<sprint-slug>.md
|
|
571
|
+
decomposition: docs/decompositions/<sprint-slug>-grasp.md
|
|
572
|
+
references:
|
|
573
|
+
- {type: spec, id: <sprint-slug>}
|
|
574
|
+
- {type: decomposition, id: <sprint-slug>-grasp}
|
|
575
|
+
- {type: input-artifact, id: <sprint-slug>-input}
|
|
576
|
+
appetite:
|
|
577
|
+
mode: scope-bounded
|
|
578
|
+
estimated_turns: <derived from /spec step enumeration>
|
|
579
|
+
stopping_criteria:
|
|
580
|
+
- All step PRs filed (count from spec)
|
|
581
|
+
- Operator merges + CI green
|
|
582
|
+
- /deploy-prod dispatches successfully
|
|
583
|
+
---
|
|
584
|
+
|
|
585
|
+
## Sources read
|
|
586
|
+
|
|
587
|
+
- spec: docs/specs/<sprint-slug>.md
|
|
588
|
+
- decomposition: docs/decompositions/<sprint-slug>-grasp.md
|
|
589
|
+
- ux-migration: docs/specs/ux-migration-<sprint-slug>.md
|
|
590
|
+
- preview-state: docs/preview-state/<sprint-slug>.yml
|
|
591
|
+
- input-artifact: docs/input-artifacts/<sprint-slug>-input.json
|
|
592
|
+
|
|
593
|
+
## What I'm NOT reading (with reason)
|
|
594
|
+
|
|
595
|
+
- (operator fills in if specific exclusions apply)
|
|
596
|
+
|
|
597
|
+
## Iteration Goal — Construction of <slug>
|
|
598
|
+
|
|
599
|
+
**Phase**: Construction
|
|
600
|
+
|
|
601
|
+
**Scope**:
|
|
602
|
+
(operator reviews + tightens; spec is the source of truth)
|
|
603
|
+
|
|
604
|
+
**Risk being retired**:
|
|
605
|
+
(derived from spec acceptance criteria)
|
|
606
|
+
|
|
607
|
+
**Business value being proven**:
|
|
608
|
+
(derived from /value-prop output)
|
|
609
|
+
|
|
610
|
+
**Lovability signal**:
|
|
611
|
+
(derived from chosen variant's luminary signature + /value-prop)
|
|
612
|
+
|
|
613
|
+
**Viability signal**:
|
|
614
|
+
(derived from /spec acceptance criteria; operator confirms)
|
|
615
|
+
|
|
616
|
+
**Appetite**:
|
|
617
|
+
(derived from spec step enumeration; operator finalizes)
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
This is a DRAFT — operator reviews, edits, commits status:active. Then
|
|
621
|
+
`/build-iteration <slug>-construction` dispatches Builder agent.
|
|
622
|
+
|
|
623
|
+
### Phase 14b — Completion handoff (bassclef#941)
|
|
624
|
+
|
|
625
|
+
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).
|
|
626
|
+
|
|
627
|
+
#### Adopter-mode completion (default for `--local`)
|
|
628
|
+
|
|
629
|
+
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:
|
|
630
|
+
|
|
631
|
+
```
|
|
632
|
+
I made you N directions for your family recipe wiki. Walk through them on
|
|
633
|
+
your phone or laptop at <LOCAL_URL> and tell me which one feels right.
|
|
634
|
+
|
|
635
|
+
When you've picked, just tell me — "I like variant 2" or "#3 looks
|
|
636
|
+
great".
|
|
637
|
+
|
|
638
|
+
Here's what happens next:
|
|
639
|
+
|
|
640
|
+
1. I'll write the formal artifacts for your chosen direction only:
|
|
641
|
+
- The use case — what the app does step-by-step (Cockburn style)
|
|
642
|
+
- The user stories — the small, shippable slices ("I want to add a
|
|
643
|
+
recipe", "I want to tag recipes for weeknight dinners", etc.)
|
|
644
|
+
- The information architecture — the screens, the nav, where each
|
|
645
|
+
screen lives
|
|
646
|
+
- The interaction design — what happens when you click each thing
|
|
647
|
+
- The responsibility map — which code module owns what
|
|
648
|
+
- The build spec — the checklist your app code is measured against
|
|
649
|
+
- The migration plan — how to ship it step by step
|
|
650
|
+
2. Then I'll write the actual app code — add, edit, search, tag, the
|
|
651
|
+
whole thing — using those artifacts as the checklist.
|
|
652
|
+
3. You'll get a working local version to play with in about 15 minutes.
|
|
653
|
+
|
|
654
|
+
You're seeing N directions BEFORE I write any of those formal artifacts
|
|
655
|
+
because the cheap-vs-expensive trade-off is real:
|
|
656
|
+
|
|
657
|
+
- The variants you're looking at are CHEAP — same data shape, four
|
|
658
|
+
visual treatments, about 4 minutes total. Showing you four lets you
|
|
659
|
+
pick the right direction before I invest.
|
|
660
|
+
- The formal write-up (use cases, user stories, IA, interaction design,
|
|
661
|
+
GRASP, spec, migration plan) is EXPENSIVE — 10-15 minutes per
|
|
662
|
+
direction. Running that seven times would burn an hour.
|
|
663
|
+
- So: cheap first → you commit → expensive run, once, for the direction
|
|
664
|
+
you picked.
|
|
665
|
+
|
|
666
|
+
If any depth-link inside a variant says "coming after you pick" — that's
|
|
667
|
+
the contract. The link materializes once you've picked.
|
|
668
|
+
|
|
669
|
+
None of them feel right? Tell me what's off and I'll generate new
|
|
670
|
+
directions for you. (See /launch --refine, bassclef#942.)
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
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.
|
|
674
|
+
|
|
675
|
+
The adopter-mode template **surfaces** (per bassclef#969):
|
|
676
|
+
- 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)
|
|
677
|
+
- The chain-ordering rationale (variants are cheap shared data; formal artifacts are expensive per-direction; cheap first → commit → expensive once)
|
|
678
|
+
- The depth-link "coming after you pick" contract (per bassclef#971)
|
|
679
|
+
|
|
680
|
+
The adopter-mode template **skips entirely**:
|
|
681
|
+
- The DRAFT iteration-goal review framing (Sam doesn't review goals).
|
|
682
|
+
- The `selected_variant:` YAML edit instruction.
|
|
683
|
+
- The `status: draft → status: active` frontmatter flip instruction.
|
|
684
|
+
- The bare `/build <slug>-construction` command name.
|
|
685
|
+
|
|
686
|
+
#### Natural-language variant selection (talk-to-pick)
|
|
687
|
+
|
|
688
|
+
Agent listens for the adopter's variant selection in natural language and auto-handles the YAML + frontmatter mechanics. Recognized phrases (case-insensitive, fuzzy):
|
|
689
|
+
|
|
690
|
+
- "I like variant N" / "variant N" / "#N" / "the Nth one" / "number N"
|
|
691
|
+
- "the cozy one" / "the minimal one" / "the bold one" — fuzzy-matches against variant names or luminary signatures in the gallery
|
|
692
|
+
- "let's go with the first" / "the second" / "the last"
|
|
693
|
+
|
|
694
|
+
When matched, the agent automatically:
|
|
695
|
+
|
|
696
|
+
1. Updates `selected_variant: <N or slug>` in `docs/preview-state/<sprint-slug>.yml`
|
|
697
|
+
2. Flips iteration-goal frontmatter `status: draft → active` in `docs/iteration-bets/<sprint-slug>-construction.md`
|
|
698
|
+
3. Surfaces the /build dispatch with plain-English framing (per bassclef#943 — `/build` adopter-mode framing)
|
|
699
|
+
|
|
700
|
+
The adopter never sees the YAML or frontmatter mechanics. The agent confirms in plain English:
|
|
701
|
+
|
|
702
|
+
```
|
|
703
|
+
Got it — going with the cozy notebook direction (variant 2). I'll start
|
|
704
|
+
writing your app code now. About 15 minutes.
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
#### Operator-mode completion (non-`--local` or operator override)
|
|
708
|
+
|
|
709
|
+
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):
|
|
710
|
+
|
|
711
|
+
```
|
|
712
|
+
Your next actions, in order
|
|
713
|
+
|
|
714
|
+
1. Walk the gallery → pick a variant on your phone or laptop.
|
|
715
|
+
2. Edit selected_variant: in docs/preview-state/<slug>.yml.
|
|
716
|
+
3. Flip the iteration-goal frontmatter status: draft → status: active.
|
|
717
|
+
4. Run /build <slug>-construction — Builder dispatches per step.
|
|
718
|
+
|
|
719
|
+
Skipped vs full /launch chain (available if you want depth):
|
|
720
|
+
- /use-case (Cockburn formalization)
|
|
721
|
+
- /user-stories (INVEST backlog tokens)
|
|
722
|
+
- /decompose (GRASP responsibility audit)
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
Operator-mode also surfaces the natural-language listener path as a convenience — operators can talk-to-pick too if they prefer.
|
|
726
|
+
|
|
727
|
+
#### Mode selection
|
|
728
|
+
|
|
729
|
+
```
|
|
730
|
+
if "--local" flag is set:
|
|
731
|
+
mode = "adopter"
|
|
732
|
+
else:
|
|
733
|
+
mode = "operator"
|
|
734
|
+
|
|
735
|
+
# Operator can force adopter-mode for demos via --adopter-mode flag (V2).
|
|
736
|
+
# Operator can force operator-mode in a --local context via --operator-mode flag.
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
#### Refine path (bassclef#942 — "none of these feel right")
|
|
740
|
+
|
|
741
|
+
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.
|
|
742
|
+
|
|
743
|
+
**Natural-language listener (default in adopter mode).** Recognized phrases (case-insensitive, fuzzy):
|
|
744
|
+
|
|
745
|
+
- "none of these feel right"
|
|
746
|
+
- "none feel right"
|
|
747
|
+
- "they all feel too X" (cold / busy / corporate / glossy / minimal)
|
|
748
|
+
- "I want something more X"
|
|
749
|
+
- "can you try again"
|
|
750
|
+
- "let me see other options"
|
|
751
|
+
- "I don't love any of these"
|
|
752
|
+
|
|
753
|
+
When matched, the agent asks one short follow-up if the cues don't include a specific direction:
|
|
754
|
+
|
|
755
|
+
```
|
|
756
|
+
What's off? Too busy? Too cold? Missing something specific?
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
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`).
|
|
760
|
+
|
|
761
|
+
**Explicit flag form (operator convenience):**
|
|
762
|
+
|
|
763
|
+
```bash
|
|
764
|
+
/launch --refine "make them feel more like a worn cookbook, less like an app"
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
The `--refine` flag carries the refinement intent directly without the conversational round-trip. Operators in scripted workflows prefer this.
|
|
768
|
+
|
|
769
|
+
**Refinement execution.** Once refinement intent is captured:
|
|
770
|
+
|
|
771
|
+
1. Agent appends the refinement intent to the original intent paragraph (preserves lineage; doesn't replace the original)
|
|
772
|
+
2. Re-dispatches `/pick-luminaries` (Phase 3.5) — fresh LLM pick reads the combined intent + refinement context, picks different luminaries than the prior pass
|
|
773
|
+
3. Re-dispatches Phase 4 (`/riff-prototypes`) — generates a new gallery with the refined picks
|
|
774
|
+
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)
|
|
775
|
+
|
|
776
|
+
**InputArtifact lineage.** Each refinement pass records:
|
|
777
|
+
|
|
778
|
+
```json
|
|
779
|
+
{
|
|
780
|
+
"refinement_passes": [
|
|
781
|
+
{
|
|
782
|
+
"intent": "make them feel more like a worn cookbook, less like an app",
|
|
783
|
+
"timestamp": "2026-06-13T13:15:00Z",
|
|
784
|
+
"generated_variants": ["variant-paula-scher", "variant-ellen-lupton", "variant-jenifer-tidwell"],
|
|
785
|
+
"selected_after_refine": null
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"intent": "still too crisp; try warmer, more handwritten",
|
|
789
|
+
"timestamp": "2026-06-13T13:24:00Z",
|
|
790
|
+
"generated_variants": ["variant-edward-tufte", "variant-eric-meyer", "variant-don-norman"],
|
|
791
|
+
"selected_after_refine": 2
|
|
792
|
+
}
|
|
793
|
+
]
|
|
794
|
+
}
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
The lineage preserves what was tried + which variant finally won.
|
|
798
|
+
|
|
799
|
+
**3-pass cap.** After 3 refinement passes, the agent surfaces a step-back prompt:
|
|
800
|
+
|
|
801
|
+
```
|
|
802
|
+
We've tried 3 directions. Want to step back and rethink the intent
|
|
803
|
+
paragraph itself? Or pick the closest variant we've generated so far
|
|
804
|
+
and refine the details in /build?
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
This prevents infinite-loop refinement. The cap is configurable via `--refine-cap N` flag (default 3) for operators who want longer runs.
|
|
808
|
+
|
|
809
|
+
**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.
|
|
810
|
+
|
|
811
|
+
### Phase 15 — Open PR
|
|
812
|
+
|
|
813
|
+
PR body includes:
|
|
814
|
+
- All variant URLs (with back-nav to gallery)
|
|
815
|
+
- Master gallery URL
|
|
816
|
+
- Spec / GRASP / ux-migration links (visible for cameo review)
|
|
817
|
+
- Champion-challenger ratio summary
|
|
818
|
+
- Construction iteration-goal draft path (operator's next action)
|
|
819
|
+
- Bind-subdomain status per variant
|
|
820
|
+
|
|
821
|
+
PR body MUST surface: "Operator's next action: review the Construction
|
|
822
|
+
iteration-goal draft at <path>; if approved, run `/build-iteration
|
|
823
|
+
<slug>-construction` (bassclef#335)."
|
|
824
|
+
|
|
825
|
+
## Tier behavior (BUILD-only — see /stage (formerly /preview) for prototype tiers)
|
|
826
|
+
|
|
827
|
+
| Tier | Phase B MVP | Status |
|
|
828
|
+
|---|---|---|
|
|
829
|
+
| `quick` | ❌ Refused — use `/stage quick` | redirected |
|
|
830
|
+
| `light` | ❌ Refused — use `/stage light` | redirected |
|
|
831
|
+
| `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 |
|
|
832
|
+
| `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) |
|
|
833
|
+
|
|
834
|
+
## Failure modes (Phase B MVP scope)
|
|
835
|
+
|
|
836
|
+
Same baseline as `/stage` PLUS:
|
|
837
|
+
|
|
838
|
+
| Failure | Behavior |
|
|
839
|
+
|---|---|
|
|
840
|
+
| `/use-case` produces empty extension list | Proceed; warn that spec may be too thin for Construction |
|
|
841
|
+
| `/spec` validation fails (missing required acceptance criteria) | BLOCK; fix or operator override |
|
|
842
|
+
| `/ux-migration` fails (no design tokens, no variant chosen) | BLOCK; require operator pick variant via `base=<slug>` first |
|
|
843
|
+
| Construction iteration-goal draft frontmatter doesn't validate | BLOCK; state-validate.sh hook surfaces missing fields |
|
|
844
|
+
|
|
845
|
+
## Rules
|
|
846
|
+
|
|
847
|
+
- **PR-first, always** — same as `/stage`
|
|
848
|
+
- **All state writes through accessor** — same as `/stage`
|
|
849
|
+
- **Stub-mode tolerance** — same as `/stage`
|
|
850
|
+
- **Champion-challenger captured** — `is_baseline` flag preserved
|
|
851
|
+
- **Best-effort bind-subdomain** — same as `/stage`
|
|
852
|
+
- **Spec + decomp + ux-migration always surfaced in gallery** —
|
|
853
|
+
cameo-review-by-default; non-negotiable
|
|
854
|
+
- **Construction iteration-goal draft is a DRAFT** — operator MUST
|
|
855
|
+
review + commit status:active before `/build-iteration` runs
|
|
856
|
+
|
|
857
|
+
## Skipping / Aborting
|
|
858
|
+
|
|
859
|
+
- Same as `/stage`, plus:
|
|
860
|
+
- Spec validation failure: BLOCK; operator fixes via /spec re-run
|
|
861
|
+
- ux-migration step fails (no chosen variant): operator must run with
|
|
862
|
+
`base=<slug>` OR pick winner via gallery review
|
|
863
|
+
|
|
864
|
+
## Reserved-names check
|
|
865
|
+
|
|
866
|
+
`launch` is NOT on `standards/reserved-skill-names.md` list.
|
|
867
|
+
Verified during this skill creation.
|
|
868
|
+
|
|
869
|
+
## Relationship to other skills + standards
|
|
870
|
+
|
|
871
|
+
- `/stage` — sibling (prototype tiers; same input-handler interface)
|
|
872
|
+
- `/interpret-input` — Phase 1 producer (same as /stage (formerly /preview))
|
|
873
|
+
- `/objectory-decompose` — Phase 2 producer (same as /stage)
|
|
874
|
+
- `/value-prop` — Phase 3 producer (different mode by tier)
|
|
875
|
+
- `/personas`, `/jtbd-tasks`, `/value-prop-canvas` — Phase 3b
|
|
876
|
+
- `/riff-prototypes` (with WU-11b baseline) — Phase 4
|
|
877
|
+
- `/use-case` — Phase 5 (Cockburn formalization)
|
|
878
|
+
- `/user-stories` — Phase 5b (INVEST backlog tokens, bassclef#358) — slices /use-case into stories that drive Phase 14's step enumeration
|
|
879
|
+
- `/ia-model` — Phase 6 (entity → nav)
|
|
880
|
+
- `/interaction-design` — Phase 7 (state + sequence)
|
|
881
|
+
- `/decompose` — Phase 8 (GRASP)
|
|
882
|
+
- `/spec` — Phase 9 (build-ready specification)
|
|
883
|
+
- `/prototype-gallery` (with back-nav injection) — Phase 10
|
|
884
|
+
- `/ux-migration` — Phase 11 (chosen variant → production)
|
|
885
|
+
- `/bind-subdomain` — Phase 12 (deploy variants + gallery)
|
|
886
|
+
- `/synthetic-user` — Phase 4b (full tier only)
|
|
887
|
+
- `/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
|
|
888
|
+
- `/deploy-prod` — DOWNSTREAM final stage (after Construction)
|
|
889
|
+
|
|
890
|
+
## What this skill enables (post-merge)
|
|
891
|
+
|
|
892
|
+
```bash
|
|
893
|
+
# Operator dispatches from phone:
|
|
894
|
+
cd ~/src/your-org/your-app
|
|
895
|
+
/launch medium "Dramatically simplify and delightfully surface deals..."
|
|
896
|
+
|
|
897
|
+
# OR escalate from /stage output:
|
|
898
|
+
/launch medium "..." base=<your-variant-slug>
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
Chain runs (~1 day for medium; ~3 days for full), opens PR with:
|
|
902
|
+
- Deployed clickable gallery (variants + back-nav)
|
|
903
|
+
- Buildable spec
|
|
904
|
+
- GRASP responsibility matrix
|
|
905
|
+
- ux-migration plan
|
|
906
|
+
- Construction iteration-goal DRAFT
|
|
907
|
+
|
|
908
|
+
Operator reviews on phone. If approved, runs `/build-iteration
|
|
909
|
+
<draft-slug>` (bassclef#335) which dispatches Builder agent →
|
|
910
|
+
step PRs → CI → /deploy-prod. Ends at functioning app in prod.
|
|
911
|
+
|
|
912
|
+
This is the Construction-transition step in the
|
|
913
|
+
"talking-out-loud → functioning app in prod" chain.
|
|
914
|
+
|
|
915
|
+
## Enforcement
|
|
916
|
+
|
|
917
|
+
Methodology-level. State-validate.sh hook enforces preview-state.yml
|
|
918
|
+
+ iteration-goal.schema.json validation. PR-first discipline enforced
|
|
919
|
+
via branching.md rule + pre-build-gate hook. Reserved-names check
|
|
920
|
+
passes. No additional hook enforcement added.
|
|
921
|
+
|
|
922
|
+
## Output discipline
|
|
923
|
+
|
|
924
|
+
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|