Repository navigation
fix(i18n): zh-CN renders case Critical as 严重, task Urgent keeps 紧急 - #1801
Merged
Merged
Conversation
`crm_case.priority.critical` and `crm_task.priority.urgent` both rendered 紧急 in zh-CN — the only locale of four that collapsed two values the model treats as distinct. en/es-ES/ja-JP all keep them apart, and ja-JP did so deliberately (重大 / 緊急). Per the maintainer ruling of 2026-08-31 (#1342, 决裁批 #19 ⑤): - `crm_case.priority.options.critical` renders 严重; - `crm_task.priority.options.urgent` keeps 紧急, unchanged; - the Customer Service dashboard's Critical Cases tile follows the value (紧急工单 → 严重工单), and its description with it, the way ja-JP words both halves; - both option lists carry a comment saying why the two words must differ. The Chinese docs prose that calls a CASE 紧急/緊急 sweeps with the pack — 7 pages, 9 sites per script face. Every occurrence was graded by the object its sentence is about, never by the word: task-side prose keeps 紧急, and the generic phrase 紧急程度 ("priority level") is not the value word and does not move. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PpRjGNnwyo2J1rrmekxB1W
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This was referenced Sep 8, 2026
huangyiirene
marked this pull request as ready for review
September 8, 2026 15:13
os-project-manager
pushed a commit
that referenced
this pull request
Sep 11, 2026
…e faces PR #1801 moved crm_case.priority.critical from 紧急 to 严重 and swept the docs prose describing a case as 紧急, but deliberately left the name of the named thing alone. The automation row the English pages call "Notify on Critical" was still 紧急时通知 / 緊急時通知, naming a notification after the word the packs now reserve for crm_task.priority.urgent. Align the row name to the rendered trigger: 严重时通知 / 嚴重時通知. This is the rule the sibling row 升级时通知 already follows — the Chinese row names are <rendered trigger>时通知 — so it keeps the pattern true rather than coining a term. 8 sites across 3 pages x 2 script faces. The English pages, the 升级时通知 sibling, every task-urgent 紧急, and the generic 紧急程度 are all untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0132iDHq4FLW2zS9VPXqbf9f
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #1342
Fixes, and the dispatch asked forFixes. The ruling on #1342 has four items. Items 1–3 are here. Item 4 — the pins — is NOT, because it cannot be written without editingtest/**, which is fenced (epic #1579). Auto-closing the card on merge would retire a ruling with a quarter of it undone and nothing tracking the remainder. Flip this line toFixes #1342the moment item 4 is filed as its own card, or unfencetest/**and item 4 lands here. Details in The item that is missing below.Ruling being executed
A, maintainer 2026-08-31 (hotcrm 决裁批 #19 ⑤, comment 5481124881, verbatim 「其他同意」). Not re-opened, not re-litigated:
crm_case.priority.criticalrenders 严重,crm_task.priority.urgentkeeps 紧急.Every occurrence, graded by its referent
The word is not the discriminator — the object the sentence is about is. A find-and-replace on 紧急 corrupts the task documentation, so each hit below was read for what it refers to. Counts are
grep -ooccurrences unless a row says lines.The language pack (
src/translations/zh-CN/)objects.service.ts:62critical: '紧急'priority.criticalobjects.activity.ts:55urgent: '紧急'priority.urgentapp.ts:170title'紧急工单'app.ts:170description'标记为紧急优先级的未关闭工单'app.ts:174description'…按紧急程度的分布'app.ts:466priority_rank: { label: '紧急度' }The
app.ts:170description was called out on the card as undecided (「item 2 names the title; whoever executes should say whether the description travels with it」). It travels. It names the value, not the phrase, so leaving it would describe a priority the console no longer shows — and ja-JP, which already made this split deliberately, words both halves with the value:title: '重大ケース',description: '優先度「重大」のオープンケース'.The Chinese documentation
Changed — the sentence is about a CASE (9 sites per script face, 18 total):
administration/profiles.*:53administration/profiles.*:129administration/sharing-and-security.*:95service_manager—— 未关闭的紧急工单administration/sharing-and-security.*:125service/sla-and-escalation.*:69service/sla-and-escalation.*:125service/cases.*:163ai-copilot/skills.*:90crm_case, and the list IS the case vocabularyai-copilot/service-copilot.*:38The last two are worth a note: 低/中/高/紧急 is the case option list spelled out, so it now reads 低/中/高/严重 and matches the pack character for character (AGENTS.md, Documentation discipline rule 6 — UI nouns take the pack's wording).
⛔ Kept — the sentence is about a TASK:
sales/activities.*:39 :41 :82 :104 :110 :131 (all 任务/任務) ·administration/automation.*:67紧急任务提醒 ·administration/automation.*:73紧急跟进任务 ·service/cases.*:118:135 优先级为紧急…的跟进任务 ·service/index.*:38same follow-up task ·service/sla-and-escalation.*:106紧急任务 ·service/sla-and-escalation.*:117紧急跟进任务.⛔ Kept — 紧急程度 is "priority level", not the value word:
service/cases.*:181先按紧急程度 ·analytics/dashboards.*:109未结工单按紧急程度的构成.⛔ Kept and REPORTED, not guessed — the notification-name class:
service/cases.*:117·service/index.*:37·service/sla-and-escalation.*:116and:168— 紧急时通知 / 緊急時通知, the Chinese name of the row the English pages call Notify on Critical. Its trigger is case-Critical, and the very same row writes that trigger in English (優先順序設為 Critical). The dispatch classes this as report-do-not-guess and it is left alone.Untouched by rule:
CHANGELOG.md(6 matching lines bygrep -c, 8 occurrences bygrep -o— published history, andchangeset versionowns that file) anddocs/feature-inventory.md(:146 供队列按紧急度排序, generic; :211 紧急任务告警, task-side).Counts
content/docs紧急content/docs緊急content/docs严重content/docs嚴重src/紧急 as a value严重 = 0 and 嚴重 = 0 across
src/ content/ docs/ test/before this PR, re-measured atd21367a0. It is new vocabulary and the ruling is its only authority.The two comments (ruling item 3)
Both option lists now carry one, written as why the two words must differ rather than what they are, per the card's own argument and
src/views/task.view.ts's live tombstone.objects.service.tsstates that 紧急 belongs to the task and names the ruling;objects.activity.tsstates that 紧急 stays and ⛔ must not be re-pointed at the case's top value. Both name the two vocabularies (low/medium/high/criticalagainstlow/normal/high/urgent) and the ruling's date and card.The item that is missing, and why
Ruling item 4, verbatim:
That is a guard, not a statement about locale consistency — 「入守卫,防回归」. No such guard exists today, measured: nothing under
test/asserts non-collapse, and紧急appears on exactly one line in the whole oftest/(automation-docs-coverage.test.ts:233,task_urgent_alert, task-side, untouched). Writing item 4 means editingtest/**, which the dispatch fences behind epic #1579 with instructions to stop and report rather than cross. So it is reported, not crossed.Two findings for whoever picks it up:
test/docs-object-term-consistency.test.tsalready derives a Chinese term from the pack and bans retired spellings — but itsretiredscan runs over every zh page, the pack itself and every ledger undertest/. Adding 紧急 tocrm_case's retired list would go red on the pack (crm_task.priority.urgentis still 紧急, legitimately), on the twelve task-side doc sites above, and onautomation-docs-coverage.test.ts. This card's rule — the same word must die on one object and live on the other — is not expressible in that guard as built.Verification
Every exit code captured before any pipe (
cmd > log 2>&1; EXIT=$?).pnpm validatepnpm typecheckpnpm lintpnpm lint:i18n-gate✓ i18n lint gate: 0 i18n/missing-* issues (13 total lint issue(s) reported, unaffected by this gate)— a value was replaced, no key removedpnpm hygiene✓ source hygiene clean,✓ no raw control bytes in first-party filespnpm hygiene:tokens✓ source token ratchet cleanpnpm builddist/objectstack.json1910.7 KBpnpm testd21367a0baselineToken ratchet, per touched path. Every
src/file here is undersrc/translations/, and the gate prints its own exclusion:outside the ratchet by ruling (src/translations, src/data): 45 files.src/dashboards/andsrc/views/are in surface and are not touched by this PR. The measure is also comment-stripped, so the two new comments could not move it either way. Residual: none.The change reaches the shipped artifact, not just the source — from
dist/objectstack.json:Ablation — no guard forces the docs half.
content/docs/administration/profiles.zh-Hans.mdxwas mutated back to 紧急工单 (2 sites) with the pack left saying 严重; the mutation was proved on disk by blob hash (076a7830…against HEAD's830622ef…) before the run, and restored bygit checkout HEAD -- pathafterwards withgit diff HEADempty. The full suite stayed green: 165 files, 3453 passed — byte-identical to the unmutated run. Nothing in this repo compares that prose against the pack, becausecrm_case'spinsintest/docs-object-term-consistency.test.tsis{}and the priority option is not among them. The docs sweep here is owed to the ruling and to Documentation discipline rule 6 — not to a gate. That gap is exactly what ruling item 4 was written to close, and it is still open.Changeset
.changeset/case-critical-renders-yanzhong.md, patch. This ships: it is Chinese UI copy every user sees on every case, soskip-changesetwould be wrong here.🤖 Generated with Claude Code
https://claude.ai/code/session_01PpRjGNnwyo2J1rrmekxB1W