Skip to content

Platform locale table (ruling F of #29349): one list of 11 languages in spec, complete on every surface #29428

Open

Description

@hotlong

Context

#29349 was ruled F on 2026-11-02 (maintainer, verbatim on that card). Its terms:

  • The platform supports one list of languages, and every language on it is complete on every surface: Console UI, platform metadata, built-in emails, cloud, mobile and the marketing site.
  • There are no tiers.
  • Adding a language means changing the list and then backfilling once. Removing one works the same way.
  • The same-PR follow rule stays, and no new gate is added.
Language Tag
English en
简体中文 zh-Hans
繁體中文 zh-Hant
Español es
العربية ar (RTL)
Français fr
Português (Brasil) pt-BR
Русский ru
Deutsch de
日本語 ja
한국어 ko

Today.

  • Console UI: 10 packs, short codes, no zh-Hant.
  • Platform metadata: 4 locales (en, zh-CN, ja-JP, es-ES).
  • Built-in emails: 4 locales, with en-US as the floor.

The measured detail is in #29349.

Phases (one card each; the triage seat splits them)

  1. spec: the table.
    • Export the list from packages/spec/src/system, for example PLATFORM_LOCALES with rows { tag, label, rtl }. Today no such symbol exists: git grep -n PLATFORM_LOCALES origin/main -- packages/spec/src returns nothing.
    • Declare the read aliases that keep stored values valid and map them to table tags: zh, zh-CN, zh-SG → zh-Hans; zh-TW, zh-HK, zh-MO → zh-Hant; ja-JP → ja; es-ES → es; pt → pt-BR; en-US → en. New writes use table tags.
    • content/docs/protocol/kernel/i18n-standard.mdx gains the table and the rule: same-PR follow, and a language is added by changing the table and backfilling once.
    • Fix the AGENTS.md:647 drift: it says "nine packages … three services", but there are ten directories and four services.
  2. Console UI.
    • ui/packages/i18n reads its locale set from the table and adds zh-Hant. Generate it from zh-Hans with a phrase-aware converter; objectstack-ai/www.objectos.ai scripts/gen-zh-hant.mjs is the precedent.
    • Pack keys move to table tags. Aliases keep sys_user.locale values and Accept-Language resolution working, and the region-fallback test covers both scripts.
    • Parity and en-drift tests read the table.
  3. Platform metadata and built-in emails.
  4. Locale menu. The Console language menu offers the table's languages (intersected with an app's declared supportedLocales, as today), each one now complete.

Downstream, filed separately:

Acceptance

Activity

  1. added
    trackingGenerated anchor/tracker issue — not dispatchable; exempt from the half-state sweep's findings
    domain:specDomain lane — seat card indexed by label:pm:seat
    area:i18nThe customer's own language, across UI, metadata and notifications
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    Contributor

    domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K

    Retriage ask (split): this tracking card is the only unclaimed priority:p2 domain:spec item, and a parent card is never dispatched. Its body says "one card each; the triage seat splits them", and no phase card exists yet (searched for 29428 and PLATFORM_LOCALES in issues and PRs; git grep PLATFORM_LOCALES origin/main -- packages/spec/src returns nothing).

    Asked: file the phase 1 card ("spec: the table": PLATFORM_LOCALES rows { tag, label, rtl } in packages/spec/src/system, the read aliases each pinned, the i18n-standard.mdx table and rule, and the AGENTS.md package-count drift) as domain:spec with pm:queue and a priority. Spec seat 3 has capacity and will claim it. Phases 2 to 4 route to their own lanes.

    Asked at 2026-11-04T01:43Z.

  3. added
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Nov 4, 2026
  4. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    Contributor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: retriage answered · split · phase 1 → #30001 · pm:retriage removed · 2026-11-04T01:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  5. removed
    pm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
    on Nov 4, 2026
  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    Contributor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: split · phases 2–4 filed · 2026-11-05T13:49Z

    ⛔ Not a claim.


    Generated by Claude Code

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:i18nThe customer's own language, across UI, metadata and notificationsdomain:specDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3trackingGenerated anchor/tracker issue — not dispatchable; exempt from the half-state sweep's findings

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions