Skip to content

Part B: Verified bugs - #42

Merged
n4ff4h merged 24 commits into
devfrom
plan/b-bugs
Nov 1, 2026
Merged

n4ff4h merged 24 commits into
devfrom
plan/b-bugs

Conversation

@n4ff4h

@n4ff4h n4ff4h commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator

Part B: verified bugs (B1–B13).

Stacked, merge in order, and do not squash: the branches go plan/a-packaging → plan/b-bugs → plan/c-api → plan/d-ci → plan/e-docs, each built on the one before. All target dev as the plan asks, so until the earlier PRs merge this diff includes them. Review it commit by commit (one commit per plan step).

Worth a look

  • B2 went wider than the plan's 7 callers: 34 buttons (27 Button, 7 InputGroupButton) set their own data-slot and had the same bug. All now use data-part.
  • B5 only the image alt field is free text in the editor dialogs (link and embed are URL-only). The dialogs are rendered by the editors, not the toolbar, so the prop is passed there.
  • B9 RelativeDate also calls useNow, so it gets a placeholder too (the exact date until the first tick).
  • B11 --onu-overlay keeps today's look (black at 10%) in both modes. AppSidebar and the docs nav had the same hex fallbacks and changed too.

Renamed or removed APIs

Was Now
data-slot="modal-close" etc. on buttons data-part="…"; Button always emits data-slot="button"
side="left" / "right" on Tip, PopoverPanel, ActionMenu side="start" / "end"
useNow returns number number | null until the first tick (internal)
Locale keys listing.moveUp, listing.moveDown listing.moveItemUp, listing.moveItemDown; also new listing.moveItemMenu, choice.switchAccountFrom, form.editValue
ValidationError default message empty; ValidationSummary shows form.errorSummaryTitle

Added: --onu-overlay / bg-overlay, SidebarMenuSkeleton index, typed SegmentedControl name.

Size limits at this tip

No budget changed.

Entry Budget Measured
core (Button) 13 kB 12.1 kB
core (FormField + TextInput) 17.5 kB 16.35 kB
core (Modal) 26 kB 24.36 kB
core (Select) 41 kB 38.38 kB
core (DataTable) 80 kB 79.12 kB
core (OnuProvider) 1.5 kB 1.25 kB
core (admin form: OnuProvider + 8 form components) 87 kB 83.39 kB
core (everything) 1.2 MB 1.1 MB
primitives 130 kB 124.32 kB
thaana 2.2 kB 1.94 kB
locales/dv 16 kB 13.45 kB
charts 48 kB 45.75 kB
maps 100 kB 97.33 kB
editor 78 kB 72.47 kB
calendar 44 kB 39.41 kB
media 54 kB 50.47 kB
export 36 kB 31.32 kB
icons/iconify 600 B 413 B
icons/fontawesome 2.1 kB 1.86 kB
styles.css (with its imports) 4.5 kB 4.42 kB
tailwind.css (with its imports) 8.5 kB 8 kB
fonts-thaana.css 400 B 327 B
fonts.css 400 B 306 B
fonts-optional.css 300 B 211 B

Checks

At this tip: typecheck, 2622 unit tests, size pass. Lint, format and docs check passed on each commit. Next.js SSR check passed at B10.

🤖 Generated with Claude Code

n4ff4h and others added 24 commits November 1, 2026 10:41
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changesets fixed group keeps @javaabu/onu and @javaabu/onu-mcp together, and
scripts/sync-plugin-version.mjs keeps the plugin manifest in step; the release
workflow fails if it differs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The @font-face rules move to fonts-thaana.css, imported by tailwind.css, styles.css and
fonts.css. New budget: fonts-thaana.css 400 B (327 B measured). tailwind.css stays within
8.5 kB (7.97 kB) and styles.css within 4.5 kB (4.38 kB). fonts.css drops to 400 B now the
font faces moved out (306 B).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both share React context with the app, so a second copy silently disconnects them.
@tanstack/react-query is a required peer, not optional as first planned: the core entry
imports ApiSelect statically, so an app without the package would fail to build.

The fallback QueryClient moves from a module singleton (shared across SSR requests) to
each OnuProvider, or the component when there is no provider. getOnuQueryClient is gone,
and invalidateApiOptions takes the client first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nothing in src, web or templates used it; every Onu select is built on cmdk. The primitives budget drops from 165 kB to 130 kB (124.25 kB measured).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Chevron renders an Icon that already mirrors, so the rotate-180 on top turned the arrows back to their LTR direction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A caller's data-slot replaced Button's, so the 44 px rule in base.css no longer matched. Button now always emits data-slot=button, and the 34 callers that named their button (27 Button, 7 InputGroupButton) use data-part. The plan listed 7; the rest had the same bug.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The module-level confirm() has no locale, so it keeps the English default; useConfirm uses the provider's. ValidationError.message is now empty when no message is given, so ValidationSummary shows form.errorSummaryTitle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The link and embed dialogs only have URL fields, so the alt text field is the only free-text field in the editor dialogs. The dialogs are rendered by the editors, not the toolbar, so the prop goes straight there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New keys: listing.moveItemMenu, moveItemUp, moveItemDown, choice.switchAccountFrom, form.editValue. Removed: listing.moveUp, moveDown. listing.moveTo stays as the menu's heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The button is rotated 90 degrees, so a mirrored chevron pointed the wrong way along the vertical axis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… on a span

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
useNow starts from null and ticks on mount. RelativeDate also calls useNow, so it gets the same placeholder (the exact date). PublishBox now shares useNow instead of its own Date.now() state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--onu-overlay keeps today's look (black at 10%) in both modes. App sidebar and the docs nav had the same hex fallbacks as _shell.ts and app-header.tsx, so they change too. figma/tokens-studio.json and the plugin are regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pnpm 12 keeps the version from packageManager in a section of pnpm-lock.yaml, and a frozen install fails if it is missing. Moving to 12.16.1 in 15ccf53 changed package.json only, so every CI job has failed at pnpm install since. It didn't show locally because an older global pnpm that switches itself to 12.16.1 doesn't check this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
next 16.4.3 (critical RCE and high DoS, templates/nextjs). shadcn 4.23.0, a dev dependency, which moves its zod to 4.6.7. In the lockfile, within existing ranges: body-parser 2.4.0, qs 6.17.1, fast-uri 3.1.9, ip-address 10.7.5, undici 7.30.1 and 8.12.3, systeminformation 5.33.19. pnpm audit --prod is clean.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The open dialog's focus timer ran after the editor unmounted, and vitest's unhandled error made test:coverage exit 1. D4 has the same fix; this brings it down to where the test was added, so #42 and #43 pass on their own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@n4ff4h
n4ff4h merged commit 853fe09 into dev Nov 1, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant