Skip to content

docs(zh-Hant): state the Simplified fallback as the reason navigation is in English - #1549

Merged
os-sales merged 1 commit into
mainfrom
claude/issue-1540-zh-hant-retired-reason
Sep 3, 2026
Merged

docs(zh-Hant): state the Simplified fallback as the reason navigation is in English#1549
os-sales merged 1 commit into
mainfrom
claude/issue-1540-zh-hant-retired-reason

Conversation

@os-sales

@os-sales os-sales commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1540

Seven zh-Hant pages carried a standing parenthetical whose middle clause — 「主控台介面顯示英文」, the console UI displays English — is false. The console falls back to Simplified. That claim is the one retired as measured false in #1368, and AGENTS.md:343-345 already carries the corrected reason; only the reader-facing half had not moved.

The convention is untouched. English navigation labels on Traditional pages stay exactly as they are. Only the stated reason changes, to the one the rulebook gives: the console falls back to Simplified, so a Traditional page labels platform navigation in English rather than mix Simplified glyphs into Traditional prose.

Measurement 1 — the console fallback, with apparatus

Not a transcription of the rulebook line. Probed against the installed platform: pnpm build, then objectstack start -p 4021 serving @objectstack/console@17.2.0, driven in Chromium (/opt/pw-browsers/chromium-1194) at several browser locales, reading back document.documentElement.lang and the rendered text.

Authenticated Setup app, the exact surface these parentheticals are about (導覽路徑):

navigator.language documentElement.lang Setup sidebar renders
zh-Hant-TW zh 仪表盘 · 系统概览 · 软件包 · 用户 · 组织 · 权限集 · 审批中心 · 审计日志
zh-TW zh same (Simplified)
zh-HK zh same (Simplified)
en-US en Dashboards · System Overview · Packages · Users · Organization · Permission Sets · Audit Logs
ja-JP ja Japanese (ダッシュボード …)

Script fingerprint over the rendered console home, using strictly-disjoint Simplified/Traditional character pairs:

locale=zh-Hant-TW  htmlLang=zh  simplified_only=12 (单对应开态统继续览计设项)  traditional_only=0
locale=en-US       htmlLang=en  simplified_only=0                              traditional_only=0
locale=ja-JP       htmlLang=ja  simplified_only=0                              traditional_only=4 (計設開項)

Negative controls, both directions. en-US and ja-JP differ from the zh-* rows, so the probe reads the locale rather than returning a constant. And the ja-JP row's 4 traditional-form hits prove the fingerprint does fire on those glyphs when present — so the zero under zh-Hant-TW is a real zero, not a broken classifier.

The mechanism agrees. The console's built-in locale bundles are en · zh · ja · ko · de · fr · es · pt · ru · ar — one Chinese bundle, no zh-Hant, no zh-TW — and it selects by primary subtag (navigator.language.split('-')[0]), so every zh-* tag lands on the single Simplified zh bundle. There is no configuration in which a Traditional locale reaches English by fallback. English is what an explicitly-English console shows, which is not what these pages claimed.

⇒ Reading 1 in the card. AGENTS.md:343-345 is confirmed, not contradicted.

Three variants, three surgeries

The seven sites are not one string, so this is not a find-and-replace:

form sites surgery
full, no trailing 。 (mid-sentence aside) administration/profiles:96, administration/setup:14, guides/integrations:8 false clause replaced; 以免簡繁混用 restores the reason the 因此 clause now needs
full, trailing 。 inside (standalone note) administration/sharing-and-security:71, administration/automation:32, administration/sandbox-and-releases:10 same, full stop kept inside
short, no 因此 clause reference/glossary:200 reason restored, not merely corrected — with the fallback stated, "the console shows Simplified" alone no longer explains why the path above is English

Corrected full form:

(平台未附繁體中文語言包,主控台介面會回退為簡體中文,因此本頁的導覽路徑一律以英文標示,以免簡繁混用。)

Corrected short form:

(平台未附繁體中文語言包,主控台介面會回退為簡體中文,此處改以英文標示)

Each was read back in its own paragraph — register differs between a mid-sentence aside and a standalone note — and the injected text was checked against a Simplified-character set with a positive control (a deliberately Simplified string fires 5 hits; all three injected strings fire 0).

Site count and guards

  • Exactly seven, no eighth. Swept all 67 content/docs/**/*.zh-Hant.mdx with four independent nets (英文 · 繁體|語言包 · 未附|主控台 · 顯示英文). The widest net returns 15 lines; 7 carry the parenthetical, the other 8 are unrelated. The eighth page of Docs cite 39 more Setup navigation names the platform ships nowhere — the remainder #853 quarantined rather than fixed #1113/docs: spell platform navigation in English on the zh-Hant pages (#1113, sub-class 3) #1124's pass, guides/email-and-calendar.zh-Hant.mdx, legitimately carries none — its two sections deny screens that do not exist, and that pass deliberately left them in Chinese with no arrow form.
  • No guard pins the false wording. test/, scripts/, e2e/, .github/ return 0 files for every spelling of it; control probe zh-Hant returns 31 files, so the search reaches those trees.
  • The refuting sites are untouched and correct. Read all of them; revenue/approvals carries 11 of the 15 lines, including the three tables enumerating 待我审批 / 我发起的 / 全部 / 我提交的 / 已完成 / 状态. One further corroborating site not enumerated on the card, sales/opportunities.zh-Hant.mdx:152, is also correct and untouched.

Verification

pnpm verify — all eight stages, green, on the tree of commit e7123384:

✓ Validation passed (1942ms)                      validate
  tsc --noEmit                                    typecheck
  objectstack lint                                lint
✓ i18n lint gate: 0 `i18n/missing-*` issues       lint:i18n-gate
✓ source hygiene clean                            hygiene
✓ source token ratchet clean                      hygiene:tokens
✓ Build complete (2216ms)                         build
  Test Files 159 passed (159)                     test
  Tests 3344 passed | 1 skipped (3345)

Ratchet family re-run on the pushed head e7123384 after commit: hygiene, token ratchet and i18n gate all exit 0.

Proposal, not built here

The corrected sentence is now stated seven times. It could be stated once in a shared place. The card asks for this to be proposed and stopped at, so no partial/include mechanism was built — noted for triage.

🤖 Generated with Claude Code

https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t


Generated by Claude Code

… is in English

Seven zh-Hant pages carried a standing parenthetical whose middle clause —
「主控台介面顯示英文」, *the console UI displays English* — is false. The console
falls back to Simplified. That claim was retired as measured false (#1368) and
AGENTS.md already carries the corrected reason; only the reader-facing half had
not moved.

The convention is untouched: English navigation labels on Traditional pages stay
exactly as they are. Only the stated reason changes, to the one the rulebook
gives — the console falls back to Simplified, so a Traditional page labels
platform navigation in English rather than mix Simplified glyphs into
Traditional prose.

Measured against the installed platform rather than transcribed. The running
console (@objectstack/console 17.2.0, served by `objectstack start`) was driven
in Chromium at several browser locales and its rendered text read back:

  navigator.language  documentElement.lang  Setup sidebar
  zh-Hant-TW          zh                    仪表盘 · 系统概览 · 用户 · 审计日志
  zh-TW               zh                    same (Simplified)
  zh-HK               zh                    same (Simplified)
  en-US               en                    Dashboards · System Overview · Users
  ja-JP               ja                    Japanese

A strict Simplified/Traditional character fingerprint over the rendered console
home returned 12 Simplified-only characters and 0 Traditional-only under
zh-Hant-TW. en-US and ja-JP are the negative control: the probe reads the locale
rather than returning a constant, and the same fingerprint does fire on
traditional-form glyphs when they are present (the ja-JP row). The mechanism
agrees — the console ships one Chinese bundle (locale keys en · zh · ja · ko ·
de · fr · es · pt · ru · ar, no zh-Hant, no zh-TW) and selects it by primary
subtag, so every zh-* tag lands on the single Simplified bundle.

The seven sites are three variants, not one string, so this is three surgeries
and not a find-and-replace: three mid-sentence asides with the full stop outside
the parenthesis, three standalone notes with it inside, and the glossary's short
form, which has no 因此 clause and needed its reason restored rather than merely
corrected. Each corrected parenthetical was read back in its own paragraph.

The 16 sites that already state the fallback correctly are untouched, including
revenue/approvals' three tables enumerating the Simplified strings — they were
right, and they are what made the contradiction provable.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
hotcrm Ignored Ignored Sep 3, 2026 11:06am UTC

Request Review

@os-sales
os-sales marked this pull request as ready for review September 3, 2026 11:10
@os-sales
os-sales added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 1efcaaa Sep 3, 2026
10 checks passed
os-sales added a commit that referenced this pull request Sep 3, 2026
…nctions (#1553)

#1368 corrected the REASON zh-Hant pages name platform navigation in English —
the console falls back to Simplified, so a Traditional page labels navigation in
English rather than ship mixed Simplified/Traditional script — and wrote it into
AGENTS.md:343-345. Reaching the reader took four PRs across two rounds (#1537,
#1546, #1549, #1554) and the sentence ended up corrected in nine places. Nothing
went red at any point, because nothing in CI reads prose.

The new guard pins the CLAIM, not the punctuation: a passage naming the
convention must state the sanctioned reason in the same passage, matched
wrap-insensitively over de-commented, emphasis-stripped text. The three measured
register variants — full stop inside the parens, outside it, and the short
glossary form that drops the trailing clause — all pass unchanged.

Replayed over the drift's real history it is red for the whole window and green
only from #1554: 7 red of 7 convention passages at 05f867e^, 7 of 8 at 30f2500,
1 of 9 at 18f523f^, 0 of 9 at 18f523f and today. The last red is the
navigation guard's own file header, the site that survived three days because
that file exempts itself from its own scan.

This file takes no exemption. It matches the assertion rather than the
vocabulary, so the deliberate negation #1546 wrote is read and passed on its
merits rather than skipped; and its retired-reason ledger is escaped the way
docs-object-term-consistency.test.ts escapes retired spellings, so the file
never literally spells the sentence it bans. The rule caught two violations in
this file itself on its first run, and both were rewritten rather than exempted.

The English markers are derived — the first test parses the AGENTS.md bullet and
asserts they are substrings of it, so the next correction to the rulebook goes
red here. The Chinese markers cannot be derived (AGENTS.md carries no
Traditional rendering) and are pinned constants citing it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Seven zh-Hant pages publish the reason #1368 retired as measured false — and six other pages in the same doc set tabulate its refutation

2 participants