mindsystem-cc 3.10.1 → 3.11.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.
@@ -16,6 +16,47 @@ Without mocks, testing "error message display" requires actually triggering serv
16
16
  4. **Removable** — Delete file + remove imports = clean
17
17
  </philosophy>
18
18
 
19
+ <classification_framework>
20
+
21
+ **Two-question framework for mock classification:**
22
+
23
+ For each test, ask two questions in order:
24
+
25
+ 1. **Is the observable state transient?**
26
+ - Does it appear briefly during async operations? (loading skeleton, spinner, transition animation)
27
+ - Does it require precise timing to observe? (appears for <1s before real data loads)
28
+ - If YES → `mock_type: "transient_state"` — needs delay/force mock strategy
29
+
30
+ 2. **Does the test depend on external data?**
31
+ - Does the feature fetch from an API, database, or external service?
32
+ - Would the test fail without specific data existing locally?
33
+ - If YES → `mock_type: "external_data"` — confirm data availability with user first
34
+
35
+ **Two-tier classification priority:**
36
+
37
+ | Priority | Source | When used |
38
+ |----------|--------|-----------|
39
+ | 1 | SUMMARY.md `mock_hints` | Executor captured hints at build time (including `none` for explicit no-mock) |
40
+ | 2 | Inline classification + keyword heuristics | No `mock_hints` key (legacy summaries) — classify in main context using two-question framework + keywords |
41
+
42
+ **Why keyword matching alone fails:**
43
+
44
+ Domain terms don't map reliably to mock types. "View recipe list" needs external_data mocks but contains no keywords. "Loading skeleton" is transient_state but keyword matching might miss the underlying async dependency. The two-question framework traces UI elements to their data sources instead of pattern-matching descriptions.
45
+
46
+ **Category examples:**
47
+
48
+ | Test | Classification | Reasoning |
49
+ |------|---------------|-----------|
50
+ | "Recipe list loading skeleton" | transient_state | Brief UI state during async fetch — resolves in <1s |
51
+ | "View recipe list" | external_data | Fetches from /api/recipes — data may not exist locally |
52
+ | "Login error message" | error_state | Error response from auth endpoint |
53
+ | "Empty favorites placeholder" | empty_response | Requires zero items in collection |
54
+ | "Premium badge display" | premium_user | Requires premium subscription state |
55
+ | "Offline sync indicator" | offline_state | Requires network disconnection |
56
+ | "Tap login button" | no mock needed | Happy path with available test credentials |
57
+
58
+ </classification_framework>
59
+
19
60
  <git_stash_lifecycle>
20
61
 
21
62
  **Why stash?**
@@ -95,10 +136,12 @@ class TestOverrides {
95
136
  static bool forceErrorState = false;
96
137
  static bool forceEmptyResponse = false;
97
138
  static bool forceLoadingState = false;
139
+ static bool forceTransientState = false;
98
140
 
99
141
  // === MOCK DATA ===
100
142
  static String mockErrorMessage = 'Simulated error for testing';
101
143
  static Duration mockLoadingDelay = const Duration(seconds: 3);
144
+ static Duration mockTransientDelay = const Duration(seconds: 5);
102
145
 
103
146
  static Map<String, dynamic> mockPremiumUser = {
104
147
  'id': 'test-user-001',
@@ -113,6 +156,7 @@ class TestOverrides {
113
156
  forceErrorState = false;
114
157
  forceEmptyResponse = false;
115
158
  forceLoadingState = false;
159
+ forceTransientState = false;
116
160
  }
117
161
  }
118
162
  ```
@@ -142,6 +186,10 @@ class UserService {
142
186
  if (TestOverrides.forceErrorState) {
143
187
  throw Exception(TestOverrides.mockErrorMessage);
144
188
  }
189
+ // TEST OVERRIDE - Extend transient state (loading skeleton stays visible)
190
+ if (TestOverrides.forceTransientState) {
191
+ await Future.delayed(TestOverrides.mockTransientDelay);
192
+ }
145
193
 
146
194
  // Real implementation
147
195
  final response = await _api.get('/items');
@@ -21,7 +21,6 @@ type: execute
21
21
  wave: N # Execution wave (1, 2, 3...). Pre-computed at plan time.
22
22
  depends_on: [] # Plan IDs this plan requires (e.g., ["01-01"])
23
23
  files_modified: [] # Files this plan modifies
24
- autonomous: true # false if plan has checkpoints
25
24
  ---
26
25
  ```
27
26
 
@@ -33,12 +32,9 @@ autonomous: true # false if plan has checkpoints
33
32
  | `wave` | Yes | Execution wave number (1, 2, 3...). Pre-computed during planning. |
34
33
  | `depends_on` | Yes | Array of plan IDs this plan requires. |
35
34
  | `files_modified` | Yes | Files this plan touches. |
36
- | `autonomous` | Yes | `true` if no checkpoints, `false` if has checkpoints |
37
35
  | `subsystem_hint` | No | Subsystem from config.json, assigned by planner for executor to use in SUMMARY.md |
38
36
 
39
37
  **Wave is pre-computed:** `/ms:plan-phase` assigns wave numbers based on `depends_on`. `/ms:execute-phase` reads `wave` directly from frontmatter and groups plans by wave number. No runtime dependency analysis needed.
40
-
41
- **Checkpoint handling:** Plans with `autonomous: false` require user interaction. They run in their assigned wave but pause at checkpoints.
42
38
  </frontmatter>
43
39
 
44
40
  <prompt_structure>
@@ -52,7 +48,6 @@ type: execute
52
48
  wave: N
53
49
  depends_on: []
54
50
  files_modified: [path/to/file.ts]
55
- autonomous: true
56
51
  ---
57
52
 
58
53
  <objective>
@@ -64,8 +59,6 @@ Output: [...]
64
59
  <execution_context>
65
60
  @~/.claude/mindsystem/workflows/execute-plan.md
66
61
  @~/.claude/mindsystem/templates/summary.md
67
- [If checkpoints exist:]
68
- @~/.claude/mindsystem/references/checkpoints.md
69
62
  </execution_context>
70
63
 
71
64
  <context>
@@ -86,21 +79,6 @@ Output: [...]
86
79
  <done>[criteria]</done>
87
80
  </task>
88
81
 
89
- <task type="checkpoint:human-verify" gate="blocking">
90
- <what-built>[what Claude automated]</what-built>
91
- <how-to-verify>[numbered verification steps]</how-to-verify>
92
- <resume-signal>[how to continue - "approved" or describe issues]</resume-signal>
93
- </task>
94
-
95
- <task type="checkpoint:decision" gate="blocking">
96
- <decision>[what needs deciding]</decision>
97
- <context>[why this matters]</context>
98
- <options>
99
- <option id="option-a"><name>[Name]</name><pros>[pros]</pros><cons>[cons]</cons></option>
100
- <option id="option-b"><name>[Name]</name><pros>[pros]</pros><cons>[cons]</cons></option>
101
- </options>
102
- <resume-signal>[how to indicate choice]</resume-signal>
103
- </task>
104
82
  </tasks>
105
83
 
106
84
  <verification>
@@ -186,114 +164,9 @@ Tasks have a `type` attribute that determines how they execute:
186
164
  Use for: Everything Claude can do independently (code, tests, builds, file operations).
187
165
  </type>
188
166
 
189
- <type name="checkpoint:human-action">
190
- **RARELY USED** - Only for actions with NO CLI/API. Claude automates everything possible first.
191
-
192
- **Structure:**
193
-
194
- ```xml
195
- <task type="checkpoint:human-action" gate="blocking">
196
- <action>[Unavoidable manual step - email link, 2FA code]</action>
197
- <instructions>
198
- [What Claude already automated]
199
- [The ONE thing requiring human action]
200
- </instructions>
201
- <verification>[What Claude can check afterward]</verification>
202
- <resume-signal>[How to continue]</resume-signal>
203
- </task>
204
- ```
205
-
206
- Use ONLY for: Email verification links, SMS 2FA codes, manual approvals with no API, 3D Secure payment flows.
207
-
208
- Do NOT use for: Anything with a CLI (Vercel, Stripe, Upstash, Railway, GitHub), builds, tests, file creation, deployments.
209
-
210
- **Execution:** Claude automates everything with CLI/API, stops only for truly unavoidable manual steps.
211
- </type>
212
-
213
- <type name="checkpoint:human-verify">
214
- **Human must verify Claude's work** - Visual checks, UX testing.
215
-
216
- **Structure:**
217
-
218
- ```xml
219
- <task type="checkpoint:human-verify" gate="blocking">
220
- <what-built>Responsive dashboard layout</what-built>
221
- <how-to-verify>
222
- 1. Run: npm run dev
223
- 2. Visit: http://localhost:3000/dashboard
224
- 3. Desktop (>1024px): Verify sidebar left, content right
225
- 4. Tablet (768px): Verify sidebar collapses to hamburger
226
- 5. Mobile (375px): Verify single column, bottom nav
227
- 6. Check: No layout shift, no horizontal scroll
228
- </how-to-verify>
229
- <resume-signal>Type "approved" or describe issues</resume-signal>
230
- </task>
231
- ```
232
-
233
- Use for: UI/UX verification, visual design checks, animation smoothness, accessibility testing.
234
-
235
- **Execution:** Claude builds the feature, stops, provides testing instructions, waits for approval/feedback.
236
- </type>
237
-
238
- <type name="checkpoint:decision">
239
- **Human must make implementation choice** - Direction-setting decisions.
240
-
241
- **Structure:**
242
-
243
- ```xml
244
- <task type="checkpoint:decision" gate="blocking">
245
- <decision>Select authentication provider</decision>
246
- <context>We need user authentication. Three approaches with different tradeoffs:</context>
247
- <options>
248
- <option id="supabase">
249
- <name>Supabase Auth</name>
250
- <pros>Built-in with Supabase, generous free tier</pros>
251
- <cons>Less customizable UI, tied to ecosystem</cons>
252
- </option>
253
- <option id="clerk">
254
- <name>Clerk</name>
255
- <pros>Beautiful pre-built UI, best DX</pros>
256
- <cons>Paid after 10k MAU</cons>
257
- </option>
258
- <option id="nextauth">
259
- <name>NextAuth.js</name>
260
- <pros>Free, self-hosted, maximum control</pros>
261
- <cons>More setup, you manage security</cons>
262
- </option>
263
- </options>
264
- <resume-signal>Select: supabase, clerk, or nextauth</resume-signal>
265
- </task>
266
- ```
267
-
268
- Use for: Technology selection, architecture decisions, design choices, feature prioritization.
269
-
270
- **Execution:** Claude presents options with balanced pros/cons, waits for decision, proceeds with chosen direction.
271
- </type>
272
-
273
- **When to use checkpoints:**
274
-
275
- - Visual/UX verification (after Claude builds) → `checkpoint:human-verify`
276
- - Implementation direction choice → `checkpoint:decision`
277
- - Truly unavoidable manual actions (email links, 2FA) → `checkpoint:human-action` (rare)
278
-
279
- **When NOT to use checkpoints:**
280
-
281
- - Anything with CLI/API (Claude automates it) → `type="auto"`
282
- - Deployments (Vercel, Railway, Fly) → `type="auto"` with CLI
283
- - Creating resources (Upstash, Stripe, GitHub) → `type="auto"` with CLI/API
284
- - File operations, tests, builds → `type="auto"`
285
-
286
- **Golden rule:** If Claude CAN automate it, Claude MUST automate it.
287
-
288
- **Checkpoint impact on parallelization:**
289
- - Plans with checkpoints set `autonomous: false` in frontmatter
290
- - Non-autonomous plans execute after parallel wave or in main context
291
- - Subagent pauses at checkpoint, returns to orchestrator
292
- - Orchestrator presents checkpoint to user
293
- - User responds
294
- - Orchestrator resumes agent with `resume: agent_id`
167
+ **Golden rule:** If Claude CAN automate it, Claude MUST automate it. All tasks use `type="auto"`.
295
168
 
296
- See `./checkpoints.md` for comprehensive checkpoint guidance.
169
+ **Decisions:** Resolve during planning via AskUserQuestion, not during execution. For purely technical choices, make the decision and document it in the plan's objective.
297
170
  </task_types>
298
171
 
299
172
  <tdd_plans>
@@ -65,7 +65,7 @@ See `~/.claude/mindsystem/references/tdd.md` for TDD plan structure.
65
65
  - **More than 3 tasks** - Even if tasks seem small
66
66
  - **Multiple subsystems** - DB + API + UI = separate plans
67
67
  - **Any task with >5 file modifications** - Split by file groups
68
- - **Checkpoint + implementation work** - Checkpoints in one plan, implementation after in separate plan
68
+ - **Discovery + verification in separate plans** - Don't mix exploratory and implementation work
69
69
  - **Discovery + implementation** - DISCOVERY.md in one plan, implementation in another
70
70
  </always_split>
71
71
 
@@ -114,12 +114,12 @@ Plan 03: Visualization components
114
114
  # Independent plan (Wave 1 candidate)
115
115
  depends_on: []
116
116
  files_modified: [src/features/user/model.ts, src/features/user/api.ts]
117
- autonomous: true
117
+
118
118
 
119
119
  # Dependent plan (later wave)
120
120
  depends_on: ["03-01"]
121
121
  files_modified: [src/integration/stripe.ts]
122
- autonomous: true
122
+
123
123
  ```
124
124
 
125
125
  **Wave assignment rules:**
@@ -4,8 +4,6 @@
4
4
  "parallelization": {
5
5
  "enabled": true,
6
6
  "plan_level": true,
7
- "task_level": false,
8
- "skip_checkpoints": true,
9
7
  "max_concurrent_agents": 3,
10
8
  "min_plans_for_parallel": 2
11
9
  },
@@ -13,7 +13,7 @@ Template for `.planning/phases/XX-name/{phase}-DESIGN.md` - captures visual/UX d
13
13
 
14
14
  **Designed:** [date]
15
15
  **Platform:** [web / mobile / both]
16
- **Aesthetic source:** [implement-ui skill / codebase analysis / fresh design]
16
+ **Aesthetic source:** [project UI skill / codebase analysis / fresh design]
17
17
 
18
18
  ## Visual Identity
19
19
 
@@ -16,7 +16,6 @@ type: execute
16
16
  wave: N # Execution wave (1, 2, 3...). Pre-computed at plan time.
17
17
  depends_on: [] # Plan IDs this plan requires (e.g., ["01-01"]).
18
18
  files_modified: [] # Files this plan modifies.
19
- autonomous: true # false if plan has checkpoints requiring user interaction
20
19
  subsystem_hint: "" # From planner, for executor SUMMARY.md
21
20
  user_setup: [] # Human-required setup Claude cannot automate (see below)
22
21
 
@@ -37,8 +36,6 @@ Output: [What artifacts will be created]
37
36
  <execution_context>
38
37
  @~/.claude/mindsystem/workflows/execute-plan.md
39
38
  @~/.claude/mindsystem/templates/summary.md
40
- [If plan contains checkpoint tasks (type="checkpoint:*"), add:]
41
- @~/.claude/mindsystem/references/checkpoints.md
42
39
  </execution_context>
43
40
 
44
41
  <context>
@@ -73,35 +70,6 @@ Output: [What artifacts will be created]
73
70
  <done>[Acceptance criteria]</done>
74
71
  </task>
75
72
 
76
- <task type="checkpoint:decision" gate="blocking">
77
- <decision>[What needs deciding]</decision>
78
- <context>[Why this decision matters]</context>
79
- <options>
80
- <option id="option-a">
81
- <name>[Option name]</name>
82
- <pros>[Benefits and advantages]</pros>
83
- <cons>[Tradeoffs and limitations]</cons>
84
- </option>
85
- <option id="option-b">
86
- <name>[Option name]</name>
87
- <pros>[Benefits and advantages]</pros>
88
- <cons>[Tradeoffs and limitations]</cons>
89
- </option>
90
- </options>
91
- <resume-signal>[How to indicate choice - "Select: option-a or option-b"]</resume-signal>
92
- </task>
93
-
94
- <task type="checkpoint:human-verify" gate="blocking">
95
- <what-built>[What Claude just built that needs verification]</what-built>
96
- <how-to-verify>
97
- 1. Run: [command to start dev server/app]
98
- 2. Visit: [URL to check]
99
- 3. Test: [Specific interactions]
100
- 4. Confirm: [Expected behaviors]
101
- </how-to-verify>
102
- <resume-signal>Type "approved" to continue, or describe issues to fix</resume-signal>
103
- </task>
104
-
105
73
  </tasks>
106
74
 
107
75
  <verification>
@@ -136,7 +104,6 @@ After completion, create `.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md`
136
104
  | `wave` | Yes | Execution wave number (1, 2, 3...). Pre-computed at plan time. |
137
105
  | `depends_on` | Yes | Array of plan IDs this plan requires. |
138
106
  | `files_modified` | Yes | Files this plan touches. |
139
- | `autonomous` | Yes | `true` if no checkpoints, `false` if has checkpoints |
140
107
  | `subsystem_hint` | No | Subsystem from config.json, assigned by planner for executor to use in SUMMARY.md |
141
108
  | `user_setup` | No | Array of human-required setup items (external services) |
142
109
  | `must_haves` | Yes | Goal-backward verification criteria (see below) |
@@ -158,19 +125,16 @@ After completion, create `.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md`
158
125
  wave: 1
159
126
  depends_on: []
160
127
  files_modified: [src/models/user.ts, src/api/users.ts]
161
- autonomous: true
162
128
 
163
129
  # Plan 02 - Product feature (no overlap with Plan 01)
164
130
  wave: 1
165
131
  depends_on: []
166
132
  files_modified: [src/models/product.ts, src/api/products.ts]
167
- autonomous: true
168
133
 
169
134
  # Plan 03 - Order feature (no overlap)
170
135
  wave: 1
171
136
  depends_on: []
172
137
  files_modified: [src/models/order.ts, src/api/orders.ts]
173
- autonomous: true
174
138
  ```
175
139
 
176
140
  All three run in parallel (Wave 1) - no dependencies, no file conflicts.
@@ -182,28 +146,15 @@ All three run in parallel (Wave 1) - no dependencies, no file conflicts.
182
146
  wave: 1
183
147
  depends_on: []
184
148
  files_modified: [src/lib/auth.ts, src/middleware/auth.ts]
185
- autonomous: true
186
149
 
187
150
  # Plan 02 - Protected features (needs auth)
188
151
  wave: 2
189
152
  depends_on: ["01"]
190
153
  files_modified: [src/features/dashboard.ts]
191
- autonomous: true
192
154
  ```
193
155
 
194
156
  Plan 02 in Wave 2 waits for Plan 01 in Wave 1 - genuine dependency on auth types/middleware.
195
157
 
196
- **Checkpoint plan:**
197
-
198
- ```yaml
199
- # Plan 03 - UI with verification
200
- wave: 3
201
- depends_on: ["01", "02"]
202
- files_modified: [src/components/Dashboard.tsx]
203
- autonomous: false # Has checkpoint:human-verify
204
- ```
205
-
206
- Wave 3 runs after Waves 1 and 2. Pauses at checkpoint, orchestrator presents to user, resumes on approval.
207
158
 
208
159
  </parallel_examples>
209
160
 
@@ -283,19 +234,12 @@ See `~/.claude/mindsystem/references/tdd.md` for TDD plan structure.
283
234
 
284
235
  ## Task Types
285
236
 
286
- | Type | Use For | Autonomy |
287
- |------|---------|----------|
288
- | `auto` | Everything Claude can do independently | Fully autonomous |
289
- | `checkpoint:human-verify` | Visual/functional verification | Pauses, returns to orchestrator |
290
- | `checkpoint:decision` | Implementation choices | Pauses, returns to orchestrator |
291
- | `checkpoint:human-action` | Truly unavoidable manual steps (rare) | Pauses, returns to orchestrator |
237
+ | Type | Use For |
238
+ |------|---------|
239
+ | `auto` | Everything Claude can do independently (default) |
240
+ | `tdd` | TDD features with RED GREEN REFACTOR cycle |
292
241
 
293
- **Checkpoint behavior in parallel execution:**
294
- - Plan runs until checkpoint
295
- - Agent returns with checkpoint details + agent_id
296
- - Orchestrator presents to user
297
- - User responds
298
- - Orchestrator resumes agent with `resume: agent_id`
242
+ **Decisions:** Resolve during planning via AskUserQuestion, not during execution. For purely technical choices, make the decision and document it in the plan's objective.
299
243
 
300
244
  ---
301
245
 
@@ -311,7 +255,6 @@ type: execute
311
255
  wave: 1
312
256
  depends_on: []
313
257
  files_modified: [src/features/user/model.ts, src/features/user/api.ts, src/features/user/UserList.tsx]
314
- autonomous: true
315
258
  ---
316
259
 
317
260
  <objective>
@@ -360,76 +303,6 @@ After completion, create `.planning/phases/03-features/03-01-SUMMARY.md`
360
303
  </output>
361
304
  ```
362
305
 
363
- **Plan with checkpoint (non-autonomous):**
364
-
365
- ```markdown
366
- ---
367
- phase: 03-features
368
- plan: 03
369
- type: execute
370
- wave: 2
371
- depends_on: ["03-01", "03-02"]
372
- files_modified: [src/components/Dashboard.tsx]
373
- autonomous: false
374
- ---
375
-
376
- <objective>
377
- Build dashboard with visual verification.
378
-
379
- Purpose: Integrate user and product features into unified view.
380
- Output: Working dashboard component.
381
- </objective>
382
-
383
- <execution_context>
384
- @~/.claude/mindsystem/workflows/execute-plan.md
385
- @~/.claude/mindsystem/templates/summary.md
386
- @~/.claude/mindsystem/references/checkpoints.md
387
- </execution_context>
388
-
389
- <context>
390
- @.planning/PROJECT.md
391
- @.planning/ROADMAP.md
392
- @.planning/phases/03-features/03-01-SUMMARY.md
393
- @.planning/phases/03-features/03-02-SUMMARY.md
394
- </context>
395
-
396
- <tasks>
397
- <task type="auto">
398
- <name>Task 1: Build Dashboard layout</name>
399
- <files>src/components/Dashboard.tsx</files>
400
- <action>Create responsive grid with UserList and ProductList components. Use Tailwind for styling.</action>
401
- <verify>npm run build succeeds</verify>
402
- <done>Dashboard renders without errors</done>
403
- </task>
404
-
405
- <task type="checkpoint:human-verify" gate="blocking">
406
- <what-built>Responsive dashboard with user and product sections</what-built>
407
- <how-to-verify>
408
- 1. Run: npm run dev
409
- 2. Visit: http://localhost:3000/dashboard
410
- 3. Desktop: Verify two-column grid
411
- 4. Mobile: Verify stacked layout
412
- 5. Check: No layout shift, no scroll issues
413
- </how-to-verify>
414
- <resume-signal>Type "approved" or describe issues</resume-signal>
415
- </task>
416
- </tasks>
417
-
418
- <verification>
419
- - [ ] npm run build succeeds
420
- - [ ] Visual verification passed
421
- </verification>
422
-
423
- <success_criteria>
424
- - All tasks completed
425
- - User approved visual layout
426
- </success_criteria>
427
-
428
- <output>
429
- After completion, create `.planning/phases/03-features/03-03-SUMMARY.md`
430
- </output>
431
- ```
432
-
433
306
  ---
434
307
 
435
308
  ## Anti-Patterns
@@ -446,14 +319,6 @@ Plan 02: All APIs (depends on 01)
446
319
  Plan 03: All UIs (depends on 02)
447
320
  ```
448
321
 
449
- **Bad: Missing autonomy flag**
450
- ```yaml
451
- # Has checkpoint but no autonomous: false
452
- depends_on: []
453
- files_modified: [...]
454
- # autonomous: ??? <- Missing!
455
- ```
456
-
457
322
  **Bad: Vague tasks**
458
323
  ```xml
459
324
  <task type="auto">
@@ -467,10 +332,9 @@ files_modified: [...]
467
332
  ## Guidelines
468
333
 
469
334
  - Always use XML structure for Claude parsing
470
- - Include `wave`, `depends_on`, `files_modified`, `autonomous` in every plan
335
+ - Include `wave`, `depends_on`, `files_modified` in every plan
471
336
  - Prefer vertical slices over horizontal layers
472
337
  - Only reference prior SUMMARYs when genuinely needed
473
- - Group checkpoints with related auto tasks in same plan
474
338
  - 2-3 tasks per plan, ~50% context max
475
339
 
476
340
  ---
@@ -38,6 +38,17 @@ patterns-established:
38
38
  - "Pattern 1: description"
39
39
  - "Pattern 2: description"
40
40
 
41
+ # Verification hints (required — aids verify-work mock classification, use `none` if not applicable)
42
+ mock_hints:
43
+ transient_states:
44
+ - state: "[description of transient UI state]"
45
+ component: "[file path]"
46
+ trigger: "[async call | animation | timer]"
47
+ external_data:
48
+ - source: "[API endpoint or data source]"
49
+ data_type: "[what kind of data]"
50
+ components: ["[file1]", "[file2]"]
51
+
41
52
  # Metrics
42
53
  duration: Xmin
43
54
  completed: YYYY-MM-DD
@@ -76,6 +87,17 @@ _Note: TDD tasks may have multiple commits (test → feat → refactor)_
76
87
  - `path/to/file.ts` - What it does
77
88
  - `path/to/another.ts` - What it does
78
89
 
90
+ ## Verification Hints
91
+
92
+ [If phase built UI with transient states or external data dependencies, list them.
93
+ If not applicable: "None — no transient states or external data dependencies."]
94
+
95
+ **Transient states:** [States that appear briefly during async operations]
96
+ - [state description] in `[component]` — triggered by [what]
97
+
98
+ **External data:** [Features that fetch specific data from APIs]
99
+ - [data type] from [source] — used by `[component1]`, `[component2]`
100
+
79
101
  ## Decisions Made
80
102
  [Key decisions with brief rationale, or "None - followed plan as specified"]
81
103
 
@@ -143,6 +165,8 @@ None - no external service configuration required.
143
165
  **Patterns:** Established conventions future phases should maintain.
144
166
 
145
167
  **Population:** Frontmatter is populated during summary creation in execute-plan.md. See `<step name="create_summary">` for field-by-field guidance.
168
+
169
+ **Mock hints (required):** Captures verification-relevant knowledge about transient UI states and external data dependencies. Transient states are UI states that appear briefly (loading skeletons, animations, transitions) — verify-work needs these to generate mocks that force/extend the state. External data entries identify features depending on API data — verify-work uses these to ask the user whether test data exists locally. Populate when the phase builds UI with these characteristics. When a phase has no transient states or external data dependencies, write `mock_hints: none` (with optional comment, e.g., `mock_hints: none # purely backend, no async UI`). Always populate — `none` is a valid value that tells verify-work to skip mock analysis.
146
170
  </frontmatter_guidance>
147
171
 
148
172
  <one_liner_rules>