mindsystem-cc 3.10.0 → 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.
Files changed (47) hide show
  1. package/README.md +3 -6
  2. package/agents/ms-designer.md +8 -8
  3. package/agents/ms-executor.md +14 -163
  4. package/agents/ms-plan-checker.md +2 -3
  5. package/agents/ms-plan-writer.md +5 -11
  6. package/agents/ms-roadmapper.md +101 -16
  7. package/agents/ms-verify-fixer.md +1 -1
  8. package/commands/ms/complete-milestone.md +1 -1
  9. package/commands/ms/create-roadmap.md +126 -56
  10. package/commands/ms/design-phase.md +12 -10
  11. package/commands/ms/execute-phase.md +0 -9
  12. package/commands/ms/help.md +24 -35
  13. package/commands/ms/new-milestone.md +184 -80
  14. package/commands/ms/new-project.md +3 -3
  15. package/commands/ms/research-project.md +2 -2
  16. package/commands/ms/review-design.md +9 -5
  17. package/commands/ms/verify-work.md +1 -1
  18. package/mindsystem/references/continuation-format.md +2 -3
  19. package/mindsystem/references/design-directions.md +1 -1
  20. package/mindsystem/references/mock-patterns.md +48 -0
  21. package/mindsystem/references/plan-format.md +2 -129
  22. package/mindsystem/references/routing/between-milestones-routing.md +5 -7
  23. package/mindsystem/references/scope-estimation.md +3 -3
  24. package/mindsystem/templates/config.json +0 -2
  25. package/mindsystem/templates/design.md +1 -1
  26. package/mindsystem/templates/milestone-context.md +76 -0
  27. package/mindsystem/templates/phase-prompt.md +6 -142
  28. package/mindsystem/templates/summary.md +24 -0
  29. package/mindsystem/workflows/complete-milestone.md +27 -8
  30. package/mindsystem/workflows/execute-phase.md +35 -124
  31. package/mindsystem/workflows/execute-plan.md +12 -517
  32. package/mindsystem/workflows/generate-mocks.md +74 -0
  33. package/mindsystem/workflows/mockup-generation.md +1 -1
  34. package/mindsystem/workflows/plan-phase.md +7 -24
  35. package/mindsystem/workflows/verify-work.md +97 -17
  36. package/package.json +1 -1
  37. package/scripts/__pycache__/compare_mockups.cpython-314.pyc +0 -0
  38. package/scripts/compare_mockups.py +219 -0
  39. package/skills/flutter-code-quality/SKILL.md +1 -1
  40. package/skills/flutter-code-simplification/SKILL.md +1 -1
  41. package/skills/flutter-senior-review/AGENTS.md +1 -1
  42. package/skills/flutter-senior-review/SKILL.md +1 -1
  43. package/commands/ms/define-requirements.md +0 -128
  44. package/mindsystem/references/checkpoint-detection.md +0 -50
  45. package/mindsystem/references/checkpoints.md +0 -788
  46. package/mindsystem/workflows/create-milestone.md +0 -243
  47. package/mindsystem/workflows/discuss-milestone.md +0 -310
@@ -1,29 +1,32 @@
1
1
  ---
2
2
  name: ms:new-milestone
3
- description: Start a new milestone cycle — update PROJECT.md and route to requirements
3
+ description: Start a new milestone — discover what to build, update PROJECT.md, create context for downstream
4
4
  argument-hint: "[milestone name, e.g., 'v1.1 Notifications']"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
8
8
  - Bash
9
+ - Glob
10
+ - Grep
9
11
  - AskUserQuestion
10
12
  ---
11
13
 
12
14
  <objective>
13
- Start a new milestone by updating PROJECT.md with new goals, then routing to the requirements roadmap cycle.
15
+ Start a new milestone by helping the user discover what to build next, then updating PROJECT.md and creating MILESTONE-CONTEXT.md for downstream consumption.
14
16
 
15
- This is the brownfield equivalent of new-project. The project exists, PROJECT.md has history. This command gathers "what's next" and updates PROJECT.md to reflect the new milestone's goals.
17
+ Self-contained command three phases: Orient (load context, present directions), Deepen (collaborative discovery), Commit (update files, route forward).
16
18
 
17
- Output: Updated PROJECT.md, routes to research-project or define-requirements
19
+ Output: Updated PROJECT.md, new MILESTONE-CONTEXT.md, routes to create-roadmap or research-project
18
20
  </objective>
19
21
 
20
22
  <execution_context>
21
23
  @~/.claude/mindsystem/references/questioning.md
22
24
  @~/.claude/mindsystem/templates/project.md
25
+ @~/.claude/mindsystem/templates/milestone-context.md
23
26
  </execution_context>
24
27
 
25
28
  <context>
26
- Milestone name: $ARGUMENTS (optional - will prompt if not provided)
29
+ Milestone name: $ARGUMENTS (optional will emerge during discovery if not provided)
27
30
 
28
31
  **Load project context:**
29
32
  @.planning/PROJECT.md
@@ -34,149 +37,249 @@ Milestone name: $ARGUMENTS (optional - will prompt if not provided)
34
37
 
35
38
  <process>
36
39
 
40
+ ## Phase 1: Orient
41
+
37
42
  1. **Load context:**
38
- - Read PROJECT.md (existing project, Validated requirements, decisions)
43
+ - Read PROJECT.md (existing project, validated requirements, decisions)
39
44
  - Read MILESTONES.md (what shipped previously)
40
45
  - Read STATE.md (pending todos, blockers)
46
+ - Read config.json (project settings)
41
47
  - Calculate previous milestone version from MILESTONES.md (e.g., if last shipped was v1.0, previous=1.0)
42
48
 
43
- 2. **Strategic assessment (internal — do not output this step):**
44
- - Load PROJECT.md (vision, audience, USP, problem space)
45
- - Load MILESTONES.md (what shipped)
46
- - Load STATE.md (pending todos, blockers)
47
- - Check for previous milestone artifacts using the version calculated in step 1:
49
+ 2. **Check for active milestone:**
50
+
51
+ If STATE.md or ROADMAP.md indicates a milestone is in progress:
52
+
53
+ Use AskUserQuestion:
54
+ - header: "Active milestone"
55
+ - question: "There's a milestone in progress (v[X.Y]). What do you want to do?"
56
+ - options:
57
+ - "Complete it first" — run /ms:complete-milestone
58
+ - "Add phases to it" — run /ms:add-phase
59
+ - "Continue anyway" — discuss next milestone scope
60
+
61
+ If "Complete it first" or "Add phases to it": present the relevant command and stop.
62
+ If "Continue anyway": proceed.
63
+
64
+ 3. **Strategic assessment (silent — do not output this step):**
65
+ - Check for previous milestone artifacts using calculated version:
48
66
  - `.planning/milestones/v{VERSION}-DECISIONS.md` (if exists)
49
67
  - `.planning/milestones/v{VERSION}-MILESTONE-AUDIT.md` (if exists)
50
68
  - `.planning/TECH-DEBT.md` (if exists)
51
- - Identify outstanding tech debt, unaddressed requirements, high-impact gaps
52
- - This is background analysis synthesize silently, surface through suggestions in step 3
53
-
54
- 3. **Present suggested directions:**
69
+ - `.planning/LEARNINGS.md` (if exists)
70
+ - Identify: outstanding tech debt, untested assumptions, high-impact gaps, unaddressed requirements
71
+ - This is background analysis — synthesize silently, surface through suggestions in step 4
55
72
 
56
- Output a brief markdown summary:
73
+ 4. **Present brief context and suggested directions:**
57
74
 
58
75
  ```
76
+ ## Last Milestone
77
+
78
+ v[X.Y] [Name] — [key accomplishments, 1-2 lines]
79
+
59
80
  ## Suggested Directions
60
81
 
61
- - **[Direction 1]** — [brief rationale]
82
+ - **[Direction 1]** — [brief rationale from tech debt, audit, or strategic gaps]
62
83
  - **[Direction 2]** — [brief rationale]
63
84
  - **[Direction 3]** — [brief rationale]
64
85
  ```
65
86
 
66
87
  Sources for suggestions:
67
88
  - High-impact tech debt from TECH-DEBT.md or MILESTONE-AUDIT.md
89
+ - Untested assumptions from previous audit
68
90
  - Unaddressed requirements from previous milestones
69
91
  - Strategic features inferred from PROJECT.md's problem/audience/USP
70
-
71
- Evaluate each by impact on user engagement, revenue, or growth.
92
+ - Pending todos from STATE.md
72
93
 
73
94
  If no meaningful artifacts exist (first milestone after v1.0), base suggestions purely on PROJECT.md.
74
95
 
75
- 4. **Freeform opening:**
96
+ 5. **Freeform opening:**
76
97
 
77
98
  Ask inline (freeform text, NOT AskUserQuestion):
78
99
 
79
100
  "What do you want to build next?"
80
101
 
81
- The user can pick from suggestions, combine them, or go a completely different direction.
102
+ The user can pick a suggestion, combine them, describe their own idea, share external context (specs, docs, analytics), or ask for help thinking it through.
82
103
 
83
- 5. **Follow threads:**
84
- - Based on what the user said, ask follow-up questions using AskUserQuestion
85
- - Challenge vagueness, make abstract concrete
86
- - Consult `questioning.md` for techniques
87
- - Weave in relevant previous context (tech debt, pending todos) as natural follow-ups when relevant, not as a wall of info upfront
88
- - Continue until clear goals emerge
104
+ ## Phase 2: Deepen
89
105
 
90
- 6. **Decision gate:**
106
+ 6. **Adaptive depth based on response clarity:**
91
107
 
92
- Use AskUserQuestion:
93
- - header: "Ready?"
94
- - question: "I think I understand what you want to build. Ready to update PROJECT.md?"
95
- - options:
96
- - "Update PROJECT.md" — Let's move forward
97
- - "Keep exploring" — I want to share more / ask me more
108
+ - **Clear, detailed response** → brief confirmation ("Sounds like you want X, Y, Z — let me confirm a few things"), then move toward Phase 3 quickly
109
+ - **Vague response** → probe with AskUserQuestion, explore features, challenge vagueness
110
+ - **External context shared** integrate it, clarify implications, ask follow-ups
98
111
 
99
- Loop until "Update PROJECT.md" selected.
112
+ 7. **Follow the thread:**
113
+ - Dig into what they said before switching topics
114
+ - Challenge vagueness, make abstract concrete (questioning.md techniques)
115
+ - "When you say X, do you mean A or B?"
116
+ - "Walk me through what that looks like"
117
+ - "What's the simplest version of this that would be useful?"
100
118
 
101
- 7. **Determine milestone version:**
102
- - Parse last version from MILESTONES.md
103
- - Suggest next version (v1.0 v1.1, or v2.0 for major)
104
- - Confirm with user
119
+ 8. **Probe for edges:**
120
+ - Simplest useful version vs full vision
121
+ - MVP vs complete what can wait?
122
+ - Constraints: technical, time, dependencies
123
+ - What's explicitly NOT part of this milestone?
105
124
 
106
- 8. **Update PROJECT.md:**
125
+ 9. **Surface previous context organically:**
126
+ - When relevant to what the user described, weave in tech debt, untested assumptions, pending todos
127
+ - NOT as a wall of info upfront — only when it connects to their stated direction
128
+ - "That relates to [tech debt item] from last milestone — want to address that too?"
107
129
 
108
- Add/update these sections:
130
+ 10. **Synthesize periodically:**
109
131
 
110
- ```markdown
111
- ## Current Milestone: v[X.Y] [Name]
132
+ When you have a clear picture forming:
112
133
 
113
- **Goal:** [One sentence describing milestone focus]
134
+ ```
135
+ Here's what I'm hearing:
114
136
 
115
- **Target features:**
116
- - [Feature 1]
117
- - [Feature 2]
118
- - [Feature 3]
119
- ```
137
+ **Features:**
138
+ - [Feature 1]: [brief description]
139
+ - [Feature 2]: [brief description]
120
140
 
121
- Update Active requirements section with new goals.
141
+ **Priority:** [what matters most]
142
+ **Scope boundary:** [what's NOT included]
143
+ ```
122
144
 
123
- Update "Last updated" footer.
145
+ 11. **Decision gate:**
124
146
 
125
- 9. **Update STATE.md:**
147
+ Use AskUserQuestion:
148
+ - header: "Ready?"
149
+ - question: "Ready to create the milestone?"
150
+ - options:
151
+ - "Create milestone" — update PROJECT.md and generate context
152
+ - "Keep exploring" — I want to share more or ask me more
153
+ - "Let me add context" — I have specs/docs/details to share
126
154
 
127
- ```markdown
128
- ## Current Position
155
+ If "Keep exploring" or "Let me add context" → loop back to step 6.
156
+ Loop until "Create milestone" selected.
129
157
 
130
- Phase: Not started (run /ms:create-roadmap)
131
- Plan: —
132
- Status: Defining requirements
133
- Last activity: [today] — Milestone v[X.Y] started
134
- ```
158
+ ## Phase 3: Commit
135
159
 
136
- 10. **Git commit:**
137
- ```bash
138
- git add .planning/PROJECT.md .planning/STATE.md
139
- git commit -m "docs: start milestone v[X.Y] [Name]"
140
- ```
160
+ 12. **Determine milestone version:**
161
+ - Parse last version from MILESTONES.md
162
+ - Suggest next version (v1.0 → v1.1, or v2.0 for major shifts)
163
+ - Confirm with user via AskUserQuestion
141
164
 
142
- 11. **Calculate next phase for context:**
165
+ 13. **Present milestone summary:**
143
166
 
144
- ```bash
145
- LAST_PHASE=$(ls -d .planning/phases/[0-9]*-* 2>/dev/null | sort -V | tail -1 | grep -oE '[0-9]+' | head -1)
146
- if [ -n "$LAST_PHASE" ]; then
147
- NEXT_PHASE=$((10#$LAST_PHASE + 1))
148
- else
149
- NEXT_PHASE=1
150
- fi
151
- echo "Next milestone phases will start at: Phase $NEXT_PHASE"
152
- ```
167
+ ```
168
+ ## Milestone Summary
169
+
170
+ **Version:** v[X.Y] [Name]
171
+ **Goal:** [One sentence]
172
+ **Target features:**
173
+ - [Feature 1]
174
+ - [Feature 2]
175
+ - [Feature 3]
176
+ ```
177
+
178
+ Use AskUserQuestion:
179
+ - header: "Confirm"
180
+ - question: "Look good?"
181
+ - options:
182
+ - "Looks good" — proceed
183
+ - "Adjust" — let me change something
184
+
185
+ If "Adjust" → ask what to change, update, re-confirm.
186
+
187
+ 14. **Update PROJECT.md:**
153
188
 
154
- 12. **Route to next step:**
189
+ Add/update these sections:
155
190
 
156
- Based on the conversation, recommend ONE path. If unfamiliar domains or open technical questions surfaced, recommend `/ms:research-project`. Otherwise recommend `/ms:define-requirements`.
191
+ ```markdown
192
+ ## Current Milestone: v[X.Y] [Name]
193
+
194
+ **Goal:** [One sentence describing milestone focus]
195
+
196
+ **Target features:**
197
+ - [Feature 1]
198
+ - [Feature 2]
199
+ - [Feature 3]
200
+ ```
201
+
202
+ Update Active requirements section with new goals.
203
+ Update "Last updated" footer.
204
+
205
+ 15. **Write MILESTONE-CONTEXT.md:**
206
+
207
+ Create `.planning/MILESTONE-CONTEXT.md` using template from `~/.claude/mindsystem/templates/milestone-context.md`.
208
+
209
+ Populate from the conversation:
210
+ - Vision — the "why" in user's words
211
+ - Features — with rationale and scope notes
212
+ - External context — any specs, docs, or references shared
213
+ - Scope boundaries — what's explicitly excluded
214
+ - Priorities — must-have vs nice-to-have
215
+ - Open questions — things needing research
216
+
217
+ 16. **Update STATE.md:**
218
+
219
+ ```markdown
220
+ ## Current Position
221
+
222
+ Phase: Not started (run /ms:create-roadmap)
223
+ Plan: —
224
+ Status: Defining requirements
225
+ Last activity: [today] — Milestone v[X.Y] started
226
+
227
+ Progress: ░░░░░░░░░░ 0%
228
+ ```
229
+
230
+ Keep Accumulated Context (decisions, blockers) from previous milestone.
231
+
232
+ 17. **Git commit:**
233
+
234
+ ```bash
235
+ git add .planning/PROJECT.md .planning/STATE.md .planning/MILESTONE-CONTEXT.md
236
+ git commit -m "$(cat <<'EOF'
237
+ docs: start milestone v[X.Y] [Name]
238
+ EOF
239
+ )"
240
+ ```
241
+
242
+ 18. **Calculate next phase number:**
243
+
244
+ ```bash
245
+ LAST_PHASE=$(ls -d .planning/phases/[0-9]*-* 2>/dev/null | sort -V | tail -1 | grep -oE '[0-9]+' | head -1)
246
+ if [ -n "$LAST_PHASE" ]; then
247
+ NEXT_PHASE=$((10#$LAST_PHASE + 1))
248
+ else
249
+ NEXT_PHASE=1
250
+ fi
251
+ echo "Next milestone phases will start at: Phase $NEXT_PHASE"
252
+ ```
253
+
254
+ 19. **Route to next step:**
255
+
256
+ Based on the conversation, recommend ONE path. If unfamiliar domains or open questions surfaced during discovery, recommend `/ms:research-project`. Otherwise recommend `/ms:create-roadmap`.
157
257
 
158
258
  ```
159
259
  Milestone v[X.Y] [Name] initialized.
160
260
 
161
261
  PROJECT.md updated with new goals.
262
+ Context saved to MILESTONE-CONTEXT.md
162
263
  Phases will start at: Phase $NEXT_PHASE
163
264
 
164
265
  ---
165
266
 
166
267
  ## ▶ Next Up
167
268
 
168
- **[Recommended command name]** — [one-line reason from conversation]
269
+ **[Recommended command]** — [one-line reason from conversation]
169
270
 
170
271
  `/ms:[recommended-command]`
171
272
 
172
- `/clear` first fresh context window
273
+ <sub>`/clear` first fresh context window</sub>
173
274
 
174
275
  ---
175
276
 
176
277
  **Also available:** `/ms:[alternative-command]`
278
+
279
+ ---
177
280
  ```
178
281
 
179
- 13. **Update last command**
282
+ 20. **Update last command:**
180
283
  - Update `.planning/STATE.md` Last Command field
181
284
  - Format: `Last Command: ms:new-milestone $ARGUMENTS | YYYY-MM-DD HH:MM`
182
285
 
@@ -185,7 +288,8 @@ Milestone name: $ARGUMENTS (optional - will prompt if not provided)
185
288
  <success_criteria>
186
289
  - PROJECT.md updated with Current Milestone section
187
290
  - Active requirements reflect new milestone goals
291
+ - MILESTONE-CONTEXT.md created with vision, features, scope, priorities
188
292
  - STATE.md reset for new milestone
189
293
  - Git commit made
190
- - User routed to define-requirements (or research-project)
294
+ - User routed to create-roadmap (or research-project if unknowns surfaced)
191
295
  </success_criteria>
@@ -305,10 +305,10 @@ Research ecosystem → define requirements → create roadmap. Discovers standar
305
305
 
306
306
  `/ms:research-project`
307
307
 
308
- **Option B: Define requirements directly** (familiar domains)
309
- Skip research, define requirements from what you know, then create roadmap.
308
+ **Option B: Define requirements and roadmap directly** (familiar domains)
309
+ Skip research, define requirements and create roadmap from what you know.
310
310
 
311
- `/ms:define-requirements`
311
+ `/ms:create-roadmap`
312
312
 
313
313
  <sub>`/clear` first → fresh context window</sub>
314
314
 
@@ -150,7 +150,7 @@ IMPORTANT for subsequent milestones:
150
150
  </project_context>
151
151
 
152
152
  <downstream_consumer>
153
- Your FEATURES.md feeds into /ms:define-requirements. Categorize clearly:
153
+ Your FEATURES.md feeds into /ms:create-roadmap. Categorize clearly:
154
154
  - Table stakes (must have or users leave)
155
155
  - Differentiators (competitive advantage)
156
156
  - Anti-features (things to deliberately NOT build)
@@ -336,7 +336,7 @@ Key findings:
336
336
 
337
337
  ---
338
338
  ## > Next Up
339
- **Define requirements** - `/ms:define-requirements`
339
+ **Define requirements and create roadmap** - `/ms:create-roadmap`
340
340
  <sub>`/clear` first</sub>
341
341
  ---
342
342
  ```
@@ -117,12 +117,16 @@ ls .planning/phases/${PHASE_ARG}-*/*-DESIGN.md 2>/dev/null
117
117
 
118
118
  ### Step 2.3: Optional Context
119
119
 
120
- **implement-ui skill (if exists):**
120
+ **Project UI skill (if exists):**
121
+
122
+ Discover project-level skills:
121
123
  ```bash
122
- ls .claude/skills/*implement-ui* 2>/dev/null
124
+ ls .claude/skills/*/SKILL.md 2>/dev/null
123
125
  ```
124
126
 
125
- If exists, load as authoritative source for existing patterns.
127
+ If skills found, read the YAML frontmatter (name + description) of each SKILL.md. Identify any skill whose description indicates it provides UI implementation patterns (screens, widgets, components, theming, spacing, visual patterns).
128
+
129
+ If a UI skill is found, load as authoritative source for existing patterns.
126
130
 
127
131
  **Codebase analysis:**
128
132
  - Detect platform (Flutter, React, etc.)
@@ -192,7 +196,7 @@ Apply quality-forcing patterns from `ai-driven-ui-design-system.md`:
192
196
 
193
197
  ### 3.5: Pattern Alignment
194
198
 
195
- If implement-ui skill or codebase patterns exist:
199
+ If project UI skill or codebase patterns exist:
196
200
  - Check for consistent color usage
197
201
  - Check for consistent component patterns
198
202
  - Check for consistent spacing scale
@@ -478,7 +482,7 @@ Apply these patterns throughout the review:
478
482
 
479
483
  <success_criteria>
480
484
  - [ ] Target code scope clarified (via arguments or AskUserQuestion)
481
- - [ ] Context chain loaded (PROJECT.md, DESIGN.md if exists, implement-ui skill)
485
+ - [ ] Context chain loaded (PROJECT.md, DESIGN.md if exists, project UI skill)
482
486
  - [ ] Code analyzed across all quality dimensions
483
487
  - [ ] Retroactive DESIGN.md created if missing
484
488
  - [ ] Improvements presented with benefits AND trade-offs
@@ -41,7 +41,7 @@ Phase: $ARGUMENTS (optional)
41
41
  2. **Check for active UAT sessions** — Resume or start new
42
42
  3. **Find SUMMARY.md files** for the phase
43
43
  4. **Extract testable deliverables** from summaries
44
- 5. **Classify tests by mock requirements** — Infer mock_type from test descriptions
44
+ 5. **Classify tests by mock requirements** — Use SUMMARY.md mock_hints when available; classify inline with keyword heuristics when absent. Confirm data availability with user before batching.
45
45
  6. **Group into batches** — By mock type, max 4 per batch, no-mock tests first
46
46
  - If any tests require mocks: Read `~/.claude/mindsystem/references/mock-patterns.md` and `~/.claude/mindsystem/workflows/generate-mocks.md` for mock generation guidance
47
47
  7. **For each batch:**
@@ -167,16 +167,15 @@ All 4 phases shipped
167
167
 
168
168
  ## ▶ Next Up
169
169
 
170
- **Plan v1.1** — Enhanced features and optimizations
170
+ **Start v1.1** — discover what to build next
171
171
 
172
- `/ms:discuss-milestone`
172
+ `/ms:new-milestone`
173
173
 
174
174
  <sub>`/clear` first → fresh context window</sub>
175
175
 
176
176
  ---
177
177
 
178
178
  **Also available:**
179
- - `/ms:new-milestone` — create directly if scope is clear
180
179
  - Review accomplishments before moving on
181
180
 
182
181
  ---
@@ -93,7 +93,7 @@ Rule: If you can only tell variants apart by squinting at colors, they are not d
93
93
 
94
94
  <existing_aesthetic_constraint>
95
95
 
96
- When the project has an existing visual aesthetic (implement-ui skill, established codebase patterns):
96
+ When the project has an existing visual aesthetic (project UI skill, established codebase patterns):
97
97
 
98
98
  **ALL variants use the same colors, fonts, and component shapes.** Directions differ ONLY in:
99
99
  - Layout and spatial organization
@@ -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');