Skip to content

refactor(ui): one catalogue file per part, behind the strings indexes - #614

Merged
klNuno merged 5 commits into
mainfrom
refactor/split-catalogues
Oct 19, 2026
Merged

klNuno merged 5 commits into
mainfrom
refactor/split-catalogues

Conversation

@klNuno

@klNuno klNuno commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Note

Clanker Claude Opus 5.5 is responding on behalf of meetsu

Two changes to different parts of the UI no longer edit the same translation file.

migrating an open branch

A branch cut before this PR edits the single strings.en.ts and strings.fr.ts. After git merge origin/main stops on them, run:

bun scripts/migrate/split-catalogues.ts

It splits the merge base and the branch versions with the codemod that made this split, replays each part's change onto main's part with git merge-file, adds new parts to both indexes and stages the result. A part both sides changed on the same lines keeps conflict markers and is listed.

what changed

  • Each top-level block of the English catalogue is its own file in packages/ui/src/lib/strings/en/ (85 parts), mirrored by a file of the same name in strings/fr/.
  • strings.en.ts and strings.fr.ts only spread the parts, so Strings, Translation, the lazy locale chunks and every import of lib/strings stay as they were.
  • The Vite catalogue plugin completes each French part over its English part instead of the whole file.
  • scripts/ci/translations.ts fails when a part lacks its file in a translation or an index forgets to spread it.
  • scripts/migrate/split-catalogues.ts holds the codemod (--split) and the migration above, with tests run by CI.
  • The catalogues leave the 900-line exemption in scripts/architecture/size-budget.json; AGENTS.md and docs/language.md say where a sentence goes and how to migrate.
  • scripts/ci/budgets.json raises uiDist from 4869600 to 4872200 bytes: CI measured 4871151, since each part is its own module. The entry chunk did not grow.

to question

The split is one file per top-level key, not a hand-made grouping, so the migration can replay it exactly on any branch.

verified

  • --split replayed on the parent commit reproduces all 172 catalogue files of this PR byte for byte.
  • Migration on throwaway merges of feat(agents): give agent conversations the thread composer and prompt bubble #619 and feat(contacts): link another owner's Boite over Tailscale #602 with this branch: no conflict, and every file equals a single-file 3-way merge then split.
  • On both migrated merges, bun run --cwd packages/ui check reports 0 errors and bun scripts/ci/translations.ts 3158 of 3158 and 3275 of 3275 sentences.
  • bun test scripts/migrate (5 pass: edit kept beside main's, new part, deleted part, conflict markers, header warning).
  • Both catalogues loaded before and after and serialized with their functions: identical, 139,274 and 156,559 characters.
  • bun run build:ui: chunks strings.en and strings.fr still separate, entry chunk unchanged at 492,112 bytes.
  • bun run check:architecture, bun scripts/check-docs.ts, bun test scripts/architecture scripts/ci/translations.test.ts: pass.
  • not verified: the full UI suite and E2E, which this PR's CI runs.

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 185 files, which is 85 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: Repository: beboite/boite/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a81ccf1b-f967-4168-97a4-96e7fe54374c
📥 Commits

Reviewing files that changed from the base of the PR and between 2627b39 and 5f6a198.

📒 Files selected for processing: 185
  • .github/workflows/ci.yml
  • AGENTS.md
  • docs/language.md
  • docs/onboarding.md
  • packages/ui/catalogue-plugin.ts
  • packages/ui/src/lib/catalogue-plugin.test.ts
  • packages/ui/src/lib/strings.en.ts
  • packages/ui/src/lib/strings.fr.ts
  • packages/ui/src/lib/strings/en/accounts.ts
  • packages/ui/src/lib/strings/en/activity.ts
  • packages/ui/src/lib/strings/en/agentBrowser.ts
  • packages/ui/src/lib/strings/en/agentMessages.ts
  • packages/ui/src/lib/strings/en/agentSettingRequest.ts
  • packages/ui/src/lib/strings/en/agentShape.ts
  • packages/ui/src/lib/strings/en/agents.ts
  • packages/ui/src/lib/strings/en/app.ts
  • packages/ui/src/lib/strings/en/appUpdate.ts
  • packages/ui/src/lib/strings/en/artifacts.ts
  • packages/ui/src/lib/strings/en/brain.ts
  • packages/ui/src/lib/strings/en/browser.ts
  • packages/ui/src/lib/strings/en/browserProfiles.ts
  • packages/ui/src/lib/strings/en/browserTools.ts
  • packages/ui/src/lib/strings/en/btw.ts
  • packages/ui/src/lib/strings/en/changes.ts
  • packages/ui/src/lib/strings/en/chat.ts
  • packages/ui/src/lib/strings/en/common.ts
  • packages/ui/src/lib/strings/en/composer.ts
  • packages/ui/src/lib/strings/en/connect.ts
  • packages/ui/src/lib/strings/en/connection.ts
  • packages/ui/src/lib/strings/en/contextMode.ts
  • packages/ui/src/lib/strings/en/controls.ts
  • packages/ui/src/lib/strings/en/coordination.ts
  • packages/ui/src/lib/strings/en/delegation.ts
  • packages/ui/src/lib/strings/en/desktopUpdate.ts
  • packages/ui/src/lib/strings/en/devicePanel.ts
  • packages/ui/src/lib/strings/en/diagnostics.ts
  • packages/ui/src/lib/strings/en/drafts.ts
  • packages/ui/src/lib/strings/en/drop.ts
  • packages/ui/src/lib/strings/en/effortLevels.ts
  • packages/ui/src/lib/strings/en/errors.ts
  • packages/ui/src/lib/strings/en/experiments.ts
  • packages/ui/src/lib/strings/en/features.ts
  • packages/ui/src/lib/strings/en/files.ts
  • packages/ui/src/lib/strings/en/firstRun.ts
  • packages/ui/src/lib/strings/en/group.ts
  • packages/ui/src/lib/strings/en/harnessUpdates.ts
  • packages/ui/src/lib/strings/en/hooks.ts
  • packages/ui/src/lib/strings/en/imports.ts
  • packages/ui/src/lib/strings/en/install.ts
  • packages/ui/src/lib/strings/en/keyboard.ts
  • packages/ui/src/lib/strings/en/machines.ts
  • packages/ui/src/lib/strings/en/media.ts
  • packages/ui/src/lib/strings/en/mention.ts
  • packages/ui/src/lib/strings/en/mobile.ts
  • packages/ui/src/lib/strings/en/notify.ts
  • packages/ui/src/lib/strings/en/onboarding.ts
  • packages/ui/src/lib/strings/en/palette.ts
  • packages/ui/src/lib/strings/en/parts.ts
  • packages/ui/src/lib/strings/en/permissionMode.ts
  • packages/ui/src/lib/strings/en/permissionModeAgy.ts
  • packages/ui/src/lib/strings/en/permissionModeCodex.ts
  • packages/ui/src/lib/strings/en/permissionModeLong.ts
  • packages/ui/src/lib/strings/en/phone.ts
  • packages/ui/src/lib/strings/en/plugins.ts
  • packages/ui/src/lib/strings/en/previewComments.ts
  • packages/ui/src/lib/strings/en/protection.ts
  • packages/ui/src/lib/strings/en/providerSettings.ts
  • packages/ui/src/lib/strings/en/quotas.ts
  • packages/ui/src/lib/strings/en/remoteBrowser.ts
  • packages/ui/src/lib/strings/en/resident.ts
  • packages/ui/src/lib/strings/en/resources.ts
  • packages/ui/src/lib/strings/en/rightPanel.ts
  • packages/ui/src/lib/strings/en/serverUpdate.ts
  • packages/ui/src/lib/strings/en/settingRequest.ts
  • packages/ui/src/lib/strings/en/settings.ts
  • packages/ui/src/lib/strings/en/sidebar.ts
  • packages/ui/src/lib/strings/en/slash.ts
  • packages/ui/src/lib/strings/en/speech.ts
  • packages/ui/src/lib/strings/en/subscriptionProxy.ts
  • packages/ui/src/lib/strings/en/taskManager.ts
  • packages/ui/src/lib/strings/en/tasks.ts
  • packages/ui/src/lib/strings/en/telemetry.ts
  • packages/ui/src/lib/strings/en/terminal.ts
  • packages/ui/src/lib/strings/en/thread.ts
  • packages/ui/src/lib/strings/en/threadMove.ts
  • packages/ui/src/lib/strings/en/threadStatus.ts
  • packages/ui/src/lib/strings/en/time.ts
  • packages/ui/src/lib/strings/en/titlebar.ts
  • packages/ui/src/lib/strings/en/trace.ts
  • packages/ui/src/lib/strings/en/units.ts
  • packages/ui/src/lib/strings/en/updateAll.ts
  • packages/ui/src/lib/strings/en/usage.ts
  • packages/ui/src/lib/strings/en/workflow.ts
  • packages/ui/src/lib/strings/fr/accounts.ts
  • packages/ui/src/lib/strings/fr/activity.ts
  • packages/ui/src/lib/strings/fr/agentBrowser.ts
  • packages/ui/src/lib/strings/fr/agentMessages.ts
  • packages/ui/src/lib/strings/fr/agentSettingRequest.ts
  • packages/ui/src/lib/strings/fr/agentShape.ts
  • packages/ui/src/lib/strings/fr/agents.ts
  • packages/ui/src/lib/strings/fr/app.ts
  • packages/ui/src/lib/strings/fr/appUpdate.ts
  • packages/ui/src/lib/strings/fr/artifacts.ts
  • packages/ui/src/lib/strings/fr/brain.ts
  • packages/ui/src/lib/strings/fr/browser.ts
  • packages/ui/src/lib/strings/fr/browserProfiles.ts
  • packages/ui/src/lib/strings/fr/browserTools.ts
  • packages/ui/src/lib/strings/fr/btw.ts
  • packages/ui/src/lib/strings/fr/changes.ts
  • packages/ui/src/lib/strings/fr/chat.ts
  • packages/ui/src/lib/strings/fr/common.ts
  • packages/ui/src/lib/strings/fr/composer.ts
  • packages/ui/src/lib/strings/fr/connect.ts
  • packages/ui/src/lib/strings/fr/connection.ts
  • packages/ui/src/lib/strings/fr/contextMode.ts
  • packages/ui/src/lib/strings/fr/controls.ts
  • packages/ui/src/lib/strings/fr/coordination.ts
  • packages/ui/src/lib/strings/fr/delegation.ts
  • packages/ui/src/lib/strings/fr/desktopUpdate.ts
  • packages/ui/src/lib/strings/fr/devicePanel.ts
  • packages/ui/src/lib/strings/fr/diagnostics.ts
  • packages/ui/src/lib/strings/fr/drafts.ts
  • packages/ui/src/lib/strings/fr/drop.ts
  • packages/ui/src/lib/strings/fr/effortLevels.ts
  • packages/ui/src/lib/strings/fr/errors.ts
  • packages/ui/src/lib/strings/fr/experiments.ts
  • packages/ui/src/lib/strings/fr/features.ts
  • packages/ui/src/lib/strings/fr/files.ts
  • packages/ui/src/lib/strings/fr/firstRun.ts
  • packages/ui/src/lib/strings/fr/group.ts
  • packages/ui/src/lib/strings/fr/harnessUpdates.ts
  • packages/ui/src/lib/strings/fr/hooks.ts
  • packages/ui/src/lib/strings/fr/imports.ts
  • packages/ui/src/lib/strings/fr/install.ts
  • packages/ui/src/lib/strings/fr/keyboard.ts
  • packages/ui/src/lib/strings/fr/machines.ts
  • packages/ui/src/lib/strings/fr/media.ts
  • packages/ui/src/lib/strings/fr/mention.ts
  • packages/ui/src/lib/strings/fr/mobile.ts
  • packages/ui/src/lib/strings/fr/notify.ts
  • packages/ui/src/lib/strings/fr/onboarding.ts
  • packages/ui/src/lib/strings/fr/palette.ts
  • packages/ui/src/lib/strings/fr/parts.ts
  • packages/ui/src/lib/strings/fr/permissionMode.ts
  • packages/ui/src/lib/strings/fr/permissionModeAgy.ts
  • packages/ui/src/lib/strings/fr/permissionModeCodex.ts
  • packages/ui/src/lib/strings/fr/permissionModeLong.ts
  • packages/ui/src/lib/strings/fr/phone.ts
  • packages/ui/src/lib/strings/fr/plugins.ts
  • packages/ui/src/lib/strings/fr/previewComments.ts
  • packages/ui/src/lib/strings/fr/protection.ts
  • packages/ui/src/lib/strings/fr/providerSettings.ts
  • packages/ui/src/lib/strings/fr/quotas.ts
  • packages/ui/src/lib/strings/fr/remoteBrowser.ts
  • packages/ui/src/lib/strings/fr/resident.ts
  • packages/ui/src/lib/strings/fr/resources.ts
  • packages/ui/src/lib/strings/fr/rightPanel.ts
  • packages/ui/src/lib/strings/fr/serverUpdate.ts
  • packages/ui/src/lib/strings/fr/settingRequest.ts
  • packages/ui/src/lib/strings/fr/settings.ts
  • packages/ui/src/lib/strings/fr/sidebar.ts
  • packages/ui/src/lib/strings/fr/slash.ts
  • packages/ui/src/lib/strings/fr/speech.ts
  • packages/ui/src/lib/strings/fr/subscriptionProxy.ts
  • packages/ui/src/lib/strings/fr/taskManager.ts
  • packages/ui/src/lib/strings/fr/tasks.ts
  • packages/ui/src/lib/strings/fr/telemetry.ts
  • packages/ui/src/lib/strings/fr/terminal.ts
  • packages/ui/src/lib/strings/fr/thread.ts
  • packages/ui/src/lib/strings/fr/threadMove.ts
  • packages/ui/src/lib/strings/fr/threadStatus.ts
  • packages/ui/src/lib/strings/fr/time.ts
  • packages/ui/src/lib/strings/fr/titlebar.ts
  • packages/ui/src/lib/strings/fr/trace.ts
  • packages/ui/src/lib/strings/fr/units.ts
  • packages/ui/src/lib/strings/fr/updateAll.ts
  • packages/ui/src/lib/strings/fr/usage.ts
  • packages/ui/src/lib/strings/fr/workflow.ts
  • scripts/architecture/size-budget.json
  • scripts/architecture/size.test.ts
  • scripts/ci/budgets.json
  • scripts/ci/translations.test.ts
  • scripts/ci/translations.ts
  • scripts/migrate/split-catalogues.test.ts
  • scripts/migrate/split-catalogues.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@klNuno
klNuno marked this pull request as ready for review October 18, 2026 22:53
@github-actions github-actions Bot added documentation Improvements or additions to documentation ui packages/ui ci Workflows and CI scripts labels Oct 18, 2026
…gues

# Conflicts:
#	packages/ui/src/lib/strings.en.ts
#	packages/ui/src/lib/strings.fr.ts
CI measured uiDist at 4871151 bytes, 1551 over the limit: each catalogue part is its own module now. The entry chunk is unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Workflows and CI scripts documentation Improvements or additions to documentation ui packages/ui

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant