Skip to content

docs: English-first outward documentation, bilingual README and kit - #22

Merged
yujiezhang-ops merged 4 commits into
mainfrom
docs/en-first-batch1
Aug 4, 2026
Merged

docs: English-first outward documentation, bilingual README and kit#22
yujiezhang-ops merged 4 commits into
mainfrom
docs/en-first-batch1

Conversation

@yujiezhang-ops

Copy link
Copy Markdown
Collaborator

Closes #21.

Outward-facing documentation becomes English. The two places a Chinese reader needs are kept: the README and the AI Agent Kit. CLAUDE.md and docs/internal/ stay Chinese, because their only readers are maintainers and a second copy would just drift.

What changed

Area Before After
README.md Chinese English, with README_ZH.md alongside
docs/ specifications Chinese English
docs/decisions/ (9 ADRs) 8 Chinese, 1 English English
docs/ai-agent-kit/ 8 Chinese pages en/ + zh/, both complete
CLAUDE.md, docs/internal/ Chinese unchanged

The kit's en/ pages carry real content rather than placeholders pointing back at zh/, so no page promises a translation it does not have.

Two facts made this smaller than it looked: ADR section headings (## Status, ## Context, ## Decision, ## Consequences) were already English in all nine files, so no structure moved; and the English terminology comes from frontend/src/i18n.tsx rather than a glossary invented here, since that file is what the shipped UI says and a doc disagreeing with the UI is worse than one that reads awkwardly.

Four stale claims corrected rather than translated forward

Translating these as-is would have carried errors into a second language.

  1. README required a preinstalled Python 3.12 for Aider. internal/install/install.go:229 says the opposite: uv resolves the interpreter and downloads a managed CPython into ~/.oneagent/runtimes/python when the machine has none.
  2. README listed nine guide-only agents. agents.lock.json holds eight entries total, three of them guide-only (Cursor, OpenClaw, Hermes). The other six named catalog entries that no longer exist.
  3. README had a cd site build block. site/ is untracked here (0 tracked files) since the move to MaimoryLab/OneAgent-site; the block only worked for someone with stale build output on disk.
  4. The curl | bash rule read as conditional permission after translation, next to a neighbouring bullet using "are prohibited" for the same class of risk. Tightened to match.

Two contradictions deliberately left as found

Resolving these would change a decision rather than translate one, so they are preserved and reported instead:

  • ADR-003's header cites cmd/oneagent-release as authoritative while its own addendum records that the tool was removed.
  • ADR-005 describes a verification stage owned by that same deleted binary.

ADR relationships verified, not assumed

The supersession graph is why this directory exists, so it was checked after translating: ADR-003 superseded by ADR-007 for the Python core, ADR-006's credential delivery superseded by ADR-008, and ADR-009 partially superseded with its renumbering note intact (it was originally a second ADR-006, and ADR-008's Supersedes line points at the other one).

ADR-008's security constraints were checked against the code: write.go writes requires_openai_auth and auth_mode = "apikey", internal/config/env.go is gone, and credential_delivery no longer appears in agents.lock.json. Its 0600 handling, atomic write order, and refuse-to-write-on-JSONC rule all survived translation intact.

Release checklists were counted rather than eyeballed: 17 and 15 unchecked boxes before and after, none ticked.

New gate

scripts/check-docs.py verifies that relative links resolve and that English-only documents contain no Chinese, wired into ci.yml as a third job. Neither go vet nor the frontend build reads Markdown, which is how a file move silently breaks links on main — this PR moved eight files and the checker caught four stale links from outside the kit.

Verification

go vet ./...                  clean
go test -race ./...           all packages ok
pnpm run test                 145 passed (23 files)
pnpm run build                typecheck + vite ok
python3 scripts/check-docs.py ok: 46 files, links resolve, language split holds

Noted, not addressed

  • docs/status-dot-ui-plan.md is an unimplemented plan sitting at docs/ root, which contradicts the layering rule that plans belong in issues. Out of scope here.
  • MaimoryLab/OneAgent-site still has defaultLocale: "zh-CN", the opposite of this direction. It is a separate repository on its own release cadence, so that is a separate decision.
  • The app's i18n keeps Chinese as its source language (translate() consults the table only when locale === "en"). Documentation and UI now differ in source-language direction; CLAUDE.md records this so nobody "finishes the job" by rewriting the 315 i18n keys.

🤖 Generated with Claude Code

The kit is the one outward-facing set of docs that non-developers read, so it
keeps a Chinese translation. Everything else outward-facing becomes English
only; CLAUDE.md and docs/internal/ stay Chinese because their only readers are
maintainers and a second copy would just drift.

en/ carries real content rather than placeholders pointing at zh/, so no page
promises a translation it does not have.

Cross-links inside the kit are sibling-relative, so moving the eight pages into
zh/ left them resolving unchanged; only the four links from outside the kit and
one parent-relative link needed rewriting.

English terminology follows frontend/src/i18n.tsx rather than a second glossary
invented here -- that file is what the product's own UI says, and a doc that
disagrees with the UI is worse than one that reads awkwardly.

scripts/check-docs.py enforces both halves of this: relative links resolve, and
English-only docs contain no Chinese. Neither go vet nor the frontend build
reads Markdown, so without it a file move silently breaks links on main.
Two claims did not survive being re-read against the code, so they are corrected
rather than translated forward:

The "current status" section required a preinstalled Python 3.12 for Aider.
internal/install/install.go:229 says the opposite -- uv resolves the interpreter
and downloads a managed CPython into ~/.oneagent/runtimes/python when the machine
has none, which is why that prerequisite was dropped.

The guide-only list named nine agents. agents.lock.json holds eight entries
total, of which three are guide-only (Cursor, OpenClaw, Hermes); the other six
names referred to catalog entries that no longer exist.

Also removed the "public website" build block: site/ is not tracked in this
repository any more (it moved to MaimoryLab/OneAgent-site), so `cd site` only
worked for someone with stale build output on disk.
Eight of the nine were Chinese; ADR-007 was already English and set the register.
Section headings were already English across all nine, so only the H1 titles and
the prose changed and no structure moved.

The supersession graph is what makes this directory worth keeping, so it was
checked rather than assumed: ADR-003 superseded by ADR-007 for the Python core,
ADR-006's credential delivery superseded by ADR-008, ADR-009 partially superseded
with its renumbering note intact (it was originally a second ADR-006, and
ADR-008's Supersedes line points at the other one).

Two contradictions surfaced during translation and were deliberately left as
found, because resolving them would change a decision rather than translate it:
ADR-003's header still cites cmd/oneagent-release as authoritative while its own
addendum records the tool's removal, and ADR-005 describes a verification stage
owned by that same deleted binary.

ADR-008's claims were verified against the code before translating: write.go
writes requires_openai_auth and auth_mode = apikey, internal/config/env.go is
gone, and credential_delivery no longer appears in agents.lock.json.
product-boundary-baseline.md, distribution-compliance-policy.md, and
public-site-operations.md. These gate releases, so structure was verified rather
than eyeballed: 17 and 15 unchecked checklist boxes before and after, none
ticked, heading and list counts unchanged, and the telemetry field fence
byte-identical.

Absolute prohibitions stay absolute. One line drifted and was corrected: the
`curl | bash` rule had been rendered as "is not executed", which reads as
conditional permission next to the neighbouring bullet's "are prohibited" for the
same class of risk.

The one Chinese-prose code fence, the activation flow in section 6.1, is
translated; the fence holding telemetry identifiers is not, since those are
field names rather than prose.

public-site-operations.md keeps its warning that the two workflows it was written
around no longer exist, so nobody follows an obsolete release sequence.
@yujiezhang-ops
yujiezhang-ops merged commit 2d59571 into main Aug 4, 2026
3 checks passed
@yujiezhang-ops
yujiezhang-ops deleted the docs/en-first-batch1 branch August 4, 2026 16:22
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.

docs: 对外文档改为英文优先,README 双语

1 participant