mindsystem-cc 3.10.1 → 3.12.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 (34) hide show
  1. package/README.md +1 -1
  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 +6 -21
  6. package/agents/ms-roadmapper.md +1 -18
  7. package/agents/ms-verify-fixer.md +1 -1
  8. package/commands/ms/design-phase.md +9 -14
  9. package/commands/ms/execute-phase.md +0 -9
  10. package/commands/ms/help.md +1 -8
  11. package/commands/ms/new-project.md +3 -40
  12. package/commands/ms/review-design.md +4 -7
  13. package/commands/ms/verify-work.md +1 -1
  14. package/mindsystem/references/design-directions.md +1 -1
  15. package/mindsystem/references/mock-patterns.md +48 -0
  16. package/mindsystem/references/plan-format.md +2 -129
  17. package/mindsystem/references/scope-estimation.md +3 -36
  18. package/mindsystem/templates/config.json +0 -13
  19. package/mindsystem/templates/design.md +1 -1
  20. package/mindsystem/templates/phase-prompt.md +6 -142
  21. package/mindsystem/templates/roadmap.md +1 -1
  22. package/mindsystem/templates/summary.md +24 -0
  23. package/mindsystem/workflows/execute-phase.md +4 -99
  24. package/mindsystem/workflows/execute-plan.md +12 -523
  25. package/mindsystem/workflows/generate-mocks.md +74 -0
  26. package/mindsystem/workflows/mockup-generation.md +11 -5
  27. package/mindsystem/workflows/plan-phase.md +15 -60
  28. package/mindsystem/workflows/transition.md +1 -10
  29. package/mindsystem/workflows/verify-work.md +97 -17
  30. package/package.json +1 -1
  31. package/scripts/__pycache__/compare_mockups.cpython-314.pyc +0 -0
  32. package/scripts/compare_mockups.py +219 -0
  33. package/mindsystem/references/checkpoint-detection.md +0 -50
  34. package/mindsystem/references/checkpoints.md +0 -788
@@ -215,46 +215,9 @@ Do not compress. Capture everything gathered.
215
215
 
216
216
  </step>
217
217
 
218
- <step name="workflow_preferences">
219
-
220
- Ask workflow preferences in a single AskUserQuestion call (2 questions):
221
-
222
- Use AskUserQuestion with questions array:
223
-
224
- ```
225
- questions: [
226
- {
227
- header: "Depth",
228
- question: "How thorough should planning be?",
229
- multiSelect: false,
230
- options: [
231
- { label: "Quick", description: "Ship fast (3-5 phases, 1-3 plans each)" },
232
- { label: "Standard (Recommended)", description: "Balanced scope and speed (5-8 phases, 3-5 plans each)" },
233
- { label: "Comprehensive", description: "Thorough coverage (8-12 phases, 5-10 plans each)" }
234
- ]
235
- },
236
- {
237
- header: "Execution",
238
- question: "Run plans in parallel?",
239
- multiSelect: false,
240
- options: [
241
- { label: "Parallel (Recommended)", description: "Independent plans run simultaneously" },
242
- { label: "Sequential", description: "One plan at a time" }
243
- ]
244
- }
245
- ]
246
- ```
247
-
248
- **Notes:**
249
- - Depth controls compression tolerance, not artificial inflation
250
- - Parallelization spawns multiple agents for independent plans
251
- - All settings can be changed later in config.json
252
-
253
- </step>
254
-
255
218
  <step name="config">
256
219
 
257
- Create `.planning/config.json` with chosen depth, parallelization, and subsystems using `templates/config.json` structure.
220
+ Create `.planning/config.json` with subsystems and code_review using `templates/config.json` structure.
258
221
 
259
222
  **Subsystems:** Derive 5-10 initial subsystems from the project context gathered during questioning. These are short, lowercase identifiers for the major functional areas of the project.
260
223
 
@@ -263,7 +226,7 @@ Examples by project type:
263
226
  - SaaS: `["auth", "dashboard", "analytics", "billing", "notifications", "ui", "api", "database"]`
264
227
  - Mobile app: `["auth", "onboarding", "feed", "messaging", "profile", "media", "api", "storage"]`
265
228
 
266
- Place `subsystems` array as the first field in config.json (before `depth`). These values are used throughout the system for consistent categorization of summaries, debug docs, and adhoc work.
229
+ These values are used throughout the system for consistent categorization of summaries, debug docs, and adhoc work.
267
230
 
268
231
  </step>
269
232
 
@@ -340,7 +303,7 @@ Update `.planning/STATE.md` Last Command field (if STATE.md exists):
340
303
  - [ ] PROJECT.md captures full context with evolutionary structure
341
304
  - [ ] Requirements initialized as hypotheses (greenfield) or with inferred Validated (brownfield)
342
305
  - [ ] Key Decisions table initialized
343
- - [ ] config.json has depth and parallelization settings
306
+ - [ ] config.json has subsystems and code_review settings
344
307
  - [ ] All committed to git
345
308
 
346
309
  </success_criteria>
@@ -117,12 +117,9 @@ 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):**
121
- ```bash
122
- ls .claude/skills/*implement-ui* 2>/dev/null
123
- ```
120
+ **Project UI skill (if exists):**
124
121
 
125
- If exists, load as authoritative source for existing patterns.
122
+ Check your available skills for one that provides domain expertise relevant to this project's UI implementation patterns. If found, invoke it via the Skill tool and use as authoritative source for existing patterns.
126
123
 
127
124
  **Codebase analysis:**
128
125
  - Detect platform (Flutter, React, etc.)
@@ -192,7 +189,7 @@ Apply quality-forcing patterns from `ai-driven-ui-design-system.md`:
192
189
 
193
190
  ### 3.5: Pattern Alignment
194
191
 
195
- If implement-ui skill or codebase patterns exist:
192
+ If project UI skill or codebase patterns exist:
196
193
  - Check for consistent color usage
197
194
  - Check for consistent component patterns
198
195
  - Check for consistent spacing scale
@@ -478,7 +475,7 @@ Apply these patterns throughout the review:
478
475
 
479
476
  <success_criteria>
480
477
  - [ ] Target code scope clarified (via arguments or AskUserQuestion)
481
- - [ ] Context chain loaded (PROJECT.md, DESIGN.md if exists, implement-ui skill)
478
+ - [ ] Context chain loaded (PROJECT.md, DESIGN.md if exists, project UI skill)
482
479
  - [ ] Code analyzed across all quality dimensions
483
480
  - [ ] Retroactive DESIGN.md created if missing
484
481
  - [ ] 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:**
@@ -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');
@@ -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:**
@@ -204,38 +204,6 @@ Waves: [01, 02, 03] (all parallel)
204
204
  **3 tasks:** Simple ~45%, Medium ~75% (risky), Complex 120% (impossible)
205
205
  </estimating_context>
206
206
 
207
- <depth_calibration>
208
- **Depth controls compression tolerance, not artificial inflation.**
209
-
210
- | Depth | Typical Phases | Typical Plans/Phase | Tasks/Plan |
211
- |-------|----------------|---------------------|------------|
212
- | Quick | 3-5 | 1-3 | 2-3 |
213
- | Standard | 5-8 | 3-5 | 2-3 |
214
- | Comprehensive | 8-12 | 5-10 | 2-3 |
215
-
216
- Tasks/plan is CONSTANT at 2-3. The 50% context rule applies universally.
217
-
218
- **Key principle:** Derive from actual work. Depth determines how aggressively you combine things, not a target to hit.
219
-
220
- - Comprehensive auth = 8 plans (because auth genuinely has 8 concerns)
221
- - Comprehensive "add favicon" = 1 plan (because that's all it is)
222
-
223
- Don't pad small work to hit a number. Don't compress complex work to look efficient.
224
-
225
- **Comprehensive depth example:**
226
- Auth system at comprehensive depth = 8 plans (not 3 big ones):
227
- - 01: DB models (2 tasks)
228
- - 02: Password hashing (2 tasks)
229
- - 03: JWT generation (2 tasks)
230
- - 04: JWT validation middleware (2 tasks)
231
- - 05: Login endpoint (2 tasks)
232
- - 06: Register endpoint (2 tasks)
233
- - 07: Protected route patterns (2 tasks)
234
- - 08: Auth UI components (3 tasks)
235
-
236
- Each plan: fresh context, peak quality. More plans = more thoroughness, same quality per plan.
237
- </depth_calibration>
238
-
239
207
  <summary>
240
208
  **2-3 tasks, 50% context target:**
241
209
  - All tasks: Peak quality
@@ -246,7 +214,6 @@ Each plan: fresh context, peak quality. More plans = more thoroughness, same qua
246
214
 
247
215
  **The rules:**
248
216
  - If in doubt, split. Quality over consolidation.
249
- - Depth increases plan COUNT, never plan SIZE.
250
217
  - Vertical slices over horizontal layers.
251
218
  - Explicit dependencies via `depends_on` frontmatter.
252
219
  - Autonomous plans get parallel execution.
@@ -1,18 +1,5 @@
1
1
  {
2
2
  "subsystems": [],
3
- "depth": "standard",
4
- "parallelization": {
5
- "enabled": true,
6
- "plan_level": true,
7
- "task_level": false,
8
- "skip_checkpoints": true,
9
- "max_concurrent_agents": 3,
10
- "min_plans_for_parallel": 2
11
- },
12
- "safety": {
13
- "always_confirm_destructive": true,
14
- "always_confirm_external_services": true
15
- },
16
3
  "code_review": {
17
4
  "adhoc": null,
18
5
  "phase": null,
@@ -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