chore: stop pointing agents at quill for main-app UI - #75914
Conversation
The guide told agents to use quill for menus, comboboxes and autocompletes in the main app, and to treat LemonMenu as legacy. That doesn't match where quill is actually going: it was built for MCP apps and the desktop app, it's deliberately more compact than LemonUI, and there's no active migration of the main app onto it. Following the rule produced components that look out of place next to the Lemon UI around them. Point main-app work at LemonUI, including for menus, and scope the quill guidance to where quill applies. lib/ui/DropdownMenu (Radix) stays legacy.
|
😎 This pull request was merged. |
🤖 CI report✅ Bundle size — no changeUncompressed size of every built Total: 65.43 MiB · no change No file changed by more than 1000 B. Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report ✅ Eager graph — within budgetHow much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy
🟢 Largest files eagerly shipped from
|
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 789 B | src/scenes/ChunkLoadErrorBoundary.tsx |
| 762 B | src/index.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 285.3 KiB | ../node_modules/.pnpm/posthog-js@1.409.2/node_modules/posthog-js/dist/rrweb.js |
| 267.7 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 235.5 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 231.4 KiB | ../node_modules/.pnpm/posthog-js@1.409.2/node_modules/posthog-js/dist/module.js |
| 154.3 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 105.2 KiB | src/lib/api.ts |
| 94.7 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Toolbar bundle — eager 2.19 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.19 MiB · 17 files | no change | ████░░░░░░ 38.3% of 5.72 MiB |
| Deferred (lazy) | 2.08 MiB · 33 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.1 KiB | no change | █░░░░░░░░░ 5.8% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 717.7 KiB | dist/toolbar/toolbar-app-3ZUOLZ25.css |
| 551.1 KiB | dist/toolbar/chunk-chunk-MGCJX44V.js |
| 484.6 KiB | dist/toolbar/chunk-chunk-QCKKTYHY.js |
| 133.6 KiB | dist/toolbar/chunk-chunk-J5MNYTRE.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-T5KY5WYR.js |
| 71.0 KiB | dist/toolbar/toolbar-app-LF3AKWIJ.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-27JL52RE.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-Z7LVFBRX.js |
| 20.9 KiB | dist/toolbar/chunk-chunk-K5Z37JFK.js |
| 12.2 KiB | dist/toolbar/chunk-chunk-PIK3PADE.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — no change
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1371.14 MiB · no change
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
Prompt To Fix All With AI### Issue 1
frontend/src/AGENTS.md:26
**Distinguish the selection interactions**
This row groups selects, searchable comboboxes, and free-text autocompletes under two undifferentiated recommendations, although `LemonSelect` provides only static value selection while custom text entry requires `LemonInputSelect` with the appropriate options. Separating these cases prevents agents from choosing a static select for an interface that requires search or free-text input.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "chore: stop pointing agents at quill for..." | Re-trigger Greptile |
Problem
AGENTS.mdtells agents to reach for quill when building menus, comboboxes and autocompletes in the main app, and to treatLemonMenuas legacy:That doesn't match where quill is actually heading. Per the discussion in #team-blitzscale, quill was built for MCP apps and the desktop app rather than the main app, it's intentionally more compact than LemonUI, and there's no active migration of the app onto it right now.
So agents following the guide produce components that look out of place next to the Lemon UI around them. I hit this on #75667: an installation picker got built with quill
DropdownMenubecause that's what the guide says, and it stood out against every other control in the same settings section.The adoption numbers say the same thing. Across
frontend/srcandproducts/*/frontend, 7 files import quill'sDropdownMenu, against 24 using the legacy Radixlib/ui/DropdownMenuand 30 usingLemonMenu. It reads as an early-adopter trap rather than a migration in progress.Changes
Docs only, no code.
AGENTS.md: rewrite the "quill vs LemonUI" bullet. Quill is for MCP apps and the desktop app. Main-app work uses LemonUI, menus included, withLemonMenuplus aLemonButtontrigger as the default.lib/ui/DropdownMenu(Radix) stays legacy. The genuinely quill-specific advice (don't mix the two libraries inside one component, Base UI'srenderprop instead of Radix'sasChild) is kept but scoped to where quill applies.frontend/src/AGENTS.md: drop quill from the "where to look" list, and split the component table row that pointed dropdowns at quill into an actions row (LemonMenu) and a values row (LemonSelect/LemonInputSelect).Note
This narrows guidance, it doesn't deprecate quill or touch the 7 existing call sites. If the intent is for the main app to move onto quill after all, this is the wrong change and the Slack thread is the place to settle it.
How did you test this code?
Nothing to test, both files are agent instructions. Verified that
LemonMenu,LemonSelectandLemonInputSelectall exist underfrontend/src/lib/lemon-ui/so the table doesn't point at components that aren't there, and the repo's AGENTS.md symlink check and markdown formatter both ran clean on commit.Automatic notifications
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
I hit this while reviewing #75667 with Claude Code. Claude pushed back on switching that PR's picker to
LemonMenuon the grounds thatAGENTS.mdforbids new ones, which is when I remembered the blitzscale thread saying the opposite. Claude then traced the rule to its origin, found it was added in #63190, and confirmed the conflict, so the guide is stale rather than disputed.We considered folding this into #75667 and decided against it. That PR already has two approvals and is scoped to the GitHub integration, and a change to the shared agent guide deserves its own review from whoever owns quill. Tagging @adamleithp since it's his line and his library.
Skills invoked: none relevant to a docs change.