shapeup-sdlc 1.6.2

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/.claude/settings.local.example.json +20 -0
  2. package/.claude-plugin/marketplace.json +16 -0
  3. package/.claude-plugin/plugin.json +18 -0
  4. package/.env.shapeup.example +14 -0
  5. package/AGENTS.md +133 -0
  6. package/LICENSE +21 -0
  7. package/README.md +362 -0
  8. package/SECURITY.md +72 -0
  9. package/bin/init.mjs +329 -0
  10. package/commands/build.md +14 -0
  11. package/commands/eval.md +15 -0
  12. package/commands/hammer.md +12 -0
  13. package/commands/orient.md +11 -0
  14. package/commands/qa.md +12 -0
  15. package/commands/retro.md +13 -0
  16. package/commands/scopes.md +14 -0
  17. package/commands/shape.md +12 -0
  18. package/commands/ship.md +53 -0
  19. package/commands/wire.md +11 -0
  20. package/hooks/anti-rationalization.mjs +244 -0
  21. package/hooks/compact-snapshot.mjs +47 -0
  22. package/hooks/gate-deadline.mjs +151 -0
  23. package/hooks/gate-intake.mjs +110 -0
  24. package/hooks/gate-l2.mjs +161 -0
  25. package/hooks/gate-zerowork.mjs +264 -0
  26. package/hooks/hooks.json +118 -0
  27. package/hooks/lib/decision.mjs +183 -0
  28. package/hooks/safety-spine.mjs +296 -0
  29. package/hooks/sandbox-guard.mjs +172 -0
  30. package/hooks/session-rehydrate.mjs +109 -0
  31. package/hooks/slop-cleaner.mjs +176 -0
  32. package/oracles/_shared.mjs +46 -0
  33. package/oracles/http-oracle.mjs +155 -0
  34. package/oracles/index.mjs +36 -0
  35. package/oracles/process-oracle.mjs +146 -0
  36. package/oracles/snapshot-oracle.mjs +119 -0
  37. package/oracles/test-oracle.mjs +138 -0
  38. package/package.json +49 -0
  39. package/skills/advisor-protocol/SKILL.md +171 -0
  40. package/skills/ba-pitch-analyzer/SKILL.md +175 -0
  41. package/skills/ba-pitch-analyzer/assets/templates/_index.tmpl.md +84 -0
  42. package/skills/ba-pitch-analyzer/assets/templates/api-feasibility.tmpl.md +65 -0
  43. package/skills/ba-pitch-analyzer/assets/templates/assess-report.tmpl.md +127 -0
  44. package/skills/ba-pitch-analyzer/assets/templates/contracts/be-service.contract.tmpl.md +62 -0
  45. package/skills/ba-pitch-analyzer/assets/templates/contracts/offline-storage.contract.tmpl.md +92 -0
  46. package/skills/ba-pitch-analyzer/assets/templates/contracts/third-party-api.contract.tmpl.md +66 -0
  47. package/skills/ba-pitch-analyzer/assets/templates/cross-context/context-map.tmpl.md +64 -0
  48. package/skills/ba-pitch-analyzer/assets/templates/cross-context/event-choreography.tmpl.md +77 -0
  49. package/skills/ba-pitch-analyzer/assets/templates/cross-context/migration-plan.tmpl.md +104 -0
  50. package/skills/ba-pitch-analyzer/assets/templates/cross-context/team-handoff.tmpl.md +79 -0
  51. package/skills/ba-pitch-analyzer/assets/templates/domain-model.tmpl.md +79 -0
  52. package/skills/ba-pitch-analyzer/assets/templates/feedback.tmpl.md +87 -0
  53. package/skills/ba-pitch-analyzer/assets/templates/integration.tmpl.md +64 -0
  54. package/skills/ba-pitch-analyzer/assets/templates/run-state.tmpl.md +77 -0
  55. package/skills/ba-pitch-analyzer/assets/templates/scope-summary.tmpl.md +105 -0
  56. package/skills/ba-pitch-analyzer/assets/templates/synthesis.tmpl.md +215 -0
  57. package/skills/ba-pitch-analyzer/assets/templates/task-board.tmpl.md +35 -0
  58. package/skills/ba-pitch-analyzer/assets/templates/task-spike.tmpl.md +86 -0
  59. package/skills/ba-pitch-analyzer/assets/templates/task.tmpl.md +84 -0
  60. package/skills/ba-pitch-analyzer/assets/templates/usecase.tmpl.md +105 -0
  61. package/skills/ba-pitch-analyzer/assets/templates/ux-behavior.tmpl.md +65 -0
  62. package/skills/ba-pitch-analyzer/references/contract-patterns.md +152 -0
  63. package/skills/ba-pitch-analyzer/references/ddd-patterns.md +173 -0
  64. package/skills/ba-pitch-analyzer/references/doc-schemas.md +275 -0
  65. package/skills/ba-pitch-analyzer/references/integration-analysis.md +152 -0
  66. package/skills/ba-pitch-analyzer/references/task-generation.md +623 -0
  67. package/skills/ba-pitch-analyzer/references/test-surface.md +102 -0
  68. package/skills/ba-pitch-analyzer/references/ux-behavior-patterns.md +269 -0
  69. package/skills/ba-pitch-analyzer/scripts/board-derive.mjs +241 -0
  70. package/skills/ba-pitch-analyzer/scripts/spec-lint.mjs +239 -0
  71. package/skills/coach/SKILL.md +202 -0
  72. package/skills/orient/SKILL.md +262 -0
  73. package/skills/qa-edge-hunter/SKILL.md +369 -0
  74. package/skills/scope-architect/SKILL.md +111 -0
  75. package/skills/scope-hammer/SKILL.md +186 -0
  76. package/skills/shapeup/SKILL.md +403 -0
  77. package/skills/shapeup/resources/breadboard-reflection.md +88 -0
  78. package/skills/shapeup/resources/breadboarding.md +334 -0
  79. package/skills/shapeup/resources/context-compaction.md +240 -0
  80. package/skills/shapeup/resources/framing-doc.md +92 -0
  81. package/skills/shapeup/resources/kickoff-doc.md +95 -0
  82. package/skills/shapeup/resources/shaping.md +194 -0
  83. package/skills/shapeup/resources/spike.md +86 -0
  84. package/skills/solution-architect/SKILL.md +129 -0
  85. package/skills/spec-evaluator/README.md +93 -0
  86. package/skills/spec-evaluator/SKILL.md +213 -0
  87. package/skills/spec-evaluator/references/anti-leniency.md +50 -0
  88. package/skills/spec-evaluator/references/dimension-contract.md +126 -0
  89. package/skills/spec-evaluator/references/dimensions/_registry.md +40 -0
  90. package/skills/spec-evaluator/references/dimensions/completeness.md +102 -0
  91. package/skills/spec-evaluator/references/dimensions/integration.md +129 -0
  92. package/skills/spec-evaluator/references/dimensions/performance.md +48 -0
  93. package/skills/spec-evaluator/references/dimensions/security.md +60 -0
  94. package/skills/spec-evaluator/references/dimensions/spec-conformance.md +134 -0
  95. package/skills/spec-evaluator/references/dimensions/tdd-surface.md +110 -0
  96. package/skills/spec-evaluator/references/dimensions/test-surface-conformance.md +100 -0
  97. package/skills/spec-evaluator/references/probing.md +177 -0
  98. package/skills/spec-evaluator/references/report-schema.md +101 -0
  99. package/skills/spec-evaluator/references/verdict-ledger.md +92 -0
  100. package/skills/spec-evaluator/scripts/verdict-ledger.mjs +166 -0
  101. package/skills/task-executor/SKILL.md +194 -0
  102. package/skills/tech-lead/README.md +71 -0
  103. package/skills/tech-lead/SKILL.md +459 -0
  104. package/skills/tech-lead/references/delegation.md +254 -0
  105. package/skills/tech-lead/references/gates.md +379 -0
  106. package/skills/tech-lead/references/invocation.md +45 -0
  107. package/skills/tech-lead/references/ledger-schema.md +214 -0
  108. package/skills/tech-lead/references/round-protocol.md +184 -0
  109. package/skills/tech-lead/references/state-model.md +66 -0
  110. package/skills/tech-lead/references/tiny-lane.md +52 -0
  111. package/skills/tech-lead/schemas/domain.schema.json +2294 -0
  112. package/skills/tech-lead/schemas/gate-answers.schema.json +92 -0
  113. package/skills/tech-lead/schemas/work-order.schema.json +21 -0
  114. package/skills/tech-lead/schemas/work-result.schema.json +40 -0
  115. package/skills/tech-lead/scripts/aegis-digest.mjs +124 -0
  116. package/skills/tech-lead/scripts/budget-check.mjs +156 -0
  117. package/skills/tech-lead/scripts/compile-order.mjs +518 -0
  118. package/skills/tech-lead/scripts/fit-check.mjs +196 -0
  119. package/skills/tech-lead/scripts/gate-answers.mjs +338 -0
  120. package/skills/tech-lead/scripts/ingest-result.mjs +270 -0
  121. package/skills/tech-lead/scripts/init-run.mjs +326 -0
  122. package/skills/tech-lead/scripts/lib/argv.mjs +224 -0
  123. package/skills/tech-lead/scripts/lib/contract-md.mjs +481 -0
  124. package/skills/tech-lead/scripts/lib/is-main.mjs +82 -0
  125. package/skills/tech-lead/scripts/lib/paths.mjs +278 -0
  126. package/skills/tech-lead/scripts/lib/ratchet-tree.mjs +112 -0
  127. package/skills/tech-lead/scripts/run-snapshot.mjs +269 -0
  128. package/skills/tech-lead/scripts/ship-report.mjs +275 -0
  129. package/skills/tech-lead/scripts/stats.mjs +423 -0
  130. package/skills/tech-lead/scripts/t0-verify.mjs +470 -0
  131. package/skills/tech-lead/scripts/trace-lint.mjs +367 -0
  132. package/skills/tech-lead/scripts/validate-envelope.mjs +283 -0
  133. package/skills/translator/README.md +66 -0
  134. package/skills/translator/SKILL.md +258 -0
  135. package/skills/translator/references/preservation-rules.md +102 -0
@@ -0,0 +1,403 @@
1
+ ---
2
+ name: shapeup
3
+ description: >
4
+ Use this skill for any Shape Up workflow before writing code. Triggers on:
5
+ "shape this feature", "frame this problem", "breadboard this", "map affordances",
6
+ "write a framing doc", "write a kickoff doc", "turn this transcript into a framing document",
7
+ "turn this transcript into a kickoff document", "what should we build", "explore solutions",
8
+ "is this shaped enough to build", "slice this into scopes", "fit check", "wiring diagram".
9
+ Also triggers when user says "before we build...", "I want to think through...",
10
+ "let's shape this", or provides a raw transcript and wants it structured.
11
+ DEFAULT: if no sub-command given, run /shapeup full — ask clarifying questions at each gate,
12
+ keep solutions as simple as possible, never touch parts that already work.
13
+
14
+ Sub-commands: /shapeup full | /shapeup shaping | /shapeup spike | /shapeup breadboarding | /shapeup framing-doc | /shapeup kickoff-doc | /shapeup breadboard-reflection
15
+ ---
16
+
17
+ # ShapeUp Skill — v2.1
18
+
19
+ Shape Up workflows for Claude Code — covering every stage from raw problem to
20
+ wiring diagram to structured handoff documents. Run these **before** writing code.
21
+
22
+ ## Resource Files (Load On Demand)
23
+
24
+ This skill lazily loads detail from resource files. **Read the relevant resource before executing any workflow:**
25
+
26
+ | Sub-command | Resource to Read |
27
+ |---|---|
28
+ | `/shapeup shaping` | `resources/shaping.md` |
29
+ | `/shapeup spike` | `resources/spike.md` |
30
+ | `/shapeup breadboarding` | `resources/breadboarding.md` |
31
+ | `/shapeup framing-doc` | `resources/framing-doc.md` |
32
+ | `/shapeup kickoff-doc` | `resources/kickoff-doc.md` |
33
+ | `/shapeup breadboard-reflection` | `resources/breadboard-reflection.md` |
34
+ | `/shapeup full` | Read `resources/shaping.md` first, then `resources/breadboarding.md` before B-phases, and `resources/context-compaction.md` for the run digest |
35
+
36
+ > Resource paths are relative to this skill's directory. In Claude Code: `.claude/skills/shapeup/resources/`.
37
+ > Multi-gate runs maintain a derived **decision digest** so each gate reads a compact slice instead of full prose — see `resources/context-compaction.md` and the "Run Workspace & Digest" section below.
38
+
39
+ ---
40
+
41
+ ## Canonical Workflow Order
42
+
43
+ ```
44
+ /shaping /breadboarding
45
+ ───────────────────────── ───────────────────────────────────
46
+ 1. Problem frame 5. [optional] Fat marker sketch
47
+ 2. Requirements (R) 6. Affordance tables + wiring
48
+ 3. Solution shape (A) 7. SLICING → vertical scopes
49
+ 4. Fit check (R ↔ A)
50
+
51
+ Spike docs
52
+ (for unknowns only)
53
+
54
+ breadboarding
55
+ ```
56
+
57
+ **The single most common mistake:** putting slicing inside shaping. Slicing is the
58
+ final phase of breadboarding — not shaping. Shaping ends at the fit check.
59
+
60
+ ---
61
+
62
+ ## Which Sub-Command to Use
63
+
64
+ | You have... | Use... |
65
+ |---|---|
66
+ | A raw idea and want the full shaped pitch | `/shapeup full` |
67
+ | A raw problem or feature idea | `/shapeup shaping` |
68
+ | Shaped solution with unknowns to de-risk first | `/shapeup spike` |
69
+ | Shaped solution ready for concrete wiring | `/shapeup breadboarding` |
70
+ | A transcript of a problem/betting conversation | `/shapeup framing-doc` |
71
+ | A transcript of a shaped project kickoff | `/shapeup kickoff-doc` |
72
+ | An existing breadboard with design smells | `/shapeup breadboard-reflection` |
73
+
74
+ ---
75
+
76
+ ## Invocation
77
+
78
+ ```bash
79
+ # DEFAULT — no sub-command = runs full pipeline automatically
80
+ /shapeup
81
+
82
+ # Explicit full pipeline (same as default)
83
+ /shapeup full
84
+
85
+ # Individual phases
86
+ /shapeup shaping
87
+ /shapeup spike "Does zoneinfo cover our timezone needs, or do we need a network API?"
88
+ /shapeup breadboarding
89
+
90
+ # Document skills (team/collaborative contexts)
91
+ /shapeup framing-doc < transcript.md
92
+ /shapeup kickoff-doc < transcript.md
93
+
94
+ # Maintenance
95
+ /shapeup breadboard-reflection < breadboard.md
96
+ ```
97
+
98
+ ---
99
+
100
+ ## WORKFLOW 0 — `/shapeup full` (DEFAULT)
101
+
102
+ **Purpose:** End-to-end pipeline from raw idea to final `shaping.md` + `breadboard.md`.
103
+ **This is the default mode** — if no sub-command is given, run this.
104
+
105
+ **Load resources:** Read `resources/shaping.md`, then `resources/breadboarding.md` before B-phases.
106
+
107
+ **Three standing rules that apply for the entire pipeline:**
108
+
109
+ ```
110
+ RULE 1 — ASK, DON'T ASSUME
111
+ Never fill gaps with assumptions. When information is missing or ambiguous,
112
+ STOP and ask the user before proceeding. One focused question at a time.
113
+ Gate questions are mandatory (see below). Ad-hoc questions fire whenever
114
+ Claude would otherwise have to guess something that affects the output.
115
+
116
+ RULE 2 — SIMPLEST SOLUTION FIRST
117
+ At every decision point, prefer the simpler option.
118
+ If two shapes cover the requirements equally, pick the one with fewer parts.
119
+ If an affordance can be removed without breaking coverage, remove it.
120
+ Complexity must be justified by a requirement — never added speculatively.
121
+
122
+ RULE 3 — NON-REGRESSION
123
+ Do not change, refactor, or re-interpret anything the user has already
124
+ confirmed as correct. If S1–S2 are signed off, S3 must not rewrite the
125
+ problem frame or requirements. Scope only forward.
126
+ ```
127
+
128
+ ---
129
+
130
+ ### Mandatory Gate Questions
131
+
132
+ At each gate below, Claude MUST pause and ask before continuing.
133
+
134
+ **Digest discipline (see `resources/context-compaction.md`).** On a multi-gate run,
135
+ maintain a derived decision digest at `.shapeup/[slug]/digest.md`:
136
+ - **On entry to each phase** → `overwrite-head`: rebuild the digest's *working
137
+ head* from the live source artifact.
138
+ - **At each gate, to make the decision** → read the gate's **minimal slice** (the
139
+ consumer view), not full artifact prose:
140
+
141
+ | Gate | Minimal slice to read |
142
+ |---|---|
143
+ | 0 | raw input only (nothing to compact) |
144
+ | 1 | problem frame + R-list + **appetite** |
145
+ | 2 | R-list (frozen) + shape + rationale + constraints |
146
+ | 3 | R-list (frozen) + shape + **fit map** + spike results |
147
+ | 4 | R-list (frozen) + places + **affordance table** (`U/N`) |
148
+
149
+ - **On gate confirm** → `promote-head`: collapse the working head into a one-line +
150
+ wikilink in the *Confirmed* (frozen) zone, then open a fresh head for the next
151
+ phase. The frozen zone is append-only and immutable (RULE 3). The digest is a
152
+ derived read model — never the source of truth, never hand-edited.
153
+
154
+ ```
155
+ GATE 0 — Before starting (fires if input is vague OR appetite is missing)
156
+ Ask (two parts, one at a time if both missing):
157
+ Part A: "Who is the user experiencing this problem, and what are they
158
+ trying to accomplish? What's broken or missing for them today?"
159
+ Part B: "What's the right time budget for this? (e.g. 1 week, 2 weeks, 6 weeks)
160
+ Appetite anchors scope — without it, the shape has no natural stopping point."
161
+ Skip Part A if: input already contains a clear user + problem statement.
162
+ Skip Part B if: input already states an appetite / time budget.
163
+
164
+ GATE 1 — After S2 (Requirements)
165
+ Show the R-list. Ask:
166
+ "Are these the right requirements? Anything missing or out of scope?"
167
+ Wait for explicit confirmation before shaping.
168
+
169
+ GATE 2 — After S3 (Shape selection)
170
+ Show the selected shape with rationale. Ask:
171
+ "Does this direction feel right? Any constraints I should know about
172
+ (tech stack, team size, existing systems, appetite/time budget)?"
173
+ Wait for confirmation before fit check.
174
+
175
+ GATE 3 — After S4 (Fit Check) / before breadboarding
176
+ Show the fit check table. If any ❌ or ⚠️ exist, resolve them first.
177
+ Ask: "Ready to move to wiring, or is there anything to adjust?"
178
+
179
+ GATE 4 — After B3 (Affordance Tables) / before slicing
180
+ Show the affordance tables. Ask:
181
+ "Do these affordances look right? Anything missing from the wiring?"
182
+ Wait before slicing.
183
+ ```
184
+
185
+ ---
186
+
187
+ ### Full Pipeline Execution Order
188
+
189
+ ```
190
+ INPUT: raw idea / brief / feature description
191
+
192
+
193
+ [GATE 0] — ask if input is vague OR appetite is missing
194
+
195
+ [S1] Problem Frame + Appetite
196
+ │ → one-paragraph problem statement (no solution language)
197
+ │ → appetite: e.g. "~1 week" or "~2 weeks" — anchors scope throughout
198
+
199
+ [S2] Requirements (R)
200
+ │ → R0..RN, observable, technology-agnostic
201
+
202
+ [S2.5] Rabbit Holes
203
+ │ → explicit list of known traps that could eat the appetite
204
+ │ → no-goes: things explicitly outside this feature
205
+
206
+ [GATE 1] ← PAUSE — confirm R-list + rabbit holes ───────┐
207
+ ▼ │ revise if needed
208
+ [S3] Solution Shape (A) │
209
+ │ → simplest shape that covers all R within appetite │
210
+ ▼ │
211
+ [GATE 2] ← PAUSE — confirm shape + constraints ──────────┘
212
+
213
+ [S4] Fit Check
214
+ │ → every R mapped; ❌ items surface as gate blockers
215
+
216
+ ├─ unknowns? → SPIKE inline; if unresolvable → [SPIKE-UNRESOLVED] + continue
217
+
218
+
219
+ [GATE 3] ← PAUSE — confirm fit check, greenlight breadboarding
220
+
221
+ [B0] Fat Marker Sketch (UI-heavy features only; skip otherwise)
222
+
223
+ [B1] Identify Places
224
+
225
+ [B2–B3] Map Affordances + Tables
226
+ │ → keep affordance count minimal; remove any not required by an R
227
+
228
+ [GATE 4] ← PAUSE — confirm affordance tables
229
+
230
+ [B4] Wiring Verification (fix smells inline; do not stop)
231
+
232
+ [B5] Slicing
233
+ │ → ≤9 slices; each slice = one demonstrable capability
234
+
235
+ [KICKOFF-READY] — assert before writing output files:
236
+ ✅ appetite is set ✅ all spikes resolved (or SPIKE-UNRESOLVED documented)
237
+ ✅ rabbit holes listed ✅ fit check clean ✅ ≤9 slices
238
+
239
+ OUTPUT: shaping.md + breadboard.md (+ spike-[part].md if applicable)
240
+ → kicked-off pitch, ready for /ba-pitch-analyzer or /tech-lead
241
+ ```
242
+
243
+ ### Progress Markers
244
+
245
+ ```
246
+ ▶ S1 — Problem Frame + Appetite
247
+ ▶ S2 — Requirements
248
+ ▶ S2.5 — Rabbit Holes + No-goes
249
+ ⏸ GATE 1 — Confirming requirements + rabbit holes...
250
+ ▶ S3 — Solution Shape
251
+ ⏸ GATE 2 — Confirming shape + constraints...
252
+ ▶ S4 — Fit Check
253
+ ⏸ GATE 3 — Greenlight breadboarding...
254
+ ▶ B1 — Places
255
+ ▶ B2-B3 — Affordances
256
+ ⏸ GATE 4 — Confirming affordance tables...
257
+ ▶ B4 — Wiring Verification
258
+ ▶ B5 — Slices
259
+ ✅ KICKOFF-READY — shaping.md + breadboard.md written (kicked-off pitch)
260
+ ```
261
+
262
+ ---
263
+
264
+ ## WORKFLOW 1 — `/shapeup shaping`
265
+
266
+ **Load resource:** `resources/shaping.md`
267
+
268
+ **Purpose:** Iterate on both the problem (requirements) and solution (shapes) before
269
+ committing to implementation. **Stop here — do not slice yet.**
270
+
271
+ **Ends when:** Every requirement maps to a shape part. Unknowns are flagged for spikes.
272
+
273
+ For full phase detail (S1→S4, output format, common mistakes) → read `resources/shaping.md`.
274
+
275
+ ---
276
+
277
+ ## WORKFLOW 2 — `/shapeup spike`
278
+
279
+ **Load resource:** `resources/spike.md`
280
+
281
+ **Purpose:** De-risk an unknown before breadboarding. Time-boxed investigation that
282
+ answers a specific question so the breadboard can be grounded in fact.
283
+
284
+ For full spike process, output format, and SPIKE-UNRESOLVED fallback → read `resources/spike.md`.
285
+
286
+ ---
287
+
288
+ ## WORKFLOW 3 — `/shapeup breadboarding`
289
+
290
+ **Load resource:** `resources/breadboarding.md`
291
+
292
+ **Purpose:** Take the shaped solution and map every UI affordance, code affordance,
293
+ and wiring relationship. Then slice into vertical implementation scopes.
294
+
295
+ **Input required:** A `shaping.md` with a completed fit check. All spikes resolved.
296
+
297
+ For full phase detail (B0→B5), core concepts (Places, affordances, wiring), Mermaid conventions,
298
+ slicing rules, verification checks, and worked examples → read `resources/breadboarding.md`.
299
+
300
+ **Key things in the resource:**
301
+ - Blocking test for Places
302
+ - Place IDs + navigation wiring pattern
303
+ - Mermaid color conventions + classDef snippets
304
+ - Chunking pattern for complex subsystems
305
+ - Slice summary format + visualization
306
+ - Verification checklist
307
+
308
+ ---
309
+
310
+ ## WORKFLOW 4 — `/shapeup framing-doc`
311
+
312
+ **Load resource:** `resources/framing-doc.md`
313
+
314
+ **Purpose:** Turn a conversation transcript into a structured framing document.
315
+ GIGO warning applies — formats and distills only.
316
+
317
+ For full phases (F1→F3) and output template → read `resources/framing-doc.md`.
318
+
319
+ ---
320
+
321
+ ## WORKFLOW 5 — `/shapeup kickoff-doc`
322
+
323
+ **Load resource:** `resources/kickoff-doc.md`
324
+
325
+ **Purpose:** Turn a shaped project kickoff transcript into a builder reference document.
326
+ GIGO warning applies.
327
+
328
+ For full phases (K1→K3) and output template → read `resources/kickoff-doc.md`.
329
+
330
+ ---
331
+
332
+ ## WORKFLOW 6 — `/shapeup breadboard-reflection`
333
+
334
+ **Load resource:** `resources/breadboard-reflection.md`
335
+
336
+ **Purpose:** Review an existing breadboard for design smells and structural issues.
337
+ Fix wiring, naming, and causality problems before handing off to implementation.
338
+
339
+ For full smell catalog (naming / wiring / causality / scope) and review process → read `resources/breadboard-reflection.md`.
340
+
341
+ ---
342
+
343
+ ## Document Structure
344
+
345
+ All shaping **source** documents go in: `shapeup/[feature-slug]/shaping/`
346
+
347
+ ```
348
+ shapeup/[feature-slug]/shaping/
349
+ ├── frame.md ← /shapeup framing-doc (team context only)
350
+ ├── shaping.md ← /shapeup shaping (problem + R + A + fit check)
351
+ ├── spike-[part].md ← /shapeup spike (one file per unknown)
352
+ ├── breadboard.md ← /shapeup breadboarding (affordances + slices)
353
+ └── kickoff.md ← /shapeup kickoff-doc (team context only)
354
+ ```
355
+
356
+ All **source** files must have `shaping: true` in YAML frontmatter so the
357
+ ripple-check activates. Paths are **project-relative** (resolved from the project
358
+ root / cwd) — never `/mnt/...`, which is the authoring sandbox and dies in a user
359
+ repo.
360
+
361
+ ---
362
+
363
+ ## Run Workspace & Digest
364
+
365
+ Two roots, separated by artifact **nature** (full design →
366
+ `resources/context-compaction.md`). Both key off the feature `<slug>`:
367
+
368
+ | Root | Contents | Nature | Git |
369
+ |---|---|---|---|
370
+ | `shapeup/[slug]/shaping/` | shaping · breadboard · spike · pitch · kickoff | **durable source** | commit, shared |
371
+ | `shapeup/[slug]/spec/` | domain model · UC · contracts · tasks (ba-pitch-analyzer output) | **durable deliverable** | commit, shared |
372
+ | `.shapeup/[slug]/` | run-state · gate log · **digest.md** · orient/ · evaluation/ · qa/ · ledger | **ephemeral / derived** | **gitignore (hidden)** |
373
+
374
+ - **Shared** root `shapeup/[slug]/` = what the team contributes to
375
+ (source + deliverable). **Local** root `.shapeup/[slug]/` = per-run scratch,
376
+ hidden and fully gitignorable. Add **one** line to `.gitignore`: `.shapeup/`.
377
+ No carve-out needed — the one committed report surface, the harvest feed
378
+ `shapeup/metrics.jsonl`, lives in the shared root.
379
+ - `digest.md` is the run's derived decision context (the 4-field, two-zone read
380
+ model the gates consume). It is **never** the source of truth and never crosses
381
+ a skill boundary — `ba-pitch-analyzer` reads `pitch.md`/`shaping.md`, never the
382
+ digest.
383
+ - **Ripple-check rule (mandatory):** the digest carries **no `shaping: true`** —
384
+ it is a sink, not a node. The ripple-check **must glob-exclude
385
+ `.shapeup/`**, or it will scan the digest as a source and ripple
386
+ incorrectly.
387
+
388
+ ---
389
+
390
+ ## Integration with ba-pitch-analyzer
391
+
392
+ ```
393
+ /shapeup shaping → shaping.md
394
+ /shapeup spike → spike-[part].md (as needed)
395
+ /shapeup breadboarding → breadboard.md (with slices)
396
+
397
+ /ba-pitch-analyzer shapeup/[feature-slug]/shaping/shaping.md
398
+
399
+ shapeup/[feature-slug]/spec/ (domain model, contracts, use cases, tasks)
400
+ ```
401
+
402
+ Reference affordance IDs (U[N], N[N]) in task descriptions and commit messages
403
+ to maintain traceability: breadboard → task → commit.
@@ -0,0 +1,88 @@
1
+ # Breadboard Reflection — Reference
2
+
3
+ > Source: rjs/shaping-skills (upstream). Loaded on demand by the shapeup skill.
4
+
5
+ ---
6
+
7
+ ## What This Does
8
+
9
+ Reviews an existing breadboard for **design smells** and structural issues. Fixes wiring, naming, and causality problems before handing off to implementation.
10
+
11
+ **Input:** Existing breadboard document
12
+ **Output:** Updated breadboard with issues annotated or fixed, plus change summary.
13
+
14
+ ---
15
+
16
+ ## Naming Smells
17
+
18
+ ```
19
+ - [ ] Affordances named after UI framework types (Modal, Toast, Drawer, Card)
20
+ → Rename to behavior: "error-notification" not "ErrorToast"
21
+ - [ ] Code affordances named after data structures not operations
22
+ → Rename to verb+noun: "fetch-user-profile" not "userObject"
23
+ - [ ] Place names that are routes not contexts
24
+ → Rename: "Account Settings" not "/dashboard/settings"
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Wiring Smells
30
+
31
+ ```
32
+ - [ ] Dangling wire — "Wires Out" target not in any table
33
+ → Add the target affordance or remove the wire
34
+ - [ ] Orphaned affordance — no incoming wire, no outgoing wire
35
+ → Remove or connect
36
+ - [ ] UI → UI wire with no Code affordance in between
37
+ → Either it's a direct UI event (document it) or a missing code step
38
+ - [ ] Multiple affordances returning to same place with no condition label
39
+ → Add condition labels to distinguish paths
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Causality Smells
45
+
46
+ ```
47
+ - [ ] Code affordance that reads AND writes in one step
48
+ → Split into fetch + mutate (separate affordances)
49
+ - [ ] Guard logic buried in neutral-named affordance
50
+ → Rename to show condition: "overview-guard (count > 0)"
51
+ - [ ] Missing return condition when two paths diverge from same affordance
52
+ → Add explicit condition to both branches
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Scope Smells
58
+
59
+ ```
60
+ - [ ] Place with 9+ affordances
61
+ → Split the place or reconsider its boundary
62
+ - [ ] Single affordance spanning multiple scopes
63
+ → Verify or split into separate affordances
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Mechanism Smell (from upstream)
69
+
70
+ When reviewing each Code affordance, ask:
71
+ > "Is this actually an affordance, or is it just detailing the mechanism for how something happens?"
72
+
73
+ If it's just the "how" — skip it and wire directly to the destination or outcome.
74
+
75
+ ```
76
+ ❌ N8 --> N22 --> P3 (N22 is modalService.open — just mechanism)
77
+ ✅ N8 --> P3 (handler navigates to modal)
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Review Process
83
+
84
+ 1. Read the full breadboard before making any changes
85
+ 2. List all smells found (don't fix yet)
86
+ 3. Prioritize: wiring smells > naming smells > scope smells
87
+ 4. Fix in order, re-checking each fix doesn't introduce new smells
88
+ 5. Output: updated breadboard + summary of changes made