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:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpriority: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:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpriority: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
29 remaining items
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
objectstack-fleet commentedon Nov 7, 2026
domain:server#2 · marchtian · session_017ihL2fBJ6xsLWJsnNJGMMx
Claim: PM loop round 1 · #30512
platform-objectsar(locale PR 1 of 6, then the final PR) · 2026-11-07T11:13Z · resumes hand-off 6691405940 (domain:server#1)Session:
session_017ihL2fBJ6xsLWJsnNJGMMxAccount:
marchtian(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-bmf2vu(the card thread's harness-pinned branch, platform exception toclaude/issue-<n>-<slug>; each later locale gets its own branch, cut fresh frommainafter the previous PR lands)Worktree:
objectstack-issue-30512Domain:
domain:serverSeat:
domain:server#2File surface (this PR):
packages/platform-objects/**(theargenerated and hand bundles, source hashes, registration lines, extract config,setup.translation.ts, the 42 inline page maps, locale lists in its tests); the cross-package locale-list tests inplugin-security,plugin-approvals,service-settingsandpackages/cli/test/platform-page-i18n-parity.test.ts; one.changeset/30512-*.md. ⛔packages/spec/**,ui/**, the built-in email templates andEMAIL_TEMPLATE_FLOOR_LOCALE. Stop on breach; explain in the report.Container & model:
L,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate),effort: default(the project's default effort)Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6691405940
Premise: holds. On
origin/mainaa3e21cc,packages/platform-objects/src/apps/translationscarriesen,zh-CN,ja-JP,es-ESandzh-Hantonly; the rooti18n:extractstill listszh-CN,ja-JP,es-ES;check-i18n-bundles.mjsdoes not readPLATFORM_LOCALES. The parkedarpatch named in 6691405940 lives in another account's project and is not reachable, soaris translated afresh.Serial constraints cleared: no other claim edits
packages/platform-objects/src/apps/translations; #28107 (fr) waits on this card'sfrPR and is not dispatched. Open PR #31013 (service-settings,plugin-auth) may touchservice-settingstests; mergemainbefore opening and before landing.Seat call B is kept (one PR per locale,
ar→fr→pt-BR→ru→de→ko, then the final PR withFixes); ruling F of #29349 governs (every platform language complete on every surface, no new gate). Each PR is over 3000 lines, so it owes the seat's contract review and a human merge. Order: project fileserver-seat-2/orders/30512-ar.md, delivered as the card thread's opening message.objectstack-fleet commentedon Nov 7, 2026
domain:server#2 · marchtian · session_017ihL2c6VJSYt3p57JSNBqP
os-dev-report
{ "issue": 30512, "status": "done", "branch": "claude/project-thread-bmf2vu", "pr": "https://github.com/objectstack-ai/objectstack/pull/31120", "head_sha": "4281e7faafd9540fea3f11d2e22704de9d69ef8d", "session": "session_017ihL2c6VJSYt3p57JSNBqP", "premise_still_valid": true, "summary": "Adds the ar locale to @objectstack/platform-objects exactly as #30951 added zh-Hant: generated objects (1676) and metadata-forms (1263) bundles with their provenance table, the hand bundle ar.ts (139) with ar.source-hashes.ts recording the en digest of every hand leaf, registration in the extract config, setup.translation.ts, the apps barrel and metadata-translations/index.ts, 42 inline maps, and ar in every locale-list test #30951 widened plus the four cross-package tests. Translated from scratch from main's en, terminology aligned with ui/packages/i18n ar; only identifiers and code examples stay byte copies of en. Changeset .changeset/30512-platform-objects-ar.md (patch).", "leaf_counts": { "en": 3078, "ar": 3078, "untranslated": 0, "identifier_echoes": 17, "echo_note": "16 recorded in ar.source-hashes.generated.ts (JWKS, JWKS URI, Message-ID, cron, API option, SSO placeholders, JSON examples, snake_case) plus Studio in the hand bundle" }, "inline_maps_filled": { "sys-user.page.ts": 35, "sys-organization.page.ts": 6, "system.datasets.ts nullLabel": 1, "total": 42 }, "pins_checked": [ "grp_account_ai_assistant = مساعد الذكاء الاصطناعي", "nav_connect_agent (account and setup) and pages.connect_agent.label = ربط مساعد ذكاء اصطناعي", "nav_account_approvals = plugin-approvals my_pending label بانتظار موافقتي (approval-status-vocabulary test green)", "nav_assignment_rules = sys_assignment_rule pluralLabel قواعد الإسناد", "nav_settings_* = service-settings hub titles, all 10 (setup-nav-hub-parity test green for ar)", "nav_sso_providers = sys_sso_provider pluralLabel", "nav_approval_requests/delegations = plugin-approvals object plural labels, as zh-Hant does", "Position: add-record الموضع, job position المنصب; hook Body المتن" ], "tests": "platform-objects vitest run: 117 files, 1683 tests passed. plugin-approvals approval-status-vocabulary 6/6, plugin-security people-org-assignment-nav-contribution 5/5, service-settings setup-nav-hub-parity 13/13, cli platform-page-i18n-parity + i18n-inline-locale-map-coverage 44/44. os i18n extract with --locales=zh-CN,ja-JP,es-ES,zh-Hant,ar regenerated the ar bundles byte-identical and left every other locale unchanged. Mechanical lint over all 3078 leaves: 0 missing, 0 placeholder/backtick/template mismatches except the deliberate translated default in update_member_role.description, 0 strings opening with os, 0 glued proclitic waw before a Latin token, 0 ASCII-comma identifier lists.", "gates": "dispatch-gates --ran on the merged tree: 64 derived, 64 run, 0 NOT-MEASURED, all exit 0 (check-plugin-teardown-shape --self-test first exit 3, prerequisite fetched, then 0). pnpm lint exit 0; platform-objects typecheck exit 0; all 57 commands of Lint docs and code guards exit 0 incl. check:cli-command-ids. PR check-runs at 4281e7fa: every lint, type-check, changeset, PR-body, size, queue-guard and Test Core shards 1,2,4,5,6,7,8 success; Test Core (3/8) failure (and the Test Core roll-up), see open_questions.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "5 — read only: subscribe_pr_activity 1, pull_request_read get_check_runs 2, get_job_logs 2", "api_writes": "2 — git push of the branch (2 pushes); pr_create via fleet-write relay request fw-20261107T130420Z-f12368 (run 42375264933, read-back identical, PR #31120 draft, no assignees); this comment via post-stamped", "open_questions": [ { "question": "Test Core (3/8) is red on runtime src/domains/mcp-object-schema-mask.test.ts (ADR-0106 D1 CONTROL, REST cached arm, usr_author item st_ping). Expected and received bodies are byte-identical except the Last-Modified header, one second apart: the secured and unsecured deployments are booted on either side of a second boundary. This PR touches no runtime code and the test passes 45/45 locally on the same head. It is a timing flake in the test #31104 added. A dev never re-runs, so the re-run is the seat's.", "options": [ "A seat re-runs the failed jobs of run 42375309941 once with scripts/pm/rerun-failed.mjs", "B leave red until a fix to the test lands" ], "recommendation": "A, because the only difference is a wall-clock header unrelated to this diff; a second failure would be real" } ], "security_findings": "none", "out_of_scope_findings": [ "class: a · reach: named producer, runtime mcp-object-schema-mask.test.ts CONTROL arms compare wireText including Last-Modified across two separately booted deployments, so any run straddling a second boundary fails · evidence: PR #31120 run 42375309941 job 128412039985, Expected Last-Modified 13:09:41 vs Received 13:09:40, all other bytes equal · dedupe words: mcp-object-schema-mask Last-Modified flake", "carrier: seat · noted, not filed" ] }objectstack-fleet commentedon Nov 7, 2026
domain:server#2 · marchtian · session_017ihL2fBJ6xsLWJsnNJGMMx
Landed — ar · 2026-11-07T16:18Z
PR #31120 merged 2026-11-07T16:16Z as
eb68b98149: thearbundles for@objectstack/platform-objects(objects, metadata forms, hand-authored app strings, provenance tables), level with main as of the merge. The card stays open for the remaining locales;fris next (it unblocks #28107). The seat dispatches it when the lane is under its concurrency cap.objectstack-fleet commentedon Nov 7, 2026
domain:server#2 · marchtian · session_017ihL2fBJ6xsLWJsnNJGMMx
Claim: PM loop round 1 · #30512
platform-objectsfr(locale PR 2 of 6, then the final PR) · 2026-11-07T17:35Z ·arlanded as PR #31120 (eb68b98149)Session:
session_017ihL2fBJ6xsLWJsnNJGMMxAccount:
marchtian(the card's assignee)Branch:
claude/project-thread-0xddsd(thefrcard thread's harness-pinned branch, cut frommain4c318214; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30512-frDomain:
domain:serverSeat:
domain:server#2File surface (this PR):
packages/platform-objects/**(thefrgenerated and hand bundles, source hashes, registration lines, extract config,setup.translation.ts, the inline page label maps, locale lists in its tests); the cross-package locale-list tests #31120 touched (plugin-security,plugin-approvals,service-settings,packages/cli/test/platform-page-i18n-parity.test.ts); one.changeset/30512-*.md. ⛔packages/spec/**,ui/**, the built-in email templates andEMAIL_TEMPLATE_FLOOR_LOCALE.Container & model:
L,mode:thread,model: TIER_DEFAULT,effort: defaultClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6691405940
Premise: holds. On
origin/main4c3182140e,packages/platform-objects/src/apps/translationscarriesarbut nofr; #28107 (French users read Englishsys_userlabels) is still open.Serial constraints cleared:
arlanded; no other claim editspackages/platform-objects/src/apps/translations. #28107 is claimed on this same branch, and this PR carriesFixes #28107.Seat call B is kept (one PR per locale,
ar→fr→pt-BR→ru→de→ko, then the final PR withFixes #30512). The PR is over 3000 lines, so it needs the seat's contract review and a human merge. The order is the project fileserver-seat-2/orders/30512-fr.md.objectstack-fleet commentedon Nov 7, 2026
domain:server#2 · marchtian · session_017ihL2ec75dnuTosWYEaazT
os-dev-report
{ "issue": 30512, "status": "done", "branch": "claude/project-thread-0xddsd", "pr": "https://github.com/objectstack-ai/objectstack/pull/31233", "session": "session_017ihL2ec75dnuTosWYEaazT", "premise_still_valid": true, "summary": "Added the fr locale to @objectstack/platform-objects file by file as #31120 added ar: generated objects and metadata-forms bundles, the hand bundle fr.ts with its source digests, 43 inline record-page maps, registration, and fr in every test locale list ar widened. The PR also carries Fixes #28107 with one plugin-audit test that a fr or fr-FR reader's activity summary names sys_user fields in French. Head dd9303ac18 includes a merge of origin/main.", "leaf_counts": { "en": 3100, "fr": 3100, "untranslated": 0, "detail": "objects 1697 + metadata-forms 1263 + hand fr.ts 140; deliberate byte copies of en recorded by the extract: 183 generated (cognates, identifiers, JSON examples) + 16 hand (Notifications, Sessions, Studio, Webhooks, Hooks, Pages, ...)" }, "inline_maps_filled": "43 (sys-user.page.ts 36, sys-organization.page.ts 6, system.datasets.ts 1), same as ar", "pins_checked": "nav_account_approvals = plugin-approvals fr my_pending 'Mes approbations en attente'; nav_assignment_rules = sys_assignment_rule fr pluralLabel 'Règles d’attribution'; nav_settings_* incl. access_policy = service-settings fr hub titles; nav_settings_hub = ui fr backToHub 'Tous les paramètres'; grp_account_ai_assistant 'Assistant IA'; both nav_connect_agent + pages.connect_agent.label 'Connecter un assistant IA'. approval-status-vocabulary, people-org-assignment-nav-contribution, setup-nav-hub-parity green with fr.", "tests": "platform-objects vitest 119 files / 1746 tests passed; platform-objects typecheck exit 0; plugin-approvals approval-status-vocabulary 6/6, plugin-security people-org-assignment-nav-contribution 5/5, service-settings setup-nav-hub-parity 15/15, cli platform-page-i18n-parity 27/27, plugin-audit activity-summary-fr-sys-user-labels 5/5. Ablation: dropping SetupAppTranslations.fr from the service fails 3/5 with 'A modifié User « Carl Edited » : Banned et Ban Reason'. os i18n extract --locales=zh-CN,ja-JP,es-ES,zh-Hant,ar,fr reproduces both fr bundles byte-identical, before and after the merge.", "gates": "dispatch-gates --commands at dd9303ac: 64 families, each run with exit captured before any pipe; --ran: 64 derived, 64 run, 0 NOT-MEASURED, all exit 0. pnpm lint exit 0. Lint · docs & code guards lane: 52/53 steps exit 0 locally (incl. check:i18n-stale-fill, check:cli-command-ids); step 53 lane-verdict.mjs exits 3 locally (GITHUB_JOB unset), CI-only. CI check-runs not yet read.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "mcp__github__issue_read only (reads of #30512 and #28107, at least 3); no write tool", "api_writes": "2 — relay pr_create (fleet-write run 42404428572, #31233); this os-dev-report comment via post-stamped; plus git push (not REST)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [], "deviations": "PR left unassigned with no labels, as the order says. Fixes #28107 placed on line 4 after Part of #30512 per the order. 7535 changed lines: over the 3000 human-merge threshold." }Generated by Claude Code