@mieweb/ui 0.11.0-dev.38 → 0.11.0-dev.39

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.
@@ -0,0 +1,200 @@
1
+ # Evals — Install, CSS foundation, wiring
2
+
3
+ Primary agent: **MIE UI Install Agent**. See [README.md](./README.md) for
4
+ format and scoring.
5
+
6
+ ### INS-1 — Required dependencies
7
+
8
+ - **Ask:** "What do I install to use @mieweb/ui in a React app?"
9
+ - **Expect:** `@mieweb/ui react react-dom` plus the required `@kerebron/*`
10
+ runtime peers (`editor`, `editor-kits`, `extension-basic-editor`,
11
+ `extension-menu`, `wasm` — the main-barrel `Textarea` rides the Kerebron
12
+ engine), and dev deps `tailwindcss@4 @tailwindcss/postcss autoprefixer`
13
+ for the Tailwind 4 path.
14
+ - **Agent:** MIE UI Install Agent
15
+ - **Source:** package.json — peerDependencies/peerDependenciesMeta; CONTRIBUTING.md — Optional peer dependencies
16
+
17
+ ### INS-2 — Minimum CSS entry
18
+
19
+ - **Ask:** "What's the minimum CSS entry point, and does order matter?"
20
+ - **Expect:** In order: base stylesheet (`@mieweb/ui/styles.css`) then brand
21
+ CSS (both unlayered), `@import 'tailwindcss'`, `@source` for
22
+ `node_modules/@mieweb/ui/dist`, `@custom-variant dark`, and `@theme` with
23
+ color scales + fallbacks.
24
+ - **Agent:** MIE UI Install Agent
25
+ - **Source:** agent/skills/mieweb-ui-tailwind4/SKILL.md — CSS entry, Option B
26
+
27
+ ### INS-3 — Quick start
28
+
29
+ - **Ask:** "Is there a one-import setup?"
30
+ - **Expect:** Almost — the TW4 quick start is **three** lines in your own CSS
31
+ entry: `@import 'tailwindcss'`, `@source "../node_modules/@mieweb/ui/dist"`,
32
+ then `@import '@mieweb/ui/init.css'` (dark variant + `@theme` fallbacks +
33
+ default brand + base styles). `init.css` is Tailwind input, not standalone;
34
+ for no-Tailwind apps the one-import answer is `styles.css`.
35
+ - **Agent:** MIE UI Install Agent
36
+ - **Source:** agent/skills/mieweb-ui-tailwind4/SKILL.md — CSS entry, Option A; src/styles/init.css usage header
37
+
38
+ ### INS-4 — PostCSS config
39
+
40
+ - **Ask:** "My CSS doesn't process — I have the `tailwindcss` plugin in
41
+ `postcss.config.cjs`."
42
+ - **Expect:** That's the Tailwind 3 plugin; on TW4 use
43
+ `{'@tailwindcss/postcss': {}, autoprefixer: {}}`. The old plugin silently
44
+ fails or produces wrong output.
45
+ - **Agent:** MIE UI Install Agent
46
+ - **Source:** lessons/tailwind4-integration.md — Lesson 2
47
+
48
+ ### INS-5 — Unstyled after install
49
+
50
+ - **Ask:** "Fresh install on Tailwind 4 — components render but have black
51
+ borders and no backgrounds."
52
+ - **Expect:** Tailwind 4 tree-shakes `node_modules` by default; add
53
+ `@source "../node_modules/@mieweb/ui/dist"` to the CSS entry.
54
+ - **Agent:** MIE UI Install Agent
55
+ - **Source:** lessons/tailwind4-integration.md — Lesson 1
56
+
57
+ ### INS-6 — @source vs safelist
58
+
59
+ - **Ask:** "`@source` or safelist — which do I use?"
60
+ - **Expect:** Depends on mode: TW4 → `@source`; TW3 → `miewebUIPreset` +
61
+ `miewebUISafelist`. Never a safelist on TW4.
62
+ - **Agent:** MIE UI Install Agent
63
+ - **Source:** agent/skills/mieweb-ui-tailwind4/SKILL.md; lessons/migration-meteor-blaze-to-react.md — Lesson 4
64
+
65
+ ### INS-7 — Verifying the setup
66
+
67
+ - **Ask:** "How do I verify the install actually works?"
68
+ - **Expect:** Render a probe (`className="bg-primary-500 text-white p-4"`),
69
+ check the dark-mode toggle, check brand switching, and run
70
+ `npx tsc --noEmit`.
71
+ - **Agent:** MIE UI Install Agent
72
+ - **Source:** lessons/adopting-mieweb-ui.md — Phases 2.1, 3.1
73
+
74
+ ### INS-8 — Peer dependency model
75
+
76
+ - **Ask:** "`pnpm install` warns about unmet peers like `leaflet` and
77
+ `three`. Do I need them all?"
78
+ - **Expect:** No — required peers are `react`/`react-dom` (≥18) **and** the
79
+ five `@kerebron/*` runtime packages (main-barrel `Textarea`; bundling them
80
+ would duplicate `prosemirror-state`). Everything else heavy is optional,
81
+ needed only for the entry points you use (maps → `leaflet`, globe →
82
+ `three`/`react-globe.gl`, collab → `@kerebron/extension-yjs`/`yjs`); a
83
+ warning for an entry you never import is noise.
84
+ - **Agent:** MIE UI Install Agent
85
+ - **Source:** package.json — peerDependenciesMeta; CONTRIBUTING.md — Optional peer dependencies; agent/skills/mieweb-ui-catalog/SKILL.md — entry points
86
+
87
+ ### INS-9 — React 19
88
+
89
+ - **Ask:** "Does @mieweb/ui work with React 19?"
90
+ - **Expect:** Yes — the peer range is `react >= 18`.
91
+ - **Agent:** MIE UI Install Agent
92
+ - **Source:** package.json — peerDependencies
93
+
94
+ ### INS-10 — Meteor migration order
95
+
96
+ - **Ask:** "What order do I migrate a Meteor 2 Blaze app to Meteor 3 + React +
97
+ @mieweb/ui?"
98
+ - **Expect:** Scaffold (`meteor create --typescript --react`) → npm deps →
99
+ CSS entry + PostCSS + Tailwind config → verify Tailwind → `useTheme`/
100
+ `useBrand` → layout shell → migrate features → verify dark mode, brand,
101
+ TypeScript.
102
+ - **Agent:** MIE UI Install Agent
103
+ - **Source:** lessons/migration-meteor-blaze-to-react.md — Migration Order
104
+
105
+ ### INS-11 — Preset-only usage
106
+
107
+ - **Ask:** "Can I use @mieweb/ui as just a Tailwind preset without the React
108
+ components?"
109
+ - **Expect:** It's a React component library — `miewebUIPreset` is one export
110
+ (the TW3 token path), not a standalone product; install the library for
111
+ components.
112
+ - **Agent:** MIE UI Install Agent
113
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 1.1
114
+
115
+ ### INS-12 — Raw-HTML audit
116
+
117
+ - **Ask:** "How do I find everything that needs replacing in my app?"
118
+ - **Expect:** Grep `src/` for `<button`, `<input`, `<select`, `<table`,
119
+ `<textarea` (`--include='*.tsx' --include='*.jsx'`) and count violations per
120
+ category against @mieweb/ui usage.
121
+ - **Agent:** MIE UI Install Agent
122
+ - **Source:** lessons/adopting-mieweb-ui.md — Phases 1.2, 1.4
123
+
124
+ ### INS-13 — Phased replacement order
125
+
126
+ - **Ask:** "Replace everything at once, or in phases?"
127
+ - **Expect:** Phases, highest impact first: layout shell → buttons → form
128
+ elements → cards & modals → tables → feedback → navigation → specialized.
129
+ This verifies theming early.
130
+ - **Agent:** MIE UI Install Agent
131
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 2.4
132
+
133
+ ### INS-14 — Installing from git source
134
+
135
+ - **Ask:** "`npm install github:mieweb/ui` fails on `link:` dependencies.
136
+ How do I install?"
137
+ - **Expect:** Install the published `@mieweb/ui` package from the npm
138
+ registry — source installs require the pnpm workspace + submodules and are
139
+ not an npm-consumer path.
140
+ - **Agent:** MIE UI Install Agent
141
+ - **Source:** issue #489
142
+
143
+ ### INS-15 — Package manager
144
+
145
+ - **Ask:** "npm or pnpm for working in the mieweb/ui repo itself?"
146
+ - **Expect:** pnpm — the repo is a pnpm workspace and the docs standardize on
147
+ pnpm commands. (Consumers of the published package can use any manager.)
148
+ - **Agent:** MIE UI Install Agent
149
+ - **Source:** issue #500; README.md
150
+
151
+ ### INS-16 — Grid entry point
152
+
153
+ - **Ask:** "Which entry point do I import a data grid from?"
154
+ - **Expect:** `DataVisNitroGrid` from `@mieweb/ui/datavis`; never
155
+ `@mieweb/ui/ag-grid` (deprecated).
156
+ - **Agent:** MIE UI Install Agent
157
+ - **Source:** mieweb-ui.instructions.md — Rules 1, 12
158
+
159
+ ### INS-17 — Wiring headless modules
160
+
161
+ - **Ask:** "How do I connect `ViewSet` (or SuperChat-style modules) to my app
162
+ data?"
163
+ - **Expect:** Write an adapter in the app — the module never fetches,
164
+ subscribes, or navigates. Two distinct contracts: **ViewSet** (collection
165
+ views) takes `items`/`loading`/`error`, accessor props, promise-returning
166
+ `on*` callbacks (built-in optimistic UI + revert), and `onOpen` + `getHref`;
167
+ **SuperChatInbox** has its own props (`conversations`, `onMessageSent`,
168
+ `onConversationOpened`) — never hand it collection-view props.
169
+ - **Agent:** MIE UI Install Agent
170
+ - **Source:** agent/skills/mieweb-ui-tailwind4/SKILL.md — Wiring headless modules; lessons/wiring-headless-modules.md
171
+
172
+ ### INS-18 — Dark-mode plumbing
173
+
174
+ - **Ask:** "What plumbing does dark mode need after install?"
175
+ - **Expect:** A toggle that matches the **active** `@custom-variant dark`
176
+ selector — `init.css` accepts either `.dark` or `data-theme="dark"`, so a
177
+ single-hook toggle can be valid; setting both via `useTheme` is the
178
+ compatibility-safe recommendation, not a hard requirement. Diagnose by
179
+ comparing the toggle to the variant in effect.
180
+ - **Agent:** MIE UI Install Agent
181
+ - **Source:** agent/skills/mieweb-ui-tailwind4/SKILL.md — Dark mode toggle
182
+
183
+ ### INS-19 — Brand loads but looks broken
184
+
185
+ - **Ask:** "I load only the brand CSS and most components look unstyled."
186
+ - **Expect:** Brand CSS is a delta (primary + semantic tokens), not a full
187
+ foundation — the base stylesheet (`styles.css`/`init.css`) must load first.
188
+ - **Agent:** MIE UI Install Agent
189
+ - **Source:** agent/skills/mieweb-ui-brands/SKILL.md; lessons/recommended-changes.md — P0 Issue 2
190
+
191
+ ### INS-20 — Common install traps
192
+
193
+ - **Ask:** "What are the usual reasons a fresh @mieweb/ui setup looks
194
+ broken?"
195
+ - **Expect:** Missing `@source` (tree-shaken classes), missing
196
+ `@custom-variant dark`, missing `var()` fallbacks (transparent renders),
197
+ wrong PostCSS plugin (TW3 plugin on TW4), wrong brand import path, missing
198
+ base stylesheet.
199
+ - **Agent:** MIE UI Install Agent
200
+ - **Source:** lessons/adopting-mieweb-ui.md — Common Traps; lessons/tailwind4-integration.md
@@ -0,0 +1,202 @@
1
+ # Evals — Migration / compliance (incl. icon compliance)
2
+
3
+ Primary agent: **MIE UI Migration Agent**. See [README.md](./README.md) for
4
+ format and scoring. MIG-1 through MIG-5 are the icon-compliance cases
5
+ (#587 requires them here).
6
+
7
+ ### MIG-1 — Foreign icon libraries
8
+
9
+ - **Ask:** "Can I add Font Awesome / Material Icons / Heroicons for a few
10
+ missing icons?"
11
+ - **Expect:** No — every icon comes from `lucide-react`: the `*Icon` aliases
12
+ re-exported from `@mieweb/ui` (188 icons) or direct `lucide-react` imports.
13
+ `@fortawesome/*` is ESLint-blocked; mixed sets break consistency.
14
+ - **Agent:** MIE UI Migration Agent
15
+ - **Source:** mieweb-ui.instructions.md — Rule 17; agent/skills/mieweb-ui-icons/SKILL.md
16
+
17
+ ### MIG-2 — Icon-only control labeling
18
+
19
+ - **Ask:** "Audit finding: icon-only buttons using lucide icons. What's
20
+ required?"
21
+ - **Expect:** `aria-label` on every icon-only control; decorative icons get
22
+ `aria-hidden="true"`.
23
+ - **Agent:** MIE UI Migration Agent
24
+ - **Source:** agent/skills/mieweb-ui-icons/SKILL.md — Conventions; Rules 2, 9
25
+
26
+ ### MIG-3 — Root-barrel icon shadows
27
+
28
+ - **Ask:** "I imported `CloseIcon`/`RefreshIcon`/`SendIcon`/`SparklesIcon`
29
+ from `@mieweb/ui` and `size={16}` doesn't work."
30
+ - **Expect:** Those root-barrel names are shadowed by custom AI components,
31
+ not Lucide re-exports — Lucide props don't apply. Import the Lucide
32
+ originals (`X`, `RefreshCw`, `Send`, `Sparkles`) from `lucide-react`.
33
+ - **Agent:** MIE UI Migration Agent
34
+ - **Source:** agent/skills/mieweb-ui-icons/SKILL.md — Root-barrel overrides (⚠)
35
+
36
+ ### MIG-4 — Hand-rolled SVG
37
+
38
+ - **Ask:** "The icon I need isn't in the alias list. Hand-roll the SVG?"
39
+ - **Expect:** No — the full lucide-react set (1000+ icons) is available by
40
+ direct import; never hand-roll `<svg>` icons.
41
+ - **Agent:** MIE UI Migration Agent
42
+ - **Source:** mieweb-ui.instructions.md — Rule 17
43
+
44
+ ### MIG-5 — Icon sizing
45
+
46
+ - **Ask:** "What size do inline icons get?"
47
+ - **Expect:** `h-4 w-4` (16px) default; `h-5 w-5` for emphasis; `h-3.5 w-3.5`
48
+ in dense UI; Lucide's `size={16}` is equivalent. Dynamic icon props are
49
+ typed `LucideIcon` (re-exported from `@mieweb/ui`).
50
+ - **Agent:** MIE UI Migration Agent
51
+ - **Source:** agent/skills/mieweb-ui-icons/SKILL.md — Conventions; Rule 17
52
+
53
+ ### MIG-6 — AGGrid in the app
54
+
55
+ - **Ask:** "We still use AGGrid. Keep it?"
56
+ - **Expect:** No — AGGrid is deprecated and deprecations are law; migrate to
57
+ `DataVisNitroGrid` from `@mieweb/ui/datavis`; never `@mieweb/ui/ag-grid` in
58
+ new code.
59
+ - **Agent:** MIE UI Migration Agent
60
+ - **Source:** mieweb-ui.instructions.md — Rules 1, 13
61
+
62
+ ### MIG-7 — Hand-rolled grid features
63
+
64
+ - **Ask:** "Can I add sorting/paging on a plain `Table` myself?"
65
+ - **Expect:** No — grid features start with DataVis NITRO; never hand-roll
66
+ them on a plain table or bring a third-party grid.
67
+ - **Agent:** MIE UI Migration Agent
68
+ - **Source:** mieweb-ui.instructions.md — Rule 1
69
+
70
+ ### MIG-8 — Patterns, not just imports
71
+
72
+ - **Ask:** "We import @mieweb/ui everywhere. Are we compliant?"
73
+ - **Expect:** Not necessarily — compliance is patterns, not imports: badge
74
+ spans, card divs, modal divs, raw buttons, and inline SVGs are violations
75
+ even in files that import @mieweb/ui.
76
+ - **Agent:** MIE UI Migration Agent
77
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md — prime directive; lessons/adopting-mieweb-ui.md — Phase 1.3
78
+
79
+ ### MIG-9 — Raw HTML hard rule
80
+
81
+ - **Ask:** "Can a migrated app keep a few raw `<button>`s in low-traffic
82
+ pages?"
83
+ - **Expect:** No — never raw HTML for UI; `Button`, `Input`, `Card`, `Modal`,
84
+ `Badge`, `Select`, `Table` etc. everywhere, for consistent theming, dark
85
+ mode, and accessibility.
86
+ - **Agent:** MIE UI Migration Agent
87
+ - **Source:** lessons/migration-meteor-blaze-to-react.md — Lesson 7; Rule 3
88
+
89
+ ### MIG-10 — Dynamic attribute greps
90
+
91
+ - **Ask:** "I grepped `type=\"date\"` and found nothing. Am I clean?"
92
+ - **Expect:** No — also grep dynamic forms: `type={cond ? 'date' : 'text'}`
93
+ and other `type={…}` expressions evade literal greps.
94
+ - **Agent:** MIE UI Migration Agent
95
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md — audit workflow
96
+
97
+ ### MIG-11 — Meteor 3 async APIs
98
+
99
+ - **Ask:** "After the Meteor 3 upgrade, `Meteor.userId()` throws in a
100
+ method."
101
+ - **Expect:** Meteor 3 server APIs are async — make methods async, `await
102
+ Meteor.userId()`/`Meteor.user()`, and use `*Async()` collection variants
103
+ (`fetchAsync`, `insertAsync`, `updateAsync`, `removeAsync`).
104
+ - **Agent:** MIE UI Migration Agent
105
+ - **Source:** lessons/migration-meteor-blaze-to-react.md — Lesson 6
106
+
107
+ ### MIG-12 — Completion checklist
108
+
109
+ - **Ask:** "How do I verify the migration is done?"
110
+ - **Expect:** Final compliance checklist: CSS foundation correct **for the
111
+ app's mode** (TW4: `@source` + `@custom-variant` + fallbacks; TW3: preset +
112
+ safelist + content glob; precompiled: `styles.css` imported), zero raw HTML,
113
+ theming works (dark mode + brands), accessibility (ARIA, keyboard), clean
114
+ build (`npx tsc --noEmit`, no console errors).
115
+ - **Agent:** MIE UI Migration Agent
116
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 4; agent/skills/mieweb-ui-tailwind4/SKILL.md — supported modes
117
+
118
+ ### MIG-13 — @source vs safelist in audits
119
+
120
+ - **Ask:** "The audited app uses a Tailwind 3 safelist on Tailwind 4. Flag
121
+ it?"
122
+ - **Expect:** Yes — on TW4 the supported mechanism is `@source`; a safelist
123
+ there is a migration leftover that bloats CSS.
124
+ - **Agent:** MIE UI Migration Agent
125
+ - **Source:** lessons/recommended-changes.md — P2 Issue 6; lessons/tailwind4-integration.md — Lesson 1
126
+
127
+ ### MIG-14 — Mode-aware CSS prescriptions
128
+
129
+ - **Ask:** "The audited app ships precompiled CSS and no Tailwind. Do we
130
+ prescribe `@source`?"
131
+ - **Expect:** No — the CSS-foundation check is mode-aware (TW4 / TW3 preset /
132
+ precompiled); never prescribe Tailwind tooling to a precompiled app.
133
+ - **Agent:** MIE UI Migration Agent
134
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md; agent/skills/mieweb-ui-tailwind4/SKILL.md — supported modes
135
+
136
+ ### MIG-15 — Optimistic mutations in adapters
137
+
138
+ - **Ask:** "Migrating to `ViewSet` — add my own optimistic state for
139
+ mutations?"
140
+ - **Expect:** No — return the promise from `on*` callbacks; the view shows
141
+ the pending position and reverts on rejection. Optimistic UI + recovery
142
+ come free.
143
+ - **Agent:** MIE UI Migration Agent
144
+ - **Source:** lessons/wiring-headless-modules.md — The shape
145
+
146
+ ### MIG-16 — Common migration traps
147
+
148
+ - **Ask:** "What traps should a migration audit check first?"
149
+ - **Expect:** Tailwind tree-shaking (`@source`), missing `@custom-variant
150
+ dark`, missing var fallbacks (transparent renders), wrong PostCSS plugin,
151
+ wrong brand import path, Meteor sync→async, raw HTML patterns, subpath
152
+ instead of barrel brand imports.
153
+ - **Agent:** MIE UI Migration Agent
154
+ - **Source:** lessons/adopting-mieweb-ui.md — Common Traps; lessons/migration-meteor-blaze-to-react.md — Common Traps
155
+
156
+ ### MIG-17 — Verifying component APIs
157
+
158
+ - **Ask:** "The catalog lists `Modal`. Can I infer its props from the catalog
159
+ entry?"
160
+ - **Expect:** No — the catalog is inventory, not an API reference. Verify
161
+ props in the Storybook docs or the public types before prescribing usage.
162
+ - **Agent:** MIE UI Migration Agent
163
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md — Rule 4
164
+
165
+ ### MIG-18 — Behavior-preserving replacements
166
+
167
+ - **Ask:** "Replacing `window.confirm` with `AlertDialog` changes blocking
168
+ behavior. Just do it?"
169
+ - **Expect:** Replacements must be behavior-preserving by default; a
170
+ blocking→async change is flagged as a judgment call for the app team, not
171
+ silently applied.
172
+ - **Agent:** MIE UI Migration Agent
173
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md — Rule 5
174
+
175
+ ### MIG-19 — Nothing in the catalog fits
176
+
177
+ - **Ask:** "No component covers this need. Write a custom one?"
178
+ - **Expect:** Follow Rule 15: check composition of existing components first,
179
+ then propose a gap with a tier recommendation (contribution vs app-local);
180
+ don't silently fork or restyle an existing component.
181
+ - **Agent:** MIE UI Migration Agent
182
+ - **Source:** mieweb-ui.instructions.md — Rule 15; agent/agents/mieweb-ui-migration.agent.md — gap detection
183
+
184
+ ### MIG-20 — Destructive confirms
185
+
186
+ - **Ask:** "The app confirms deletes with `window.confirm`. What's the
187
+ target?"
188
+ - **Expect:** `AlertDialog` (destructive yes/no), noting the sync→async
189
+ behavior change as a judgment call (see MIG-18).
190
+ - **Agent:** MIE UI Migration Agent
191
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md; agent/agents/mieweb-ui-migration.agent.md
192
+
193
+ ### MIG-21 — Audit mechanics
194
+
195
+ - **Ask:** "What does a full compliance audit actually grep for?"
196
+ - **Expect:** Raw elements (`<button`, `<input`, `<select`, `<table`,
197
+ `<textarea`, incl. dynamic `type={…}`), pattern duplicates (badge spans,
198
+ card divs, modal divs, inline `<svg>`), foreign icon imports, then the
199
+ mode-aware CSS foundation check — reported as a prioritized plan, not a
200
+ dump.
201
+ - **Agent:** MIE UI Migration Agent
202
+ - **Source:** agent/agents/mieweb-ui-migration.agent.md — audit workflow; lessons/adopting-mieweb-ui.md — Phases 1.2–1.4
@@ -0,0 +1,53 @@
1
+ # Manual eval run — 2026-11-02 (first run, #587)
2
+
3
+ First manual run of the golden-question sets against the installed team
4
+ (sandbox: `init-agent.mjs --experimental-agents`, team state = PR #688).
5
+ Method per [../README.md](../README.md): stratified sample of 4 questions per
6
+ domain (24 total), each specialist emulated from its installed agent file +
7
+ skills, answers scored against **Expect**.
8
+
9
+ ## Scores
10
+
11
+ | Domain | Sample | PASS | PARTIAL | FAIL |
12
+ | --------- | --------------------------------- | ---- | ------- | ---- |
13
+ | selection | SEL-12, SEL-16, SEL-18, SEL-22 | 2 | 1 | 1 |
14
+ | styling | STY-7, STY-13, STY-14, STY-16 | 2 | 1 | 1 |
15
+ | install | INS-5, INS-8, INS-14, INS-17 | 3 | 1 | 0 |
16
+ | a11y | A11Y-3, A11Y-5, A11Y-13, A11Y-17 | 3 | 1 | 0 |
17
+ | i18n | I18N-3, I18N-10, I18N-11, I18N-13 | 4 | 0 | 0 |
18
+ | migration | MIG-3, MIG-10, MIG-14, MIG-18 | 4 | 0 | 0 |
19
+
20
+ ## Findings and fixes filed
21
+
22
+ 1. **SEL-12 FAIL — design agent can't answer headless-wiring questions and
23
+ didn't route them.** The knowledge lives in the tailwind4 skill ("Wiring
24
+ headless modules", Install agent's source), but the orchestrator's routing
25
+ table had no wiring row. _Fix:_ added a routing row (wiring headless
26
+ modules → MIE UI Install Agent) to `mieweb-ui-design.agent.md`.
27
+ 2. **STY-13 FAIL — corpus gap caused a wrong diagnosis.** Nothing in the
28
+ corpus covered the brand CSS's unlayered `*` transition shorthand beating
29
+ layered `transition-*` utilities (open #460/#682); the agent
30
+ mis-attributed the symptom to the brand-without-base pitfall. _Fix:_
31
+ troubleshooting rows added to the tailwind4 skill and
32
+ `lessons/tailwind4-integration.md` (fix = layer the transition rule, not
33
+ scope it — it already lists only color properties).
34
+ 3. **INS-14 PARTIAL — honest corpus gap on installing from git source**
35
+ (#489). _Fix:_ install note added to the tailwind4 skill (published npm
36
+ package only; source tree is a pnpm workspace with `link:` deps).
37
+ 4. **A11Y-17 PARTIAL — corpus silent on exit-animation semantics**, and the
38
+ eval's own Expect overstated the motion layer (`AnimatedPresence` does
39
+ NOT yet hide exiting children — open #474). _Fix:_ exit-animation note
40
+ added to the a11y-checklist skill; eval entry corrected to cite #474 as
41
+ open.
42
+ 5. **STY-14 PARTIAL — preset drift (#628) unknowable from corpus.** The
43
+ generic safelist/content diagnosis is correct behavior; the drift itself
44
+ is an open library bug, not a corpus gap. _Fix:_ eval Expect rewritten to
45
+ match the corpus-known-good diagnosis path, citing #628 as open.
46
+ 6. **SEL-16 eval defect — ambiguous Ask.** "Sometimes… sometimes" read as one
47
+ component needing both behaviors; the agent correctly mapped all three
48
+ badges but declared a gap. _Fix:_ Ask rephrased to three distinct
49
+ placements.
50
+
51
+ No findings for i18n or migration — both specialists answered their samples
52
+ fully from the corpus, including the root-barrel icon shadows (MIG-3) and the
53
+ behavior-change judgment call (MIG-18).
@@ -0,0 +1,212 @@
1
+ # Evals — Component selection / catalog
2
+
3
+ Primary agent: **MIE UI Design Agent** (owns selection via the
4
+ `mieweb-ui-catalog` skill and its selection guidance). See
5
+ [README.md](./README.md) for format and scoring.
6
+
7
+ ### SEL-1 — Table or NITRO
8
+
9
+ - **Ask:** "Should I use `Table` or DataVis NITRO for a data grid?"
10
+ - **Expect:** Start with `DataVisNitroGrid` from `@mieweb/ui/datavis` for
11
+ anything with sorting, filtering, paging, or export; `Table` only for static
12
+ rows; AGGrid is deprecated — never in new code.
13
+ - **Agent:** MIE UI Design Agent
14
+ - **Source:** mieweb-ui.instructions.md — Rule 1
15
+
16
+ ### SEL-2 — Two adjacent buttons
17
+
18
+ - **Ask:** "I have two buttons side by side. Do I need `ButtonGroup`?"
19
+ - **Expect:** Yes — always wrap two or more adjacent buttons in `ButtonGroup`;
20
+ also wrap a single button with a long/unpredictable label (translated text,
21
+ user data), using `orientation="auto"`.
22
+ - **Agent:** MIE UI Design Agent
23
+ - **Source:** mieweb-ui.instructions.md — Rule 2
24
+
25
+ ### SEL-3 — Raw table replacement
26
+
27
+ - **Ask:** "What @mieweb/ui component replaces a raw `<table>`?"
28
+ - **Expect:** `Table` + `TableHeader`/`TableBody`/`TableRow`/`TableCell` for
29
+ static data; `DataVisNitroGrid` once interactivity is needed; never
30
+ hand-roll grid features.
31
+ - **Agent:** MIE UI Design Agent
32
+ - **Source:** mieweb-ui.instructions.md — Rules 1, 3
33
+
34
+ ### SEL-4 — Raw button
35
+
36
+ - **Ask:** "Can I keep a raw `<button>` element, or do I need `Button`?"
37
+ - **Expect:** Every interactive element uses @mieweb/ui components — replace
38
+ `<button>` with `Button` (and `<input>` with `Input`/`Checkbox`/`Radio`,
39
+ etc.) for consistent theming, dark mode, and accessibility.
40
+ - **Agent:** MIE UI Design Agent
41
+ - **Source:** mieweb-ui.instructions.md — Rule 3
42
+
43
+ ### SEL-5 — Modal internals
44
+
45
+ - **Ask:** "I'm building a Modal with a title, content, and footer. Divs, or
46
+ something else?"
47
+ - **Expect:** Use composition slots — `ModalHeader`/`ModalBody`/`ModalFooter`,
48
+ not bespoke divs; same pattern for `Card` and `Table` slots.
49
+ - **Agent:** MIE UI Design Agent
50
+ - **Source:** mieweb-ui.instructions.md — Rule 4
51
+
52
+ ### SEL-6 — Badge span
53
+
54
+ - **Ask:** "Is `<span className=\"badge\">Active</span>` fine if it's styled
55
+ correctly?"
56
+ - **Expect:** No — raw HTML that duplicates a component is a violation; use
57
+ `Badge`. This applies to all badge/pill/tag spans.
58
+ - **Agent:** MIE UI Design Agent
59
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 1.3
60
+
61
+ ### SEL-7 — Date inputs
62
+
63
+ - **Ask:** "What do I use for a date picker, and for a date range?"
64
+ - **Expect:** `DateInput` for a single date, `DateRangePicker` for a range;
65
+ never raw `<input type="date">`.
66
+ - **Agent:** MIE UI Design Agent
67
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 1.3
68
+
69
+ ### SEL-8 — Phone number input
70
+
71
+ - **Ask:** "I need a phone number field. Raw input with a mask, or a
72
+ component?"
73
+ - **Expect:** `PhoneInput` — it handles formatting and validation.
74
+ - **Agent:** MIE UI Design Agent
75
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 1.3
76
+
77
+ ### SEL-9 — ViewSet responsibilities
78
+
79
+ - **Ask:** "Does `ViewSet` fetch data, subscribe to changes, and navigate
80
+ itself?"
81
+ - **Expect:** No — it's headless: receives `items`/`loading`/`error` as props,
82
+ returns mutations through `on*` callbacks; never fetches, subscribes, or
83
+ navigates. Pass `onOpen` + `getHref` for real anchors.
84
+ - **Agent:** MIE UI Design Agent
85
+ - **Source:** mieweb-ui.instructions.md — Rule 14; lessons/wiring-headless-modules.md
86
+
87
+ ### SEL-10 — MediaFeed vs NewsWidget
88
+
89
+ - **Ask:** "Is `MediaFeed` a drop-in replacement for our standalone news
90
+ widget?"
91
+ - **Expect:** No — `MediaFeed` takes items through props and accessor
92
+ functions; the app owns RSS/Discourse adapters, loading, navigation, and
93
+ engagement callbacks. Convert posts to `MediaFeedMedia` with accessors and
94
+ use optional slots for custom rendering.
95
+ - **Agent:** MIE UI Design Agent
96
+ - **Source:** lessons/news-widget-migration.md
97
+
98
+ ### SEL-11 — Collection component contract
99
+
100
+ - **Ask:** "I'm adding a component that renders a collection (list, board,
101
+ calendar). What contract must it follow?"
102
+ - **Expect:** Headless module: `items`/`loading`/`error` in via props,
103
+ mutations out via `on*` callbacks typed `void | Promise<void>`; no
104
+ fetch/subscribe/navigate inside; generic via accessor props (`getId`,
105
+ `getStatus`, …); strings overridable through `labels`.
106
+ - **Agent:** MIE UI Design Agent
107
+ - **Source:** mieweb-ui.instructions.md — Rule 14
108
+
109
+ ### SEL-12 — ViewSet navigation
110
+
111
+ - **Ask:** "How do I wire navigation into `ViewSet` — just `onOpen`?"
112
+ - **Expect:** Pass both `onOpen` (client-side routing on left-click) and
113
+ `getHref` (real anchors so middle-click/copy-link work); `onOpen` alone
114
+ degrades links to buttons.
115
+ - **Agent:** MIE UI Install Agent (posed to the orchestrator — correct
116
+ behavior is delegation via its headless-wiring routing row)
117
+ - **Source:** lessons/wiring-headless-modules.md; agent/agents/mieweb-ui-design.agent.md — routing table
118
+
119
+ ### SEL-13 — Danger styling
120
+
121
+ - **Ask:** "I want a destructive-looking button — `className=\"bg-red-600\"`?"
122
+ - **Expect:** No — `variant="danger"`. Variants (`primary`, `secondary`,
123
+ `ghost`, `outline`, `danger`, `link`) and sizes (`sm`, `md`, `lg`, `icon`)
124
+ are props, never className hacks.
125
+ - **Agent:** MIE UI Design Agent
126
+ - **Source:** mieweb-ui.instructions.md — Rule 5
127
+
128
+ ### SEL-14 — Imitating a variant
129
+
130
+ - **Ask:** "Can I restyle a component with className tweaks to look like
131
+ another variant instead of using the prop?"
132
+ - **Expect:** No — if a component has a prop for it, use the prop; never
133
+ imitate an existing variant via className.
134
+ - **Agent:** MIE UI Design Agent
135
+ - **Source:** mieweb-ui.instructions.md — Rule 5
136
+
137
+ ### SEL-15 — Where to compare components
138
+
139
+ - **Ask:** "Where do I check which component to use when several look
140
+ similar?"
141
+ - **Expect:** The Storybook family overview pages — every family has a
142
+ comparison ("which one?") table; read it before choosing. (From an agent:
143
+ the catalog skill's selection guidance mirrors these tables.)
144
+ - **Agent:** MIE UI Design Agent
145
+ - **Source:** lessons/adopting-mieweb-ui.md — Phase 1.3; agent/skills/mieweb-ui-catalog/selection-guidance.md
146
+
147
+ ### SEL-16 — Badge vs CountBadge vs FreshnessBadge
148
+
149
+ - **Ask:** "I need a status pill in one place, a clickable count pill in
150
+ another, and a pill whose colour depends on age in a third — which badge
151
+ for each?"
152
+ - **Expect:** `Badge` for a state/category mapped to a `variant`;
153
+ `CountBadge` when it's a clickable "Label N" pill that opens rows;
154
+ `FreshnessBadge` when the colour depends on a date.
155
+ - **Agent:** MIE UI Design Agent
156
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md — Data display
157
+
158
+ ### SEL-17 — Destructive confirmation
159
+
160
+ - **Ask:** "What do I use for a 'Delete this record?' confirmation — `Modal`?"
161
+ - **Expect:** `AlertDialog` for a single yes/no destructive confirm; `Modal`
162
+ is for richer content.
163
+ - **Agent:** MIE UI Design Agent
164
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md
165
+
166
+ ### SEL-18 — MessageComposer is retired
167
+
168
+ - **Ask:** "Should new chat UIs use `MessageComposer`?"
169
+ - **Expect:** No — `MessageComposer` was retired in 0.10.0, superseded by
170
+ `ChatComposer` (see `MIGRATION.md#chat-composer`); `ChatComposer` is the
171
+ standardized chat input for new work.
172
+ - **Agent:** MIE UI Design Agent
173
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md — Chat; MIGRATION.md
174
+
175
+ ### SEL-19 — Text editing surfaces
176
+
177
+ - **Ask:** "Plain comment box vs rich notes field vs full document editor —
178
+ which components?"
179
+ - **Expect:** `Textarea` when the value must be plain text; `TextAreaRich`
180
+ for a textarea-like HTML surface (toolbar hidden until asked, auto-grow);
181
+ `RichTextEditor` for an HTML document with an always-on toolbar, variables,
182
+ or dictation; `RichEditor` when you need Markdown, links/tables/code, or
183
+ collaboration.
184
+ - **Agent:** MIE UI Design Agent
185
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md — Editors
186
+
187
+ ### SEL-20 — Filter count strip
188
+
189
+ - **Ask:** "I want '1,204 of 8,911 records — 3 filters active · Clear all'
190
+ above my grid. Build it from spans?"
191
+ - **Expect:** `FilterSummaryBar` above a host-filtered `DataVisNITRO`/`Table`;
192
+ removable filter chips are `Badge` with `onRemove`, not a custom strip.
193
+ - **Agent:** MIE UI Design Agent
194
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md — Data display
195
+
196
+ ### SEL-21 — Confirming AI-extracted values
197
+
198
+ - **Ask:** "A user must confirm AI-extracted values before they overwrite the
199
+ record — form, dialog, or something else?"
200
+ - **Expect:** `ReconciliationPanel` (confidence-aware defaults,
201
+ `onApply(accepted)`); a plain form when there's no existing record to
202
+ compare; `AlertDialog` when it's a single yes/no.
203
+ - **Agent:** MIE UI Design Agent
204
+ - **Source:** agent/skills/mieweb-ui-catalog/selection-guidance.md — Chat
205
+
206
+ ### SEL-22 — Unexported components
207
+
208
+ - **Ask:** "Can I import Speaker Scribe from `@mieweb/ui` today?"
209
+ - **Expect:** No — the catalog marks it "not exported yet"; it exists in
210
+ Storybook but is not in the public API, so don't recommend or import it.
211
+ - **Agent:** MIE UI Design Agent
212
+ - **Source:** agent/skills/mieweb-ui-catalog/SKILL.md — inventory ("not exported yet" annotations)