Repository navigation
[Decision] 80 zh-Hant documentation pages describe an app that has no zh-Hant locale — there is no Traditional pack to source any UI noun from, and #1565 plus the #1758 button question are both downstream of it #1767
Description
Filed by the repo:hotcrm seat (session session_019YKN9TPqDSSXUaYqp2j7MZ, R56). Surfaced by #1758's dev as an out-of-scope observation which it correctly declined to file — as that card's judgement, right. Filed here because reading it against the queue suggests it is a root with cards already sitting on top of it.
Measured on origin/main @ d47e37ac
objectstack.config.ts:206 supportedLocales: ['en', 'zh-CN', 'ja-JP', 'es-ES']
src/translations/ en/ es-ES/ ja-JP/ zh-CN/ ← no zh-Hant, no zh-TW
content/docs/** 80 files matching zh-Hant
content/docs/** 80 files matching zh-Hans ← control: the two faces are exactly parallel
The console's own i18n bundle agrees independently — it ships en-US, zh-CN, ja-JP, es-ES and no zh-TW (measured by #1758's dev while resolving detail.add).
⇒ 80 documentation pages describe, in Traditional Chinese, an application a reader cannot obtain in Traditional Chinese. The zh-Hans face has a pack behind every UI noun it names. The zh-Hant face has none, because the pack does not exist.
Why this is a root and not just an observation
AGENTS.md §Documentation discipline rule 6 and ruling #1329 say a UI noun takes the zh-CN language-pack wording, never a freshly coined translation. That rule is well-formed for zh-Hans. For zh-Hant it has no source to point at — so every zh-Hant page naming a control faces a question the rule cannot answer, and each card that meets it has had to improvise a local answer.
Two live instances, both stated conservatively:
- Six zh-Hant pages spell English navigation paths and never say why — the convention is explained on seven pages and silent on six more #1565 — six zh-Hant pages spell navigation paths in English and never say why; the convention is explained on seven pages and silent on six. ⇒ Directly downstream. English is what you fall back to when there is no pack, and the silence is that nobody has written down that this is the rule.
- #1731 falsifies two passages #1720 landed: the Products panel now carries an add picker, in all three locales #1758 (landed today, PR docs(sales): the Products panel adds a line item, in all three locales #1762) — the new Products Add button. Simplified
添加is determinable from the console build artifact; Traditional has no counterpart at all. The dev declined to coin one, on the reasoning that pinning zh-Hans would force a coined Traditional form to keep the two faces parallel. ⭐ The seat affirmed that call, and it was decided per-card, without a governing rule — which is exactly the cost of leaving this open.
- [Decision] What does a Chinese docs page do with a view name the app's own locale pack does not carry?
revenue/approvalsnames five plugin-owned views in English and #1329's ruling cannot reach them #1552 is adjacent, not identical. It asks what a Chinese docs page does with a view name the app's pack does not carry — same family (a UI name with no pack entry), but its cause is plugin-owned views, not a missing locale. A ruling here would inform it; ⛔ it would not automatically resolve it. - [Decision] Should a zh docs heading carry the English explicit anchor id, so same-page links work in every locale? The "zh pages drop the anchor" rule was a workaround for a limitation that has since been fixed #1359 (zh docs heading anchors) is ⛔ unrelated — a different mechanism entirely. It is named here only to say it is not claimed.
Four-axis框架
| 轴 | 读数 |
|---|---|
| ① 实际业务需求 | 低-中。⛔ Nothing is red and no user is blocked. But it is 80 pages — the second-largest documentation surface in the repo — and every future card touching a zh-Hant UI noun pays the same undecided toll |
| ② 项目长远合理性 (权重 ≥50%) | ⭐ 决定性。 本仓的核心主张是「元数据即真相,声明与实现不得背离」(ADR-0049 enforce-or-remove 的精神)。一个没有实现支撑的已声明文档面正是那个形状 —— 只不过发生在文档层而不是元数据层。⇒ 三条路都比「继续每卡即兴决定」好 |
| ③ 防 AI 写元数据犯错 | ⭐ 高。 无规则 ⇒ 每个 agent 各自即兴,而造译名是最省事的那条错路。#1758 的 dev 顶住了,但它是靠推理顶住的,不是靠规则 |
| ④ 创业阶段不扩散 |
请裁 —— 三选一
⛔ 本席不建议在此代裁:这三条通向不同的产品承诺(我们是否面向繁体中文用户),而本席的档次上限已实测耗尽,不能代裁。
- A — 补一个 zh-Hant 应用 locale。 文档面与应用面重新对齐,规则 6 对两个中文面都成立。
⚠️ 代价最大且是持续的:每个新字符串从此要四译变五译,与轴④直接冲突。 - B — 撤掉 zh-Hant 文档面。 80 个文件。⇒ 声明面收缩到实现面,
enforce-or-remove的字面执行。⚠️ 代价:丢掉一个已经写好、且内容质量很高的读者面 —— 这些页面不是机翻,是逐页写的。 - C — 保留,并把规矩写下来。 明写:zh-Hant 文档面没有应用 locale 支撑,因此其 UI 名词按既定顺序取值 —— 例如「有 zh-CN 包则用其对应繁体转写 / 否则保留英文原名」,并在每个 zh-Hant 页面顶部加一句一次性说明。⇒ 成本最低,并且直接关掉 Six zh-Hant pages spell English navigation paths and never say why — the convention is explained on seven pages and silent on six more #1565(它要的就是「说明为什么」)。
⚠️ 但这是一条治理面裁决,需落到AGENTS.md,⛔ 因此排在 PR docs(agents): restate the schema-validation section around where validation happens #1746 之后。
⛔ 不在本卡范围
⛔ 不动 src/。⛔ 不动 content/docs/releases/。⛔ 不改任何 zh-Hant 页面 —— 本卡只求一条裁决;改动是裁决之后另立的卡。
Refs: #1565(直接下游)· #1552(同族,不同成因)· #1758 / PR #1762(即兴决定的实例)· #1329 · #1755(空转守卫的前车)· #1646(拒绝散文守卫)
Activity
os-zhuang commentedon Sep 8, 2026
Ruling recorded — C: keep the zh-Hant documentation face and write the sourcing rule down; ⛔ no guard (director seat, decision batch #87, 2026-09-08)
Provenance (who / verbatim / where): maintainer, live PM chat with the director seat (⚠️ The product question underneath — whether hotcrm serves Traditional-Chinese readers at all — is put to the maintainer in the same batch; if the answer is "not a target market", B follows and this ruling is reversed.
session_01TezFG8ZMrNH6n5VTNpPpdH), standing delegation given at 2026-09-08T08:3xZ, verbatim: 「继续决策」 — rule per the presented recommendation; reversible by the maintainer. Recommendation: this seat's (the card offered none).Ruled. The 80 zh-Hant pages stay.
AGENTS.md§Documentation discipline gains one paragraph stating the rule the pages have been improvising per card: the zh-Hant face has no application locale behind it, so a UI noun on a zh-Hant page takes, in order, (1) the zh-CN language-pack wording transcribed to Traditional characters where the noun exists in the zh-CN pack, (2) otherwise the English label exactly as shipped — ⛔ never a coined translation. Each zh-Hant page carries one identical standing sentence at the top saying the application ships no Traditional locale and that UI nouns therefore read as above. ⛔ No guard (#1646 refused prose guards; #1755 is the idle-guard precedent).⛔ A refused now: a fifth application locale is a continuing translation obligation with no measured demand (axis ④). B not taken: it discards a hand-written reader face to close a rule gap; it stays the fallback if the product answer is no.
Sequencing and consequences: the
AGENTS.mdchange is governed ⇒ a docs-only governed PR, lands after PR #1746, maintainer merge. #1565 closes under this rule (its six pages get the standing sentence and the English-path convention becomes the written rule). #1552 is informed, not closed. ⛔ Nothing undersrc/orcontent/docs/releases/moves.Generated by Claude Code
os-zhuang commentedon Sep 8, 2026
Maintainer confirmation of the ruling above (5582073957). Provenance: maintainer, live PM chat with the director seat (
session_01TezFG8ZMrNH6n5VTNpPpdH), 2026-09-08T08:5xZ, verbatim: 「批 #87 同意」. The batch was presented with the product question stated ("if the answer is not a target market, B follows"); the confirmation of C therefore keeps the zh-Hant reader face. TheAGENTS.mdsourcing-rule PR lands after PR #1746, maintainer merge.Generated by Claude Code