Uh oh!
There was an error while loading. Please reload this page.
fix(i18n): name the report config panel and the row-colour section (#4118) - #4137
Merged
Conversation
…4118) Two call sites asked for a key whose value was written for another slot, so today's rendered copy is wrong. ReportConfigPanel used `report.editor.title` for both its heading and the accessible name of its `role="complementary"` landmark. That key is the label of the report's Title FIELD — `report.editor.titlePlaceholder` ('e.g. Pipeline by Quarter') sits directly under it in the pack — so the panel was headed "Title" and a screen reader announced a region called "Title". Adds `report.editor.panelTitle` ('Edit report', which is what the call site's own dead fallback said before #3810 aligned it to the pack) to all ten locale packs and points both slots at it. ViewSettingsPopover's colour section used `list.color`. ListView already uses both keys correctly for this one feature's two slots on the wide toolbar: the compact Paintbrush button is `list.color` ('Color'), the panel it opens is headed `list.rowColor` ('Row Color'). This popover is that same panel on the collapsed/compactToolbar surface, so it now takes `list.rowColor` — an existing key, no pack change. No `en` value of an existing key changed: check-i18n-en-drift reports 0 en values changed, 1 key added. Fixes#4118
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
yinlianghui
marked this pull request as ready for review
August 10, 2026 13:50
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#4118
Seven call sites were re-verified against the packs and against every other call site of the same key. Two were asking for a key written for another slot and are fixed; five turned out to be class 3 — the key IS the right one for that slot and only the pre-#3810 dead fallback was wrong. Evidence for each is below, so the five no-action verdicts can be challenged individually.
Re-verified a second time on the current branch tip after merging
main(see "Rebase onto #4136" at the bottom): all seven verdicts stand, and one of the card's sub-defects has since been fixed upstream.Fixed
1.
ReportConfigPanel— the panel was titled "Title"packages/app-shell/src/views/ReportConfigPanel.tsxaskedreport.editor.titlefor both the panel heading and the accessible name of itsrole="complementary"landmark. That key is the label of the report's Title field: in the pack it sits directly abovereport.editor.titlePlaceholder('e.g. Pipeline by Quarter'), which is what makes the pairing unambiguous. So a sighted user read a heading saying "Title" and a screen-reader user got a landmark named "Title".It is also the only consumer —
report.editor.titlehad exactly two call sites repo-wide and both were these. New keyreport.editor.panelTitle= 'Edit report' in all ten packs. That value is not invented: it is what this call site's own fallback said until #3810 aligned it to the pack (0c9596355, the commit that introduced the panel).2.
ViewSettingsPopover— the colour section was titled "Color"packages/plugin-list/src/components/ViewSettingsPopover.tsxaskedlist.color.ListViewalready uses both keys correctly for this one feature's two slots on the wide toolbar:ListView.tsx:2409— the compactPaintbrushbutton,hidden sm:inline-flex, so it is absent on the collapsed surface →list.color('Color')ListView.tsx:2415— the panel that button opens →list.rowColor('Row Color')This popover is that same panel on the collapsed /
compactToolbarsurface —ListView.tsx:2396marks the wide control "hidden on mobile (collapsed into ViewSettingsPopover)" — so it now takeslist.rowColor. No pack change: the correct key already existed.Triaged, no change — with the evidence
InterfaceListPage.tsx:436empty.objectNotFoundRecordDetailView:1838,RecordFormPage:227), and this one pairs the shared title with the purpose-built siblingempty.interfacePageSourceMissingfor its description. The composition is coherent; the fallback 'Source object not found' was a paraphrase, not a different meaning.InboxPopover.tsx:315sidebar.activityFeedHomeRail:191's activity card). Its own pack neighbourssidebar.notifications/sidebar.approvals(en.ts:2447-2449, three adjacent lines) label the popover's other two tabs, so this IS the sibling key for this tab.AppSidebar.tsx:647layout.appSwitcher.systemConsole:492as the switcher label,:647as the fallback nav group label). Namespace impurity only — the copy is right,layout.systemNavhas no such entry, and duplicating a byte-identical string into ten packs buys nothing a user sees.RecordDetailView.tsx:1796detail.unknownUser// Activity feed actors(en.ts:937) and pairs it withsystemActor: 'System'. Both consumers are activity-feed actor slots (:1318a comment author,:1796a history entry). The key is purpose-built for exactly this slot, and 'Unknown' is the right register beside 'System'.HomePage.tsx:337home.welcomehome.welcomeAdminDescription*keys used beside it. The stale'Welcome to {{product}}'fallback predates that redesign.The card's second
home.welcomedefect is now fixed onmain#4118 noted that this call site also passed an inert
productargument for a value with no{{product}}hole. That is #3845's class, and #3845 landed as #4136 while this branch was open — after the merge below,HomePage.tsxcarries neither the argument nor the defect, and the new interpolation-parity gate enforces the rule generally. Nothing left for this PR to do there; the line is untouched here, so the two changes do not collide.Tests
New:
packages/app-shell/src/views/__tests__/ReportConfigPanel.panelTitle.test.tsx(5 cases) andpackages/plugin-list/src/__tests__/ViewSettingsPopover.rowColorTitle.test.tsx(3 cases). Both assert through the real locale packs rather than at-echoing mock — what is under test is the string a user reads, and a mock returning the key would confirm the same thing the broken code did correctly.Reverse-verified on the merged tip, direction as predicted (red): reverting both call sites to their old keys via
git checkout origin/main --on the two call-site files — packs and tests untouched, and those two files differ frommainby nothing but the fix — turns 6 of 8 cases red. The 2 that stay green are the deliberate pack-premise guards (panelTitle !== title,rowColor !== color), which assert only the pack and so are unaffected by a call-site revert; they exist to stop the other six passing vacuously if those pairs ever collapsed to one string. Restoring the fix returns 8/8 green.Rebase onto #4136 (the interpolation-parity gate)
mainmoved while this branch was open;origin/main@5f40de7d4is merged in here (clean, no conflicts). The relevant lander is #4136, which added the interpolation-parity class tocheck-i18n-call-site-keys.mjs. The new key satisfies it trivially —report.editor.panelTitlehas no interpolation holes and its call sites pass no arguments — and the gate confirms it across the whole repo below.Gates, re-run on the merged tip
node scripts/check-i18n-call-site-keys.mjs(all classes)node scripts/check-i18n-en-drift.mjspnpm exec vitest run packages/i18n/(incl.all-locales-key-parity)pnpm exec vitest run packages/app-shell/pnpm exec vitest run packages/plugin-list/ scripts/turbo run type-check(app-shell, plugin-list, i18n)turbo run lint(same three)node scripts/check-control-bytes.mjscheck-changeset-presence/check-changeset-no-majormajorOut-of-scope finding
Filed #4145 (
finding, unassigned): after this PR moves the panel's name topanelTitle, the rest ofreport.editor.*— 106 leaf keys across all ten packs — has no consumer left anywhere in the repo. The hand-rolled report-editor form those labels served was replaced by the spec-drivenReportDefaultInspector, and every i18n gate here runs call site → key, never key → call site, so a dormant namespace stays invisible. Observation class: nothing a user hits today. Not touched by this PR.Generated by Claude Code