You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Translations after the restructure: retire the siblings of moved or merged pages in the same PRs, then run the translation pass zh-Hans first to full coverage (today 32 of 80 pages), other locales after the maintainer decides how many to keep #347
Filing gate: ③ a task the maintainer directed — Sam, project thread "Decide docs.objectos.ai content scope", 2026-10-27: 「现有的文档有哪些需要调整包括国际化有issue吗」 after 「同意,立卡」 on the restructure cards (#343, #344, #345, #346).
zh-Hans 32 zh-Hant 32 (generated from zh-Hans) ja 14 de 14 es 14 fr 14 ko 14 / 80 English pages
node .github/scripts/check-translations.mjs → gate passes; 10 siblings reported stale
Open translation cards: #75 (91 fidelity findings, pm:blocked), #135 (worklist driven by provenance alone), #68 (ownership check inert until TRANSLATION_BOT_LOGIN is set), #340 (zh-Hans legal paragraph + repository rename). None covers the restructure.
Governing text
AGENTS.md 〈Translation workflow〉 step 3: retiring or renaming a page, or an English correction that removes or reverses a capability assertion, deletes its locale siblings in the same PR; wording drift stays with the translation pass. docs/TRANSLATION.md is the pass itself; translations.yml runs it.
zh-Hant is never translated: pnpm --filter @objectos/docs gen:zh-hant after every zh-Hans change.
Maintainer decision recorded here before step 4: keep all of ja / de / es / fr / ko at 14/80 (partial locales render English fallback, which lib/seo.ts already handles), bring them to full coverage, or drop some until the English corpus settles. The sidebar's language switcher and hideLocale config follow the answer.
Step 4, per the answer: either a full pass for the kept locales, or removal of the dropped locales from apps/docs/lib/i18n.ts, LANGUAGE_NAMES and the sitemap, with their siblings deleted.
Out of scope
The product's own localization feature (configure/localization.mdx, region / finance / date formats / tenant defaults) is a product page and is covered by the restructure cards; this card is about the documentation site's locales only.
Blocked-by: #343, #345 (siblings move with those PRs; the pass runs after they merge).
Claim: PM loop round 3 · 2026-10-27T22:43Z
Session: session_01QsR2jTaZ2GeyfjANMwstiw (seat thread; the dev is card thread session_01QsR2jTxGkQdrLm4E6n23Ub, identity by branch)
Account: zhuangjianguo
Branch: claude/project-thread-uqu1e8 (platform-assigned; a card thread can push only this branch)
Worktree: the card thread's own docs.objectos.ai checkout
Domain: domain:docs (single-lane repository)
Seat: repo:docs.objectos.ai#1
File surface: content/docs/**/*.zh-Hans.mdx, content/docs/**/*.zh-Hant.mdx (generated by gen:zh-hant only), content/docs/**/meta.zh-Hans.json and meta.zh-Hant.json — translation-pass files only; no English source, no apps/docs/, no other locale — stop on breach; explain in the report
Container & model: L, mode:thread, model: default tier (TIER_DEFAULT — sister repository, hand-derived: no packages/spec, no protocol-semantic surface), effort: project default
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: steps 1–2 only. Re-measured on 1282903 (after #349, #351 and #352): 89 English pages; zh-Hans 28 present (all stale) and 61 missing, so 89 worklist items; ja/de/es/fr/ko each 10 stale, 79 missing. Step 1 becomes an audit of the landed restructure (the translations gate passes on 1282903), since the three PRs are merged. Step 2 runs under docs/TRANSLATION.md as several section-sized PRs of about 3000 lines or fewer, each Part of #347 and the last Fixes #347, landed one at a time. Step 3 (the five partial locales) is put to the maintainer by this seat; step 4 is a later dispatch.
Tier: none.
Serial constraints cleared: Blocked-by: #343, #345 met (d1d6a3e, 1282903). #340 (round 3) edits apps/docs/app/[lang]/terms/*.json, not under content/docs/. #353 (round 3) edits reference/rest-api.mdx (English), so rest-api.zh-Hans.mdx translated here goes stale when #353 lands — the next pass picks it up. #344 and #350 (cloud lane) add English pages later.
Seat record · 2026-10-27T22:45Z · session_01QsR2jTaZ2GeyfjANMwstiw · seat repo:docs.objectos.ai#1
Step 3, maintainer decision (decision card in the seat's project thread, answered 2026-10-27T22:43Z): keep ja / de / es / fr / ko partial for now. They stay at their present coverage with English fallback, revisited after the English corpus settles. No full pass and no locale removal. Step 4 therefore has no work today.
Claim amendment (file surface). The step 1 audit by the card thread found that the restructure did not update the pages arrays of locale meta.<locale>.json files. Because a locale meta replaces the English one, the zh-Hans sidebar hides six pages (build/reports, build/extend-existing-systems, use/search, use/import, use/files, use/collaboration) and still lists resources/license (moved to editions/), and ja/de/es/fr/ko carry the same drift. Since those locales are kept, the surface widens to the pages arrays of content/docs/**/meta.{ja,de,es,fr,ko}.json: slug-only edits, no title translation. These ride the pass's first PR with the zh-Hans meta fixes.
Size rule. Each PR stays at or under about 3000 diff lines, counting the generated zh-Hant files, so the pass lands as about 11 PRs.
MERGED through the merge queue as 4810abf: squash, on head ed56e62, the ACCEPTed head of seat record 6455667595
main CI run 40599319645 on 4810abf
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 2 (use/) is next from 4810abf.
MERGED through the merge queue as 560892c: squash, on head b79044e, the ACCEPTed head of seat record 6455882547
main CI run 40601331566 on 560892c
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 3 (build/ data, reports and packages pages) is next from 560892c.
MERGED through the merge queue as ae59e8f: squash, on head 286a106, the ACCEPTed head of seat record 6456148109
main CI run 40602893534 on ae59e8f
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 4 (build/interface) is next, from main after #361 lands.
Merged through the merge queue as 5fa5ff4 (squash), on head 5be235c, the head the seat ACCEPTed
main CI run 40604666483, attempt 1
Publish: success. Smoke: failure. One check failed, the search negative control search en "qzxvjwkq", with transport: TypeError: fetch failed. Every page check and every locale search passed. The run rolled back to b5b1543e and filed #364.
Same run, attempt 2 (re-run by the seat)
build success · Publish success, with "Assert a new version is serving" success · Smoke-check the live site success · rollback and failure-card jobs skipped
So the attempt 1 failure was a network flake in the smoke runner, not a broken build. 5fa5ff4 serves green, and the seat did not revert it. The card stays open with pm:dispatched (Part of #347). Batch 5 (#365) is ACCEPTed and queued.
MERGED through the merge queue as 8db5b97: squash, on head 918d1cf, the ACCEPTed head
main CI run 40606284391 on 8db5b97
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 6 (#367) is ACCEPTed and queued.
MERGED through the merge queue as fbdf20c: squash, on head a8879ca, the ACCEPTed head
main CI run 40607385230 on fbdf20c
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 7 (#368) is under seat review.
MERGED through the merge queue as 4ffefcc: squash, on head 5acd4f0, the ACCEPTed head
main CI run 40608489427 on 4ffefcc
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). zh-Hans is at 0 stale pages. Batch 8 (#369) is ACCEPTed and queued.
MERGED through the merge queue as f44e307: squash, on head b8ba72e, the ACCEPTed head
main CI run 40609434975 on f44e307
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Next in the queue: #370 (the #366 generator fix), then batch 9 (#371, ACCEPTed).
MERGED through the merge queue as cb852c2: squash, on head d56729d, the ACCEPTed head
main CI run 40611153051 on cb852c2
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). Batch 10 (#372) is ACCEPTed and queued; zh-Hans is at 0 stale, 8 missing on main.
MERGED through the merge queue as 8e8a691: squash, on head c52b226, the ACCEPTed head
main CI run 40612254767 on 8e8a691
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
The card stays open and pm:dispatched (Part of #347). The final batch (#374, Fixes #347) is ACCEPTed and queued.
{
"issue": 347,
"status": "done",
"branch": "claude/project-thread-uqu1e8",
"pr": "https://github.com/objectstack-ai/docs.objectos.ai/pull/374",
"prs": [
"#357",
"#360",
"#362",
"#363",
"#365",
"#367",
"#368",
"#369",
"#371",
"#372",
"#374"
],
"session": "session_01QsR2jTxGkQdrLm4E6n23Ub",
"premise_still_valid": true,
"summary": "Step 2 of #347 is complete: every English page under content/docs has a current zh-Hans sibling, and check-translations reads zh-Hans 0 stale, 0 missing on main f574497 after #374 merged (gen-zh-hant --check: 105 files byte for byte; #347 closed as completed by the merge). The pass shipped as 11 sequential draft PRs, each at most ~2840 lines including zh-Hant, each opened from a fresh reset onto main after the previous one merged: #357 root/Start/Editions and locale sidebars; #360 Use and the Build overview; #362 Build skills, packages, marketplace, extend, reports and data model; #363 Build interface; #365 Build automation plus the 操作→动作 correction on the landed Use pages; #367 Configure services; #368 Configure setup pages and Permissions; #369 Deploy and the first Operate pages; #371 the rest of Operate and five Reference pages; #372 the remaining Reference pages and Support; #374 glossary, FAQ and changelog (Fixes #347). Every zh-Hans page is stamped (check-translations --stamp), every zh-Hant page comes from gen:zh-hant (after #370 lands, with its 簽 override), every translated heading keeps the English id as `[#id]`, and every code fence is byte-identical to the English. Pages first translated before #358/#361 (deploy/index, kubernetes, docker, operate/index, upgrade, reference/security) were brought up to the digest-pinning English before their PRs and stamped against the current sha. Step 3 was decided as keep ja/de/es/fr/ko partial; no file in those locales was touched.",
"tests": "Translation-only diffs; no test files. Per PR, Playwright on next start of that PR's build: 4 pages each (one anchor deep link, one zh-Hans page, one 390x844 mobile page, one zh-Hant page), all HTTP 200, the right lang, no page errors, every anchor landing at the top of the viewport. Screenshots pr1-*.png to pr11-*.png in /mnt/project-files/docs-347/.",
"gates": "Per PR head, the 11 ci.yml steps, exit codes taken before any pipe: gen-zh-hant --check, check-doc-samples, turbo type-check + build (NEXT_PRIVATE_STANDALONE=true, under the verify lock, 54-80 s), check-locale-surface, check-positioning, check-search-locales, turbo test, check-translations, check-translation-ownership --files, check-translation-output --files, check-translation-output --self-test. All 0 on every PR. Final head 14de035: zh-Hant 105 generated files byte for byte; check-translations zh-Hans | 0 | 0 | 0 |; output gate passed with 85 pre-existing findings (other locales, report only).",
"dogfood_battery": "n/a - sister repository, translation-only diffs",
"mcp_calls": "0 writes. GitHub MCP reads only: issue/PR reads and one PR search.",
"api_writes": "12: 11 relay pr_create (one per PR, each read back byte-identical: #357, #360, #362, #363, #365, #367, #368, #369, #371, #372, #374) and this report comment.",
"line_budget": "#357 2838, #360 2488, #362 2609, #363 1959, #365 2065, #367 1790, #368 2324, #369 2071, #371 2239, #372 2055, #374 2215 (insertions + deletions, zh-Hant included)",
"deviations": [
"Term ruling applied mid-pass (seat, on #363): ObjectStack action = 动作, operation = 操作. #365 corrected 11 words on the landed use/records, use/approvals and use/views pages without re-stamping; #368 changed 16 more on its own refreshed pages (mcp, users, api-access, system-settings test actions). Every remaining 操作 was checked against its English line and listed in the PR bodies.",
"Batches 8-10 were translated before #358/#361 changed the English for six deploy/operate/security pages; those pages were re-synced to the current English and re-stamped before their PRs opened, rather than landing stale."
],
"open_questions": [],
"out_of_scope_findings": [
"class: a - gen-zh-hant rendered 签核/会签 as 籤核/會籤 (should be 簽); reported on #365, filed by the seat as #366 and fixed by #370. The changelog's 会签 in #374 was generated after #370 and reads 會簽.",
"class: a (follow-up, seat-noted) - docs/TRANSLATION.md has no glossary row for action 动作 vs operation 操作; the ruling lives in the #363 seat comment."
]
}
Merged through the merge queue as f574497. Squash, on head 14de035, which is the ACCEPTed head (seat record 6457849579). Fixes #347 closed this card.
main CI run 40613253969 on f574497
build success · Deploy docs / Publish the tested Worker success, with "Assert a new version is serving" success · Deploy docs / Smoke-check the live site success · rollback and failure-card jobs skipped
zh-Hans on main
0 stale, 0 missing (was 32 of 80 pages when the card opened). Generated zh-Hant passes --check on 105 files.
The pass ran in 11 PRs, each under 3000 lines, and every one deployed with a green live smoke check. Batch 4's first deploy was rolled back on a smoke-runner transport flake; it was re-run green, see #364. The os-dev report is comment 6457933345. Follow-ups: #366, fixed by #370, and #375, which adds the 动作/操作 glossary rows. Per the maintainer's ruling of 2026-10-27 22:43Z, ja/de/es/fr/ko stay partial. pm:dispatched is cleared.
Two decisions from the thread that opened this card, recorded here so the pass that works item 3 does not have to ask again.
1. Locale set: en + zh-Hans only, until #343–#346 land
Item 3 is answered: en stays the only authored language and zh-Hans is the only locale brought to full coverage (zh-Hant continues to be generated from it). ja, de, es, fr, ko are not expanded while the English corpus is being restructured. They keep whatever pages they have today, lose siblings normally when an English page is retired or reverses a capability claim (AGENTS.md step 3), and are re-decided once #343–#346 are merged. Step 4 of this card therefore defers to that point.
2. Source language stays locked to English; everything else is machine-derived
Sam asked whether accuracy should be guaranteed by locking one language that every (AI) edit goes to, with the rest produced mechanically. That is the repository's existing contract, and it stands — no change to docs/TRANSLATION.md or AGENTS.md:
English is the only authored source. Every *.<locale>.mdx carries translation.source_sha of its English sibling, so staleness is detectable; zh-Hant is generated from zh-Hans by gen-zh-hant.mjs, never written.
A human or agent PR may delete a locale sibling but may not add or edit one (check-translation-ownership.mjs); a translation PR may touch nothing but locale files.
A stale translation is worse than a missing one: a missing page falls back to correct English.
Chinese was considered as the locked language and rejected: UI strings, identifiers, code blocks and the fallback language are all English, so a Chinese source would add a translation step in front of every derivation.
Two gaps this card should close, not just document
Activity
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 3 · 2026-10-27T22:43Z
Session:
session_01QsR2jTaZ2GeyfjANMwstiw(seat thread; the dev is card threadsession_01QsR2jTxGkQdrLm4E6n23Ub, identity by branch)Account:
zhuangjianguoBranch:
claude/project-thread-uqu1e8(platform-assigned; a card thread can push only this branch)Worktree: the card thread's own
docs.objectos.aicheckoutDomain:
domain:docs(single-lane repository)Seat:
repo:docs.objectos.ai#1File surface:
content/docs/**/*.zh-Hans.mdx,content/docs/**/*.zh-Hant.mdx(generated bygen:zh-hantonly),content/docs/**/meta.zh-Hans.jsonandmeta.zh-Hant.json— translation-pass files only; no English source, noapps/docs/, no other locale — stop on breach; explain in the reportContainer & model: L,
mode:thread,model: default tier (TIER_DEFAULT — sister repository, hand-derived: no packages/spec, no protocol-semantic surface),effort: project defaultClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: steps 1–2 only. Re-measured on
1282903(after #349, #351 and #352): 89 English pages; zh-Hans 28 present (all stale) and 61 missing, so 89 worklist items; ja/de/es/fr/ko each 10 stale, 79 missing. Step 1 becomes an audit of the landed restructure (the translations gate passes on1282903), since the three PRs are merged. Step 2 runs underdocs/TRANSLATION.mdas several section-sized PRs of about 3000 lines or fewer, eachPart of #347and the lastFixes #347, landed one at a time. Step 3 (the five partial locales) is put to the maintainer by this seat; step 4 is a later dispatch.Tier: none.
Serial constraints cleared:
Blocked-by: #343, #345met (d1d6a3e,1282903). #340 (round 3) editsapps/docs/app/[lang]/terms/*.json, not undercontent/docs/. #353 (round 3) editsreference/rest-api.mdx(English), sorest-api.zh-Hans.mdxtranslated here goes stale when #353 lands — the next pass picks it up. #344 and #350 (cloud lane) add English pages later.objectstack-fleet commentedon Oct 27, 2026
Seat record · 2026-10-27T22:45Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1Step 3, maintainer decision (decision card in the seat's project thread, answered 2026-10-27T22:43Z): keep ja / de / es / fr / ko partial for now. They stay at their present coverage with English fallback, revisited after the English corpus settles. No full pass and no locale removal. Step 4 therefore has no work today.
Claim amendment (file surface). The step 1 audit by the card thread found that the restructure did not update the
pagesarrays of localemeta.<locale>.jsonfiles. Because a locale meta replaces the English one, the zh-Hans sidebar hides six pages (build/reports,build/extend-existing-systems,use/search,use/import,use/files,use/collaboration) and still listsresources/license(moved toeditions/), and ja/de/es/fr/ko carry the same drift. Since those locales are kept, the surface widens to thepagesarrays ofcontent/docs/**/meta.{ja,de,es,fr,ko}.json: slug-only edits, no title translation. These ride the pass's first PR with the zh-Hans meta fixes.Size rule. Each PR stays at or under about 3000 diff lines, counting the generated zh-Hant files, so the pass lands as about 11 PRs.
objectstack-fleet commentedon Oct 27, 2026
Landing (batch 1 of the pass) · 2026-10-27T23:07Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#14810abf: squash, on headed56e62, the ACCEPTed head of seat record 6455667595mainCI run 40599319645 on4810abfbuildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 2 (use/) is next from4810abf.objectstack-fleet commentedon Oct 27, 2026
Landing (batch 2 of the pass) · 2026-10-27T23:24Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1560892c: squash, on headb79044e, the ACCEPTed head of seat record 6455882547mainCI run 40601331566 on560892cbuildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 3 (build/data, reports and packages pages) is next from560892c.objectstack-fleet commentedon Oct 27, 2026
Landing (batch 3 of the pass) · 2026-10-27T23:37Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1ae59e8f: squash, on head286a106, the ACCEPTed head of seat record 6456148109mainCI run 40602893534 onae59e8fbuildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 4 (build/interface) is next, frommainafter #361 lands.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 4 of the pass) · 2026-10-28T00:00Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#15fa5ff4(squash), on head5be235c, the head the seat ACCEPTedmainCI run 40604666483, attempt 1search en "qzxvjwkq", withtransport: TypeError: fetch failed. Every page check and every locale search passed. The run rolled back tob5b1543eand filed #364.buildsuccess · Publish success, with "Assert a new version is serving" success · Smoke-check the live site success · rollback and failure-card jobs skippedSo the attempt 1 failure was a network flake in the smoke runner, not a broken build.
5fa5ff4serves green, and the seat did not revert it. The card stays open withpm:dispatched(Part of #347). Batch 5 (#365) is ACCEPTed and queued.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 5 of the pass) · 2026-10-28T00:10Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#18db5b97: squash, on head918d1cf, the ACCEPTed headmainCI run 40606284391 on8db5b97buildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 6 (#367) is ACCEPTed and queued.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 6 of the pass) · 2026-10-28T00:18Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1fbdf20c: squash, on heada8879ca, the ACCEPTed headmainCI run 40607385230 onfbdf20cbuildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 7 (#368) is under seat review.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 7 of the pass) · 2026-10-28T00:28Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#14ffefcc: squash, on head5acd4f0, the ACCEPTed headmainCI run 40608489427 on4ffefccbuildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). zh-Hans is at 0 stale pages. Batch 8 (#369) is ACCEPTed and queued.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 8 of the pass) · 2026-10-28T00:38Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1f44e307: squash, on headb8ba72e, the ACCEPTed headmainCI run 40609434975 onf44e307buildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Next in the queue: #370 (the #366 generator fix), then batch 9 (#371, ACCEPTed).objectstack-fleet commentedon Oct 28, 2026
Landing (batch 9 of the pass) · 2026-10-28T00:54Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1cb852c2: squash, on headd56729d, the ACCEPTed headmainCI run 40611153051 oncb852c2buildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). Batch 10 (#372) is ACCEPTed and queued; zh-Hans is at 0 stale, 8 missing onmain.objectstack-fleet commentedon Oct 28, 2026
Landing (batch 10 of the pass) · 2026-10-28T01:05Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#18e8a691: squash, on headc52b226, the ACCEPTed headmainCI run 40612254767 on8e8a691buildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedThe card stays open and
pm:dispatched(Part of #347). The final batch (#374,Fixes #347) is ACCEPTed and queued.objectstack-fleet commentedon Oct 28, 2026
os-dev-report
{ "issue": 347, "status": "done", "branch": "claude/project-thread-uqu1e8", "pr": "https://github.com/objectstack-ai/docs.objectos.ai/pull/374", "prs": [ "#357", "#360", "#362", "#363", "#365", "#367", "#368", "#369", "#371", "#372", "#374" ], "session": "session_01QsR2jTxGkQdrLm4E6n23Ub", "premise_still_valid": true, "summary": "Step 2 of #347 is complete: every English page under content/docs has a current zh-Hans sibling, and check-translations reads zh-Hans 0 stale, 0 missing on main f574497 after #374 merged (gen-zh-hant --check: 105 files byte for byte; #347 closed as completed by the merge). The pass shipped as 11 sequential draft PRs, each at most ~2840 lines including zh-Hant, each opened from a fresh reset onto main after the previous one merged: #357 root/Start/Editions and locale sidebars; #360 Use and the Build overview; #362 Build skills, packages, marketplace, extend, reports and data model; #363 Build interface; #365 Build automation plus the 操作→动作 correction on the landed Use pages; #367 Configure services; #368 Configure setup pages and Permissions; #369 Deploy and the first Operate pages; #371 the rest of Operate and five Reference pages; #372 the remaining Reference pages and Support; #374 glossary, FAQ and changelog (Fixes #347). Every zh-Hans page is stamped (check-translations --stamp), every zh-Hant page comes from gen:zh-hant (after #370 lands, with its 簽 override), every translated heading keeps the English id as `[#id]`, and every code fence is byte-identical to the English. Pages first translated before #358/#361 (deploy/index, kubernetes, docker, operate/index, upgrade, reference/security) were brought up to the digest-pinning English before their PRs and stamped against the current sha. Step 3 was decided as keep ja/de/es/fr/ko partial; no file in those locales was touched.", "tests": "Translation-only diffs; no test files. Per PR, Playwright on next start of that PR's build: 4 pages each (one anchor deep link, one zh-Hans page, one 390x844 mobile page, one zh-Hant page), all HTTP 200, the right lang, no page errors, every anchor landing at the top of the viewport. Screenshots pr1-*.png to pr11-*.png in /mnt/project-files/docs-347/.", "gates": "Per PR head, the 11 ci.yml steps, exit codes taken before any pipe: gen-zh-hant --check, check-doc-samples, turbo type-check + build (NEXT_PRIVATE_STANDALONE=true, under the verify lock, 54-80 s), check-locale-surface, check-positioning, check-search-locales, turbo test, check-translations, check-translation-ownership --files, check-translation-output --files, check-translation-output --self-test. All 0 on every PR. Final head 14de035: zh-Hant 105 generated files byte for byte; check-translations zh-Hans | 0 | 0 | 0 |; output gate passed with 85 pre-existing findings (other locales, report only).", "dogfood_battery": "n/a - sister repository, translation-only diffs", "mcp_calls": "0 writes. GitHub MCP reads only: issue/PR reads and one PR search.", "api_writes": "12: 11 relay pr_create (one per PR, each read back byte-identical: #357, #360, #362, #363, #365, #367, #368, #369, #371, #372, #374) and this report comment.", "line_budget": "#357 2838, #360 2488, #362 2609, #363 1959, #365 2065, #367 1790, #368 2324, #369 2071, #371 2239, #372 2055, #374 2215 (insertions + deletions, zh-Hant included)", "deviations": [ "Term ruling applied mid-pass (seat, on #363): ObjectStack action = 动作, operation = 操作. #365 corrected 11 words on the landed use/records, use/approvals and use/views pages without re-stamping; #368 changed 16 more on its own refreshed pages (mcp, users, api-access, system-settings test actions). Every remaining 操作 was checked against its English line and listed in the PR bodies.", "Batches 8-10 were translated before #358/#361 changed the English for six deploy/operate/security pages; those pages were re-synced to the current English and re-stamped before their PRs opened, rather than landing stale." ], "open_questions": [], "out_of_scope_findings": [ "class: a - gen-zh-hant rendered 签核/会签 as 籤核/會籤 (should be 簽); reported on #365, filed by the seat as #366 and fixed by #370. The changelog's 会签 in #374 was generated after #370 and reads 會簽.", "class: a (follow-up, seat-noted) - docs/TRANSLATION.md has no glossary row for action 动作 vs operation 操作; the ruling lives in the #363 seat comment." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Landing (final batch of the pass) · 2026-10-28T01:14Z ·
session_01QsR2jTaZ2GeyfjANMwstiw· seatrepo:docs.objectos.ai#1f574497. Squash, on head14de035, which is the ACCEPTed head (seat record 6457849579).Fixes #347closed this card.mainCI run 40613253969 onf574497buildsuccess ·Deploy docs / Publish the tested Workersuccess, with "Assert a new version is serving" success ·Deploy docs / Smoke-check the live sitesuccess · rollback and failure-card jobs skippedmain--checkon 105 files.The pass ran in 11 PRs, each under 3000 lines, and every one deployed with a green live smoke check. Batch 4's first deploy was rolled back on a smoke-runner transport flake; it was re-run green, see #364. The os-dev report is comment 6457933345. Follow-ups: #366, fixed by #370, and #375, which adds the 动作/操作 glossary rows. Per the maintainer's ruling of 2026-10-27 22:43Z, ja/de/es/fr/ko stay partial.
pm:dispatchedis cleared.os-zhuang commentedon Oct 28, 2026
Maintainer rulings (Sam, 2026-10-28)
Two decisions from the thread that opened this card, recorded here so the pass that works item 3 does not have to ask again.
1. Locale set:
en+zh-Hansonly, until #343–#346 landItem 3 is answered:
enstays the only authored language andzh-Hansis the only locale brought to full coverage (zh-Hantcontinues to be generated from it).ja,de,es,fr,koare not expanded while the English corpus is being restructured. They keep whatever pages they have today, lose siblings normally when an English page is retired or reverses a capability claim (AGENTS.md step 3), and are re-decided once #343–#346 are merged. Step 4 of this card therefore defers to that point.2. Source language stays locked to English; everything else is machine-derived
Sam asked whether accuracy should be guaranteed by locking one language that every (AI) edit goes to, with the rest produced mechanically. That is the repository's existing contract, and it stands — no change to
docs/TRANSLATION.mdorAGENTS.md:*.<locale>.mdxcarriestranslation.source_shaof its English sibling, so staleness is detectable;zh-Hantis generated fromzh-Hansbygen-zh-hant.mjs, never written.check-translation-ownership.mjs); a translation PR may touch nothing but locale files.Chinese was considered as the locked language and rejected: UI strings, identifiers, code blocks and the fallback language are all English, so a Chinese source would add a translation step in front of every derivation.
Two gaps this card should close, not just document
translations.ymlonly checks; there is no scheduled or merge-triggered pass, no dedicated translation account, andvars.TRANSLATION_BOT_LOGINis unset, so the Ownership step is inert. The 32/80 coverage and 10 stale pages will not converge by themselves. Proposed: once Edition layer: a top-level Editions group (feature matrix by Community / Free / Team / Enterprise), a three-path Start,editions:badges on every page, and the five framework-reference pages collapsed to summaries #343–Use and Build gap pages from the product definition: search & command palette, files & attachments, import, discussions & share links, reports & datasets, Ask & Build with AI, AI models & limits #346 land, run the pass as a fixed routine (on merge tomaintouchingcontent/docs/**/*.mdxEnglish files, or weekly), emittingzh-Hansonly and stamping with--stamp; setTRANSLATION_BOT_LOGINto the account that runs it so the ownership gate becomes real.content/docs/into this site and pin both upstreams (objectstack, cloud) so alignment is a bounded diff review, not a periodic re-read (cloud#3199 ruling D) #337. Nothing in this card substitutes for them.维护者速读
en+zh-Hans(zh-Hant 机械生成),其余五个等 Edition layer: a top-level Editions group (feature matrix by Community / Free / Team / Enterprise), a three-path Start,editions:badges on every page, and the five framework-reference pages collapsed to summaries #343–Use and Build gap pages from the product definition: search & command palette, files & attachments, import, discussions & share links, reports & datasets, Ask & Build with AI, AI models & limits #346 落地后再定;第 4 步顺延。TRANSLATION_BOT_LOGIN未设);英文准确性靠 cloud#3330 的「改行为必链 docs PR」和 Sync cloud'scontent/docs/into this site and pin both upstreams (objectstack, cloud) so alignment is a bounded diff review, not a periodic re-read (cloud#3199 ruling D) #337 的钉点对账。Generated by Claude Code