chore(i18n): drop tabs.home, the home tab's own title key - #486
Merged
PathGao merged 1 commit intoAug 6, 2026
Merged
Conversation
Follow-up to #482, which removed `TabManager.addHomeTab`. That method's `title: t('tabs.home', settings.language)` was the key's only consumer in `src/`, and the tab it titled no longer exists — nothing is left to name. 26 locales, one leaf each, all of them the second entry of a `tabs` block that keeps `untitled`. `menu.home` and the whole `home.*` section are untouched: the home SCREEN is very much alive, reached by the titlebar button and the `showHome` toggle. Only the tab's title is gone. homeTabRender.test.ts read the key to prove the render gate ignores the title in every language. It now reads `menu.home`, which every locale also defines. The claim under test is that the title cannot affect which branch runs, not which key the title came from. Nothing type-checks a `t()` key — the `Translation` interface is an index signature — so both directions were verified against i18nCoverage.test.ts rather than assumed: * leave the key in one locale after removing it from English, and `no language defines a key English does not have` fails with `tabs.home [1] ja`. A partial sweep across 26 locales cannot pass. * point any src file at `t('tabs.home', …)` again, and both `every key the source asks for exists in English` and `t() never echoes a key back for a reachable string` fail. A missed call site cannot pass either. npm audit / npm run check / npm test / cargo test all clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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 free
to 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.
Prerequisite
Third in a chain — merge #480, then #482, then this:
Branched on and targeting
chore/drop-dead-home-tab-constructor, so the diffabove is this change alone. GitHub retargets each base automatically as the one
below it lands.
This is the follow-up #482's Scope section offered.
What this is
tabs.homewas the home tab's own title key:addHomeTabsettitle: t('tabs.home', settings.language), and that was its only consumer insrc/. #482 removed the method, so the key now titles nothing.26 locales, one leaf each, always the second entry of a
tabsblock that keepsuntitled:tabs: { - untitled: 'Untitled', - home: 'Home' + untitled: 'Untitled' },Scope
The home screen is not affected. There are three
homekeys per locale andthis touches one:
menu.homehome.*tabs.homeThe home screen keeps both of its live routes — the titlebar button and the
showHometoggle. What went is the title of a tab that can no longer exist.78 → 52occurrences ofhome:in the dictionary, which is 26 × 3 → 26 × 2.Tests
homeTabRender.test.tsread the key to prove the render gate ignores the tabtitle in every language — the dead half of the #392 gate compared against the
English literal
'Recents'. It now readsmenu.home, which every locale alsodefines. The claim under test is that the title cannot affect which branch runs,
not which key the title came from; the following
'Recents'assertion isunchanged.
Verification
Nothing type-checks a
t()key —Translationis an index signature(
[key: string]: string | Translation), sosvelte-checkhas no opinion hereand a half-finished sweep across 26 locales would compile fine. The safety net
is
i18nCoverage.test.ts, and rather than assume it covers this I broke it bothways and watched it fail:
A locale left behind. Restored
home: 'ホーム'tojaonly:A call site missed. Put
t('tabs.home', settings.language)back intotabs.svelte.ts:Both directions of that file's interlock hold, so neither failure mode can reach
master. Probes reverted; the diff is the 26 deletions and the one test line.Full suite, macOS (darwin 25.5.0), on top of #482:
Not verified: no running app. This is a dictionary deletion whose safety
rests on the two probes above plus the caller census (
grep -rn 'tabs\.home' src scriptsreturns only the comment explaining the substitution), not on switchingthe UI through 26 languages by hand.