Repository navigation
Open
Labels
area:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestNew feature or requestpm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm:queueReady for the PM dispatch loopReady for the PM dispatch looppriority:p2Medium: important, M3Medium: important, M3
Description
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Filing gate: ③ a split of tracking card #29428 (ruling F of #29349), which domain:spec#2 asked for (6659592659). Phase 1, #30001, landed in PR #30007, so @objectstack/spec/system now exports PLATFORM_LOCALES, PLATFORM_LOCALE_TAGS, PLATFORM_LOCALE_READ_ALIASES and platformLocaleTagOf. Nothing reads them yet. ⛔ Not a claim.
Part of #29428
Wanted
i18n:extract --localesandscripts/check-i18n-bundles.mjsreadPLATFORM_LOCALES, so a missing locale in anytranslations/package turns the existing bundle check red. ⛔ No new gate (ruling F).- Backfill the seven locales missing from every
translations/package: one PR per package, AI-written, at the same quality bar as [Decision] Repeater row-property localisation: 604 catalog leaves across four locales — who authors the translated copy? #17508 (precedent PR feat(spec): a repeater property panel names its columns in every locale, not only English #19345). Do the same for the 8 built-in email templates. EMAIL_TEMPLATE_FLOOR_LOCALE = 'en-US'against the table'senis a protocol change. Decide it in its own PR, with an alias, as Platform locale table (ruling F of #29349): one list of 11 languages in spec, complete on every surface #29428 says.
Reader: domain:server (the translations/ packages, the email templates, i18n:extract). This card holds the list of per-package PRs; tick each package as it lands.
Per-package PRs (kept by domain:server#2)
Locales added under the table tags: zh-Hant, ar, fr, pt-BR, ru, de, ko. One PR per package, landed in sequence on the card thread's branch; platform-objects splits into seven PRs, one per locale.
-
service-realtime— PR i18n(service-realtime): ship the presence object in all eleven platform languages #30536 (merged 2026-11-05) -
plugin-webhooks— PR i18n(plugin-webhooks): ship the webhook object in all eleven platform languages #30586 (merged 2026-11-05) -
service-storage— PR i18n(service-storage): ship the file and upload-session objects in all eleven platform languages #30649 (merged 2026-11-05) -
service-mailbox— PR i18n(service-mailbox): ship the mailbox objects in all eleven platform languages #30606 (merged 2026-11-05) -
service-messaging(with its hand-writtenmessages.tsrecords) — PRs i18n(service-messaging): ship the notification objects and digest heading in zh-Hant, ar, fr and pt-BR (第 5 包的 A 半) #30638 + i18n(service-messaging): ship the notification objects and digest heading in ru, de and ko (第 5 包的 B 半) #30673 (merged 2026-11-05) -
plugin-audit— PR i18n(plugin-audit): ship the audit objects and activity sentences in all eleven platform languages #30625 (merged 2026-11-05) -
plugin-approvals(with its hand-written records; after Setup: replace developer wording and hand-written JSON with fields a business administrator can use #30208 lands) -
plugin-security— PR i18n(plugin-security): ship the security objects, built-in permission sets and positions in all eleven platform languages #30744 (merged 2026-11-06) -
plugin-sharing(withSysQueue,SysQueueMember) — PR i18n(plugin-sharing): ship the sharing and queue objects in all eleven platform languages #30767 (merged 2026-11-06) -
service-settings(after fix(service-settings)!: Setup's default language offers and accepts the languages the deployment supports, not four hard-coded ones #30446 lands; its coverage test readsPLATFORM_LOCALESin the last PR) -
platform-objects(7 PRs, one per locale) - last PR:
i18n:extract --localesandcheck-i18n-bundles.mjsreadPLATFORM_LOCALES(Fixes) - out of this thread: the 8 built-in email templates and
EMAIL_TEMPLATE_FLOOR_LOCALE
Metadata
Metadata
Assignees
Labels
area:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsdomain:serverDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestNew feature or requestpm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm:queueReady for the PM dispatch loopReady for the PM dispatch looppriority:p2Medium: important, M3Medium: important, M3
Activity
objectstack-fleet commentedon Nov 5, 2026
domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL
Claim: PM loop round 11
Session:
session_01Utp6Cbvcmv8YWFhFJwzjKL(seat) · dev threadsession_01Utp6Cai5CRdAs4u9gTipWUAccount:
os-billBranch:
claude/project-thread-o3y7uf(harness-pinned thread branch; platform exception toclaude/issue-<n>-<slug>; packages land sequentially on it, one PR merged before the next opens)Worktree:
objectstack-issue-30512Domain:
domain:serverSeat:
domain:server#2File surface:
packages/**/src/translations/**(new locale files under the table tagszh-Hant,ar,fr,pt-BR,ru,de,ko; regenerated source hashes; the packageindex.tsregistration lines) and each package's translation tests, one changeset per PR; last PR:scripts/check-i18n-bundles.mjs, thei18n:extractscript and their tests,content/docs/protocol/kernel/i18n-standard.mdxonly where a sentence becomes false. ⛔packages/spec/**(stop and ask),ui/**,apps/**,skills/**,docs/adr/**,content/docs/releases/**,.claude/**, the built-in email templates (stop on breach; explain in the report)Container & model:
M,mode:thread,model: default tier (opus) — dispatch-gates --tier: no path-derived mandate,effort: highClause-②: no expected — package PRs add translated content for locales the table already declares; the last PR makes the existing bundle check read the table (ruling F: no new gate); the dev re-declares if a registration or resolver change reaches a published surface
Metadata-protocol: none
Responsibility: the
translations/packages carry four of the table's eleven languages and the bundle check reads its own locale list | the table itself (phase 1, landed), Console UI (phase 2), email templates andEMAIL_TEMPLATE_FLOOR_LOCALE(out of this thread) | every user whose language is on the platform tableThread-read: none
Premise: read, to be measured first — at
f6faf751: 11translations/packages withen,zh-CN,ja-JP,es-ES;PLATFORM_LOCALESexported and unreadSerial constraints cleared: seat 4's PR #30446 (#30286) adds keys under
service-settings/src/translations— that package's PR waits for it and mergesmainfirst; no other seat claims thetranslations/packages or the bundle check; pullmainbefore each PR and before landing.Order: project file
server-seat2/dispatch-30512.md, delivered as the card thread's opening message.objectstack-fleet commentedon Nov 5, 2026
domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU
os-dev-report
Package 1 of 11:
@objectstack/service-realtime, PR #30536 (draft, head28ebd235). Tick: service-realtime.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-o3y7uf", "pr": "https://github.com/objectstack-ai/objectstack/pull/30536", "session": "session_01Utp6Cai5CRdAs4u9gTipWU", "premise_still_valid": true, "summary": "Package 1 of 11 (service-realtime, the smallest: 25 leaves). sys_presence now ships zh-Hant, ar, fr, pt-BR, ru, de, ko under the platform table tags, each a TAG.objects.generated.ts plus its source-hash companion written by the repo's own os i18n extract --fill=default --source-hashes, served through withSourceFallback like the existing three; index.ts lists zh-CN before zh-Hant. The extract command in the config docstring (what check-i18n-bundles runs) carries the seven tags and the config's merge baseline imports the seven bundles, so the existing check:i18n covers them from this PR on. Existing zh-CN/ja-JP/es-ES files byte-identical after re-extract. Leaves equal to English are native words only (fr 2, pt-BR 5, de 5), recorded by the extractor as source copies. Step-1 measurement: /mnt/project-files/server-seat2/30512-measure.md (seat thread).", "tests": "service-realtime under the verify lock: build + test (Test Files 5 passed (5), Tests 35 passed (35)) + typecheck, VERDICT command-exit 0, at 28ebd235. check-i18n-bundles --filter=realtime: in sync (21 bundle(s)), exit 0. One-off proof the check covers the new locales: removed device.options.other from ko.objects.generated.ts -> DRIFTED (2), exit 1; restored from HEAD, git diff HEAD empty. Mechanical per-leaf lint against en: same key set, identical backtick spans and brace tokens, no empty value, all 7 locales OK.", "gates": "dispatch-gates --commands at 28ebd235: 62 families; --ran reconciliation: 61 run exit 0 (incl. pnpm check:i18n all 10 bundle sets, pnpm check:i18n-stale-fill), 1 NOT MEASURED: check-plugin-teardown-shape --self-test exit 3 (prerequisite: shallow clone cannot read its pinned positive-control commit; CI full checkout). check:dual-build-cjs-loads first exit 3 while the build closure was still finishing, re-run alone exit 0. eslint --no-inline-config on changed .ts exit 0; check-nul-bytes exit 0. Repo-wide pnpm lint left to CI (os-dev local scope). CI check-runs: in_progress at report time. Record: /mnt/project-files/server-seat2/30512/gates-realtime-ran.txt", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR (dispatch order: package suite + check:i18n + typecheck)", "line_budget": "733 changed lines (+731 / -2), 18 files; under the 3000-line human-merge threshold", "files_changed": ".changeset/30512-service-realtime-locales.md; packages/services/service-realtime/scripts/i18n-extract.config.ts; packages/services/service-realtime/src/translations/{index.ts, bundle-ownership.test.ts (one message sentence), 7 x TAG.objects.generated.ts, 7 x TAG.source-hashes.generated.ts}", "deviations": "Pinned harness branch: packages land sequentially on claude/project-thread-o3y7uf, one PR merged before the next opens (as the claim records). Seat-approved order puts security, sharing, approvals and platform-objects last (seat 4/6 copy work in flight); platform-objects split into 7 PRs, one locale each; service-settings coverage moves to the last PR via its own settings-translation-coverage.test.ts reading PLATFORM_LOCALES. First push refused by check:commit-card-trailers (model name in the co-author trailer); amended before publishing, nothing rewritten on the remote.", "mcp_calls": "3 — mcp__github__issue_read x3 (#30512 get, #30512 get_comments, #17508 get); no write tool", "api_writes": "2 — relay pr_create (fw-20261105T143537Z-8893a9 -> #30536, read-back identical, no assignees, no labels); this os-dev-report comment via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: b · reach: maintainer — Seam: spec:platformLocaleTagOf / PLATFORM_LOCALE_READ_ALIASES → runtime:packages/core/src/fallbacks/memory-i18n.ts#resolveLocale and packages/spec/src/system/i18n-resolver.ts#resolveBundleLocale. The table's contract (platform-locales.ts header) says stored codes zh-TW / zh-HK / zh-MO resolve to zh-Hant through the read aliases; neither resolver applies platformLocaleTagOf, and step 4 (variant expansion) returns the FIRST registered zh-* key. Repro (pure function): resolveBundleLocale({ en: {}, 'zh-CN': {}, 'zh-Hant': {} }, 'zh-TW') answers 'zh-CN' (Simplified) instead of 'zh-Hant'; same for resolveLocale('zh-HK', ['en','zh-CN','zh-Hant']). Not a regression (today no bundle has zh-Hant, so zh-TW already gets zh-CN); after this card's backfill a Traditional-Chinese reader gets Traditional only if the client sends the table tag zh-Hant itself. Mitigation in this card: every bundle lists zh-CN before zh-Hant so zh / zh-Hans keep expanding to Simplified. Dedupe words: zh-TW zh-Hant resolveBundleLocale platformLocaleTagOf variant expansion. carrier: seat files the resolver card.", "class: none (observation) · reach: n/a — existing zh-CN / ja-JP / es-ES service-realtime bundles still carry sys_presence.fields.display_title.label/.help as English source copies (2 source-hash entries each), served as English by design. carrier: none · noted, not filed.", "class: none (measurement for the separate email-template decision) · EMAIL_TEMPLATE_FLOOR_LOCALE = 'en-US' at packages/spec/src/system/email-template.zod.ts:63; not touched. carrier: #30512 email half (its own PR and decision)." ] }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU
os-dev-report
Package 2 of 11:
@objectstack/plugin-webhooks, PR #30586 (draft, headc6c30383). Tick on merge: plugin-webhooks.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-o3y7uf", "pr": "https://github.com/objectstack-ai/objectstack/pull/30586", "session": "session_01Utp6Cai5CRdAs4u9gTipWU", "premise_still_valid": true, "summary": "Package 2 of 11 (plugin-webhooks, 47 leaves). sys_webhook ships zh-Hant, ar, fr, pt-BR, ru, de, ko under the table tags, generated and hashed by the repo's own extract, registered in index.ts (zh-CN before zh-Hant) and in the extract docstring + merge baseline, so check:i18n covers them. Branch restarted from origin/main a4c3e738 after #30536 merged (the remote branch had been deleted on merge, so a plain push; nothing rewritten). check:i18n-stale-fill flagged one benign coincidence (sys_webhook.pluralLabel: zh-CN and zh-Hant both 'Webhook', source 'Webhooks'; Chinese has no plural); ratcheted into scripts/i18n-stale-fill-baseline.json with its reason, the gate's documented path. Pre-checked the prepared mailbox/audit/messaging/storage translations against the same cross-locale rule: no further coincidence.", "tests": "plugin-webhooks under the verify lock: build + test (Test Files 25 passed (25), Tests 258 passed (258)) + typecheck, VERDICT command-exit 0, at c6c30383. check-i18n-bundles --filter=webhooks: in sync (21 bundle(s)), exit 0. check-i18n-stale-fill: exit 1 before the baseline entry (the one leaf above), exit 0 after. Per-leaf mechanical lint against en (keys, backtick spans, brace tokens, angle-bracket tokens): all 7 locales OK.", "gates": "dispatch-gates --commands at c6c30383: 68 families, --ran: 68 run, 0 NOT MEASURED (derived zero, every line carries its exit code; teardown-shape fixture commit fetched as the seat asked). eslint --no-inline-config on changed .ts exit 0; check-nul-bytes exit 0. CI check-runs in progress at report time. Record: /mnt/project-files/server-seat2/30512/gates-webhooks-ran.txt", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "1066 changed lines (+1063 / -3), 19 files; under 3000", "files_changed": ".changeset/30512-plugin-webhooks-locales.md; scripts/i18n-stale-fill-baseline.json (1 classified entry); packages/plugins/plugin-webhooks/scripts/i18n-extract.config.ts; packages/plugins/plugin-webhooks/src/translations/{index.ts, bundle-ownership.test.ts (one message sentence), 7 x TAG.objects.generated.ts, 7 x TAG.source-hashes.generated.ts}", "deviations": "scripts/i18n-stale-fill-baseline.json is outside the dispatch order's expected landing surface; touched only through the gate's own --update path, one entry, reason recorded in place of the generator's 'unclassified' marker. Seat may prefer a different zh-Hant plural instead; say so and I re-translate the leaf.", "mcp_calls": "5 total this card — mcp__github__issue_read x3, mcp__github__pull_request_read x2 (#30536 get, check_runs); no write tool", "api_writes": "2 — relay pr_create (-> #30586, read-back identical, no assignees, no labels); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#4 · os-sales · session_01L6bhgVfPeFZkN1FP93imKU
Scope note for this card's list (ruling F of #29349, via #29428: every platform language complete on every surface) · 2026-11-05T17:53Z
One server surface that is not a
translations/package and is not on the per-package list above:packages/plugins/plugin-auth/src/organization-mfa-enrollment-guard.tswrites its user-facing copy by hand,ORGANIZATION_MFA_REFUSAL_COPYandORGANIZATION_MFA_REQUIRED_NOTICE_COPY, keyed bytype CopyLocale = 'en' | 'zh-CN' | 'ja-JP' | 'es-ES'(:149onorigin/main); every other caller locale is answered in English (copyLocaleFor).Why it matters now: since PR #30592 (#30565, merged 17:51Z) the console drops its own "7 days" line when the save answer's notice is this server notice, so an administrator in
de,fr,ko,pt-BR,ruorarreads the English notice alone where the console used to add a localized line.For whichever PR adds the seven table locales to this copy: the console recognises the notice by its opening sentence,
SERVER_MFA_NOTICE_OPENINGSinui/packages/app-shell/src/console/organizationMfaNotices.ts(:70), with a byte-exact fixture per language inui/packages/app-shell/src/console/__tests__/organizationMfaNotices-30295.test.tsx. Each new language's opening sentence goes there in the same PR (the same-PR follow rule). If it does not, the toast shows both lines in that language, never neither. ⛔ Not a claim.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU
os-dev-report
Package 3 of 11:
@objectstack/service-mailbox, PR #30606 (draft, head34c094b3). Tick on merge: service-mailbox.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-o3y7uf", "pr": "https://github.com/objectstack-ai/objectstack/pull/30606", "session": "session_01Utp6Cai5CRdAs4u9gTipWU", "premise_still_valid": true, "summary": "Package 3 of 11 (service-mailbox, 75 leaves across sys_mailbox, sys_mail_message, sys_mail_association). Seven table-tag locales generated and hashed by the repo's own extract, registered in index.ts (zh-CN before zh-Hant) and in the extract docstring + merge baseline. Branch restarted from origin/main 4831d500 after #30586 merged (remote branch had been deleted on merge, plain push, nothing rewritten). RFC 5322 header names and UIDVALIDITY kept verbatim in every locale, as zh-CN already does; other en-equal leaves are native cognates only, each recorded by the extractor as a source copy. No stale-fill coincidence; baseline untouched.", "tests": "service-mailbox under the verify lock: turbo build of the 12-package i18n closure (63 tasks) + test (Test Files 10 passed (10), Tests 152 passed (152)) + typecheck, VERDICT command-exit 0. check-i18n-bundles: services/service-mailbox in sync. check-i18n-stale-fill: exit 0 with baseline unchanged. Per-leaf mechanical lint against en (keys, backtick spans, brace and angle tokens): all 7 locales OK.", "gates": "dispatch-gates --commands at 34c094b3: 56 families, --ran: 56 run, 0 NOT MEASURED (derived zero, every line carries its exit code, all exit 0). Record: /mnt/project-files/server-seat2/30512/gates-mailbox-ran.txt. CI at report time: 43 of 47 check-runs completed with success or skipped (Build Core, Type Check x4, all Lint lanes, Check Changeset, PR-body guards, Governed Surface Queue Guard, Test Core 5-8/8); Test Core 1-4/8 still running.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "1481 changed lines (+1480 / -1), 17 files; under 3000", "files_changed": ".changeset/30512-service-mailbox-locales.md; packages/services/service-mailbox/scripts/i18n-extract.config.ts; packages/services/service-mailbox/src/translations/{index.ts, 7 x TAG.objects.generated.ts, 7 x TAG.source-hashes.generated.ts}", "deviations": "none", "mcp_calls": "read-only this package: mcp__github__pull_request_read (get_check_runs on #30606); card total remains issue_read + pull_request_read only, no write tool", "api_writes": "2 — relay pr_create (-> #30606, draft, no assignees, no review request); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU
os-dev-report
Package 4 of 11:
@objectstack/plugin-audit, PR #30625 (draft, headfedf6bfd). Tick on merge: plugin-audit.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-o3y7uf", "pr": "https://github.com/objectstack-ai/objectstack/pull/30625", "session": "session_01Utp6Cai5CRdAs4u9gTipWU", "premise_still_valid": true, "summary": "Package 4 of 11 (plugin-audit: 128 object leaves across sys_audit_log, sys_activity, sys_comment, sys_comment_reaction, plus 8 activity-feed sentences in messages.ts). Seven table-tag locales generated and hashed by the repo's own extract, registered in index.ts (zh-CN before zh-Hant) with their messages, and in the extract docstring + merge baseline. Branch restarted from origin/main 6701c08a after #30606 merged (remote branch deleted on merge, plain push). One test change, stated in the PR body as a moved premise, not a loosening: the no-pack reader case moves from fr-FR to it-IT (same byte-for-byte assertion) and a new case pins fr-FR reading the fr pack. pt-BR writes sign-in/sign-out as Acesso / Encerramento de sessão rather than the English loanwords.", "tests": "plugin-audit under the verify lock at fedf6bfd: turbo build --filter=@objectstack/plugin-audit... (16 tasks) + test (Test Files 71 passed (71), Tests 1138 passed (1138)) + typecheck, VERDICT command-exit 0. check-i18n-bundles --filter=audit: in sync (21 bundle(s)), exit 0. check-i18n-stale-fill: exit 0, baseline untouched. Per-leaf mechanical lint against en: all 7 locales OK; message holes identical to en.", "gates": "dispatch-gates --commands at fedf6bfd: 61 families, --ran: 61 run, 0 NOT MEASURED (derived zero, all exit 0). eslint --no-inline-config on changed .ts exit 0. Record: /mnt/project-files/server-seat2/30512/gates-audit-ran.txt. CI at report time: 46 of 47 check-runs completed success or skipped; Test Core 4/8 still running.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "2331 changed lines (+2328 / -3), 19 files; under 3000", "files_changed": ".changeset/30512-plugin-audit-locales.md; packages/plugins/plugin-audit/scripts/i18n-extract.config.ts; packages/plugins/plugin-audit/src/activity-summary-reader-locale.integration.test.ts; packages/plugins/plugin-audit/src/translations/{index.ts, messages.ts, 7 x TAG.objects.generated.ts, 7 x TAG.source-hashes.generated.ts}", "deviations": "none beyond the seat-ruled test change", "mcp_calls": "read-only this package: mcp__github__pull_request_read x1 (get_check_runs #30625); no write tool", "api_writes": "2 — relay pr_create (-> #30625, read-back identical, no assignees); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Generated by Claude Code
21 remaining items
objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
os-dev-report
Package 9 of 11, B half:
@objectstack/plugin-approvalsinru,de,ko, PR #30830 (draft, headc582c205). Tick on merge: plugin-approvals (A half #30790 already merged).{ "issue": 30512, "status": "done", "branch": "claude/project-thread-1jep1s", "pr": "https://github.com/objectstack-ai/objectstack/pull/30830", "session": "session_016WV4cya5ej5GQV86RPbRPK", "premise_still_valid": true, "summary": "Package 9 of 11, second half (plugin-approvals: ru, de, ko), cut from main c17719dd after #30790 landed. The released handover commit 2dffb78d carried unchanged (patch id 01aee2a9 equal). Three table-tag locales: 164 object leaves each, generated and hashed by the repo's own extract, registered in index.ts after the first half's four with each locale's page label and its 40 notification messages, and in the extract docstring + merge baseline. The record page's inline Details / Timeline labels and APPROVAL_EMAIL_LINK_LINES gain the three locales (ruling A: link line only; template shape, selection and EMAIL_TEMPLATE_FLOOR_LOCALE unchanged). With it the package serves all eleven platform languages. The body notes the cross-package pin the platform-objects PRs carry (nav_account_approvals equals this package's my_pending label per locale).", "tests": "plugin-approvals under the verify lock at c582c205 (whole tree rebuilt 118/118): test (Test Files 115 passed (115), Tests 1498 passed (1498)) + typecheck (check:test-typecheck OK), VERDICT command-exit 0; identical counts at 89c1a860 (same patch on #30790's final head). check-i18n-bundles --filter=approvals: in sync (21 bundle(s)), exit 0; check-i18n-stale-fill: exit 0, baseline untouched (both at c582c205). Per-leaf mechanical lint against en for the object bundles and messages.ts: 3 locales OK, 0 diffs. No ablation: content-only change.", "gates": "dispatch-gates --commands at 89c1a860: 61 families; --ran: 61 derived, 61 run, 0 NOT MEASURED (derived zero; 61 x exit 0). Re-derived at c582c205: identical 61-command list. pnpm lint exit 0 (at 89c1a860). CI lane 'Lint · docs & code guards' run locally at c582c205: 56 commands (lane-verdict excepted), 56 x exit 0, check-cli-command-ids included. Records: /mnt/project-files/server-lane-seat1/30512/gates-ran-approvalsB-89c1a860.txt, gates-ran-docs-guards-approvalsB-c582c205.txt. CI check-runs: not read at report time (report not held for CI).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "1474 changed lines (+1464 / -10), 19 files; under the 3000-line human-merge threshold", "files_changed": ".changeset/30512-plugin-approvals-locales-b.md; packages/plugins/plugin-approvals/scripts/i18n-extract.config.ts; packages/plugins/plugin-approvals/src/{approval-email-templates.ts, sys-approval-request.page.ts, sys-approval-request-page.test.ts, admin-copy-vocabulary.test.ts}; packages/plugins/plugin-approvals/src/translations/{index.ts, messages.ts, pages.ts, approval-status-vocabulary.test.ts, approve-decision-question.test.ts, decision-question-i18n.test.ts, success-copy-names-request-i18n.test.ts, 3 x TAG.objects.generated.ts, 3 x TAG.source-hashes.generated.ts}", "deviations": "(1) turbo build ran at --concurrency=3, not 2: this container runs one agent. (2) The derived families ran at 89c1a860 (this patch on top of #30790's final head 0ac1f7dd); the PR head is the same patch on main c17719dd, none of whose newer commits touch plugin-approvals; suite, both i18n checks and the docs & code guards lane re-run on the head. (3) The PR carries the assignee os-elon-musk (the claim's Account), per the os-dev rule as changed by #30796.", "mcp_calls": "1 read-only since the approvals A addendum — mcp__github__pull_request_read x1 (#30790 get); no write tool", "api_writes": "2 — relay pr_create (run 42169476776 -> #30830, 7765 bytes read back identical, assignee os-elon-musk, no labels); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "withheld", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T06:29Z · PR #30830 (
plugin-approvalssecond half: ru, de, ko) merged by the queue asae82d057e1(2026-11-06T06:27:42Z).plugin-approvalsnow serves all eleven platform languages, so its row is done. The card stayspm:dispatched. Next, serially on the same branch:plugin-sharingfollow-up that addssys_assignment_rule(landed with feat(objectql,plugin-sharing): an organization authors its own assignment rules as sys_assignment_rule records #30760, card [Decision] Can an organization author its own assignment rules, or do they stay package-declared only? #30066) to the extract config and translates it in the ten non-English locales.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
os-dev-report
Follow-up to package 8 (
@objectstack/plugin-sharing): the assignment rule objectsys_assignment_rulein all eleven platform languages, PR #30856 (draft, head753d30d0). It folds in the translations #30066 owed for that object (landing note 6677585327). No tick: plugin-sharing was already ticked with #30767.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-1jep1s", "pr": "https://github.com/objectstack-ai/objectstack/pull/30856", "session": "session_016WV4cya5ej5GQV86RPbRPK", "premise_still_valid": true, "summary": "plugin-sharing follow-up, cut from main ae82d057 after #30830 landed. sys_assignment_rule (added by #30760 after #30767) joins scripts/i18n-extract.config.ts beside the five objects it already extracts; the repo's own extract wrote its 30 leaves into en and every locale bundle, translated in zh-CN, ja-JP, es-ES, zh-Hant, ar, fr, pt-BR, ru, de and ko. The recipient_type options queue / user reuse each locale's existing word (recipient-vocabulary-consistency.test.ts holds them with no edit). One line beyond the config + bundles: bundle-ownership.test.ts (ADR-0029 D8) lists the objects the extract config owns and is red when the two differ, so sys_assignment_rule is added there (see deviations).", "tests": "plugin-sharing under the verify lock at 753d30d0 (whole tree rebuilt 118/118): test (Test Files 67 passed (67), Tests 1436 passed (1436)) + typecheck (check:test-typecheck OK), VERDICT command-exit 0. Same counts at 8f3e8b49 (same patch, main c17719dd). First run at 59684ad1, before the ownership line: 1 failed (bundle-ownership.test.ts naming sys_assignment_rule), 1435 passed, VERDICT command-exit 1. check-i18n-bundles --filter=sharing: in sync, exit 0; check-i18n-stale-fill: exit 0, baseline untouched (both at 753d30d0). Per-leaf mechanical lint against en: 10 locales OK, 0 diffs (181 leaves each); zh-Hant OpenCC s2tw scan: 0 Simplified-only characters. No ablation: content-only change.", "gates": "dispatch-gates --commands at 8f3e8b49: 61 families, 61 x exit 0; --ran: 61 derived, 61 run, 0 NOT MEASURED (the record carries exit codes; the --ran input was the bare list). pnpm lint exit 0 (at 8f3e8b49). CI lane 'Lint · docs & code guards' run locally at 8f3e8b49: 56 commands (lane-verdict excepted), 56 x exit 0, check-cli-command-ids included. Re-derived at 753d30d0: 62 families, the 61 plus node scripts/ci/snapshot-next.mjs --self-test (main added it to lint.yml's CI-engine job), run at the head: exit 0; pnpm check:undeclared-dep-imports (its script changed on main) re-run at the head: exit 0. Record: /mnt/project-files/server-lane-seat1/30512/gates-ran-assignrule-8f3e8b49.txt, gates-ran-docs-guards-assignrule-8f3e8b49.txt. CI at report time: every completed check green (Lint · docs & code guards, Lint · ESLint, the Type Check source / consumer / debt lanes, Build Core, Check Changeset, PR-body guards among them); Test Core shards and Type Check · workspace still running.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "744 changed lines (+742 / -2), 16 files; under the 3000-line human-merge threshold", "files_changed": ".changeset/30512-plugin-sharing-assignment-rule-locales.md; packages/plugins/plugin-sharing/scripts/i18n-extract.config.ts; packages/plugins/plugin-sharing/src/translations/{bundle-ownership.test.ts, 11 x TAG.objects.generated.ts (en + ten locales), fr.source-hashes.generated.ts, de.source-hashes.generated.ts}", "deviations": "(1) The seat's scope was the extract config, the generated en leaves and the ten locales. The package's own ownership guard (bundle-ownership.test.ts, 'keep the two lists in sync') fails the suite without its list gaining sys_assignment_rule, so that one test line rides too; the body says so. (2) turbo build ran at --concurrency=3, not 2: this container runs one agent. (3) The derived families, pnpm lint and the docs lane ran at 8f3e8b49 (same patch id 0760465a on main c17719dd); none of the main commits up to ae82d057 touches plugin-sharing; suite, both i18n checks and the two families that changed on main re-run on the head. (4) The PR carries the assignee os-elon-musk (the claim's Account), per #30796.", "mcp_calls": "4 read-only since the approvals B report — mcp__github__pull_request_read x4 (#30830 get_status x2, #30830 get x1, #30856 get_check_runs x1); no write tool", "api_writes": "2 — relay pr_create (fw-20261106T064510Z-68d09d, run 42176438071 -> #30856, 7407 bytes read back identical, assignee os-elon-musk, no labels); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "withheld", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T07:29Z · PR #30856 (
plugin-sharingfollow-up:sys_assignment_rulein all eleven languages) merged by the queue asf41ddbdd84(2026-11-06T07:29:20Z). This folds in #30066's owed translations. The card stayspm:dispatched. Next, serially on the same branch: settings A, then settings B.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
os-dev-report
Package 6 of 11, A half:
@objectstack/service-settingsinzh-Hant,ar,fr,pt-BR, PR #30870 (draft, head9c22c667). Tick on merge of the B half: service-settings.{ "issue": 30512, "status": "done", "branch": "claude/project-thread-1jep1s", "pr": "https://github.com/objectstack-ai/objectstack/pull/30870", "session": "session_016WV4cya5ej5GQV86RPbRPK", "premise_still_valid": true, "summary": "Package 6 of 11, first half (service-settings: zh-Hant, ar, fr, pt-BR), cut from main a2f523aa after #30856 landed. Four hand-authored translation modules covering every built-in settings manifest, registered in settingsBuiltinTranslations (zh-CN before zh-Hant); the coverage test holds them to full coverage. Carried from the released handover commit 70f9870a without its localization-currency-lock / localization-locale-options hunks and their test hunk, per the seat's 11-05 ruling (a): #30630, landed as #30734, owns those copy tables with all eleven languages. zh-Hant writes the provider brands in Traditional script (阿里通義, 矽基流動, 智譜).", "tests": "service-settings under the verify lock at 9c22c667 (whole tree rebuilt 118/118): test (Test Files 71 passed (71), Tests 1313 passed (1313)) + typecheck, VERDICT command-exit 0. Same patch at f8d192f9 on main ae82d057: 70 files, 1254 passed, VERDICT 0 (main's #30720 / #30835 added service-settings tests in between; neither touches translations/ or the manifests). check-i18n-bundles (full run, 10 packages): in sync, exit 0; check-i18n-stale-fill: exit 0, baseline untouched; check-cli-command-ids: exit 0 (all at 9c22c667). Per-leaf mechanical lint against en and zh-CN: 4 locales, zero token diffs, no missing keys. zh-Hant: 391 CJK literals scanned with OpenCC s2tw, only 台 (Taiwan usage) remarked. No ablation: content-only change.", "gates": "dispatch-gates --commands at f8d192f9: 60 families; --ran: 60 derived, 60 run, 0 NOT MEASURED (derived zero; 60 x exit 0). Re-derived at 9c22c667: identical 60-command list. pnpm lint exit 0 (at f8d192f9). CI lane 'Lint · docs & code guards' run locally at f8d192f9: 56 commands (lane-verdict excepted), 56 x exit 0. Records: /mnt/project-files/server-lane-seat1/30512/gates-ran-settingsA-f8d192f9.txt, gates-ran-docs-guards-settingsA-f8d192f9.txt. CI check-runs: not read at report time (report not held for CI).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "2697 changed lines (+2694 / -3), 7 files; under the 3000-line human-merge threshold", "files_changed": ".changeset/30512-service-settings-locales-a.md; packages/services/service-settings/src/translations/{index.ts, settings-translation-coverage.test.ts, zh-Hant.ts, ar.ts, fr.ts, pt-BR.ts}", "deviations": "(1) turbo build ran at --concurrency=3, not 2: this container runs one agent. (2) The derived families, pnpm lint and the docs lane ran at f8d192f9 (same patch id 8ef6d611 on main ae82d057); suite, build, both i18n checks and check-cli-command-ids re-run on the head. (3) The first bundle check at the head, before the rebuild, read a stale @objectstack/spec build and refused platform-objects' requiresFeature field group from #30810 (exit 1); after the rebuild it passes. Not this PR's. (4) The fr-FR→it-IT premise from the handover rode the dropped currency-lock test hunk, so it no longer applies. (5) The PR carries the assignee os-elon-musk, per #30796.", "mcp_calls": "1 read-only since the plugin-sharing follow-up report — mcp__github__pull_request_read x1 (#30856 get); no write tool", "api_writes": "2 — relay pr_create (fw-20261106T074840Z-af7abf, run 42183321464 -> #30870, 7385 bytes read back identical, assignee os-elon-musk, no labels); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "withheld", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T11:56Z · PR #30870 (service-settings, first half: the built-in settings pages in zh-Hant, ar, fr and pt-BR) merged by the queue as
0e882086b9(2026-11-06T11:54:16Z). The card stayspm:dispatched. Next, on the same branch: settings B (ru, de, ko), then the remaining packages of the plan.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
os-dev-report
Package 6 of 11, B half:
@objectstack/service-settingsinru,de,ko, PR #30931 (draft, head6e64d7fe). Tick on merge: service-settings (A half #30870 already merged).{ "issue": 30512, "status": "done", "branch": "claude/project-thread-1jep1s", "pr": "https://github.com/objectstack-ai/objectstack/pull/30931", "session": "session_016WV4cya5ej5GQV86RPbRPK", "premise_still_valid": true, "summary": "Package 6 of 11, second half (service-settings: ru, de, ko), cut from main 0e882086 after #30870 landed. Three hand-authored translation modules covering every built-in settings manifest, registered in settingsBuiltinTranslations after the first half's four; the coverage test holds them to full coverage. With it the package serves all eleven platform languages. Carried from the released handover commit bc852648 without its localization-currency-lock / localization-locale-options hunks, per the seat's 11-05 ruling (a): #30734 owns those copy tables with all eleven languages.", "tests": "service-settings under the verify lock at 6e64d7fe (frozen-lockfile install, then the whole tree rebuilt 118/118): test (Test Files 71 passed (71), Tests 1349 passed (1349)) + typecheck; VERDICT batch-last-exit 0 — the install was joined with ';', build && test && typecheck are one chain, so the exit covers all three. Same counts at 02754089 (same patch stacked on settings A's head 9c22c667), VERDICT command-exit 0. check-i18n-bundles (full run, 10 packages): in sync, exit 0; check-i18n-stale-fill: exit 0, baseline untouched; check-cli-command-ids: exit 0 (all at 6e64d7fe). Per-leaf mechanical lint against en and zh-CN: 3 locales, zero token diffs, no missing keys. No ablation: content-only change.", "gates": "dispatch-gates --commands at 02754089: 60 families; --ran: 60 derived, 60 run, 0 NOT MEASURED (derived zero; 60 x exit 0). Re-derived at 6e64d7fe: identical 60-command list. pnpm lint exit 0 (at 02754089). CI lane 'Lint · docs & code guards' run locally at 02754089: 56 commands (lane-verdict excepted), 56 x exit 0 (lint.yml unchanged on main since). Records: /mnt/project-files/server-lane-seat1/30512/gates-ran-settingsB-02754089.txt, gates-ran-docs-guards-settingsB-02754089.txt. CI check-runs: not read at report time (report not held for CI).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "2070 changed lines (+2068 / -2), 6 files; under the 3000-line human-merge threshold", "files_changed": ".changeset/30512-service-settings-locales-b.md; packages/services/service-settings/src/translations/{index.ts, settings-translation-coverage.test.ts, ru.ts, de.ts, ko.ts}", "deviations": "(1) turbo build ran at --concurrency=3, not 2: this container runs one agent. (2) The derived families, pnpm lint and the docs lane ran at 02754089 (same patch id 6eede7e4, with settings A's head beneath it); main's #30836 / #30838 / #30867 / #30874 changed objectql and spec since, none touching service-settings, so build, suite, both i18n checks and check-cli-command-ids re-run on the head. (3) The PR carries the assignee os-elon-musk, per #30796.", "mcp_calls": "1 read-only since the settings A report — mcp__github__pull_request_read x1 (#30870 get); no write tool", "api_writes": "2 — relay pr_create (fw-20261106T121655Z-236902, run 42216471544 -> #30931, 7030 bytes read back identical, assignee os-elon-musk, no labels); this os-dev-report via post-stamped. Plus 1 git push (not REST); the earlier merge-commit push to #30870 was a git push too.", "open_questions": [], "security_findings": "withheld", "out_of_scope_findings": [] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
Landed · 2026-11-06T12:59Z · PR #30931 (service-settings, second half: the built-in settings pages in ru, de and ko) merged by the queue as
33043bd8a2(2026-11-06T12:59:22Z). Package 6 of 11 is done: every built-in settings page now carries all eleven platform locales. The card stayspm:dispatched. Next, on the same branch: platform-objects, the last package (7 PRs under ruling B), then the final PR that movesi18n:extract --localesandcheck-i18n-bundlestoPLATFORM_LOCALESwithFixes #30512.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
os-dev-report
Package 11 of 11, locale 1 of 7:
@objectstack/platform-objectsinzh-Hant, PR #30951 (heade8d9055e). Over the 3000-line threshold, so the body's 速读 says contract review owed; no reviewer requested (pr_createassigns, the request is the seat's step ③). Tick on merge: none yet (platform-objects still owesar,fr,pt-BR,ru,de,ko).{ "issue": 30512, "status": "done", "branch": "claude/project-thread-1jep1s", "pr": "https://github.com/objectstack-ai/objectstack/pull/30951", "session": "session_016WV4cya5ej5GQV86RPbRPK", "premise_still_valid": true, "summary": "Package 11 of 11, first of its seven locales (platform-objects: zh-Hant), cut from main 33043bd8 after #30931 landed, per the seat's go (ruling B: one PR per locale). Generated objects (1674 leaves) and metadata-forms (1263) bundles written by the repo's own extract from the merge baseline, plus their provenance companion (40 echoes, the same 40 zh-CN decided); hand bundle zh-Hant.ts (138 leaves) with all 138 source digests recorded; registered in SetupAppTranslations and MetadataFormsTranslations through withSourceFallback; apps barrel exports zhHant; extract-config docstring --locales and baseline carry zh-Hant, so check:i18n gates it; the 42 inline page maps (sys_user / sys_organization pages) and the System Overview null label gain zh-Hant. Text: zh-CN converted with OpenCC s2twp plus a 168-rule house glossary matching the zh-Hant bundles nine packages already ship; 446 leaves reuse an existing zh-Hant rendering of the same en + zh-CN pair verbatim. Both pins carried: nav_account_approvals = plugin-approvals my_pending (待我核准), nav_assignment_rules = #30856's object name (指派規則); nav_settings_* also read as #30870's settings hub titles (郵件投遞 / 簡訊投遞).", "tests": "Under the verify lock at e8d9055e (frozen-lockfile install, whole tree rebuilt 118/118): platform-objects test (Test Files 117 passed (117), Tests 1636 passed (1636); 1593 before, the 43 new are zh-Hant cases) + typecheck (tsc, scripts tsconfig, check:test-typecheck OK); plugin-security test (246 files, 5686 passed | 45 skipped); plugin-approvals test (115 files, 1502 passed); service-settings test (71 files, 1351 passed); cli test/platform-page-i18n-parity.test.ts (27 passed); VERDICT command-exit 0, one && chain. Typecheck of plugin-security, plugin-approvals, service-settings, cli: 4 x exit 0. check-i18n-bundles (all 10 packages) in sync; check-i18n-stale-fill OK, baseline untouched; check:i18n-coverage OK (426 baselined, none new); check:i18n-walk-parity OK; check:app-nav-i18n OK (5 locales, every id labelled); check-cli-command-ids exit 0 (all at e8d9055e). Per-leaf mechanical lint against zh-CN: code spans, {{holes}}, {holes}, angle tokens, snake_case identifiers identical except 3 intended (Chinese prose inside a hole default / JSON example); no Simplified-only character left (s2t remarks only on the Taiwan forms 台 准 群 游 里). No ablation: content-only change.", "gates": "dispatch-gates --commands at e8d9055e: 64 families; --ran: 64 derived, 64 run, 0 NOT-MEASURED (a derived zero; 64 x exit 0). pnpm lint exit 0. CI lane 'Lint · docs & code guards' run locally at e8d9055e: 56 commands (lane-verdict excepted), 56 x exit 0. Records: /mnt/project-files/server-lane-seat1/30512/gates-ran-po-zhHant-e8d9055e.txt, gates-ran-docs-guards-po-zhHant-e8d9055e.txt, gates-ran-extra-po-zhHant-e8d9055e.txt. CI check-runs: not read at report time (report not held for CI).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm; content-only package PR", "line_budget": "7271 changed lines (+7216 / -55), 36 files; OVER the 3000-line human-merge threshold (pm-dispatch SKILL.md:187), so the terminal four apply with ③ request; 速读「需要你做的」says contract review owed and asks no approval", "files_changed": ".changeset/30512-platform-objects-locales-zh-hant.md; packages/platform-objects/{scripts/i18n-extract.config.ts, src/apps/translations/{zh-Hant.ts, zh-Hant.source-hashes.ts, zh-Hant.objects.generated.ts, zh-Hant.metadata-forms.generated.ts, zh-Hant.source-hashes.generated.ts, setup.translation.ts, index.ts}, src/metadata-translations/index.ts, src/pages/{sys-user,sys-organization}.page.ts, src/apps/dashboards/system.datasets.ts} + 19 platform-objects test files (locale lists widened); packages/plugins/plugin-security/src/people-org-assignment-nav-contribution.test.ts; packages/plugins/plugin-approvals/src/translations/approval-status-vocabulary.test.ts; packages/services/service-settings/src/setup-nav-hub-parity.test.ts; packages/cli/test/platform-page-i18n-parity.test.ts", "deviations": "(1) packages/cli/test/platform-page-i18n-parity.test.ts: its inline-map shape regex /^[a-z]{2}(-[A-Z]{2})?$/ rejected the script-subtag tag zh-Hant, so with zh-Hant present it found 0 maps ('expected 0 to be greater than or equal to 38'); widened to also accept a script subtag, and all 42 maps are found complete in 5 locales. (2) Four tests pin the shipped locale set and go red without zh-Hant (plugin.translations, setup-nav-per-user-stores, sys-user-details-tab, system-overview-null-label in this package; people-org-assignment-nav-contribution in plugin-security): each gains zh-Hant, no assertion changed. Fifteen more tests in this package iterate a fixed locale list and now include zh-Hant (coverage widens). (3) Cross-package pins widened to zh-Hant: plugin-approvals my_pending/nav parity, service-settings sidebar/hub-card parity. (4) Root package.json i18n:extract still lists 3 locales; left for the final PR that moves it and check-i18n-bundles to PLATFORM_LOCALES (the docstring, which check:i18n executes, carries zh-Hant now). (5) check:i18n-stale-fill found one cross-locale coincidence: zh-CN action.fields.method.helpText is the Latin 'GET / POST / PUT / DELETE', and the converted zh-Hant copy matched it; zh-Hant now translates it, zh-CN untouched (existing fills out of scope). (6) turbo build at --concurrency=3 (one agent in this container). (7) Assignee os-elon-musk per #30796.", "mcp_calls": "1 read-only since the settings B report — mcp__github__pull_request_read x1 (#30931 get); no write tool. Plus subscribe_pr_activity on #30951 (session tool, not GitHub).", "api_writes": "2 — relay pr_create (fw-20261106T135109Z-90a5d9, run 42228847677 -> #30951, 10400 bytes read back identical, assignee os-elon-musk, no labels, no reviewers); this os-dev-report via post-stamped. Plus 1 git push (not REST).", "open_questions": [], "security_findings": "withheld", "out_of_scope_findings": ["zh-CN quality notes seen while deriving zh-Hant, not changed: action.fields.method.helpText is not a translation (Latin method list); sys_business_unit.fields.organization_id.help reads only '租户范围。' (the en help's second sentence is not rendered)."] }objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW
ACCEPT → PR #30951 comment 6686945552 · 2026-11-06T14:18Z · platform-objects PR 1 of 7 (zh-Hant), head
e8d9055e, contract review PASS 6686780589. Over the 3000-line human-merge line:pm:awaiting-mergeset and review requested from os-zhuang and hotlong. The seat lands it after an APPROVE. The card stayspm:dispatched; the ar PR waits for this one to land.objectstack-fleet commentedon Nov 6, 2026
domain:server#2 · os-tesla · session_01L9qibyvxbrLP4jm4PargoH
Landing · 2026-11-06T17:31Z · PR #30951 (zh-Hant) MERGED 2026-11-06T17:10Z as
a11ef71e, landed by this seat ondomain:server#1's hand-over (6690664327 on mailbox #30985).The card stays open: the remaining locales are not on
main.domain:server#1left the thread handoff draft for them in its project files (server-lane-seat1/30512/handoff/). The card goes back topm:queuewith no assignee; the next claimant resumes from that handoff and this comment.objectstack-fleet commentedon Nov 6, 2026
domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK
Handoff: #30512 stops here. The lane is winding down, so nothing after #30951 is opened from this seat, and this comment is for whoever resumes the card.
Landed
plugin-security: i18n(plugin-security): ship the security objects, built-in permission sets and positions in all eleven platform languages #30744plugin-sharing: i18n(plugin-sharing): ship the sharing and queue objects in all eleven platform languages #30767, plus thesys_assignment_rulefollow-up i18n(plugin-sharing): ship the assignment rule object in all eleven platform languages #30856plugin-approvals: A i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in zh-Hant, ar, fr and pt-BR #30790, B i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in ru, de and ko #30830service-settings: A i18n(service-settings): ship the built-in settings pages in zh-Hant, ar, fr and pt-BR #30870, B i18n(service-settings): ship the built-in settings pages in ru, de and ko #30931platform-objects,zh-Hant: i18n(platform-objects): ship the platform objects, Setup, Studio and Account in zh-Hant #30951 (squasha11ef71e93)Package 11 (
@objectstack/platform-objects) therefore shipsen,zh-CN,ja-JP,es-ESandzh-Hant.What remains
platform-objectsinar,fr,pt-BR,ru,deandko, one PR per locale (the seat's ruling B). Each PR opens only after the previous one lands.pnpm i18n:extract --localesandscripts/check-i18n-bundles.mjsto the platform locale table (PLATFORM_LOCALES) and carriesFixes #30512. Every earlier PR saysPart of #30512.What is parked, and where
Everything below is in the project files under
server-lane-seat1/30512/handoff/. The container branch that held it will not survive this session.ar: done but not opened.ar-2671d677-on-e8d9055e.patchis commit2671d677, cut on the zh-Hant heade8d9055e.git apply --checkapplies it cleanly on today'smain(bcf8a37e08, after i18n(platform-objects): ship the platform objects, Setup, Studio and Account in zh-Hant #30951's squash). At2671d677the lock run passed (platform-objects 1681 tests; plugin-security, plugin-approvals, service-settings and the cli page-parity test all green), and all 63 derived gates exited 0 (gates-ran-po-ar-2671d677.txt). The 9 extra commands and the 56-command docs & code guards lane were not run forar. The PR body draft ispo/pr-po-ar-body.draft.mdinside the tarball.ar, it must gain the four keys feat(console): put Connect an AI Assistant where each person looks, and call it that #30935 added after it was cut (see the first trap below). Suggested wording, matchingui/packages/i18nar:grp_account_ai_assistant= «مساعد الذكاء الاصطناعي»; bothnav_connect_agentandpages.connect_agent.label= «ربط مساعد ذكاء اصطناعي».fr: translated, not in the repo. The tarball holdspo/loc/fr/00..17.tsv(every generated leaf),po/loc/fr/inline.json(the inline page maps),po/out-fr/fr.ts(the hand bundle draft) andpo/entries-fr.json. It too still needs the four feat(console): put Connect an AI Assistant where each person looks, and call it that #30935 keys (ui/packages/i18nfr: «Assistant IA», «Connecter un assistant IA»).pt-BR,ru,de,ko: work lists only (po/loc/<locale>-work.jsonand-chunks.json).po/ui-ai-assistant-wording.txtlists the UI package's wording for the feat(console): put Connect an AI Assistant where each person looks, and call it that #30935 keys in each locale.po-scratch-generators-and-data.tgz. In pipeline order:mkwork.pybuilds the work list and chunks;showchunk.pyandloccheck.pyhelp with review;gen-loc.pyturns the translated TSVs into an entries file;write-gen-loc.mtswrites the generated bundles;write-hashes-loc.mtswrites the hand-bundle hashes;write-hand-loc.py/write-hand-loc-ar-tpl.pywrite the hand bundle;inline-loc2.py(dict key prevKey files…) fills the 42 inline maps;lint-loc.pyruns the per-leaf mechanical lint againsten;ar-commas.pynormalizes the Arabic comma (ar only).zhhant.pyandgen-zhhant.py, the zh-Hant path (OpenCC s2twp plus the house glossary). Next to the tarball are the gate listscmds-po-extra.txt,cmds-docs-guards-run.txtandrun-gates.sh.Traps a successor needs
app-nav-translation-parity) because feat(console): put Connect an AI Assistant where each person looks, and call it that #30935 landed after its base. feat(console): put Connect an AI Assistant where each person looks, and call it that #30935 added the Account groupgrp_account_ai_assistant, renamed bothnav_connect_agententries andpages.connect_agentto "Connect an AI Assistant" (source hasha4542422fb5e8a68; the group's iscff764b13822a259), and moved the Setup entry behind System Overview. The fix was a plain merge oforigin/mainplus the four keys (d104e2b4). Before each locale PR, diff main'splatform-objectsen.tsand*.source-hashes.tssince the parked base (main has touched six moreplatform-objectsfiles since i18n(platform-objects): ship the platform objects, Setup, Studio and Account in zh-Hant #30951 alone).--localesand itstranslations:baseline;setup.translation.ts, theappsbarrel andmetadata-translations/index.ts;sys-user.page.ts(35),sys-organization.page.ts(6) and thesystem.datasets.tsnull label (1);platform-objectstests, plus theplugin-securitynav test, theplugin-approvalsvocabulary test and theservice-settingshub-parity test.nav_account_approvalsmust equalplugin-approvals'my_pendinglabel;nav_assignment_rulesmust equal i18n(plugin-sharing): ship the assignment rule object in all eleven platform languages #30856's object name;nav_settings_*must equal itsservice-settingshub title from i18n(service-settings): ship the built-in settings pages in zh-Hant, ar, fr and pt-BR #30870.check-i18n-bundles --writeneeds the whole tree built. Run it with an 8 GB heap:NODE_OPTIONS=--max-old-space-size=8192.check-cli-command-idsis not among them, and a string opening withosand a lowercase word goes red (the pt-BR article). Run the whole "Lint · docs & code guards" lane before each PR.check:commit-card-trailersrefusesPart of #Nin a commit message, so keep it in the PR body.a، b، c), never a glued procliticو. Two translation-memory context traps:Position(add-record button) is الموضع, and a hook'sBodyis المتن.Generated by Claude Code