@mieweb/ui 0.11.0-dev.37 → 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.
- package/agent/README.md +1 -1
- package/agent/agents/mieweb-ui-design.agent.md +13 -7
- package/agent/agents/mieweb-ui-install.agent.md +7 -5
- package/agent/agents/mieweb-ui-migration.agent.md +144 -0
- package/agent/evals/README.md +74 -0
- package/agent/evals/a11y.md +183 -0
- package/agent/evals/i18n.md +185 -0
- package/agent/evals/install.md +200 -0
- package/agent/evals/migration.md +202 -0
- package/agent/evals/runs/2026-11-02.md +53 -0
- package/agent/evals/selection.md +212 -0
- package/agent/evals/styling.md +220 -0
- package/agent/skills/mieweb-ui-a11y-checklist/SKILL.md +2 -0
- package/agent/skills/mieweb-ui-catalog/SKILL.md +5 -5
- package/agent/skills/mieweb-ui-catalog/selection-guidance.md +3 -2
- package/agent/skills/mieweb-ui-tailwind4/SKILL.md +5 -2
- package/package.json +1 -1
|
@@ -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)
|