agent-canvas 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent-canvas.js +14 -0
- package/bin/agent-canvas.ts +377 -0
- package/daemon/build.ts +185 -0
- package/daemon/client/AnnotationProvider.tsx +185 -0
- package/daemon/client/AnnotationSidebar.tsx +314 -0
- package/daemon/client/App.tsx +611 -0
- package/daemon/client/CompareView.tsx +333 -0
- package/daemon/client/FileBrowser.tsx +188 -0
- package/daemon/client/FileIcon.tsx +76 -0
- package/daemon/client/FileViewer.tsx +207 -0
- package/daemon/client/PlanRenderer.tsx +665 -0
- package/daemon/client/Popover.tsx +285 -0
- package/daemon/client/ResponsePreview.tsx +260 -0
- package/daemon/client/RevisionSelect.tsx +97 -0
- package/daemon/client/SessionContext.tsx +3 -0
- package/daemon/client/SessionSwitcher.tsx +72 -0
- package/daemon/client/annotationContext.ts +114 -0
- package/daemon/client/components/Callout.tsx +25 -0
- package/daemon/client/components/Checklist.tsx +37 -0
- package/daemon/client/components/Choice.tsx +164 -0
- package/daemon/client/components/CodeBlock.tsx +35 -0
- package/daemon/client/components/Diff.tsx +65 -0
- package/daemon/client/components/FilePreview.tsx +88 -0
- package/daemon/client/components/Image.tsx +45 -0
- package/daemon/client/components/Mermaid.tsx +277 -0
- package/daemon/client/components/Note.tsx +13 -0
- package/daemon/client/components/Priority.tsx +19 -0
- package/daemon/client/components/ResponseNote.tsx +24 -0
- package/daemon/client/components/Section.tsx +32 -0
- package/daemon/client/components/Table.tsx +35 -0
- package/daemon/client/components/Task.tsx +75 -0
- package/daemon/client/components/UserInput.tsx +180 -0
- package/daemon/client/components/index.ts +15 -0
- package/daemon/client/domDiff.ts +336 -0
- package/daemon/client/exportMarkdown.ts +267 -0
- package/daemon/client/generateMarkdown.ts +194 -0
- package/daemon/client/highlightRange.ts +233 -0
- package/daemon/client/index.html +26 -0
- package/daemon/client/lcs.ts +19 -0
- package/daemon/client/popoverPosition.ts +31 -0
- package/daemon/client/runtime.ts +89 -0
- package/daemon/client/styles.css +306 -0
- package/daemon/client/theme.css +66 -0
- package/daemon/client/unifiedDiff.ts +604 -0
- package/daemon/dist/client.css +2 -0
- package/daemon/dist/client.js +68 -0
- package/daemon/dist/components.js +5 -0
- package/daemon/dist/index.html +108 -0
- package/daemon/dist/jsx-dev-runtime-shim.js +17 -0
- package/daemon/dist/jsx-runtime-shim.js +17 -0
- package/daemon/dist/react-dom-client-shim.js +4 -0
- package/daemon/dist/react-dom-shim.js +4 -0
- package/daemon/dist/react-shim.js +4 -0
- package/daemon/dist/runtime.js +1 -0
- package/daemon/dist/theme.css +66 -0
- package/daemon/src/compiler.ts +92 -0
- package/daemon/src/paths.ts +22 -0
- package/daemon/src/server.ts +448 -0
- package/daemon/src/session.ts +274 -0
- package/daemon/src/watcher.ts +59 -0
- package/hooks/session-start.sh +11 -0
- package/package.json +39 -0
- package/skills/canvas/SKILL.md +174 -0
- package/skills/canvas/components.md +349 -0
- package/skills/canvas/flows.md +406 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# Flow Reference
|
|
2
|
+
|
|
3
|
+
Each flow is a sequence of canvas rounds. Phases can be skipped or combined based on context.
|
|
4
|
+
|
|
5
|
+
**Tooling reminder**: Write all `.jsx` files using the **Write** tool to `.claude/canvas/`. Edit them with the **Edit** tool. Push with `bunx agent-canvas push .claude/canvas/<file>.jsx --label "<Label>"`, then `bunx agent-canvas wait` to block for feedback. The JSX blocks below show what to write — they are the file content, not bash commands.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## FEATURE Flow
|
|
10
|
+
|
|
11
|
+
**When**: User wants something built but the requirements aren't fully clear.
|
|
12
|
+
|
|
13
|
+
**Phases**: Discovery → Requirements → Plan → [Implementation] → Summary
|
|
14
|
+
|
|
15
|
+
### Phase 1: Discovery (`discovery.jsx`)
|
|
16
|
+
|
|
17
|
+
Goal: understand scope, constraints, and user expectations. Start broad, go deep.
|
|
18
|
+
|
|
19
|
+
Write to `.claude/canvas/discovery.jsx`, then push and wait:
|
|
20
|
+
|
|
21
|
+
```jsx
|
|
22
|
+
<Section title="Discovery: [Feature Name]">
|
|
23
|
+
Let me understand what we're building before diving into implementation.
|
|
24
|
+
|
|
25
|
+
<Item label="My understanding so far" badge="context" badgeVariant="info">
|
|
26
|
+
[Summarize what you already know from the conversation and codebase exploration.]
|
|
27
|
+
</Item>
|
|
28
|
+
</Section>
|
|
29
|
+
|
|
30
|
+
<Section title="Scope & Direction">
|
|
31
|
+
<Choice id="scope" label="How broad should this be?" required
|
|
32
|
+
options={["Minimal — just the core", "Standard — core + common edge cases", "Comprehensive — production-ready with all edge cases"]} />
|
|
33
|
+
|
|
34
|
+
<UserInput id="must-have" label="What's the one thing this absolutely must do?" required />
|
|
35
|
+
<UserInput id="must-not" label="Anything I should explicitly avoid or not touch?" />
|
|
36
|
+
</Section>
|
|
37
|
+
|
|
38
|
+
<Section title="Technical Context">
|
|
39
|
+
<MultiChoice id="areas" label="Which areas will be affected?" required
|
|
40
|
+
options={["Database / models", "API / backend logic", "Frontend / UI", "Auth / permissions", "Infrastructure / deployment", "Tests"]} />
|
|
41
|
+
|
|
42
|
+
<UserInput id="constraints" label="Any technical constraints? (existing libs, patterns to follow, things to avoid)" />
|
|
43
|
+
</Section>
|
|
44
|
+
|
|
45
|
+
<Section title="Deep Dive (optional)">
|
|
46
|
+
I can do a thorough interview in specific areas before planning.
|
|
47
|
+
This takes an extra round but catches edge cases early.
|
|
48
|
+
|
|
49
|
+
<MultiChoice id="interview-areas" label="Want me to interview you about any of these?"
|
|
50
|
+
options={["Backend architecture & data model", "API design & contracts", "UI/UX behavior & states", "Error handling & edge cases", "Performance & scaling", "Security", "Testing strategy"]} />
|
|
51
|
+
</Section>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
If the user selects interview areas → push follow-up canvases with deep questions for each area. Example for "Backend architecture":
|
|
55
|
+
|
|
56
|
+
```jsx
|
|
57
|
+
<Section title="Backend Deep Dive">
|
|
58
|
+
<UserInput id="data-shape" label="Describe the data shape / entities involved" required />
|
|
59
|
+
<Choice id="mutation-pattern" label="How should mutations work?"
|
|
60
|
+
options={["Sync — mutate and return", "Async — queue and process", "Event-driven — publish and react"]} />
|
|
61
|
+
<UserInput id="invariants" label="What business rules / invariants must always hold?" />
|
|
62
|
+
<UserInput id="existing-patterns" label="Any existing patterns in the codebase I should follow?" />
|
|
63
|
+
</Section>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Phase 2: Requirements (`requirements.jsx`)
|
|
67
|
+
|
|
68
|
+
Goal: formalize what will be built. The user confirms or corrects before planning begins.
|
|
69
|
+
|
|
70
|
+
```jsx
|
|
71
|
+
<Section title="Requirements: [Feature Name]">
|
|
72
|
+
Based on our discovery, here's what I'll build.
|
|
73
|
+
|
|
74
|
+
<Callout type="info">
|
|
75
|
+
Review each requirement. Annotate anything that's wrong or missing.
|
|
76
|
+
Mark items you don't need with a comment.
|
|
77
|
+
</Callout>
|
|
78
|
+
</Section>
|
|
79
|
+
|
|
80
|
+
<Section title="Functional Requirements">
|
|
81
|
+
<Item id="req-1" label="[Requirement title]" badge="must-have" badgeVariant="danger">
|
|
82
|
+
[Detailed description of the requirement.]
|
|
83
|
+
</Item>
|
|
84
|
+
<Item id="req-2" label="[Requirement title]" badge="should-have" badgeVariant="warning">
|
|
85
|
+
[Description.]
|
|
86
|
+
</Item>
|
|
87
|
+
<Item id="req-3" label="[Requirement title]" badge="nice-to-have" badgeVariant="info">
|
|
88
|
+
[Description.]
|
|
89
|
+
</Item>
|
|
90
|
+
</Section>
|
|
91
|
+
|
|
92
|
+
<Section title="Non-Functional Requirements">
|
|
93
|
+
<Item id="nfr-1" label="Performance">
|
|
94
|
+
[Expected throughput, latency constraints, etc.]
|
|
95
|
+
</Item>
|
|
96
|
+
<Item id="nfr-2" label="Security">
|
|
97
|
+
[Auth model, data sensitivity, etc.]
|
|
98
|
+
</Item>
|
|
99
|
+
</Section>
|
|
100
|
+
|
|
101
|
+
<Section title="Out of Scope">
|
|
102
|
+
Explicitly NOT doing in this iteration:
|
|
103
|
+
<Checklist items={[
|
|
104
|
+
{ label: "[Thing deliberately excluded]", checked: true },
|
|
105
|
+
{ label: "[Another exclusion]", checked: true }
|
|
106
|
+
]} />
|
|
107
|
+
</Section>
|
|
108
|
+
|
|
109
|
+
<Section title="Open Questions">
|
|
110
|
+
<UserInput id="open-1" label="[Question that emerged during discovery]" required />
|
|
111
|
+
</Section>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Phase 3: Plan (`plan.jsx`)
|
|
115
|
+
|
|
116
|
+
Goal: detailed implementation plan with file-level changes. The user approves before you start coding.
|
|
117
|
+
|
|
118
|
+
```jsx
|
|
119
|
+
<Section title="Implementation Plan: [Feature Name]">
|
|
120
|
+
[Brief summary — what, why, rough approach.]
|
|
121
|
+
|
|
122
|
+
<Item label="Estimated scope" badge="info">
|
|
123
|
+
[N files changed, M new files, ~X lines. Estimated N rounds of implementation.]
|
|
124
|
+
</Item>
|
|
125
|
+
</Section>
|
|
126
|
+
|
|
127
|
+
<Section title="Phase 1: [Phase name]">
|
|
128
|
+
[What this phase accomplishes and why it's first.]
|
|
129
|
+
|
|
130
|
+
<Item id="step-1" label="[Step description]" badge="todo">
|
|
131
|
+
[What exactly will change.]
|
|
132
|
+
<FilePreview path="src/relevant/file.ts" lines={[10, 30]} />
|
|
133
|
+
<Callout type="tip">
|
|
134
|
+
[Any non-obvious approach or tradeoff you're making.]
|
|
135
|
+
</Callout>
|
|
136
|
+
</Item>
|
|
137
|
+
|
|
138
|
+
<Item id="step-2" label="[Step description]" badge="todo">
|
|
139
|
+
[Description with code example if helpful.]
|
|
140
|
+
<CodeBlock language="typescript">
|
|
141
|
+
// Proposed interface
|
|
142
|
+
interface AuthToken {
|
|
143
|
+
userId: string;
|
|
144
|
+
expiresAt: number;
|
|
145
|
+
}
|
|
146
|
+
</CodeBlock>
|
|
147
|
+
</Item>
|
|
148
|
+
</Section>
|
|
149
|
+
|
|
150
|
+
<Section title="Phase 2: [Phase name]">
|
|
151
|
+
[Steps for this phase...]
|
|
152
|
+
</Section>
|
|
153
|
+
|
|
154
|
+
<Section title="Testing Strategy">
|
|
155
|
+
<Checklist items={[
|
|
156
|
+
{ label: "[Test case 1]", checked: false },
|
|
157
|
+
{ label: "[Test case 2]", checked: false }
|
|
158
|
+
]} />
|
|
159
|
+
</Section>
|
|
160
|
+
|
|
161
|
+
<Section title="Risks & Tradeoffs">
|
|
162
|
+
<Item label="[Risk]" badge="warning" badgeVariant="warning">
|
|
163
|
+
[Description and mitigation.]
|
|
164
|
+
</Item>
|
|
165
|
+
</Section>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Phase 4: Summary (`summary.jsx`)
|
|
169
|
+
|
|
170
|
+
Push AFTER implementation is complete. Always do this, even briefly.
|
|
171
|
+
|
|
172
|
+
```jsx
|
|
173
|
+
<Section title="Implementation Summary: [Feature Name]">
|
|
174
|
+
<Item label="Status" badge="done" badgeVariant="success">
|
|
175
|
+
[One-line summary of what was accomplished.]
|
|
176
|
+
</Item>
|
|
177
|
+
</Section>
|
|
178
|
+
|
|
179
|
+
<Section title="What Was Done">
|
|
180
|
+
<Item id="done-1" label="[Change description]" badge="done" badgeVariant="success">
|
|
181
|
+
[Details of what was implemented and where.]
|
|
182
|
+
</Item>
|
|
183
|
+
<Item id="done-2" label="[Change description]" badge="done" badgeVariant="success">
|
|
184
|
+
[Details.]
|
|
185
|
+
</Item>
|
|
186
|
+
</Section>
|
|
187
|
+
|
|
188
|
+
<Section title="Deviations from Plan">
|
|
189
|
+
[What changed during implementation and why. If nothing changed, say so.]
|
|
190
|
+
<Item id="dev-1" label="[What changed]" badge="changed" badgeVariant="warning">
|
|
191
|
+
[Why it deviated and what was done instead.]
|
|
192
|
+
</Item>
|
|
193
|
+
</Section>
|
|
194
|
+
|
|
195
|
+
<Section title="Manual Testing Needed">
|
|
196
|
+
<Callout type="warning">
|
|
197
|
+
These need manual verification:
|
|
198
|
+
</Callout>
|
|
199
|
+
<Checklist items={[
|
|
200
|
+
{ label: "[Thing to test manually]", checked: false },
|
|
201
|
+
{ label: "[Another thing]", checked: false }
|
|
202
|
+
]} />
|
|
203
|
+
</Section>
|
|
204
|
+
|
|
205
|
+
<Section title="Next Steps">
|
|
206
|
+
<Item id="next-1" label="[Follow-up task]" badge="todo">
|
|
207
|
+
[What should happen next, if anything.]
|
|
208
|
+
</Item>
|
|
209
|
+
</Section>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## PLAN Flow
|
|
215
|
+
|
|
216
|
+
**When**: User has clear requirements, skip discovery. Go straight to planning.
|
|
217
|
+
|
|
218
|
+
**Phases**: Plan → [Implementation] → Summary
|
|
219
|
+
|
|
220
|
+
Same as FEATURE Phase 3 + 4, but the plan may be simpler since requirements are already known. If during planning you realize requirements are ambiguous, pivot to a quick discovery round.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## EXPLAIN Flow
|
|
225
|
+
|
|
226
|
+
**When**: User wants to understand how something works. "Explain the auth system", "how does X work", "walk me through the architecture".
|
|
227
|
+
|
|
228
|
+
**Phases**: Usually single canvas, occasionally follow-up if user has questions.
|
|
229
|
+
|
|
230
|
+
```jsx
|
|
231
|
+
<Section title="How [System/Feature] Works">
|
|
232
|
+
[High-level overview in plain language.]
|
|
233
|
+
|
|
234
|
+
<Mermaid>{`
|
|
235
|
+
graph TD
|
|
236
|
+
A[Request] --> B{Auth?}
|
|
237
|
+
B -->|Yes| C[Process]
|
|
238
|
+
B -->|No| D[401]
|
|
239
|
+
`}</Mermaid>
|
|
240
|
+
</Section>
|
|
241
|
+
|
|
242
|
+
<Section title="Key Components">
|
|
243
|
+
<Item label="[Component name]" badge="core">
|
|
244
|
+
[What it does, where it lives.]
|
|
245
|
+
<FilePreview path="src/auth/middleware.ts" />
|
|
246
|
+
</Item>
|
|
247
|
+
|
|
248
|
+
<Item label="[Component name]" badge="core">
|
|
249
|
+
[Description.]
|
|
250
|
+
</Item>
|
|
251
|
+
</Section>
|
|
252
|
+
|
|
253
|
+
<Section title="Data Flow">
|
|
254
|
+
[Step-by-step walkthrough of how data moves through the system.]
|
|
255
|
+
|
|
256
|
+
<Mermaid>{`
|
|
257
|
+
sequenceDiagram
|
|
258
|
+
Client->>+API: POST /login
|
|
259
|
+
API->>+DB: Find user
|
|
260
|
+
DB-->>-API: User record
|
|
261
|
+
API-->>-Client: JWT token
|
|
262
|
+
`}</Mermaid>
|
|
263
|
+
</Section>
|
|
264
|
+
|
|
265
|
+
<Section title="Gotchas & Edge Cases">
|
|
266
|
+
<Item label="[Non-obvious thing]" badge="warning" badgeVariant="warning">
|
|
267
|
+
[Explanation of something surprising or easy to get wrong.]
|
|
268
|
+
</Item>
|
|
269
|
+
</Section>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## REVIEW Flow
|
|
275
|
+
|
|
276
|
+
**When**: User wants code review, architecture audit, security review, or similar.
|
|
277
|
+
|
|
278
|
+
**Phases**: Findings → (optional) Fix Plan → Summary
|
|
279
|
+
|
|
280
|
+
```jsx
|
|
281
|
+
<Section title="Review: [What's Being Reviewed]">
|
|
282
|
+
[Scope of the review — what was examined, methodology.]
|
|
283
|
+
|
|
284
|
+
<Item label="Files reviewed" badge="scope" badgeVariant="info">
|
|
285
|
+
[List or count of what was examined.]
|
|
286
|
+
</Item>
|
|
287
|
+
</Section>
|
|
288
|
+
|
|
289
|
+
<Section title="Critical Issues">
|
|
290
|
+
<Item id="crit-1" label="[Issue title]" badge="critical" badgeVariant="danger">
|
|
291
|
+
[Description of the issue and its impact.]
|
|
292
|
+
<FilePreview path="src/auth.ts" lines={[42, 55]} />
|
|
293
|
+
<CodeBlock language="typescript">
|
|
294
|
+
// Proposed fix
|
|
295
|
+
if (!token) throw new UnauthorizedError();
|
|
296
|
+
</CodeBlock>
|
|
297
|
+
</Item>
|
|
298
|
+
</Section>
|
|
299
|
+
|
|
300
|
+
<Section title="Warnings">
|
|
301
|
+
<Item id="warn-1" label="[Issue title]" badge="warning" badgeVariant="warning">
|
|
302
|
+
[Description. Less severe but should be addressed.]
|
|
303
|
+
</Item>
|
|
304
|
+
</Section>
|
|
305
|
+
|
|
306
|
+
<Section title="Suggestions">
|
|
307
|
+
<Item id="sug-1" label="[Suggestion]" badge="suggestion" badgeVariant="info">
|
|
308
|
+
[Nice-to-have improvement. Not blocking.]
|
|
309
|
+
</Item>
|
|
310
|
+
</Section>
|
|
311
|
+
|
|
312
|
+
<Section title="What Looks Good">
|
|
313
|
+
<Item label="[Positive observation]" badge="good" badgeVariant="success">
|
|
314
|
+
[Call out things that are well-implemented. Important for balanced reviews.]
|
|
315
|
+
</Item>
|
|
316
|
+
</Section>
|
|
317
|
+
|
|
318
|
+
<Section title="Action Items">
|
|
319
|
+
<Checklist items={[
|
|
320
|
+
{ label: "[Fix critical-1: description]", checked: false },
|
|
321
|
+
{ label: "[Address warning-1: description]", checked: false },
|
|
322
|
+
{ label: "[Consider suggestion-1: description]", checked: false }
|
|
323
|
+
]} />
|
|
324
|
+
|
|
325
|
+
<Choice id="review-action" label="How should I proceed?" required
|
|
326
|
+
options={[
|
|
327
|
+
"Fix all critical + warnings",
|
|
328
|
+
"Fix critical only, I'll handle warnings",
|
|
329
|
+
"Don't fix anything, this was informational",
|
|
330
|
+
"Let me annotate which ones to fix"
|
|
331
|
+
]} />
|
|
332
|
+
</Section>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## DECISION Flow
|
|
338
|
+
|
|
339
|
+
**When**: User needs help choosing between options. "Should we use X or Y?", "What database?", "Monorepo or polyrepo?"
|
|
340
|
+
|
|
341
|
+
**Phases**: Single canvas, possibly follow-up for deeper comparison.
|
|
342
|
+
|
|
343
|
+
```jsx
|
|
344
|
+
<Section title="Decision: [What needs to be decided]">
|
|
345
|
+
[Context — why this decision matters and what constraints exist.]
|
|
346
|
+
</Section>
|
|
347
|
+
|
|
348
|
+
<Section title="Option A: [Name]">
|
|
349
|
+
<Item label="Pros" badge="pro" badgeVariant="success">
|
|
350
|
+
[Benefits of this option.]
|
|
351
|
+
</Item>
|
|
352
|
+
<Item label="Cons" badge="con" badgeVariant="danger">
|
|
353
|
+
[Drawbacks.]
|
|
354
|
+
</Item>
|
|
355
|
+
<Item label="Effort" badge="effort" badgeVariant="info">
|
|
356
|
+
[Rough effort estimate.]
|
|
357
|
+
</Item>
|
|
358
|
+
</Section>
|
|
359
|
+
|
|
360
|
+
<Section title="Option B: [Name]">
|
|
361
|
+
<Item label="Pros" badge="pro" badgeVariant="success">
|
|
362
|
+
[Benefits.]
|
|
363
|
+
</Item>
|
|
364
|
+
<Item label="Cons" badge="con" badgeVariant="danger">
|
|
365
|
+
[Drawbacks.]
|
|
366
|
+
</Item>
|
|
367
|
+
<Item label="Effort" badge="effort" badgeVariant="info">
|
|
368
|
+
[Effort.]
|
|
369
|
+
</Item>
|
|
370
|
+
</Section>
|
|
371
|
+
|
|
372
|
+
<Section title="Comparison">
|
|
373
|
+
<Table headers={["Criteria", "Option A", "Option B"]} rows={[
|
|
374
|
+
["Performance", "★★★", "★★"],
|
|
375
|
+
["Complexity", "★★", "★★★"],
|
|
376
|
+
["Maintenance", "★★★", "★"],
|
|
377
|
+
]} />
|
|
378
|
+
</Section>
|
|
379
|
+
|
|
380
|
+
<Section title="Recommendation">
|
|
381
|
+
<Callout type="tip">
|
|
382
|
+
I recommend **Option A** because [reasoning].
|
|
383
|
+
However, if [condition], Option B would be better.
|
|
384
|
+
</Callout>
|
|
385
|
+
|
|
386
|
+
<Choice id="decision" label="Which direction?" required
|
|
387
|
+
options={["Go with Option A", "Go with Option B", "Need more info — I'll annotate questions"]} />
|
|
388
|
+
</Section>
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Skipping & Combining Phases
|
|
394
|
+
|
|
395
|
+
You don't always need every phase. Guidelines:
|
|
396
|
+
|
|
397
|
+
| Situation | Skip to |
|
|
398
|
+
|---|---|
|
|
399
|
+
| User gave a detailed spec | PLAN (skip discovery + requirements) |
|
|
400
|
+
| User said "just do it" with clear instructions | Implement directly, push SUMMARY after |
|
|
401
|
+
| Simple change (< 3 files) | Probably skip canvas entirely |
|
|
402
|
+
| User explicitly says "don't plan, just code" | Implement, push SUMMARY |
|
|
403
|
+
| Mid-flow user says "looks good, go ahead" | Skip remaining review rounds |
|
|
404
|
+
| Discovery reveals it's trivial | Collapse remaining phases into one canvas |
|
|
405
|
+
|
|
406
|
+
**Always push a summary after implementation** unless the change was trivially small (1-2 file edit). The summary is how the user verifies what happened.
|