Skip to content

catalogParity red on main: ko.json still carries the retired bucket Storage keys and lacks the 29 inventory ones #2298

Description

@chenmingwei23

Problem

catalogParity fails on main — the Korean catalog is desynced from en for the whole Storage screen, so Frontend Tests is red for every open PR that touches website/:

FAIL src/i18n/catalogParity.test.ts > catalog parity > ko > has no key missing relative to en
  missing 29 key(s), e.g. pages.sessionStorage.background_group, pages.sessionStorage.bulk_selected,
  pages.sessionStorage.cannot_delete_resumable, pages.sessionStorage.cannot_delete_running, ...

FAIL src/i18n/catalogParity.test.ts > catalog parity > ko > has no key absent from en
  36 stray key(s), e.g. pages.sessionStorage.batch_detail, pages.sessionStorage.bucket_30_90d,
  pages.sessionStorage.bucket_30_90d_hint, pages.sessionStorage.bucket_7_30d, ...

Reproduced on a pristine kirocrew/main i18n tree (git checkout kirocrew/main -- website/src/i18n/ in an unrelated worktree, then run that one test): 2 failed | 75 passed (77), byte-identical to what the PR merge commits show.

Root cause

The two assertions are one event, not two bugs. ko.json was translated against the bucket-based Storage screen, and the inventory-model redesign replaced that key set without re-syncing Korean:

  • the 36 "stray" keys are the retired bucket vocabulary (bucket_7_30d, bucket_30_90d_hint, batch_detail, …) that only ko still carries;
  • the 29 "missing" keys are the inventory vocabulary en gained (bulk_selected, clear_selection, cannot_delete_running, cannot_delete_resumable, background_group, …) that ko never received.

So this is the rename half of a key migration applied to en and not to ko. ko is a comparatively new locale, which is why the gap did not exist when the redesign landed and appeared as soon as Korean was added to SUPPORTED_LANGUAGES.

Impact

Two layers:

  1. Product — a Korean user on the Storage page gets English for all 29 new strings, including the destructive-action confirmations (cannot_delete_running, cannot_delete_resumable). Those are exactly the strings you least want falling back to a language the user did not choose.
  2. CIcatalogParity runs in Frontend Tests, so this reds an unrelated PR's Frontend TestsCoverage GatePR Readiness chain. Every author now has to prove the failure is not theirs before they can call their own PR green.

Suggested fix

Owned by whoever landed the inventory Storage redesign, since the Korean copy needs to match that screen's final vocabulary: delete the 36 retired bucket keys from ko.json and add the 29 inventory keys. Nothing else in the catalog is involved.

Worth considering separately: the guard catches the desync only once a locale is supported, so a key migration can sit latent in an unsupported locale and surface later as someone else's red build. Running parity over every catalog present on disk — not just SUPPORTED_LANGUAGES — would have failed this in the redesign's own PR.

Found while driving #2225, which touches no pages.sessionStorage key. (That PR did have its own genuine ko gap — 6 findingCard keys it added — and that half is fixed on its branch.)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: i18nTranslation catalogs, locale-aware formatting, pseudolocale gates, bidibugSomething is not working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions