@thebassclef/lite 1.1.0 → 1.2.0-alpha.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 (135) hide show
  1. package/dist/cli.cjs +258 -63
  2. package/dist/cli.js +258 -63
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.claude/bassclef-configs.jsonc +56 -0
  7. package/dist/lite/.claude/bassclef-orientation.md +120 -0
  8. package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
  9. package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
  10. package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
  11. package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
  12. package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
  13. package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
  14. package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
  15. package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
  16. package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
  17. package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
  18. package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
  19. package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
  20. package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
  21. package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
  22. package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
  23. package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
  24. package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
  25. package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
  26. package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
  27. package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
  28. package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
  29. package/dist/lite/.claude/hooks/save-state.sh +268 -0
  30. package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
  31. package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
  32. package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
  33. package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
  34. package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
  35. package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
  36. package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
  37. package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
  38. package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
  39. package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
  40. package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
  41. package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
  42. package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
  43. package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
  44. package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
  45. package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
  46. package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
  47. package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
  48. package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
  49. package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
  50. package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
  51. package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
  52. package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
  53. package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
  54. package/dist/lite/.claude/rules/cost-governance.md +154 -0
  55. package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
  56. package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
  57. package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
  58. package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
  59. package/dist/lite/.claude/rules/session-artifacts.md +30 -0
  60. package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
  61. package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
  62. package/dist/lite/.claude/rules/usability.md +22 -0
  63. package/dist/lite/.claude/settings.json +20 -0
  64. package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
  65. package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
  66. package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
  67. package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
  68. package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
  69. package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
  70. package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
  71. package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
  72. package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
  73. package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
  74. package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
  75. package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
  76. package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
  77. package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
  78. package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
  79. package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
  80. package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
  81. package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
  82. package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
  83. package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
  84. package/dist/lite/.claude/skills/release/SKILL.md +311 -0
  85. package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
  86. package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
  87. package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
  88. package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
  89. package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
  90. package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
  91. package/dist/lite/.claude/skills/state/SKILL.md +204 -0
  92. package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
  93. package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
  94. package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
  95. package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
  96. package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
  97. package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
  98. package/dist/lite/README.md +5 -1
  99. package/dist/lite/gitignore +6 -0
  100. package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
  101. package/dist/lite/lib/clone-failure-classifier.sh +59 -0
  102. package/dist/lite/lib/fixture-builder.sh +190 -0
  103. package/dist/lite/lib/fresh-install-check.sh +49 -0
  104. package/dist/lite/lib/hook-heartbeat.sh +0 -1
  105. package/dist/lite/lib/mechanism-fidelity.sh +569 -0
  106. package/dist/lite/lib/npm-version-check.sh +112 -0
  107. package/dist/lite/lib/preview-state.sh +229 -0
  108. package/dist/lite/lib/session-rescue.sh +0 -1
  109. package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
  110. package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
  111. package/dist/lite/standards/architect-review-discipline.md +222 -0
  112. package/dist/lite/standards/bassclef-platform.md +249 -0
  113. package/dist/lite/standards/bassclef-test-repos.md +97 -0
  114. package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
  115. package/dist/lite/standards/cold-adopter-harness.md +205 -0
  116. package/dist/lite/standards/data-management.md +135 -0
  117. package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
  118. package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
  119. package/dist/lite/standards/lite-manifest.json +1456 -14
  120. package/dist/lite/standards/mechanism-fidelity.md +205 -0
  121. package/dist/lite/standards/operator-private-discipline.md +200 -0
  122. package/dist/lite/standards/operator-to-public-flow.md +195 -0
  123. package/dist/lite/standards/prototype-gallery.md +251 -0
  124. package/dist/lite/standards/pseudonym-key-schema.md +109 -0
  125. package/dist/lite/standards/sibling-validation-checklist.md +181 -0
  126. package/dist/lite/standards/slack-notifications.md +161 -0
  127. package/dist/lite/standards/synthetic-user-testing.md +173 -0
  128. package/dist/lite/standards/vendor-bindings.md +165 -0
  129. package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
  130. package/dist/lite/standards/vpc-fit-validation.md +167 -0
  131. package/dist/lite/templates/gallery-yml.md +113 -0
  132. package/dist/lite/templates/product-canvas.md +169 -0
  133. package/dist/lite/templates/value-prop-canvas.md +180 -0
  134. package/package.json +12 -5
  135. /package/dist/lite/{whereami.md → docs/whereami.md} +0 -0
@@ -0,0 +1,300 @@
1
+ ---
2
+ tier: lite
3
+ name: autonomous
4
+ description: "Start or check an autonomous SDLC session. Two axes: who approves handoffs (you vs. the agent) and how work runs (one session vs. parallel agents). Defaults to operator-gated + sequential. Entry point for shipping features hands-off."
5
+ problem: "Some sessions need SDLC discipline but no operator to run each step. Ceremony blocks flow."
6
+ value: "Starts or checks an autonomous SDLC session. Two axes \u2014 who approves handoffs and how sequential the work is."
7
+ inputs: [start or check mode, Optional approver axis and sequence flags]
8
+ outputs: [Session goal doc, Handoff sequence, Approval gate list]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ requires:
12
+ cli: [git, gh]
13
+ network: true
14
+ ---
15
+
16
+ # Autonomous Development
17
+
18
+ Entry point for autonomous and semi-autonomous development sessions.
19
+ Invoke at any point in any repo that inherits bassclef.
20
+
21
+ This file is a thin dispatcher. Deep procedural detail lives in:
22
+
23
+ - `strategy/autonomous-dry-run.md` — read-only boot-sequence preview
24
+ - `strategy/autonomous-boot-sequence.md` — `/autonomous start` scaffold +
25
+ activate, including Step 0–9, Construction automation A–E, pre-build
26
+ gates, branch stacking, context management, transition hierarchy
27
+
28
+ ## Usage
29
+
30
+ ```
31
+ /autonomous → about + current readiness (default)
32
+ /autonomous dry-run → full boot sequence validation, read-only
33
+ /autonomous start → scaffold + activate (asks for choices below)
34
+ ```
35
+
36
+ ### Two choices at boot
37
+
38
+ The agent asks these during Step 1. They are independent axes.
39
+
40
+ **1. Gating** — who approves handoffs between phases:
41
+
42
+ | Gating | What happens | Best for |
43
+ |--------|-------------|----------|
44
+ | **operator-gated** (default) | Agent pauses between phases for your approval. You steer. | Daytime supervised sessions, learning the system |
45
+ | **orchestrator-gated** | Agent chains through all phases autonomously, no pauses | Overnight runs, trusted workflows |
46
+
47
+ **2. Execution mode** — how work is performed:
48
+
49
+ | Mode | What happens | Burst cost | Best for |
50
+ |------|-------------|-----------|----------|
51
+ | **sequential** (default) | One session plays all roles in order. Persona switches, not subagent spawns. | $0 (Pro plan) | Overnight runs, budget-conscious, simpler debugging |
52
+ | **parallel** (opt-in) | Orchestrator spawns subagents per role. Independent work fans out to worktrees. | Burst tokens | Throughput, multi-branch parallel work |
53
+
54
+ ### The 2x2
55
+
56
+ | | Sequential | Parallel |
57
+ |---|---|---|
58
+ | **Operator-gated** | You drive. All agents available, you approve each phase. One session, persona switches. | Agents fan out to worktrees. You approve each PR/handoff before next starts. |
59
+ | **Orchestrator-gated** | Agent chains through all roles in one session. No pauses. Reviews PRs after. | Full autonomy. Worktree fan-out. Agent merges on Reviewer approval. |
60
+
61
+ Default is **operator-gated + sequential**.
62
+
63
+ **Agent roster**: All agents are always available (Shaper, PM, Designer,
64
+ Architect, Builder, Reviewer, Creative Director, Deployer, Closer). The
65
+ two axes control HOW they run and WHO approves — not which agents exist.
66
+
67
+ In operator-gated mode, YOU decide which agents to invoke and when. In
68
+ orchestrator-gated mode, the system chains through the full choreography.
69
+
70
+ **How sequential mode works:**
71
+ - One continuous session (interactive or headless via `claude -p`)
72
+ - The agent reads the choreography and plays each role in order
73
+ - Between roles, it writes the handoff artifact, then switches persona
74
+ (e.g., "I am now acting as Architect" → reads Architect agent definition
75
+ → produces ADRs → writes handoff → "I am now acting as Builder")
76
+ - If operator-gated: pauses between phases for approval
77
+ - If orchestrator-gated: chains through all phases without pausing
78
+
79
+ ---
80
+
81
+ ## /autonomous (default — about + readiness)
82
+
83
+ Show what autonomous development is, how the 2x2 works, and how ready
84
+ this repo is right now.
85
+
86
+ ### 0. Lead with `/value-prop flash` + `/kiss words` summary (bassclef#357)
87
+
88
+ If the repo has a most-recently-completed goal (read via
89
+ `state_iteration_bet_active` / chronicle / git log), open with:
90
+
91
+ - **Flash line** (`/value-prop flash` mode, ≤180 chars): one-sentence
92
+ claim of what last shipped. Plain language. The operator sees this
93
+ before any 2x2 axis explanation.
94
+ - **Kiss summary** (`/kiss words` mode, 2-3 sentences, grade-10
95
+ vocabulary): what delivered last, current readiness shape, and
96
+ what `/autonomous start` would do next. The grounding paragraph.
97
+
98
+ If there's no completed goal (fresh repo, first session), skip this
99
+ step and proceed to Step 1. Don't fabricate a flash where there's no
100
+ delivery to summarize.
101
+
102
+ This is bassclef#357's discipline: every autonomous-run status
103
+ surface opens with delivery, not methodology. Walls of tables come
104
+ AFTER this block, not before.
105
+
106
+ ### 1. Explain the two axes
107
+
108
+ **Gating** — who approves handoffs (default: operator-gated):
109
+
110
+ | Gating | When to use |
111
+ |--------|-----------|
112
+ | operator-gated | Daytime sessions, learning the system, steering |
113
+ | orchestrator-gated | Overnight runs, trusted workflows |
114
+
115
+ **Execution mode** — how work runs (default: sequential):
116
+
117
+ | Mode | Burst cost | How it works |
118
+ |------|-----------|-------------|
119
+ | sequential | $0 (Pro plan) | One session, persona switches between roles |
120
+ | parallel | Burst tokens | Subagents spawned per role, worktrees for branches |
121
+
122
+ **Cost**: Sequential mode is $0 burst (Max plan covers everything).
123
+ Parallel mode adds burst cost per subagent spawn.
124
+
125
+ **All agents are always available.** The combination controls behavior:
126
+
127
+ | Combination | Behavior |
128
+ |-------------|----------|
129
+ | Operator + sequential | You drive, invoke agents as needed. Substrate assists with gates. |
130
+ | Operator + parallel | Agents fan out, you approve handoffs. Full ceremony with human steering. |
131
+ | Orchestrator + sequential | Agent chains all roles in one session. No pauses. Best overnight value. |
132
+ | Orchestrator + parallel | Max autonomy and throughput. Subagent spawns, worktree branches. |
133
+
134
+ ### 2. Quick readiness check
135
+
136
+ Scan the repo for the key artifacts and report status:
137
+
138
+ ```
139
+ ## Readiness
140
+
141
+ | Artifact | Status | Path |
142
+ |----------|--------|------|
143
+ | Manifest (substrate.config.md) | ✅ Found / ❌ Missing | ... |
144
+ | Phase state (docs/whereami.md) | ✅ / ❌ | ... |
145
+ | Iteration bet | ✅ / ❌ | ... |
146
+ | Risk register (docs/risk-register.md) | ✅ / ❌ / ⚠️ Disabled | ... |
147
+ | Deploy targets | ✅ Configured / ⚠️ Local only | ... |
148
+ | Skills | ✅ N local + M inherited | .claude/skills/ |
149
+ | Session lock | ✅ Clear / ⚠️ Active | ... |
150
+ | Chronicle (current) | ✅ / ⚠️ Stale — resolved during boot | ... |
151
+ | Architect review | ✅ / ⚠️ Overdue — resolved during boot | ... |
152
+ ```
153
+
154
+ **What NOT to surface in readiness** (these create noise, not signal):
155
+ - Untracked skill symlinks from bassclef-sync — these are expected, not a problem
156
+ - Stale dev processes on ports — only relevant if they'll conflict with the
157
+ current session. If you surface them, make it actionable: "Kill PIDs X, Y, Z?
158
+ They may conflict with dev server." Don't just list PIDs with no guidance.
159
+ - Auto-save checkpoint files (.test-baseline, etc.) — transient, not readiness-relevant
160
+
161
+ ### 3. Show available capabilities
162
+
163
+ All skills and agents are available at any configuration. The gating axis
164
+ controls who decides when to invoke them:
165
+
166
+ | Gating | How skills/agents are invoked |
167
+ |--------|------------------------------|
168
+ | Operator-gated | You invoke skills explicitly (/canvas, /spec, /architect-review). Agent runs Builder + Reviewer automatically, pauses for approval on everything else. |
169
+ | Orchestrator-gated | Agent invokes skills per choreography. Full chain runs automatically: Shaper → PM → Architect → Designer → Builder → Reviewer. |
170
+
171
+ Key skills available in any mode:
172
+ - `/temperance`, `/verify`, `/diagnose`, `/chronicle` — gates that fire regardless
173
+ - `/canvas`, `/spec`, `/architect-review` — thinking/design skills
174
+ - `/riff-prototypes` — 2-3 visual variants with different dominant luminaries
175
+ - `/deploy-prod`, `/release-notes`, `/retro` — transition skills
176
+ - `/visual-review`, `/visual-qa`, `/synthetic-user` — verification skills
177
+
178
+ ### 4. Show next steps
179
+
180
+ **MUST gates apply in ALL configurations:**
181
+ /temperance before building, /verify after, /diagnose before fixing,
182
+ tests with code, chronicle at phase transitions. These are not optional
183
+ in any configuration. The gating choice controls who approves handoffs,
184
+ not which gates fire.
185
+
186
+ Based on readiness, tell the operator what to do. Use the AskUserQuestion
187
+ tool to offer choices:
188
+
189
+ > Ready to start an autonomous session?
190
+ > 1. **Operator + sequential** (default) — you drive, agent assists
191
+ > 2. **Orchestrator + sequential** — agent chains all roles, no pauses
192
+ > 3. **Operator + parallel** — agents fan out, you approve each handoff
193
+ > 4. **Orchestrator + parallel** — full autonomy, max throughput
194
+
195
+ Note: stale artifacts (overdue chronicles, architect reviews) will be
196
+ resolved automatically during the `/autonomous start` boot sequence.
197
+ Don't present them as blockers — say "resolved during boot."
198
+
199
+ ---
200
+
201
+ ## /autonomous dry-run
202
+
203
+ Full boot sequence validation, **read-only**. No files created, no
204
+ agents activated. Use this to validate the boot works in the current
205
+ environment before committing to `/autonomous start`.
206
+
207
+ **Procedure + output format + rules** → see
208
+ `strategy/autonomous-dry-run.md`.
209
+
210
+ Summary: runs all 8 boot steps from `strategy/agent-choreography.md`
211
+ Section 1, reports PASS / FAIL / WARN per step, produces a boot report
212
+ identical in shape to what `/autonomous start` Step 8 would emit.
213
+
214
+ ---
215
+
216
+ ## /autonomous start [gating] [mode] [flags]
217
+
218
+ Scaffold missing artifacts and boot the session with the requested
219
+ configuration. This is where autonomous work begins.
220
+
221
+ **Full procedure** → see `strategy/autonomous-boot-sequence.md`.
222
+
223
+ That doc covers:
224
+
225
+ - **The full chain** — ASCII diagram of Steps 1–9
226
+ - **CRITICAL EXECUTION RULES** — sequential exchanges, verbatim prompts,
227
+ confirmation, context-aware examples, smart defaults, recommended
228
+ configs, error recovery, permission pre-check
229
+ - **Step-by-step detail**:
230
+ - Step 0 — argument validation (rejects `standard`, `fast`, etc.)
231
+ - Selective-gate flag `gate-ux` — pulls UX decisions back under operator
232
+ gate in an otherwise-auto orchestrator-gated run
233
+ - Step 1 — determine gating and execution mode (AskUserQuestion)
234
+ - Step 2 — scaffold manifest (`substrate.config.md`)
235
+ - Step 3 — scaffold phase state
236
+ - Step 4 — scaffold iteration goal
237
+ - Step 5 — scaffold risk register
238
+ - Step 6 — resolve stale artifacts (chronicle, architect review, danger)
239
+ - Step 7 — execute 8-step boot
240
+ - Step 8 — report + confirm (personalized execution chain)
241
+ - Step 9 — activate choreography
242
+ - **Construction automation** A–E: parse scope → create issues →
243
+ write stack manifest → sequential execution → parallel execution
244
+ - **Pre-build gates** — spec exists, issues exist, stack manifest,
245
+ branches created
246
+ - **Branch stacking** — per-configuration table, rollback guidance
247
+ - **Context management** — survival kit re-read after compaction
248
+ - **Transition hierarchy** — role handoff / phase transition / iteration
249
+ complete: what fires when
250
+ - **Rules** — the hard invariants
251
+
252
+ **Valid args (fast reference; full validation in the boot-sequence doc):**
253
+
254
+ | Position | Accepted | Rejects |
255
+ |----------|----------|---------|
256
+ | gating | `operator-gated`, `orchestrator-gated`, short aliases | `standard`, `full`, `core` (those are `process_level`) |
257
+ | mode | `sequential`, `parallel` | `headless`, `napkin-mode`, etc. |
258
+ | selective-gate flags | `gate-ux` (orchestrator-gated only) | `pick-ux` etc. |
259
+ | PR strategy override | `bundle` (collapse N issues into 1 PR; default is stacked per `.claude/rules/pr-strategy.md`) | `stacked` (it's the default — explicit value not needed) |
260
+
261
+ Unknown args are rejected with a helpful message; the command does NOT
262
+ silently proceed with defaults.
263
+
264
+ ---
265
+
266
+ ## Rules
267
+
268
+ - Never start work without operator confirmation
269
+ - Never assume iteration_ceiling — always ask
270
+ - If any boot step fails, scaffold the missing artifact before proceeding
271
+ - The Orchestrator coordinates but does not implement
272
+ - Spec and issues MUST exist before any Construction branch is created
273
+ - **Issue-first branch creation** (per bassclef#295): if a stack manifest
274
+ was pre-staged with `BASSCLEF-NNN` placeholder branch names, file the
275
+ issues + update the manifest with real numbers BEFORE creating the
276
+ branch. The placeholder-then-rename anti-pattern produces orphaned
277
+ gate markers because hooks fire against the placeholder filename. See
278
+ `strategy/autonomous-boot-sequence.md` Step D step 1 for the full
279
+ protocol.
280
+ - Every autonomous session ends with `/chronicle` + memory update
281
+ - **Prose output (per bassclef#790 — operator-facing-prose discipline):**
282
+ /autonomous handoff briefs, status reports, and turn-level prose
283
+ surface shorthand (WU-N, F-X.Y, ADR-NNN, #NNN, LF-N) with a plain-
284
+ language gloss at first mention per response. See
285
+ `standards/operator-facing-prose-discipline.md` for format examples.
286
+ Reserved-name allowlist per bassclef#763 holds.
287
+ - **PR-body scrub (per bassclef#787 — pr-body-discipline):** every
288
+ PR body authored by /autonomous-dispatched agents passes through
289
+ scrub before push. Three criteria: no `docs/operator-private/*`
290
+ path citations, no operator-strategic deliberation as PR
291
+ justification (mechanical framing only), plain-language gloss +
292
+ /kiss pass per bassclef#790. See `standards/pr-body-discipline.md`
293
+ for stub-framing examples.
294
+ - **SKILL.md edit meta-discipline (per bassclef#790 Rule 2):** any
295
+ /autonomous SKILL.md edit applies a /kiss pass to the whole file
296
+ in the same change.
297
+
298
+ ## Output discipline
299
+
300
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,232 @@
1
+ ---
2
+ tier: lite
3
+ name: bind-subdomain
4
+ description: "Bind a friendly URL to a deployed sunj-labs app. Reads substrate.config.md, calls the deploy-host and DNS adapters. Creates records and polls cert validation. Replaces clickops per standards/domain-and-dns.md."
5
+ problem: "Deployed apps at sunj-labs need friendly URLs. Every operator sets it up by hand each time."
6
+ value: "One command binds a friendly URL to a deployed app. Reads config and calls deploy-host plus DNS."
7
+ inputs: [App name, Target subdomain, Optional deploy-host override]
8
+ outputs: [DNS record created, Deploy-host mapping, Verified URL]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # /bind-subdomain — Bassclef DNS + TLS Binding
14
+
15
+ Binds `<subdomain>` to a deployed app via Amplify (or future host
16
+ adapters) + Cloudflare (or future DNS adapters). One command, no
17
+ clickops, idempotent.
18
+
19
+ First consumer wired (`your-app.apps.your-domain.com` → Amplify app
20
+ `d154l5usyc80nk` in `eu-north-1`).
21
+
22
+ ## When to invoke
23
+
24
+ - Setting up a friendly URL for a new sunj-labs app after its deploy
25
+ host (Amplify, etc.) is provisioned
26
+ - Re-running against an already-bound app (safe no-op — returns
27
+ current binding state)
28
+ - Troubleshooting a stuck binding (polls status, surfaces actionable
29
+ errors)
30
+
31
+ ## When NOT to invoke
32
+
33
+ - Before the deploy host exists — this skill binds an existing app
34
+ to a subdomain, it doesn't create the app. Provision the Amplify
35
+ app first (via console or future `/provision-app` skill).
36
+ - If the DNS zone isn't owned by the operator in the configured
37
+ `dns_provider`. This skill doesn't create zones; it writes records
38
+ into existing zones.
39
+
40
+ ## Sources read
41
+
42
+ - `standards/domain-and-dns.md` — the convention (subdomain pattern
43
+ + TLS ownership + DNS automation) that this skill operationalizes
44
+ - `standards/substrate-config-schema.md` — field conventions the
45
+ script reads from consumer's `substrate.config.md`
46
+ - `scripts/bind-subdomain.sh` — main entry point
47
+ - `scripts/adapters/deploy/*.sh` — host-specific adapters (amplify)
48
+ - `scripts/adapters/dns/*.sh` — DNS-provider adapters (cloudflare)
49
+ - `docs/learnings/2026-04-19-mobile-to-preview.md` — manual pattern
50
+ this skill automates
51
+ - Bassclef #254 — ticket this skill closes
52
+
53
+ ## Prerequisites
54
+
55
+ 1. Consumer repo's `substrate.config.md` must declare:
56
+ ```
57
+ hosting_platform: amplify # bassclef default per ADR-008
58
+ amplify_app_id: <app-id>
59
+ amplify_region: <aws-region>
60
+ amplify_branch: main # optional, defaults to main
61
+ subdomain: <full-dns-name>
62
+ dns_provider: cloudflare
63
+ dns_zone: <zone-root>
64
+ cloudflare_token_env: CLOUDFLARE_API_TOKEN
65
+ ```
66
+
67
+ `hosting_platform` enum: `amplify | ec2-tailscale | vercel | netlify | cloudflare-pages | none`. `none` is the explicit opt-out for docs-only / no-UI repos — bind-subdomain refuses with exit 3 + directive (bassclef#449). `BIND_SUBDOMAIN_OVERRIDE=1` bypasses the refusal. `vercel`, `netlify`, `cloudflare-pages` are reserved enum values; their adapters have not yet shipped (use `amplify` until they do).
68
+ 2. AWS CLI authenticated with access to:
69
+ - `amplify:GetApp`
70
+ - `amplify:CreateDomainAssociation`
71
+ - `amplify:GetDomainAssociation`
72
+ - `amplify:UpdateBranch`
73
+ 3. Env var named by `cloudflare_token_env` exported with a CF API
74
+ token that has:
75
+ - Zone → Zone:Read on the configured `dns_zone`
76
+ - Zone → DNS:Edit on the configured `dns_zone`
77
+ 4. DNS zone exists in Cloudflare (or configured provider)
78
+
79
+ ## Usage
80
+
81
+ ```bash
82
+ # From the consumer repo root:
83
+ bash scripts/bind-subdomain.sh
84
+
85
+ # Or with explicit config path:
86
+ bash scripts/bind-subdomain.sh path/to/substrate.config.md
87
+ ```
88
+
89
+ The script lives in bassclef's `scripts/` directory and is
90
+ distributed to consumer repos via bassclef-sync (symlinked to
91
+ `.claude/hooks/` peer directory — TBD per bassclef-sync extension
92
+ work; for now consumer repos invoke via the bassclef path in their
93
+ local clone, or copy-paste until distribution lands).
94
+
95
+ ## Behavior
96
+
97
+ 1. Read `substrate.config.md` from current directory (or argument)
98
+ 2. Validate required fields present
99
+ 3. Validate AWS CLI auth + Cloudflare token
100
+ 4. Check if binding already exists:
101
+ - **Exists + AVAILABLE** → no-op, print URL, exit 0
102
+ - **Exists + not AVAILABLE** → poll to AVAILABLE (up to 20 min)
103
+ - **Does not exist** → proceed
104
+ 5. Create Amplify domain association
105
+ 6. Poll up to 2 min for validation records to populate
106
+ 7. For each record, create in Cloudflare (idempotent: skip if exact
107
+ match exists; fail if name collision with different value)
108
+ 8. Poll Amplify until `domainStatus: AVAILABLE` (up to 20 min)
109
+ 9. Enable auto-build on the bound branch
110
+ 10. Print the live URL
111
+
112
+ ## Exit codes
113
+
114
+ | Code | Meaning |
115
+ |------|---------|
116
+ | 0 | Success (new binding OR already-bound no-op) |
117
+ | 1 | Config missing or invalid |
118
+ | 2 | Credentials missing or invalid |
119
+ | 3 | Deploy adapter failure (Amplify API error, timeout) |
120
+ | 4 | DNS adapter failure (Cloudflare API error, zone missing, record conflict) |
121
+
122
+ ## Error recovery
123
+
124
+ ### "Cannot access Amplify app"
125
+
126
+ - Check `amplify_app_id` matches the console
127
+ - Check `amplify_region` is correct (default eu-north-1)
128
+ - Run `aws amplify list-apps --region <region>` to verify access
129
+
130
+ ### "Cloudflare token verification failed"
131
+
132
+ - Check env var named by `cloudflare_token_env` is set
133
+ - Verify token permissions (Zone:Read + DNS:Edit on the zone)
134
+ - Test independently: `curl -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" https://api.cloudflare.com/client/v4/user/tokens/verify`
135
+
136
+ ### "Cannot resolve zone ID"
137
+
138
+ - Check `dns_zone` matches exactly (e.g., `your-domain.com`, not
139
+ `www.your-domain.com` or trailing dot)
140
+ - Check zone is in the same Cloudflare account the token was issued in
141
+
142
+ ### "Record exists with different value"
143
+
144
+ Existing record conflicts with what this script wants to create.
145
+ Resolve manually in Cloudflare, then re-run:
146
+ 1. Log into Cloudflare, locate the conflicting record
147
+ 2. Decide whether existing value is correct (keep) or stale (delete)
148
+ 3. If deleting: remove in CF console, then re-run script
149
+ 4. If keeping: investigate why Amplify wants a different value
150
+ (possibly a stale prior binding; delete the Amplify domain
151
+ association first via console)
152
+
153
+ ### "Timeout waiting for cert validation"
154
+
155
+ ACM cert validation typically completes in 5-15 min. Timeout after
156
+ 20 min means one of:
157
+ - DNS records not propagating (check CF records are `proxied=false`)
158
+ - Conflicting records pointing to wrong target
159
+ - Zone not delegated correctly (if using nested subdomain)
160
+
161
+ Check Amplify console → Custom domains → see error detail. Fix,
162
+ then re-run.
163
+
164
+ ## Adapter pattern
165
+
166
+ Two axes of variation, each with a separate adapter:
167
+
168
+ - **Deploy host** (`scripts/adapters/deploy/<host>.sh`): amplify, netlify (future), vercel (future), cloudflare-pages (future)
169
+ - **DNS provider** (`scripts/adapters/dns/<provider>.sh`): cloudflare, route53 (future)
170
+
171
+ Each adapter exposes a standard function set; the main script
172
+ dispatches without knowing platform details. Adding a new host/DNS
173
+ provider = new adapter file, no changes to the main script.
174
+
175
+ ### Deploy adapter contract
176
+
177
+ ```
178
+ deploy_check_auth → 0 if authenticated
179
+ deploy_binding_exists <subdomain> → 0 if exists
180
+ deploy_binding_status <subdomain> → prints status string
181
+ deploy_create_binding <subdomain> → creates association
182
+ deploy_get_records <subdomain> → prints <type>\t<name>\t<value> lines
183
+ deploy_wait_for_binding <subdomain> → polls to AVAILABLE
184
+ deploy_enable_auto_build → (optional) enables push-to-deploy
185
+ ```
186
+
187
+ ### DNS adapter contract
188
+
189
+ ```
190
+ dns_check_auth → 0 if authenticated; resolves zone ID
191
+ dns_create_record <type> <name> <value> → idempotent create
192
+ ```
193
+
194
+ ## Relationship to other skills
195
+
196
+ | Skill | Relationship |
197
+ |-------|-------------|
198
+ | `/onboard-repo` | Peer — provisions bassclef substrate for a new repo; `/bind-subdomain` binds its friendly URL after deploy host exists |
199
+ | `/deploy-prod` | Peer — handles deployment to the bound URL (POA's EC2+Tailscale pattern); orthogonal to this skill's DNS work |
200
+ | `/substrate-check` | Validates `substrate.config.md` schema; its checks cover the new fields added for this skill |
201
+
202
+ ## Chain position
203
+
204
+ ```
205
+ (deploy host provisioned externally)
206
+
207
+ substrate.config.md declares hosting_platform + subdomain fields
208
+
209
+ /bind-subdomain (this skill)
210
+
211
+ friendly URL live
212
+
213
+ /deploy-prod pushes code (or Amplify auto-build on push)
214
+ ```
215
+
216
+ ## Provenance
217
+
218
+ Filed: bassclef #254 (shaping)
219
+ Shipped: iteration goal 2026-04-23a-bind-subdomain
220
+ First consumer wired (`your-app.apps.your-domain.com`), 2026-04-23
221
+
222
+ Replaces manual clickops documented in
223
+ `docs/learnings/2026-04-19-mobile-to-preview.md` §Step 2.
224
+
225
+ ## Closes
226
+
227
+ - bassclef #254
228
+ - Integration-tests the domain + DNS strategy against a live binding
229
+
230
+ ## Output discipline
231
+
232
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,41 @@
1
+ ---
2
+ tier: lite
3
+ name: canvas
4
+ description: "Create a new product canvas \u2014 three-stage template (Thesis \u2192 Shape \u2192 Build Sequence)."
5
+ problem: "Product canvases get authored ad-hoc. Structure drifts. Downstream skills can't parse them."
6
+ value: "Creates a new product canvas using the three-stage template \u2014 Thesis and Shape and Build Sequence."
7
+ inputs: [Product name or scope description]
8
+ outputs: [Canvas doc at strategy/canvases/, Thesis section, Shape section, Build Sequence section]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Canvas — Create Product Canvas
14
+
15
+ Create a new product canvas following the three-stage template.
16
+
17
+ ## Steps
18
+
19
+ 1. Ask the user for the initiative name (or infer from context)
20
+ 2. Read `templates/product-canvas.md` for the template structure
21
+ 3. Read the most recent canvas in `strategy/canvases/` for style reference
22
+ 4. Walk through each stage with the user:
23
+ - **Stage 1: Thesis** (5 min) — one-sentence value proposition, audience scope, the problem, the bet
24
+ - **Stage 2: Shape** (30 min) — detailed design of the approach, data sources, architecture
25
+ - **Stage 3: Build Sequence** — phased implementation plan with checkboxes
26
+
27
+ ## Output
28
+
29
+ Write to `strategy/canvases/{YYYY-MM-DD}-{slug}.md`
30
+
31
+ ## Rules
32
+
33
+ - Do not skip stages — each forces a different kind of clarity
34
+ - Value proposition must be one sentence
35
+ - The Goal section must be concrete enough to falsify
36
+ - Build Sequence must have phased checkboxes
37
+ - If the user hasn't thought through a stage, help them — don't fill in assumptions silently
38
+
39
+ ## Output discipline
40
+
41
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,106 @@
1
+ ---
2
+ tier: lite
3
+ name: deploy-prod
4
+ description: "Production deployment procedure \u2014 test, build, push, CI, verify. Template for any project."
5
+ problem: "Production deploys go different every time. Steps get missed. Rollbacks take manual rediscovery."
6
+ value: "Standardized production deployment procedure \u2014 test then build then push then CI then verify."
7
+ inputs: [Optional deploy-host override]
8
+ outputs: [Deploy log, Verify status per step, Rollback procedure]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ requires:
12
+ cli: [git, gh, node]
13
+ files: [substrate.config.md]
14
+ network: true
15
+ gating: orchestrator-gated
16
+ ---
17
+
18
+ # Deploy to Production
19
+
20
+ Standard deployment procedure. Run after code is reviewed and ready to ship.
21
+
22
+ ## Procedure
23
+
24
+ ### Step 1: Pre-flight
25
+
26
+ - Working tree clean? (`git status`)
27
+ - All tests pass? (`npm run test` or project equivalent)
28
+ - Build succeeds? (`npm run build` or project equivalent)
29
+ - On the correct branch? (feature branch → merge to main, or main directly)
30
+
31
+ ### Step 2: Push and CI
32
+
33
+ - Push to remote: `git push`
34
+ - **MUST watch CI until completion** (#529) — after every main-branch
35
+ merge on a deploy-configured repo, run:
36
+ ```
37
+ gh run watch --exit-status
38
+ ```
39
+ (or poll `gh run list --limit 1 --json status,conclusion` until
40
+ `status=completed`). Do NOT proceed to next work until CI finishes.
41
+ Why: silent CI failures age into the next session as BLOCKED items
42
+ or production drift. Surface immediately.
43
+ - Verify all checks pass: secret scan → lint → typecheck → SAST → audit → test → build → deploy
44
+ - If CI fails: fire `/diagnose` before any retry. Don't brute-force
45
+ retry without understanding the failure.
46
+
47
+ ### Step 3: Post-deploy Verification
48
+
49
+ Run `/smoke-test` against production:
50
+
51
+ 1. **Health check** — API health endpoint returns healthy
52
+ 2. **Auth flow** — sign-in/sign-out cycle works
53
+ 3. **Core pages** — main pages load with data
54
+ 4. **API contracts** — key endpoints return expected shapes
55
+ 5. **Pipeline** — background jobs running, recent jobs successful
56
+
57
+ ### Step 4: Rollback (if verification fails)
58
+
59
+ - Revert the merge commit: `git revert <commit> && git push`
60
+ - CI redeploys previous version
61
+ - Run `/diagnose` on the failure before attempting again
62
+
63
+ ## Pass Criteria
64
+
65
+ All post-deploy checks pass. If any fail, rollback and diagnose.
66
+
67
+ ## Retroactive version tags (defer when capability missing)
68
+
69
+ When a version tag (`vX.Y.Z`) should be written for an already-deployed
70
+ release but the current session lacks the `git-tag` capability
71
+ (typical: ephemeral-mobile, cloud-web, or a desktop session whose
72
+ remote lacks push credentials), DO NOT silently skip. Write a
73
+ deferred-action entry so the next capable session creates the tag:
74
+
75
+ ```bash
76
+ TS=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
77
+ ID="${TS}-retro-tag-vX.Y.Z"
78
+ cp templates/deferred-action-template.md \
79
+ "docs/deferred-actions/${ID}.md"
80
+ # Fill frontmatter:
81
+ # pending_action: write-retroactive-version-tag
82
+ # requires_capability: [git-push, git-tag]
83
+ # priority: low
84
+ # origin_skill: /deploy-prod
85
+ # resolves_when: |
86
+ # git tag -l vX.Y.Z shows the tag; GitHub release created if policy requires it.
87
+ # Body: cite the commit SHA, release notes path, date-deployed.
88
+ git add "docs/deferred-actions/${ID}.md"
89
+ git commit -m "chore: defer retroactive version tag vX.Y.Z"
90
+ ```
91
+
92
+ See `.claude/rules/deferred-actions.md`. Silent skip violates
93
+ `session-artifacts.md` ("silence is not deferral").
94
+
95
+ ## App-Specific Override
96
+
97
+ Your project's deploy-prod skill should specify:
98
+ - Production URL and health endpoint
99
+ - SSH/access commands for server verification
100
+ - CI job names and expected durations
101
+ - Worker/queue verification commands
102
+ - Rollback-specific steps for your infrastructure
103
+
104
+ ## Output discipline
105
+
106
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.