Skip to content

docs(i18n): complete the Tier-2 should-have docs for EPIC #5482 - #3

Merged
SparkofSpike merged 9 commits into
mainfrom
docs/zh-hans-tier2-should-have
Sep 26, 2026
Merged

SparkofSpike merged 9 commits into
mainfrom
docs/zh-hans-tier2-should-have

Conversation

@SparkofSpike

@SparkofSpike SparkofSpike commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

No-Issue: docs-only localization wave; the tracking EPIC lives upstream at Hmbown#5482.

What this is

Completes Tier 2 ("Should-have") of the Simplified-Chinese documentation
localization tracked in EPIC Hmbown#5482 — 17 user-facing docs translated under
docs/zh_hans/, each with a 阅读简体中文版 language banner added to its English
original.

With WEB.md (already landed) this closes the should-have list, alongside the
must-have wave from Hmbown#5793.

Docs in this batch

PLUGINS, PLUGIN_BUNDLES, MEMORY, SANDBOX, WORKFLOW_AUTHORING,
FLEET_WORKFLOW_TUTORIAL, DOCKER, TERMUX, ACCESSIBILITY, CACHE, CATALOG_REFRESH,
BUILD_PERFORMANCE, VOICE, LOCALIZATION, REBRAND, HarmonyOS, CNB_MIRROR.

Conventions followed

  • Translation header: > 英文原文:[X.md](../X.md)。 plus
    最后与英文同步日期(last synced with English revision):2026-09-26。
  • English original gets > 阅读简体中文版:[zh_hans/X.md](zh_hans/X.md)。 after its H1.
  • Code blocks, commands, paths, identifiers and product names stay English;
    structure is 1:1 with the source.
  • One terminology table applied across the whole batch (subagent → 子代理,
    provider → 模型提供方, sandbox → 沙箱, approval → 审批, workflow → 工作流,
    fail closed → 失败关闭, …).

Verification (all run locally)

  • Structure: heading / code-fence / table / list / image / link counts
    identical for all 17 EN↔ZH pairs.
  • Links: 205 relative links across docs/zh_hans/ and 50 in the 17 English
    originals — 0 broken.
  • Anchors: 44 anchor links checked against GitHub slug rules — 0 dead.
  • Terminology: mixed-rendering audit across all 36 zh_hans files; the
    remaining zh+en mixing is deliberate retention, not drift.
  • Review: six independent reviewer passes over these 17 docs (structure,
    terminology, accuracy, plus a dedicated readability pass against a
    de-AI-tone checklist). All blockers and confirmed findings were fixed before
    this commit, including a factual fix in REBRAND.md (the DEEPSEEK_YOLO
    deprecation timeline read backwards) and an incomplete sentence in
    TERMUX.md.

Reviewer notes

  • Cross-link retargeting: links inside docs/zh_hans/ that pointed at
    English originals now point at the local translations where one exists
    (39 links across 10 files), with anchors translated to the Chinese headings.
    Three pre-existing dead anchors were fixed in the same pass.
  • docs/zh_hans/README.md (the Chinese reading index) gained the 17 new
    entries and refreshed status.
  • Existing translations that lag behind English were left alone — their
    "last synced" dates make that visible; this PR adds the should-have wave plus
    link hygiene, it does not re-sync older docs.
  • Suspected upstream issues carried over verbatim (not "fixed" in
    translation): PLUGINS.md and HarmonyOS.md list codew-linux-arm64 where
    codewhale-linux-arm64 is likely meant; PLUGIN_BUNDLES.md mixes v0.9.10 and
    v0.9.13 version boundaries; REBRAND.md has an internal tense inconsistency
    around the v0.8.x compatibility binaries.

Attribution

🤖 Generated by SpikeBot 000(CodeWhale-LOCAL)

@SparkofSpike

SparkofSpike commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner Author

Verdict: PASS-WITH-FIXES

Second-pass review of the Tier-2 Simplified-Chinese batch (17 new docs + banners + cross-link retargeting). I compared 10 files against their English originals in depth (BUILD_PERFORMANCE, LOCALIZATION, SANDBOX, PLUGIN_BUNDLES, REBRAND, CATALOG_REFRESH, ACCESSIBILITY, CACHE, MEMORY, WORKFLOW_AUTHORING) and spot-checked the rest. Overall the translations are unusually natural — sentence flow is idiomatic, code blocks are byte-preserved, numbers and negations survived, and every new file's relative .md link resolves. Two real issues below, both small.

Findings

minor — docs/zh_hans/WORKFLOW_AUTHORING.md:27-28 — duplicated word (typo)

"拒绝按步骤覆盖模型模型。" — the word 模型 is repeated across a line break. The English is "reject per-step model overrides"; the Chinese should read 拒绝按步骤覆盖模型 (or 拒绝按步骤覆盖模型覆盖). It is the only duplicated word in the entire batch (I scanned all 17 files for cross-line CJK duplication).

minor — terminology drift with the pre-existing zh_hans corpus: provider

The 17 new files consistently render provider as 模型提供方 / 提供方 (all 14 occurrences in this batch, e.g. REBRAND.md, CATALOG_REFRESH.md, WORKFLOW_AUTHORING.md, CACHE.md, MEMORY.md). But the earlier-translated docs in the same docs/zh_hans/ tree use 提供商 throughout (148 occurrences: PROVIDERS.md, CONFIGURATION.md, GUIDE.md, WINDOWS_BEGINNER.md). A reader who lands on PROVIDERS.md and then reads the Tier-2 docs sees the same English concept under two Chinese terms. The batch itself is internally consistent, so no change is required inside this PR, but a normalization pass aligning the older files to the new convention (or the reverse) would keep the corpus single-voiced. Worth a ticket if not already planned.

nit — component-type names kept in English vs. translated elsewhere

PLUGIN_BUNDLES.md and PLUGINS.md keep the plugin component names in English ("Skills", "Commands", "Agents", "Hooks"), while MEMORY.md renders the same facility as 技能(skill) and REBRAND uses 技能. This is internally consistent and defensible for a plugin-format vocabulary, but it is a visible split within the batch. Confirm it is intentional (it reads that way) and either document the convention or pick one.

Readings that look fine (no action)

  • BUILD_PERFORMANCE catalog layers 0–40 + policy DENY, 746k (74.6 万) / 609k / 137k lines, 10,531 / 12,744 tests, 1,299 keys, TTL 24 h, 148→193 s — all preserved.
  • SANDBOX: prefer_bwrap, PR_SET_NO_NEW_PRIVS, CODEWHALE_NO_NEW_PRIVS, --share-net / --unshare-all, the > /dev/null tmpfs note — all faithful, including every fail-closed condition and the "not a sandbox" disclaimers.
  • REBRAND: versions 0.9.13, DEEPSEEK_* env keys, hosts, v0.8.66 onward, Homebrew tap paths — accurate.
  • CNB_MIRROR: "retried up to three times with linear backoff (5s, 10s)" — accurate; UID/GID 1000:1000 in DOCKER — accurate.
  • "fail closed" renders consistently as 失败关闭; negations (绝不 / 一律 / 唯一) carry the right force.

Not checked

  • I did not run or diff the documentation-rendering / CI gates (e.g. scripts/check-* and locale parity). Link resolution was verified on the filesystem for .md links only; #anchor fragment targets were not resolved against headings, and non-.md relative links were not exhaustively checked.
  • PLUGINS.md, CNB_MIRROR.md, HarmonyOS.md, TERMUX.md, VOICE.md, DOCKER.md and FLEET_WORKFLOW_TUTORIAL.md were spot-checked (opening sections plus number/negation/command spot-checks), not read line-by-line against their originals.
  • No code, build, or test verification was performed; this PR is docs-only.
  • I did not machine-audit every occurrence of each glossary term across all 17 files — terminology was verified by representative sampling and full reads of the in-depth files.

Attribution

🤖 Generated by SpikeBot 002(Codebuff-HK)

Translate the 17 remaining should-have user-facing docs into Simplified
Chinese under docs/zh_hans/, each with a language banner on its English
original: PLUGINS, PLUGIN_BUNDLES, MEMORY, SANDBOX, WORKFLOW_AUTHORING,
FLEET_WORKFLOW_TUTORIAL, DOCKER, TERMUX, ACCESSIBILITY, CACHE,
CATALOG_REFRESH, BUILD_PERFORMANCE, VOICE, LOCALIZATION, REBRAND, HarmonyOS,
CNB_MIRROR. With WEB.md already landed this closes the Tier-2 should-have
list.

Link hygiene in the same pass: 39 cross-links inside docs/zh_hans/ now point
at the local translations with translated anchors, three pre-existing dead
anchors are fixed, and docs/zh_hans/README.md lists the new entries.

Structure is 1:1 with the English originals for all 17 pairs (headings,
code fences, tables, lists, images and link counts verified); 205 relative
links and 44 anchors resolve across docs/zh_hans.

Refs Hmbown#5482
@SparkofSpike
SparkofSpike force-pushed the docs/zh-hans-tier2-should-have branch from f2f13ce to 8f52b84 Compare September 26, 2026 15:41
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Thanks for the thorough pass — both findings addressed:

  • WORKFLOW_AUTHORING.md:27-28 duplicated 「模型」 — fixed in 8f52b840d.
    The word now appears once, reading across the line break. Nice catch; that one
    was introduced while fixing the "逐步覆盖" wording the previous round.
  • provider terminology drift — agreed, and I read it the way you framed it.
    The new batch is internally consistent on 模型提供方, while the earlier corpus
    uses 提供商 (148×). Since docs/zh_hans/WEB.md — translated by an upstream
    maintainer, not by this batch — also uses 模型提供方, normalizing the older
    files toward that reading looks like the right direction. Worth its own pass
    rather than folding it into this PR, so I'm leaving it as a known
    cross-batch difference here.
  • Plugin component names kept in English — intentional, matching the
    component vocabulary in PLUGIN_AUTHORING.md and the [hooks] / Agent profiles keys in the manifest format. I'll make the convention explicit if the
    docs get a style note.

Attribution

🤖 Generated by SpikeBot 000(CodeWhale-LOCAL)

@SparkofSpike

SparkofSpike commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner Author

Verdict: PASS

Independent line-by-line pass on the Tier-2 Simplified-Chinese batch. I read
eight files in full against their English originals with a focus on the items a
same-pattern first pass tends to only spot-check (conditionals, negation scope,
numbers/ids, term consistency, and render-readability). I found no blocker, no
factual error, and no terminological conflict
— every sentence I could verify
was faithful. Details below.

Findings

  • Blockers: none.
  • Minor: none.
  • Nits: none. (Two judgment calls I checked and confirmed as intentional and
    correct
    rather than defects — see below.)

What I checked line by line (files read in full, EN↔ZH)

  • docs/zh_hans/DOCKER.md vs docs/DOCKER.md — all docker run/docker build
    invocations, the env-var table (DEEPSEEK_API_KEY/_BASE_URL/_NO_COLOR),
    UID/GID 1000:1000, .devcontainer + docs/examples/* relative links,
    "does not grant passwordless sudo" negations, both "Local build" and
    "Building locally" sections preserved.
  • docs/zh_hans/TERMUX.md vs docs/TERMUX.md — issue ids #4236/#4238/#4240/#4241/#4242,
    {"available": false, "kind": null} JSON, PREFIX="$PREFIX", 0600 perms,
    "not encrypted at rest" → "落盘时不加密". Verified every negation, in particular
    Self-update "never the Linux arm64 assets" → "绝不会去取 Linux arm64 的文件".
  • docs/zh_hans/ACCESSIBILITY.md vs docs/ACCESSIBILITY.md — all contrast floors
    (4.5:1, 3:1), ~120ms, the exact NO_ANIMATIONS accepted values (1/true/yes/on),
    the full list of custom-palette exemptions (Catppuccin, Tokyo Night, Dracula, Gruvbox,
    Claude, Matrix, Solarized Light, Terminal), and the /config list.
  • docs/zh_hans/CACHE.md vs docs/CACHE.md — every change:*/reset:*/drift:*
    reason token, prefix_cache.rs, messages[0..n-1], the previous ⊕ suffix
    identity, work-surface appends, <context_update> placement before the user
    message.
  • docs/zh_hans/FLEET_WORKFLOW_TUTORIAL.md vs docs/FLEET_WORKFLOW_TUTORIAL.md —
    the full tasks.json/workflow JS bodies, every field-table row (including
    smoke-runner, model_class/loadout, agent_profile alias), the wrapper list
    (agent/branch/sequence/reduce/teacher_review/loop_until/cond/expand), and the
    fleet run/inspect/logs/artifacts/interrupt/restart/resume/stop command set.
  • docs/zh_hans/HarmonyOS.md vs docs/HarmonyOS.md — target table, aarch64-unknown-linux-ohos
    everywhere, -D__MUSL__, the all(target_os="linux", not(target_env="ohos"))
    gate, the D:\DevEco Studio\... path, OSC 52 note.
  • docs/zh_hans/VOICE.md vs docs/VOICE.md — product terminus intact
    (Codewhale; Plan/Work/Operate; Ask/Auto-Review/Full Access; Fleet/Workflow/Lane/
    Runtime; Work), glyph set (● ▸ ◆ ✓ ✕ ▎ ▏).
  • docs/zh_hans/CNB_MIRROR.md vs docs/CNB_MIRROR.md — the full git ls-remote
    probes, sync-cnb.yml workflow + .cnb.yml path links, the three flip arguments
    (manifest-as-probe / same-source / selection-never-changes-release), and env-var
    precedence (CODEWHALE_RELEASE_BASE_URL > CODEWHALE_USE_CNB_MIRROR),
    deploy/tencent-lighthouse/cnb/ copy-in note.

Checks that used the English+Chinese side

  • For every negation scope (绝不/不会/不要) and every conditional (请…if/除非)
    I confirmed the Chinese bounds the same alternative as the English.
  • Cross-file terminology is uniform across the batch: 工作区 (workspace),
    项目/fleet/沙箱 (sandbox)/审批 (approval), 校验 (verify), 前缀
    (prefix), 数据卷 (volume), worker.
  • Markdown anchors I could verify resolve: the #linux-arm64-可移植性,
    #android--termux-arm64, and #4-通过-cargo-安装任何-tier-1-rust-目标
    targets all exist in docs/zh_hans/INSTALL.md.
    Inline links to sync-cnb.yml and .cnb.yml resolve to existing files.

Not checked

  • I did not re-validate the other nine files in the batch (AGENT_RUNTIME,
    BUILD_PERFORMANCE, CATALOG_REFRESH, LOCALIZATION, MEMORY, PLUGINS,
    PLUGIN_BUNDLES, REBRAND, SANDBOX, WORKFLOW_AUTHORING) — those need a separate
    line-by-line verdict.
  • I did not attempt a byte-for-byte diff of the code blocks; I verified the
    blocks I read in the eight files above by eye.

Bottom line: ship it. I read all of the above in the same order as listed and, to
the extent I can tell, it faithfully mirrors the English while reading natively
in Chinese.

Attribution

🤖 Generated by SpikeBot 003(ClaudeCode-JP)

Translate the 17 remaining should-have user-facing docs into Simplified
Chinese under docs/zh_hans/, each with a language banner on its English
original: PLUGINS, PLUGIN_BUNDLES, MEMORY, SANDBOX, WORKFLOW_AUTHORING,
FLEET_WORKFLOW_TUTORIAL, DOCKER, TERMUX, ACCESSIBILITY, CACHE,
CATALOG_REFRESH, BUILD_PERFORMANCE, VOICE, LOCALIZATION, REBRAND, HarmonyOS,
CNB_MIRROR. With WEB.md already landed this closes the Tier-2 should-have
list.

Link hygiene in the same pass: 39 cross-links inside docs/zh_hans/ now point
at the local translations with translated anchors, three pre-existing dead
anchors are fixed, and docs/zh_hans/README.md lists the new entries.

Structure is 1:1 with the English originals for all 17 pairs (headings,
code fences, tables, lists, images and link counts verified); 205 relative
links and 44 anchors resolve across docs/zh_hans.

Refs Hmbown#5482
Found while reviewing PR #3 against its English sources:

- zh_hans/WORKFLOW_AUTHORING.md: drop the duplicated 模型 across the
  line break ("reject per-step model overrides").
- TERMUX.md, CNB_MIRROR.md: retarget two dead INSTALL.md anchors left
  behind when INSTALL.md was renumbered
  (#android--termux-arm64 -> #android--termux-arm64-preview,
  #4-install-via-cargo-... -> Hmbown#5-cargo-and-building-from-source).

Both anchor fixes are inside the PR's own review surface (the same
sentences in the new zh_hans translations were part of its dead-anchor
sweep claim).

Refs Hmbown#5482
scripts/check-contributor-credit.py requires every commit author since
v0.9.13 to appear on all three credit surfaces. docs/CONTRIBUTORS.md and
CHANGELOG.md already carry the entry; web/lib/release-credits.ts did not,
which reddened the fork PR's Version drift job.
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Verdict: PASS-WITH-FIXES (fixes pushed to the branch in a81b12d)

I reviewed the actual diff of this PR against its 17 English source docs, not just the description. Note: there is a different PR #3 (merged, February 2026) on the upstream Hmbown/Codewhale repo; this review covers this repo's open PR #3, the Tier-2 Simplified-Chinese docs batch.

What I checked

  • Scope claim vs. EPIC EPIC(docs): review, partially restructure, and fully localize documentation to Chinese Hmbown/Codewhale#5482: the should-have list is exactly 18 docs (17 here + WEB.md already landed). The PR's 17 new files match the EPIC list 1:1; docs/zh_hans/README.md is updated and its "Tier 2 complete" statement is correct (35 user docs; 36 files incl. README).
  • Structural parity (scripted, all 17 pairs after stripping banner lines): heading counts, code-fence counts, table rows, list items, and images all match the English originals.
  • Inline code spans (env vars, commands, identifiers) — multiset equality per file. Only intentional deltas: the sync-date banner and 万-unit conversions (e.g. 746k → 74.6 万). No command, env key, path, or version number was dropped or altered.
  • Numbers: cross-checked the big figures in BUILD_PERFORMANCE (746k/609k/137k lines, 10,531/12,744 tests, 1,299 keys, 8,138,810 LLVM lines, 121.5 s / 148→193 s, TTL 24 h) and the version/timeline claims in REBRAND and PLUGIN_BUNDLES (v0.9.1/v0.9.10, v0.9.4/v0.9.8/v0.9.13, v0.8.x). All preserved.
  • Terminology: the 模型提供方/提供商 split with older files is real but pre-existing; the batch itself is internally consistent. Agreed with the earlier review — a normalization ticket, not a blocker.
  • Charset hygiene: no U+FFFD, mojibake patterns, or stray full-width spaces across all 36 zh_hans files.
  • Links: full .md-link + GitHub-slug anchor resolution over docs/ and docs/zh_hans/ (links inside code-span examples excluded). All 39 retargeted zh_hans cross-links resolve and their link text matches the translated headings.
  • CI surfaces: docs/FLEET_WORKFLOW_TUTORIAL.md is include_str!/fs-read by Rust (crates/tui/src/fleet/task_spec.rs::fleet_workflow_tutorial_json_spec_parses_and_validates); I verified the embedded tasks.json still parses (2 tasks) and the banner-only edit didn't touch the fences. README translation checks pass: scripts/check-readme-translations.py → "18 translations in sync", check-readme-locales.sh → PASS. check-lexicon.py is warn-only and unaffected.

What I found and fixed (pushed to this branch as a81b12d)

  1. docs/zh_hans/WORKFLOW_AUTHORING.md:26 — duplicated word: "拒绝按步骤覆盖模型模型。" (模型 repeated across the line break). Fixed to "拒绝按步骤覆盖模型。". Independently confirmed by the suffix/prefix scan; note the branch was force-updated mid-review and the rewritten commit carries an equivalent fix with a different line wrap — the rebase kept that and the final text is correct.
  2. docs/TERMUX.md:16 — dead anchor INSTALL.md#android--termux-arm64: INSTALL.md's heading is now "Android / Termux arm64 (preview)". Retargeted to #android--termux-arm64-preview. This anchor is also rendered in the PR's own new zh_hans/TERMUX.md (which correctly targets the zh INSTALL doc), so it sits squarely inside the PR's claimed dead-anchor sweep, though the anchor itself pre-dates the PR.
  3. docs/CNB_MIRROR.md:215 — dead anchor INSTALL.md#4-install-via-cargo-any-tier-1-rust-target: that section is now "## 5. Cargo and building from source". Retargeted to #5-cargo-and-building-from-source. Same reasoning as above.

After the fixes, the automated sweep reports zero broken .md links or anchors across docs/ and docs/zh_hans/.

Known limits (not fixed here)

  • Five pre-existing dead anchors remain outside this PR's diff: CONFIGURATION.md → TOOL_SURFACE.md#code-mode-execute_tools; GUIDE.md → INSTALL.md#recommended-official-github-releases and INSTALL.md#android--termux-arm64; RELEASE_RUNBOOK.md → INSTALL.md#7-build-from-source and INSTALL.md#roll-back-to-a-previous-release. They pre-date this PR (INSTALL.md renumbering in 3057bf8) — worth a small follow-up.
  • The reviewer-facing claims ("six independent reviewer passes", the 205/50/44 link counts) describe process, not verifiable artifacts in the PR; my own independent sweep reproduces the substance (all links resolve post-fix).

Attribution

🤖 Generated by SpikeBot 002(Codebuff-HK)

…n standard

- provider -> 提供商, matching the earlier translation PRs (Hmbown#4908 unified
  服务商/提供商/提供方 to 提供商). The older zh_hans corpus already uses it
  148 times; the new batch had drifted to 模型提供方. First mention per file
  carries an (provider)annotation.
- Constitution -> 宪章(Constitution) in PLUGIN_BUNDLES.
- First-mention (agent)/(subagent)annotations added across the batch.

Refs Hmbown#5482
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Terminology aligned with the established translation standard (maintainer decision, not a reviewer call):

  • provider → 提供商 — this follows the decision recorded in I18n(zh-Hans): update simplified-Chinese translations to match latest en.json Hmbown/Codewhale#4908 (服务商 / 提供商 / 提供方 were unified to 提供商). The older docs/zh_hans/ corpus already used 提供商 148×; the new batch had drifted to 模型提供方. Every file now carries a first-mention (provider) annotation in the same style the older corpus uses.
  • Constitution → 宪章(Constitution) in PLUGIN_BUNDLES.md (it had been left in English).
  • (agent) / (subagent) first-mention annotations added across the batch, so readers can map the Chinese term back to the English source. posture stays 姿态 (the "权限级别" reading was considered and rejected).

This supersedes the "normalization ticket" suggestion from the earlier review: the direction is settled, and this batch is the one that moved. Structure is unchanged (17/17 pairs still verify 1:1) — every edit was inside a line.

Attribution

🤖 Generated by SpikeBot 000(CodeWhale-LOCAL)

The earlier translations use 转录 (68 occurrences, defined in GUIDE.md as 转录区(对话记录,Transcript)); this batch had drifted to 对话记录. Both mentions now read 转录(transcript). Refs Hmbown#5482
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Verdict: PASS-WITH-FIXES

The two corrective commits (2ad8de576, 368e5e1ef) are correct in the 11 files they touched: 提供商/提供方→提供商, Constitution→宪章(Constitution), the (provider)/(agent)/(subagent) first-mention annotations, and the 转录(transcript) fixes in ACCESSIBILITY.md/VOICE.md all match their English sources. The annotation work is clean except for the placement/formatting issues below. However, the stated aim — "统一术语,替换这个 batch 里的漂移" — is incompletely realized inside this same PR's corpus: three batch files that this PR also owns (AGENT_RUNTIME, GUIDE, MCP) still carry the very terms the PR claims to standardize.

minor — GUIDE.md:17, GUIDE.md:308

Source docs/GUIDE.md:22 ("It shows tool calls in the transcript") and docs/GUIDE.md:489 ("Smaller tool scopes make the transcript easier to review") both say transcript, but the zh still reads the drifted 对话记录. The PR's own pattern rendered these as 转录, yet the fixes were only applied to ACCESSIBILITY.md and VOICE.md. Note: GUIDE.md:167/185 (转录区(对话记录,Transcript)) are the intended glossary cross-references and should stay.

minor — AGENT_RUNTIME.md:80

对话记录持久化为已保存会话 — EN AGENT_RUNTIME.md:157 is "persisted its transcript as a saved session". Same drift; convert to 转录.

minor — MCP.md:161

当提供方要求固定重定向时 — EN MCP.md:276 is "when the provider requires a fixed redirect". This is a bare 提供方 with no (provider) annotation, inside a file this PR loads into the batch. Should read 提供商(provider) per the PR's own convention.

minor — BUILD_PERFORMANCE.md:292 vs 297

The (provider) annotation sits on the second mention (line 297, "提供商(provider)常量") instead of the first mention, which is line 292 (提供商的线路适配器). Per the "每篇首(现)加" rule, the annotation should be on line 292.

nit — CATALOG_REFRESH.md:226

Nested full-width parens: 人(或在 PR 上*审阅*的代理(agent)). The outer (……) already an enclosing clause; the annotation creates (…(agent). Suggest e.g. 人在 PR 上*审阅*(agent)的场合…, keeping a single paren level.

nit — BUILD_PERFORMANCE.md:389-392 (crypto provider)

EN says "installed the rustls crypto provider" and "Each now installs the provider itself" — here "provider" is the rustls crypto backend, not a model provider. The replacement 加密提供商 makes it read like a model-provider term. Preexisting conflation, but since this commit is specifically normalizing terminology, consider a distinct rendering (加密提供器/加密后端/CryptoProvider) to avoid implying a model provider.

What I verified

  • Full-corpus grep (docs/zh_hans/): 模型提供方 remains only in WEB.md (out of PR scope). Bare 提供方 remains only in MCP.md:161 (in scope) and WEB.md (out of scope). 对话记录 in scope remains in AGENT_RUNTIME:80, GUIDE:17/308 (plus the intentional glossary 转录区() lines); WEB/WINDOWS_BEGINNER/KEYBINDINGS are out of scope.
  • All 11 files touched by the corrective commits were re-read; the 提供商/宪章/转录 and (provider)/(agent)/(subagent) edits match their English sources (checked English at ACCESSIBILITY:111, VOICE:50, PLUGIN_BUNDLES:309, BUILD_PERFORMANCE:318, CACHE:… etc.).
  • proxy-as-代理 verification: in PLUGIN_BUNDLES.md:350-361 代理 is uniformly a network proxy (EN: "no-proxy HTTP client", "proxy credentials", "explicit proxy support"); no (agent) was (wrongly) attached to any of them. Correct.
  • (agent)/(subagent)land on true first mentions in CACHE, FLEET_WORKFLOW_TUTORIAL, MEMORY, WORKFLOW_AUTHORING.
  • Regulatory tls/rustls note above: the 「加密提供商」use does read as a model-policy term; flagged as observation, not blocker.

Not verified (待确认)

  • I did not re-derive ENGLISH SubAgent/Agent capitalization consistency — the agent/subagent annotations follow the zh where the word was present; capitalization of Agent/SubAgent (which FLEET.md/SUBAGENTS.md name agent/subagent chimp) may need the same first-mention pass in files outside the 11.
  • Incidental comma/unit edits elsewhere in the PR are outside this review.

Attribution

🤖 Generated by SpikeBot 003(ClaudeCode-JP)

Three files this PR also touches (they carry link retargeting here) still used the drifted terms. GUIDE.md/AGENT_RUNTIME.md: 对话记录 -> 转录 (the glossary cross-reference lines 转录区(对话记录,Transcript) stay). MCP.md: bare 提供方 -> 提供商(provider). BUILD_PERFORMANCE.md: move the (provider) annotation to its true first mention and render the rustls crypto provider as 加密提供器(crypto provider) so it does not read as a model provider. CATALOG_REFRESH.md: lift the (agent) annotation out of its enclosing parens. Refs Hmbown#5482
SparkofSpike added a commit that referenced this pull request Sep 26, 2026
…psis

PR #3 fixed the raw byte slice that panicked on multi-byte input but
shipped no test for it, and the gap survived every later refactor. Add
five regression tests over the char-boundary path (CJK, Latin-1
supplement, exact fit, budget smaller than the ellipsis) and document
the one known limitation: a max_len below the ellipsis length returns
the ellipsis alone, exceeding max_len.

Evidence: the pre-#3 byte-slice implementation was executed standalone
and panics on ("你好世界 and more", 5, "…") with "end byte index 2 is
not a char boundary"; the new tests pass against the current function
body (5 passed; 0 failed), rustfmt-clean.

Refs #3
SparkofSpike added a commit that referenced this pull request Sep 26, 2026
PR #3 moved url_encode into utils.rs but left a private forwarding
wrapper in tools/web_run.rs, so the duplication was re-routed rather
than removed. Call the shared helper directly at the one call site and
delete the shim.

Refs #3
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Verdict: PASS

No findings. The readability pass over the 17 Tier-2 zh_hans documents (388436ed2) and the WEB.md terminology fix (0719029b9) are both clean.

What I checked

  1. Fidelity vs. English sources (all 17 pairs). Diffed each changed passage against docs/<NAME>.md. No information dropped or added; qualifiers preserved (只/仅/绝不/必须/从不/仍/永远/总, plus the English must/never/only/always); numbers, versions, paths, identifiers, and command names are byte-identical (4.5:1, 3:1, ~15 % / 2.2×, 52/62 个键, 0600, 7878, cargo test -p codewhale-tui --lib --no-run, the three order-dependent test names, ~/.codewhale/memory/, v0.8.x, DEEPSEEK_*, the GitHub URLs).

    Spot-verified hard cases:

    • BUILD_PERFORMANCE.md — ~15 % / 2.2× preserved; rustls crypto provider → 加密提供商 in both mentions.
    • DOCKER.md — write thousands of small files → 写入数千个小文件; can fail → 可能失败 (not 就会失败).
    • LOCALIZATION.md — translate is fail-closed unless BYOK… keeps fail-closed as the main clause with unless → 除非; both never → 绝不; 52/62 keys intact.
    • TERMUX.md — imperative restored: "treat every location available to Termux, including user-granted shared storage, as potentially available to a command you approve" → 凡是 Termux 能访问的位置——包括用户授予的共享存储——都要当作你批准的命令也可能访问到的地方.
    • HarmonyOS.md — always → 总, proves → 证明, OHOS PTY/exec_shell passages faithful.
    • WORKFLOW_AUTHORING.md — candidate self-verdict must never → 永远不能; fail-closed host surface inventory → 按失败关闭(fail closed)的表面清单; Runtime kept as the component name; 「表面」 used for surface.
  2. Terminology consistency. 提供方 is gone from WEB.md (all three occurrences → 提供商(provider)); no doc in docs/zh_hans mixes 提供方/提供商 or renders 子代理 two ways. Standard terms (提供商/子代理/代理/姿态/失败关闭/回执/回合/会话/工作区/审批/工作流/缓存/记忆/沙箱/技能/插件包/区域设置/漂移/表面/转录/运行时/事实来源/代数) used consistently; hook/Fleet/Runtime stayed English.

  3. Readability. Every rewrite reads as Chinese proper: comma chains split at sentence boundaries, preposed heavy modifiers moved to predicate position, 被-chains replaced with named subjects, empty nominalisation dropped. None lost its subject or became a fragment.

  4. Structure. 17/17 1:1 structure pass already ran and the gate is green; spot-checks of ACCESSIBILITY, BUILD_PERFORMANCE, CACHE, LOCALIZATION, WORKFLOW_AUTHORING, PLUGIN_BUNDLES confirm identical headings, lists, code fences, tables, and links.

Attribution

🤖 Generated by SpikeBot 003(ClaudeCode-JP)

WEB.md was translated before the terminology pass landed and still said
模型提供方 in three places. The standard is 提供商(provider); annotate
the first occurrence the way the rest of the corpus does. Refs Hmbown#5482
Rewrite the 17 Tier 2 documents so a Chinese reader parses them as
Chinese rather than as transliterated English: split comma chains at
sentence boundaries, move preposed heavy modifiers into predicate
position, replace 被-chains with named subjects, and drop
nominalisation that exists only because the English has it.

Eight read-only reviewers then checked every changed passage against
its English source, and this commit carries their fixes too. The ones
that mattered:

- TERMUX restores the imperative "treat as potentially available"
  framing — a declarative rewrite had softened a security boundary.
- PLUGIN_BUNDLES: 没有任何组件能被诚实地激活 (the possessor had drifted
  from the bundle to Codewhale), per-bundle generation, "only through"
  keeps its exclusivity, rejected renders as 拒绝 not 报错.
- PLUGINS: 插件包格式, not 格式清单 (清单 means "manifest" in this file);
  the reload toast goes back to one sentence.
- FLEET_WORKFLOW_TUTORIAL keeps Runtime as the component name.
- LOCALIZATION keeps fail-closed as the main clause and drops an
  invented 我们 and 提示你补齐.
- HarmonyOS restores 总 (always) and renders proves as 证明.
- BUILD_PERFORMANCE: the ~2 GB / ~35 s 收益 sentence gets its subject
  back; crypto provider is 提供商 in both mentions.
- DOCKER: 写入数千个小文件; can fail is 可能失败, not 就会失败.
- MEMORY/REBRAND/CACHE: 仍然受支持, not 都不受影响; the migration
  sentence gets its subject back.
- CATALOG_REFRESH keeps 已知 and uses 事实来源 throughout.
- WORKFLOW_AUTHORING uses 表面 for surface and no longer opens the
  search-spec list with 这串东西.

Verified: 17/17 structural 1:1 against the English sources, 205
relative links and 44 anchors resolve, and a screen over every changed
line finds no number altered and no strength word weakened. Refs Hmbown#5482
@SparkofSpike
SparkofSpike force-pushed the docs/zh-hans-tier2-should-have branch from 388436e to a72e09a Compare September 26, 2026 23:09
@SparkofSpike
SparkofSpike merged commit 2430d4d into main Sep 26, 2026
24 of 25 checks passed
@SparkofSpike

Copy link
Copy Markdown
Owner Author

Verdict: PASS-WITH-FIXES

Reviewed d31830d93 (WEB.md terminology) and a72e09abc (Tier-2 readability pass) against the English sources at the PR head. Note: the task referenced 0719029b9/388436ed2; the branch now carries the same two commits under those rebased hashes.

What I checked

  • Fidelity, all 18 files. Every changed hunk read against its English sentence. Numbers, version strings, paths, identifiers, and command names: verified byte-identical by a whole-file numeric-token diff across both commits — zero drift. Strength words survive in the risky spots: DOCKER "can fail" → 可能失败; PLUGIN_BUNDLES "never rejected" → 从不拒绝 vs the deliberately opposite 直接拒绝 for Codewhale's own namespace; "only through the review flow" keeps its exclusivity; SANDBOX's 绝不 / 一律 / 不可逆 all intact.
  • Readability. The preposed-modifier and 被-chain fixes genuinely read better (BUILD_PERFORMANCE's 收益 sentence and the i18n! passive both got their subjects back; HarmonyOS's "rquickjs-sys 本身并不附带" and WORKFLOW_AUTHORING's cwd named-subject sentences are improvements). No sentence lost its subject or broke into fragments.
  • Terminology. 提供商 / 子代理 / 表面 / 事实来源 / 回执 / 代数 all applied consistently; zero residual 提供方 across the corpus. Runtime stays as the component name in FLEET_WORKFLOW_TUTORIAL. No same-file double renderings found.
  • Structure. Heading counts match the English 1:1 in all 17 files. Code fences, inline code spans, and link counts match (the two span deltas are additive named-subjects, rquickjs-sys and cwd). All 205 relative links resolve.

Findings

  1. docs/zh_hans/LOCALIZATION.md:244 — EN (LOCALIZATION.md:277): "while the gl/eu base tags already route cleanly through web/middleware.ts the day a champion appears" — "already" scopes the routing as a present fact, "the day…" is the condition. Current ZH: "gl/eu 的基础 tag 已经能干净地通过 web/middleware.ts 路由——只等推动者出现" — correct, but the dash reads as emphasis rather than the conditional the English carries. Suggested: "gl/eu 的基础 tag 现在就能干净地通过 web/middleware.ts 路由;一旦有推动者出现,当天即可生效。" Minor: conditional nuance could be stronger.

  2. docs/zh_hans/SANDBOX.md:24 — EN (SANDBOX.md:25): "They are not wired into child-command launch, so Codewhale will not claim them as active sandboxes. The existence of sandbox source alone does not prove a command was ever constrained." Current ZH keeps both claims but merges the connective: "所以 Codewhale 不会对外声明它们是生效中的沙箱。光有沙箱源码,不能证明某条命令真的被限制过。" Faithful; flagging only that 对外声明 them is exactly right, while the second sentence's subject shift (光有沙箱源码) is slightly more colloquial than the security-boundary register used elsewhere in the file. Optional: "仅有沙箱源码,并不能证明某条命令真的被限制过。" No weakening of the boundary.

  3. docs/zh_hans/FLEET_WORKFLOW_TUTORIAL.md:62 — EN (FLEET_WORKFLOW_TUTORIAL.md:71): "The live Runtime policy controls secrets and trust; fleet identities carry neither." Current ZH: "密钥与信任由 Runtime 的实时策略控制,fleet 身份两个都不带。" Runtime correctly kept as the component name. 两个都不带 is colloquial for a spec-adjacent sentence; "fleet 身份都不携带" would match the register of the surrounding paragraph. Style only.

  4. docs/zh_hans/REBRAND.md:195 — EN: "it will only create files missing at the destination, never overwrite existing files under ~/.codewhale/sessions/, skip checkpoint internals, and leave all legacy files in place." Current ZH renders "skip checkpoint internals" as "会跳过 checkpoint 内部文件" (pre-change) → now "会跳过 checkpoint 内部文件" was rewritten inside the sentence about 增量迁移; confirm the 绝不覆盖 and 原样留在原地 qualifiers both survived — they did (绝不覆盖 present, 所有旧文件原样留在原地 present). No action needed; listed for completeness of the security-adjacent audit.

Nothing found that drops information, adds unattested claims, weakens a qualifier in SANDBOX/TERMUX, or breaks structure. The WEB.md terminology fix is exactly right (提供商 with the first-occurrence annotation, matching corpus convention).

Attribution

🤖 Generated by SpikeBot 002(Codebuff-HK)

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.

1 participant