Skip to content

docs(zh-Hant): name platform navigation in English on the last three pages - #1537

Merged
os-sales merged 1 commit into
mainfrom
claude/issue-1125-zh-hant-nav-denial-forms
Sep 3, 2026
Merged

os-sales merged 1 commit into
mainfrom
claude/issue-1125-zh-hant-nav-denial-forms

Conversation

@os-sales

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

Copy link
Copy Markdown
Collaborator

Fixes #1125

The three zh-Hant pages outside #1113's eight still spelled platform navigation in Traditional Chinese. Every one of those citations names a screen in order to say it does not exist, so the prose was already correct and no reader was sent to a wrong path — what was wrong is that the product's own vocabulary was spelled two ways across adjacent pages. reference/faq.zh-Hant.mdx denied Business Hours in Chinese three paragraphs after citing Setup → Audit Logs in English, while administration/setup.zh-Hant.mdx denies that same screen as 「不存在「Setup → Business Hours」這個畫面」.

The convention stands on its measured reason (#1368): the platform ships en / zh-CN / ja-JP / es-ES and no Traditional-Chinese pack, so a zh-Hant reader's console falls back to Simplified. A Traditional page labels platform navigation in English rather than mix Simplified glyphs into Traditional prose. It is not because the reader sees an English UI — that reason was measured false and is not relied on here.

What changed

Six substitutions across three pages. Every replacement label is taken verbatim from the page's English twin, not translated back.

page:line was now English twin
administration/state-machines.zh-Hant.mdx:120 「設定 → 物件 → 狀態 → 狀態機」這個設定面 「Setup → Object → Status → State Machine」這個頁面 state-machines.mdx:120
guides/import-and-export.zh-Hant.mdx:10 「設定 → 資料」 + the nine groups in Traditional + 設定 → 資料 → … 「Setup → Data」 + the nine groups in English + Setup → Data → … import-and-export.mdx:10
guides/import-and-export.zh-Hant.mdx:144 設定 → 資料 Setup → Data import-and-export.mdx:144
guides/import-and-export.zh-Hant.mdx:148 設定 → 隱私 → 資料主體請求 Setup → Privacy → Data Subject Requests import-and-export.mdx:148
reference/faq.zh-Hant.mdx:60 設定裡也沒有對應入口 Setup 裡也沒有對應入口 faq.mdx:60
reference/faq.zh-Hant.mdx:95 「設定 → 營業時間」 「Setup → Business Hours」 faq.mdx:95

The lead-in on state-machines.zh-Hant.mdx:120 became 「不是在 Setup 裡點幾下」, which is the phrasing already landed on administration/automation.zh-Hant.mdx:32, and the denial now ends 「這個頁面」 to match both the English ("page") and the landed shape on administration/setup.zh-Hant.mdx:95.

import-and-export.zh-Hant.mdx:10 was wrong in a second way and is the one worth reviewing closely. It listed the Setup app's nine navigation groups in Traditional as a roster the reader is told to check against their own sidebar — a sidebar that renders none of the nine that way. Note the sixth group: the Traditional text spelled it 設定, which reads as Setup but names the Configuration group. The roster now matches the English page and the landed one on administration/sandbox-and-releases.zh-Hant.mdx:10.

Declared beyond the card's five-line table

reference/faq.zh-Hant.mdx:60 is a sixth site the card's table does not list, found by the sweep the dispatch asked for. It names the Setup app in Chinese with no path form at all (「設定裡也沒有對應入口」), so it is not a denial-form miss — it is a shape the citation rule could never see, because that rule needs an arrow. Its English twin reads "no Setup entry for one". It is the same defect class, on a file this claim holds exclusively, and leaving it would have left the page inconsistent again after the pass.

No guard change

test/docs-setup-navigation-names.test.ts is untouched, deliberately. Its citation rule extracts a path only when the bold span opens with an app word, and these sentences open with the denial. Widening it to see denials would flag the sentences the last three PRs wrote on purpose.

Verification

pnpm verify green in full — validate, typecheck, lint, lint:i18n-gate, hygiene, hygiene:tokens, build, test — at 8d14865c:

✓ Validation passed (3334ms)
49 warning(s), 10 suggestion(s)          (lint, pre-existing)
✓ i18n lint gate: 0 `i18n/missing-*` issues
✓ source hygiene clean
✓ source token ratchet clean
✓ Build complete (1960ms)
Test Files 159 passed (159)
Tests 3344 passed | 1 skipped (3345)

The token ratchet cannot move on this diff — it measures src/**/*.ts only.

The guard was proved live on these files, not merely silent

A green guard over an unchanged shape proves nothing on its own, so the shape was ablated first. One denial on guides/import-and-export.zh-Hant.mdx was rewritten into the bold form the rule does parse:

mutation:  **不存在「設定 → 資料」選單。**   ->   **設定 → 資料**
blob hash: c6fe11ff… -> 8c2dd41a…      (mutation reached disk)
anchored:  removed-text 1 -> 0, injected-text 0 -> 1
guard:     exit 1 — "docs send readers to navigation entries that do not exist:
             content/docs/guides/import-and-export.zh-Hant.mdx: 'Setup → 資料'"
restore:   blob hash back to c6fe11ff… == HEAD blob, counts back to 1/0,
           `git diff HEAD` empty

So the guard does scan these pages and the miss is purely the shape of the bold span. Baseline before the edits: 18/18 passed. After: 18/18 passed, and zero (設定|工作室) followed by an arrow remain anywhere under content/docs/**/*.zh-Hant.mdx.

🤖 Generated with Claude Code

https://claude.ai/code/session_019hUuCQStzXGMFSX4dzww5t


Generated by Claude Code

…pages

The three zh-Hant pages outside #1113's eight still spelled Setup navigation in
Traditional Chinese. Every citation names a screen in order to deny it exists,
so the prose was correct and no reader was sent anywhere wrong — but the product
word was spelled two ways across adjacent pages.

The convention holds on its measured reason: the platform ships no
Traditional-Chinese pack, so the console falls back to Simplified, and a
Traditional page labels platform navigation in English rather than mix
Simplified glyphs into Traditional prose.

Six substitutions, each taking the label verbatim from the page's English twin:

  state-machines.zh-Hant.mdx:120  Setup -> Object -> Status -> State Machine
  import-and-export.zh-Hant.mdx:10   Setup -> Data, and the nine group roster
  import-and-export.zh-Hant.mdx:144  Setup -> Data
  import-and-export.zh-Hant.mdx:148  Setup -> Privacy -> Data Subject Requests
  faq.zh-Hant.mdx:60                 the Setup app named with no path form
  faq.zh-Hant.mdx:95                 Setup -> Business Hours

No guard change. These shapes are invisible to the citation rule by design;
widening it would flag the deliberate denials the last three PRs wrote.

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 10:33am UTC

Request Review

@os-sales
os-sales marked this pull request as ready for review September 3, 2026 10:39
@os-sales
os-sales added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 05f867e 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.

zh-Hant pages outside #1113's eight still spell platform navigation in Chinese — in denial forms the guard's regex cannot see

2 participants