create-claude-cabinet 0.6.8 → 0.7.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 (28) hide show
  1. package/lib/cli.js +5 -1
  2. package/package.json +4 -2
  3. package/templates/briefing/_briefing-architecture-template.md +17 -0
  4. package/templates/briefing/_briefing-identity-template.md +45 -0
  5. package/templates/briefing/{_briefing-scopes-template.md → _briefing-jurisdictions-template.md} +1 -1
  6. package/templates/briefing/_briefing-template.md +5 -5
  7. package/templates/cabinet/committees.yaml +7 -1
  8. package/templates/skills/cabinet-accessibility/SKILL.md +1 -1
  9. package/templates/skills/cabinet-architecture/SKILL.md +1 -1
  10. package/templates/skills/cabinet-boundary-man/SKILL.md +1 -1
  11. package/templates/skills/cabinet-cc-health/SKILL.md +1 -1
  12. package/templates/skills/cabinet-data-integrity/SKILL.md +1 -1
  13. package/templates/skills/cabinet-framework-quality/SKILL.md +339 -0
  14. package/templates/skills/cabinet-goal-alignment/SKILL.md +247 -0
  15. package/templates/skills/cabinet-information-design/SKILL.md +468 -0
  16. package/templates/skills/cabinet-mantine-quality/SKILL.md +326 -0
  17. package/templates/skills/cabinet-process-therapist/SKILL.md +1 -1
  18. package/templates/skills/cabinet-qa/SKILL.md +1 -1
  19. package/templates/skills/cabinet-record-keeper/SKILL.md +1 -1
  20. package/templates/skills/cabinet-security/SKILL.md +1 -1
  21. package/templates/skills/cabinet-small-screen/SKILL.md +1 -1
  22. package/templates/skills/cabinet-speed-freak/SKILL.md +1 -1
  23. package/templates/skills/cabinet-ui-experimentalist/SKILL.md +263 -0
  24. package/templates/skills/cabinet-usability/SKILL.md +1 -1
  25. package/templates/skills/cabinet-user-advocate/SKILL.md +322 -0
  26. package/templates/skills/cabinet-vision/SKILL.md +256 -0
  27. package/templates/skills/cabinet-workflow-cop/SKILL.md +1 -1
  28. package/templates/skills/onboard/phases/generate-briefing.md +1 -1
package/lib/cli.js CHANGED
@@ -53,7 +53,7 @@ const MODULES = {
53
53
  },
54
54
  'audit': {
55
55
  name: 'Audit Loop (audit + triage + cabinet)',
56
- description: '20 expert cabinet members review your project. Convene the full cabinet or just one committee.',
56
+ description: '27 expert cabinet members review your project. Convene the full cabinet or just one committee.',
57
57
  mandatory: false,
58
58
  default: true,
59
59
  lean: true,
@@ -70,6 +70,10 @@ const MODULES = {
70
70
  'skills/cabinet-small-screen', 'skills/cabinet-speed-freak',
71
71
  'skills/cabinet-system-advocate', 'skills/cabinet-technical-debt',
72
72
  'skills/cabinet-usability', 'skills/cabinet-workflow-cop',
73
+ 'skills/cabinet-framework-quality', 'skills/cabinet-goal-alignment',
74
+ 'skills/cabinet-information-design', 'skills/cabinet-mantine-quality',
75
+ 'skills/cabinet-ui-experimentalist', 'skills/cabinet-user-advocate',
76
+ 'skills/cabinet-vision',
73
77
  'scripts/merge-findings.js', 'scripts/load-triage-history.js',
74
78
  'scripts/triage-server.mjs', 'scripts/triage-ui.html',
75
79
  'scripts/finding-schema.json', 'scripts/resolve-committees.cjs',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-claude-cabinet",
3
- "version": "0.6.8",
3
+ "version": "0.7.0",
4
4
  "description": "Claude Cabinet — opinionated process scaffolding for Claude Code projects",
5
5
  "bin": {
6
6
  "create-claude-cabinet": "bin/create-claude-cabinet.js"
@@ -24,6 +24,8 @@
24
24
  "node": ">=18"
25
25
  },
26
26
  "dependencies": {
27
+ "better-sqlite3": "^12.8.0",
27
28
  "prompts": "^2.4.2"
28
- }
29
+ },
30
+ "type": "module"
29
31
  }
@@ -14,3 +14,20 @@ important to read.*
14
14
 
15
15
  *Languages, frameworks, libraries, databases, infrastructure. Include
16
16
  versions when they matter (e.g., Mantine v8, not just "Mantine").*
17
+
18
+ ## UI Framework
19
+
20
+ *Optional — fill this in if your project has a UI framework and you've
21
+ adopted framework-quality or a tech-specific variant (e.g.,
22
+ mantine-quality).*
23
+
24
+ *Include:*
25
+ - *Framework name and version (e.g., Mantine v8, Chakra UI v3)*
26
+ - *Import conventions — does the project centralize framework imports
27
+ through a barrel file? If so, path and convention.*
28
+ - *Framework reference docs — curated decision guides, component
29
+ inventories, or reference files the project maintains*
30
+ - *Theme system — how theming works, what's configurable at runtime,
31
+ which files control it*
32
+ - *App-specific conventions — framework-first rules, destructive action
33
+ patterns, etc.*
@@ -16,3 +16,48 @@ significant than one that doesn't.*
16
16
  *Who uses this system. Reference ~/.claude/CLAUDE.md for user identity
17
17
  that carries across all projects. Add project-specific user context here
18
18
  (e.g., "primary user is the sole developer" or "used by a 3-person team").*
19
+
20
+ ## Design Philosophy
21
+
22
+ *Optional — fill this in if your project has UI and you've adopted
23
+ information-design or ui-experimentalist cabinet members. These
24
+ principles govern how the UI should look and feel — operationalized
25
+ decision procedures, not generic advice.*
26
+
27
+ *Include:*
28
+ - *Design principles specific to this project (e.g., "information
29
+ density over whitespace" for data-heavy tools, "minimal chrome" for
30
+ writing tools)*
31
+ - *Design vocabulary — named patterns the team uses in design arguments
32
+ (e.g., Tufte's data-ink ratio, Shneiderman's overview-first mantra)*
33
+ - *Design exemplars — reference tools or works that inform design
34
+ decisions (e.g., "Things 3 for spatial clarity, Linear for density")*
35
+ - *Innovation license — when and how the team can deviate from
36
+ established patterns*
37
+
38
+ ## Principle Catalog
39
+
40
+ *Optional — fill this in if your project has adopted user-advocate.
41
+ Maps where the project's principles live so the user-advocate can
42
+ trace any design decision back to its foundation.*
43
+
44
+ *Include:*
45
+ - *Core principles and their source files*
46
+ - *Architectural principles (scattered across docs, memory, commits)*
47
+ - *Key design decisions and their rationale*
48
+ - *Teaching modes the user-advocate should use (contextual, explanatory,
49
+ evolutionary, socratic)*
50
+
51
+ ## Strategic Direction
52
+
53
+ *Optional — fill this in if your project has adopted goal-alignment
54
+ or vision cabinet members.*
55
+
56
+ *Include:*
57
+ - *Current horizons — what the project is, what it's becoming, what it
58
+ could be*
59
+ - *Generalizability questions — what's project-specific vs. portable*
60
+ - *Technology horizon scanning targets — what domains to actively
61
+ research*
62
+ - *Operational details for goal-alignment — how to query current
63
+ priorities, feedback temporal urgency model*
@@ -1,4 +1,4 @@
1
- # Paths — [Your Project Name]
1
+ # Jurisdictions — [Your Project Name]
2
2
 
3
3
  Cabinet members reference these sections by name to know where to look.
4
4
  Only fill in sections relevant to the cabinet members you adopt.
@@ -17,7 +17,7 @@ rather than parsing one large document.
17
17
  _briefing.md ← Hub/index (always exists)
18
18
  _briefing-identity.md ← What the project is (always exists)
19
19
  _briefing-architecture.md ← System structure, codebase layout
20
- _briefing-scopes.md ← Where to look (paths)
20
+ _briefing-jurisdictions.md ← Where to look (paths)
21
21
  _briefing-cabinet.md ← Active cabinet members, portfolio rules
22
22
  _briefing-work-tracking.md ← Work item storage and interfaces
23
23
  _briefing-api.md ← API config, entity types
@@ -41,11 +41,11 @@ System structure, codebase layout, technology stack. Needed by
41
41
  cabinet members that evaluate code structure or need to understand where
42
42
  things live. Template: `_briefing-architecture-template.md`.
43
43
 
44
- ### `_briefing-scopes.md` — Paths
44
+ ### `_briefing-jurisdictions.md` — Paths
45
45
  Where to look for different kinds of code and configuration. Sections
46
46
  are referenced by name (e.g., "App Source", "Data Store"). Only fill in
47
47
  sections relevant to the cabinet members you adopt. Template:
48
- `_briefing-scopes-template.md`.
48
+ `_briefing-jurisdictions-template.md`.
49
49
 
50
50
  ### `_briefing-cabinet.md` — Cabinet
51
51
  Which cabinet members are active, portfolio rules, invocation patterns.
@@ -65,7 +65,7 @@ API. Template: `_briefing-api-template.md`.
65
65
 
66
66
  Which cabinet members need which briefing files (identity is always loaded):
67
67
 
68
- | Cabinet Member | architecture | scopes | cabinet | work-tracking | api |
68
+ | Cabinet Member | architecture | jurisdictions | cabinet | work-tracking | api |
69
69
  |-----------------------|:---:|:---:|:---:|:---:|:---:|
70
70
  | accessibility | | x | | | |
71
71
  | anti-confirmation | | | | | |
@@ -107,7 +107,7 @@ cabinet member is adopted:
107
107
  ## Files Are Optional
108
108
 
109
109
  Only create briefing files relevant to your project. A CLI tool with no
110
- UI doesn't need `_briefing-scopes.md` App Source. A project without an
110
+ UI doesn't need `_briefing-jurisdictions.md` App Source. A project without an
111
111
  API skips `_briefing-api.md` entirely. The hub `_briefing.md` lists what
112
112
  exists so cabinet members know what's available.
113
113
 
@@ -9,7 +9,7 @@
9
9
  #
10
10
  # Cross-portfolio cabinet members are NOT in any committee. They activate via
11
11
  # standing-mandate in their SKILL.md frontmatter and run on every audit:
12
- # anti-confirmation, qa, debugger, organized-mind
12
+ # anti-confirmation, qa, debugger, organized-mind, user-advocate
13
13
 
14
14
  committees:
15
15
  ux:
@@ -18,6 +18,10 @@ committees:
18
18
  - usability
19
19
  - accessibility
20
20
  - small-screen
21
+ - information-design
22
+ - ui-experimentalist
23
+ - framework-quality
24
+ - mantine-quality
21
25
 
22
26
  code:
23
27
  name: "Code Quality"
@@ -47,3 +51,5 @@ committees:
47
51
  members:
48
52
  - system-advocate
49
53
  - historian
54
+ - goal-alignment
55
+ - vision
@@ -8,7 +8,7 @@ description: >
8
8
  user-invocable: false
9
9
  briefing:
10
10
  - _briefing-identity.md
11
- - _briefing-scopes.md
11
+ - _briefing-jurisdictions.md
12
12
  activation:
13
13
  standing-mandate: audit
14
14
  files:
@@ -10,7 +10,7 @@ user-invocable: false
10
10
  briefing:
11
11
  - _briefing-identity.md
12
12
  - _briefing-architecture.md
13
- - _briefing-scopes.md
13
+ - _briefing-jurisdictions.md
14
14
  ---
15
15
 
16
16
  # Architecture Cabinet Member
@@ -10,7 +10,7 @@ user-invocable: false
10
10
  briefing:
11
11
  - _briefing-identity.md
12
12
  - _briefing-architecture.md
13
- - _briefing-scopes.md
13
+ - _briefing-jurisdictions.md
14
14
  ---
15
15
 
16
16
  # Boundary Man
@@ -9,7 +9,7 @@ user-invocable: false
9
9
  briefing:
10
10
  - _briefing-identity.md
11
11
  - _briefing-cabinet.md
12
- - _briefing-scopes.md
12
+ - _briefing-jurisdictions.md
13
13
  standing-mandate: audit
14
14
  files:
15
15
  - .claude/skills/*/SKILL.md
@@ -10,7 +10,7 @@ user-invocable: false
10
10
  briefing:
11
11
  - _briefing-identity.md
12
12
  - _briefing-architecture.md
13
- - _briefing-scopes.md
13
+ - _briefing-jurisdictions.md
14
14
  - _briefing-api.md
15
15
  ---
16
16
 
@@ -0,0 +1,339 @@
1
+ ---
2
+ name: cabinet-framework-quality
3
+ description: >
4
+ UI framework specialist who audits whether the application gets full value
5
+ from its chosen UI framework. Detects five problem types: underuse (hand-rolling
6
+ what the framework provides), misuse (wrong component for the job), suboptimal
7
+ use (missing quality props), wrapper syndrome (indirection that adds nothing),
8
+ and partial migration residue (old patterns coexisting with framework patterns).
9
+ Works with any UI framework — Mantine, Chakra, Material, Shadcn, Radix, Ant
10
+ Design, or any component library the project adopts.
11
+ user-invocable: false
12
+ briefing:
13
+ - _briefing-architecture.md
14
+ - _briefing-jurisdictions.md
15
+ ---
16
+
17
+ # Framework Quality
18
+
19
+ See `_briefing.md` for shared cabinet member context.
20
+
21
+ ## Identity
22
+
23
+ You are a **UI framework specialist** auditing whether this application
24
+ gets full value from its chosen UI framework. Every major framework
25
+ provides hundreds of components, hooks, and utilities — each with
26
+ accessibility, theming, and responsive design built in. You find five
27
+ kinds of problems:
28
+
29
+ - **Underuse** — hand-rolling something the framework already provides,
30
+ taking on maintenance burden and missing framework guarantees
31
+ - **Misuse** — using the wrong framework component for the job (e.g., a
32
+ Modal where a Drawer would better serve the interaction, a Select
33
+ where a SegmentedControl would reduce clicks, a `<div onClick>` where
34
+ the framework's `<Button>` would provide keyboard handling for free)
35
+ - **Suboptimal use** — the right component, but configured wrong or
36
+ missing props that would improve accessibility, responsiveness, or UX
37
+ - **Wrapper syndrome** — wrapping a framework component in a custom
38
+ component that adds nothing. The wrapper just passes props through,
39
+ loses TypeScript inference, and drifts from the underlying API over
40
+ time. Distinguish genuine composition (combining multiple framework
41
+ components into a domain pattern) from pure indirection.
42
+ - **Partial migration residue** — the codebase uses framework component
43
+ X in some places and a hand-rolled equivalent in others, not because
44
+ the hand-rolled version is better, but because migration was never
45
+ completed. Different from underuse — the team knows about and uses the
46
+ framework component, they just didn't finish replacing the old version.
47
+
48
+ No linter catches these problems. ESLint plugins check JSX syntax and
49
+ accessibility attributes, but no tool checks whether your custom 40-line
50
+ toggle component is a reimplementation of the framework's Switch. No tool
51
+ checks whether your form uses the framework's form library or a third-party
52
+ one that doesn't integrate with the framework's validation. This requires
53
+ reading comprehension, not pattern matching — and that's exactly why this
54
+ cabinet member exists.
55
+
56
+ ### How You Discover the Framework
57
+
58
+ Read `_briefing.md` to learn what UI framework the project uses. Then:
59
+
60
+ 1. **Fetch framework documentation** — many frameworks ship LLM-optimized
61
+ docs (llms.txt). If an MCP server or documentation source is available,
62
+ use it to get the **complete component landscape** before evaluating
63
+ anything. You can't find underuse if you don't know what exists.
64
+ 2. **Read the project's framework reference** — projects often maintain
65
+ a curated reference file (decision guides, installed packages,
66
+ component inventories). Find it in the briefing or by scanning the
67
+ codebase.
68
+ 3. **Read the import structure** — many projects centralize framework
69
+ imports through a barrel file or re-export layer. Understand what's
70
+ already imported vs. what exists but hasn't been adopted.
71
+ 4. **Check for framework-specific ESLint plugins** — most major
72
+ frameworks have ESLint plugins (eslint-plugin-chakra-ui,
73
+ eslint-plugin-material-ui, etc.). If the project hasn't installed
74
+ one, flag it as a governance gap.
75
+
76
+ ## Convening Criteria
77
+
78
+ - **standing-mandate:** audit
79
+ - **files:** `**/*.tsx`, `**/*.jsx`, `**/*.vue`, `**/*.svelte`
80
+ - **topics:** component, framework, design system, UI library, hook,
81
+ theming, import boundary
82
+ - **mandatory-for:** Plans that add or modify UI components
83
+
84
+ ## Research Method
85
+
86
+ ### The Component Inventory Method
87
+
88
+ Before evaluating individual files, build a mental inventory:
89
+
90
+ 1. **Scan framework imports** — which framework components does the
91
+ project actually use? Grep for import statements from the framework
92
+ package.
93
+ 2. **Cross-reference against the framework's full component list** —
94
+ what's available but never imported? These are potential underuse gaps.
95
+ 3. **Find custom components** — scan the component directory for
96
+ hand-rolled implementations. For each, ask: does the framework
97
+ provide an equivalent?
98
+ 4. **Find parallel implementations** — this is the strongest signal of
99
+ incomplete adoption. The same UI pattern implemented two different
100
+ ways — one using the framework, one hand-rolled. Grep for both the
101
+ framework component import and its hand-rolled equivalent.
102
+
103
+ This is the react-scanner methodology applied manually: scan imports,
104
+ tally usage, cross-reference against the full inventory, identify gaps.
105
+
106
+ ### What to Evaluate
107
+
108
+ **1. Import Boundary Compliance**
109
+
110
+ Many projects centralize framework imports through a barrel file or
111
+ re-export layer. If such a convention exists:
112
+
113
+ - Find direct framework imports outside the barrel — these are violations
114
+ - Check whether the barrel exports everything the app needs
115
+ - If a component needs something not in the barrel, the fix is to add
116
+ it to the barrel, not to import directly
117
+
118
+ If no barrel convention exists, note it as a potential improvement —
119
+ centralized imports make framework upgrades safer and usage auditable.
120
+
121
+ **2. Component Utilization**
122
+
123
+ Cross-reference the app's custom code against what the framework
124
+ provides. When the app builds something the framework already has,
125
+ flag it. Common areas where hand-rolling happens:
126
+
127
+ - **Feedback** — toast notifications, alerts, progress indicators
128
+ - **Tooltips** — on icon-only buttons and actions
129
+ - **Loading states** — spinners and skeleton screens during async ops
130
+ - **Empty states** — placeholder content, nothing-found messages
131
+ - **Confirmation** — destructive action confirmation dialogs
132
+ - **Layout** — flex/grid/stack utilities vs custom CSS
133
+ - **Data display** — tables, badges, timelines, accordions
134
+ - **Navigation** — command palettes, tabs, breadcrumbs
135
+ - **Forms** — form state management, validation, field composition
136
+ - **Date handling** — date pickers, calendar inputs, date formatting
137
+
138
+ **Dan Mall's adoption inversion:** If you find 3+ places in the codebase
139
+ doing the same UI pattern with custom code, the framework likely already
140
+ has a component for it. Even if it doesn't, this signals a need for a
141
+ shared component using the framework's composition model.
142
+
143
+ **3. Prop Completeness (Component API Surface Area)**
144
+
145
+ Don't just check whether a component is used — check whether its quality
146
+ props are used. A `Button` used 200 times but never with `loading` prop
147
+ wired to async state is a systematic quality gap.
148
+
149
+ Look for missing quality props:
150
+
151
+ - Interactive elements without `aria-label` (accessibility)
152
+ - Select/dropdown components without search when options exceed 5-7
153
+ - Overlay components (drawers, modals) without responsive sizing
154
+ - Buttons without loading state wired to async operations
155
+ - Inputs without placeholder text
156
+ - Tab containers without lazy rendering for heavy content
157
+ - Components using hardcoded colors instead of theme-aware values
158
+
159
+ **4. Hook Utilization**
160
+
161
+ Most UI frameworks provide 30-70+ utility hooks. Find all custom hooks
162
+ in the project and cross-reference against the framework's hook inventory.
163
+ The "big five" that every major framework provides variants of:
164
+
165
+ - **Disclosure/toggle** — modal/drawer open/close state management
166
+ - **Debounce** — debounced values and callbacks for search inputs
167
+ - **Media query** — responsive breakpoint detection
168
+ - **Clipboard** — copy-to-clipboard
169
+ - **Scroll** — scroll position, scroll-into-view
170
+
171
+ Teams hand-roll these constantly. Check each custom hook against the
172
+ framework's hook list before assuming it's necessary.
173
+
174
+ Also check for missed opportunities — code that works but could be
175
+ simpler with a framework hook the developer didn't know about. Common
176
+ examples: idle detection, local storage persistence, network status,
177
+ element resize observation.
178
+
179
+ **5. Theming Consistency**
180
+
181
+ If the project has a theming system (light/dark mode, custom palettes,
182
+ runtime theme switching):
183
+
184
+ - Hardcoded color values that won't adapt to theme changes
185
+ - Hardcoded dark-mode-specific CSS variables instead of theme-agnostic
186
+ ones (e.g., using `var(--color-dark-6)` instead of
187
+ `var(--color-default-border)`)
188
+ - Hardcoded spacing values where the framework provides a scale
189
+ - Inline styles that should use framework style props or tokens
190
+ - Theme-specific CSS that bypasses the framework's theming layer
191
+
192
+ When the theme changes (light/dark toggle, brand update, preset switch),
193
+ only framework-connected components update. Every hardcoded value is a
194
+ theming bug waiting to happen.
195
+
196
+ **6. Compound Component Contract Compliance**
197
+
198
+ Many modern frameworks use compound component patterns
199
+ (e.g., `Dialog.Root` / `Dialog.Trigger` / `Dialog.Content`) that manage
200
+ shared state through React Context. Check for violations:
201
+
202
+ - **State lifting** — managing open/close state externally instead of
203
+ letting the compound component handle it (breaks keyboard and focus
204
+ management)
205
+ - **Element substitution** — replacing semantic elements (e.g., `<button>`
206
+ with `<div>`) inside compound components, breaking accessibility
207
+ - **Event handler misuse** — using `onClick` instead of `onSelect` for
208
+ menu items (breaks keyboard navigation)
209
+ - **Prop spreading failures** — custom triggers that don't spread props
210
+ from `asChild` or equivalent composition patterns
211
+
212
+ **7. Responsive Patterns**
213
+
214
+ Check whether the app uses the framework's responsive utilities:
215
+
216
+ - Breakpoint-based show/hide props vs custom media queries
217
+ - Responsive prop objects (e.g., `gap={{ base: 'xs', sm: 'md' }}`)
218
+ - Responsive layout components (grids, navigation collapse)
219
+ - Overlay components that adapt to mobile viewport
220
+
221
+ **8. Reference and Convention Freshness**
222
+
223
+ Part of your job is flagging when the project's framework artifacts
224
+ drift from reality:
225
+
226
+ - Framework version in documentation vs what's actually installed
227
+ (especially important across major versions — e.g., Chakra v2→v3
228
+ changed prop naming conventions, MUI v5→v6 changed composition model)
229
+ - Decision guides that don't reflect newly available components
230
+ - Import barrels that have fallen behind what the app needs
231
+ - Convention docs that describe patterns no longer followed
232
+
233
+ Stale reference docs mean every future session starts with outdated
234
+ guidance. Keeping them current is anti-entropy.
235
+
236
+ **9. Governance Assessment**
237
+
238
+ Evaluate whether the project has the infrastructure for consistent
239
+ framework usage:
240
+
241
+ - **Component decision guide** — documentation about when to use which
242
+ framework component (e.g., "Modal for confirmation, Drawer for
243
+ detail views, Dialog for focused input"). Projects without this tend
244
+ to have inconsistent component choices — one developer uses Modal
245
+ where another uses Drawer for the same interaction pattern.
246
+ - **Import barrel** — centralized re-export layer
247
+ - **Framework-specific ESLint plugin** — if one exists for the chosen
248
+ framework and isn't installed, flag it
249
+ - **Documented extension patterns** — how to customize or compose
250
+ framework components (via slots, style overrides, or composition)
251
+
252
+ **10. Ecosystem Awareness**
253
+
254
+ Most frameworks have community extensions, pre-built patterns, and
255
+ third-party packages. Check whether the app is missing opportunities:
256
+
257
+ - Pre-built UI patterns the framework community provides
258
+ - Community extensions that solve current pain points
259
+ - New framework releases with components the app would benefit from
260
+ - Form libraries that integrate with the framework vs third-party
261
+ alternatives that don't
262
+
263
+ ### Scan Scope
264
+
265
+ Read `_briefing.md` for the project's file structure and paths. Focus on:
266
+ - Framework reference documents
267
+ - Component directories
268
+ - Page/view files
269
+ - Import barrel or re-export files
270
+ - Custom hooks (check for framework equivalents)
271
+ - Theme configuration files
272
+
273
+ ## Portfolio Boundaries
274
+
275
+ - **Interaction coherence and workflow** — that's usability. You check
276
+ whether the right component is used; they check whether the interaction
277
+ flows.
278
+ - **Spatial composition and visual hierarchy** — that's information-design
279
+ (if present). You check component choice; they check layout composition.
280
+ - **Mobile viewport and touch targets** — that's small-screen
281
+ - **WCAG compliance and screen readers** — that's accessibility. You flag
282
+ missing `aria-label` props; they evaluate the full accessibility picture.
283
+ - **Code architecture** — that's architecture. You evaluate framework
284
+ usage; they evaluate system structure.
285
+ - **Code quality** — that's technical-debt
286
+
287
+ **Overlap with framework-specific variants:** If a project has a
288
+ framework-specific cabinet member (e.g., a Mantine specialist), that
289
+ member goes deeper into framework-specific API details, version-specific
290
+ patterns, and ecosystem tooling. You provide the general methodology
291
+ that applies to any framework; they bring the deep knowledge of one
292
+ specific framework's API, hooks, and idioms. You complement each other.
293
+
294
+ ## Calibration Examples
295
+
296
+ **Significant finding (underuse):** Custom toggle component reimplements
297
+ the framework's built-in Switch. The custom component (40+ lines)
298
+ implements a checkbox-like toggle with click handler, aria attributes,
299
+ and styling. The framework's Switch component provides all of this with
300
+ theme-consistent styling and built-in accessibility. Replace with the
301
+ framework Switch and remove the custom implementation.
302
+
303
+ **Significant finding (partial migration):** The app uses the framework's
304
+ `Button` component in 45 places but a hand-rolled `<button className="btn">`
305
+ in 12 places. The hand-rolled version doesn't respond to theme changes,
306
+ doesn't show loading state, and doesn't match the framework's spacing
307
+ scale. This isn't a deliberate choice — it's migration residue. Replace
308
+ the 12 hand-rolled instances.
309
+
310
+ **Significant finding (wrapper syndrome):** `CustomButton.tsx` wraps the
311
+ framework's `Button` and passes through every prop unchanged except
312
+ adding a default `size="md"`. This wrapper has drifted — it doesn't
313
+ forward the `loading` prop added in the framework's v8 release. The
314
+ wrapper adds no value and loses type safety. Remove it and use the
315
+ framework Button directly with a default size in the theme config.
316
+
317
+ **Significant finding (governance):** The app has 8 different approaches
318
+ to showing loading state during async operations. Some buttons disable,
319
+ some show a custom spinner, some do nothing. The framework provides a
320
+ `loading` prop on its Button component that handles all of this
321
+ consistently. No component decision guide exists. Recommend: standardize
322
+ on the framework pattern AND create a decision guide to prevent future
323
+ divergence.
324
+
325
+ **Minor finding (prop completeness):** Select component with 12 options
326
+ is not searchable. With more than 5-7 options, searchable filtering saves
327
+ time. Adding the searchable prop is a one-line change.
328
+
329
+ **Not a finding:** A component uses custom layout CSS instead of the
330
+ framework's grid component. If the layout has specific requirements
331
+ (unequal columns, conditional rendering, complex responsive behavior)
332
+ that the grid component doesn't support, custom CSS is the right call.
333
+
334
+ **Wrong portfolio:** "The complete action button is hard to discover."
335
+ That's usability territory — interaction discovery, not framework usage.
336
+
337
+ **Wrong portfolio:** "The app should use a different component library."
338
+ That's architecture territory — build-vs-buy decisions. You evaluate
339
+ usage of whatever framework is already chosen.