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.
- package/.claude/settings.local.example.json +20 -0
- package/.claude-plugin/marketplace.json +16 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.env.shapeup.example +14 -0
- package/AGENTS.md +133 -0
- package/LICENSE +21 -0
- package/README.md +362 -0
- package/SECURITY.md +72 -0
- package/bin/init.mjs +329 -0
- package/commands/build.md +14 -0
- package/commands/eval.md +15 -0
- package/commands/hammer.md +12 -0
- package/commands/orient.md +11 -0
- package/commands/qa.md +12 -0
- package/commands/retro.md +13 -0
- package/commands/scopes.md +14 -0
- package/commands/shape.md +12 -0
- package/commands/ship.md +53 -0
- package/commands/wire.md +11 -0
- package/hooks/anti-rationalization.mjs +244 -0
- package/hooks/compact-snapshot.mjs +47 -0
- package/hooks/gate-deadline.mjs +151 -0
- package/hooks/gate-intake.mjs +110 -0
- package/hooks/gate-l2.mjs +161 -0
- package/hooks/gate-zerowork.mjs +264 -0
- package/hooks/hooks.json +118 -0
- package/hooks/lib/decision.mjs +183 -0
- package/hooks/safety-spine.mjs +296 -0
- package/hooks/sandbox-guard.mjs +172 -0
- package/hooks/session-rehydrate.mjs +109 -0
- package/hooks/slop-cleaner.mjs +176 -0
- package/oracles/_shared.mjs +46 -0
- package/oracles/http-oracle.mjs +155 -0
- package/oracles/index.mjs +36 -0
- package/oracles/process-oracle.mjs +146 -0
- package/oracles/snapshot-oracle.mjs +119 -0
- package/oracles/test-oracle.mjs +138 -0
- package/package.json +49 -0
- package/skills/advisor-protocol/SKILL.md +171 -0
- package/skills/ba-pitch-analyzer/SKILL.md +175 -0
- package/skills/ba-pitch-analyzer/assets/templates/_index.tmpl.md +84 -0
- package/skills/ba-pitch-analyzer/assets/templates/api-feasibility.tmpl.md +65 -0
- package/skills/ba-pitch-analyzer/assets/templates/assess-report.tmpl.md +127 -0
- package/skills/ba-pitch-analyzer/assets/templates/contracts/be-service.contract.tmpl.md +62 -0
- package/skills/ba-pitch-analyzer/assets/templates/contracts/offline-storage.contract.tmpl.md +92 -0
- package/skills/ba-pitch-analyzer/assets/templates/contracts/third-party-api.contract.tmpl.md +66 -0
- package/skills/ba-pitch-analyzer/assets/templates/cross-context/context-map.tmpl.md +64 -0
- package/skills/ba-pitch-analyzer/assets/templates/cross-context/event-choreography.tmpl.md +77 -0
- package/skills/ba-pitch-analyzer/assets/templates/cross-context/migration-plan.tmpl.md +104 -0
- package/skills/ba-pitch-analyzer/assets/templates/cross-context/team-handoff.tmpl.md +79 -0
- package/skills/ba-pitch-analyzer/assets/templates/domain-model.tmpl.md +79 -0
- package/skills/ba-pitch-analyzer/assets/templates/feedback.tmpl.md +87 -0
- package/skills/ba-pitch-analyzer/assets/templates/integration.tmpl.md +64 -0
- package/skills/ba-pitch-analyzer/assets/templates/run-state.tmpl.md +77 -0
- package/skills/ba-pitch-analyzer/assets/templates/scope-summary.tmpl.md +105 -0
- package/skills/ba-pitch-analyzer/assets/templates/synthesis.tmpl.md +215 -0
- package/skills/ba-pitch-analyzer/assets/templates/task-board.tmpl.md +35 -0
- package/skills/ba-pitch-analyzer/assets/templates/task-spike.tmpl.md +86 -0
- package/skills/ba-pitch-analyzer/assets/templates/task.tmpl.md +84 -0
- package/skills/ba-pitch-analyzer/assets/templates/usecase.tmpl.md +105 -0
- package/skills/ba-pitch-analyzer/assets/templates/ux-behavior.tmpl.md +65 -0
- package/skills/ba-pitch-analyzer/references/contract-patterns.md +152 -0
- package/skills/ba-pitch-analyzer/references/ddd-patterns.md +173 -0
- package/skills/ba-pitch-analyzer/references/doc-schemas.md +275 -0
- package/skills/ba-pitch-analyzer/references/integration-analysis.md +152 -0
- package/skills/ba-pitch-analyzer/references/task-generation.md +623 -0
- package/skills/ba-pitch-analyzer/references/test-surface.md +102 -0
- package/skills/ba-pitch-analyzer/references/ux-behavior-patterns.md +269 -0
- package/skills/ba-pitch-analyzer/scripts/board-derive.mjs +241 -0
- package/skills/ba-pitch-analyzer/scripts/spec-lint.mjs +239 -0
- package/skills/coach/SKILL.md +202 -0
- package/skills/orient/SKILL.md +262 -0
- package/skills/qa-edge-hunter/SKILL.md +369 -0
- package/skills/scope-architect/SKILL.md +111 -0
- package/skills/scope-hammer/SKILL.md +186 -0
- package/skills/shapeup/SKILL.md +403 -0
- package/skills/shapeup/resources/breadboard-reflection.md +88 -0
- package/skills/shapeup/resources/breadboarding.md +334 -0
- package/skills/shapeup/resources/context-compaction.md +240 -0
- package/skills/shapeup/resources/framing-doc.md +92 -0
- package/skills/shapeup/resources/kickoff-doc.md +95 -0
- package/skills/shapeup/resources/shaping.md +194 -0
- package/skills/shapeup/resources/spike.md +86 -0
- package/skills/solution-architect/SKILL.md +129 -0
- package/skills/spec-evaluator/README.md +93 -0
- package/skills/spec-evaluator/SKILL.md +213 -0
- package/skills/spec-evaluator/references/anti-leniency.md +50 -0
- package/skills/spec-evaluator/references/dimension-contract.md +126 -0
- package/skills/spec-evaluator/references/dimensions/_registry.md +40 -0
- package/skills/spec-evaluator/references/dimensions/completeness.md +102 -0
- package/skills/spec-evaluator/references/dimensions/integration.md +129 -0
- package/skills/spec-evaluator/references/dimensions/performance.md +48 -0
- package/skills/spec-evaluator/references/dimensions/security.md +60 -0
- package/skills/spec-evaluator/references/dimensions/spec-conformance.md +134 -0
- package/skills/spec-evaluator/references/dimensions/tdd-surface.md +110 -0
- package/skills/spec-evaluator/references/dimensions/test-surface-conformance.md +100 -0
- package/skills/spec-evaluator/references/probing.md +177 -0
- package/skills/spec-evaluator/references/report-schema.md +101 -0
- package/skills/spec-evaluator/references/verdict-ledger.md +92 -0
- package/skills/spec-evaluator/scripts/verdict-ledger.mjs +166 -0
- package/skills/task-executor/SKILL.md +194 -0
- package/skills/tech-lead/README.md +71 -0
- package/skills/tech-lead/SKILL.md +459 -0
- package/skills/tech-lead/references/delegation.md +254 -0
- package/skills/tech-lead/references/gates.md +379 -0
- package/skills/tech-lead/references/invocation.md +45 -0
- package/skills/tech-lead/references/ledger-schema.md +214 -0
- package/skills/tech-lead/references/round-protocol.md +184 -0
- package/skills/tech-lead/references/state-model.md +66 -0
- package/skills/tech-lead/references/tiny-lane.md +52 -0
- package/skills/tech-lead/schemas/domain.schema.json +2294 -0
- package/skills/tech-lead/schemas/gate-answers.schema.json +92 -0
- package/skills/tech-lead/schemas/work-order.schema.json +21 -0
- package/skills/tech-lead/schemas/work-result.schema.json +40 -0
- package/skills/tech-lead/scripts/aegis-digest.mjs +124 -0
- package/skills/tech-lead/scripts/budget-check.mjs +156 -0
- package/skills/tech-lead/scripts/compile-order.mjs +518 -0
- package/skills/tech-lead/scripts/fit-check.mjs +196 -0
- package/skills/tech-lead/scripts/gate-answers.mjs +338 -0
- package/skills/tech-lead/scripts/ingest-result.mjs +270 -0
- package/skills/tech-lead/scripts/init-run.mjs +326 -0
- package/skills/tech-lead/scripts/lib/argv.mjs +224 -0
- package/skills/tech-lead/scripts/lib/contract-md.mjs +481 -0
- package/skills/tech-lead/scripts/lib/is-main.mjs +82 -0
- package/skills/tech-lead/scripts/lib/paths.mjs +278 -0
- package/skills/tech-lead/scripts/lib/ratchet-tree.mjs +112 -0
- package/skills/tech-lead/scripts/run-snapshot.mjs +269 -0
- package/skills/tech-lead/scripts/ship-report.mjs +275 -0
- package/skills/tech-lead/scripts/stats.mjs +423 -0
- package/skills/tech-lead/scripts/t0-verify.mjs +470 -0
- package/skills/tech-lead/scripts/trace-lint.mjs +367 -0
- package/skills/tech-lead/scripts/validate-envelope.mjs +283 -0
- package/skills/translator/README.md +66 -0
- package/skills/translator/SKILL.md +258 -0
- 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
|