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
48 remaining items
objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Claim: PM loop round 1 · #30512 · 2026-11-08T06:20Z · build (locale
pt-BR;ru→de→kofollow, the last withFixes #30512)Session:
session_01FEkQ5pXkgNXVpCn2GZDjyyAccount:
os-project-managerBranch:
claude/project-thread-k6o0gu(the card thread's harness-pinned branch; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30512Domain:
domain:serverSeat:
domain:server#3File surface:
packages/platform-objects/src/apps/translations/pt-BR*(bundles, hand file, source-hash tables), the registration sites, the inline maps (sys-user.page.ts,sys-organization.page.ts,system.datasets.ts), the locale lists of the testsfrjoined in #31233, a changeset (stop on breach; explain in the report)Container & model:
L,mode:thread,model: default tier,effort: default (coordinator default)Clause-②: no (adds a locale bundle; no schema, key or published shape moves; the dev confirms from the real diff)
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6717994911
Premise: holds —
ar(#31120) andfr(#31233) on main;pt-BRis next in the released order.Serial constraints cleared: none in the seat's other cards touch
platform-objects/src/apps/translations/**; over 3000 lines ⇒ seat contract review and a human merge. Order:pm-orders/server/order-30512-pt-br.md(project files).objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5mqoYjnPaGZhS8jzcF
os-dev-report
{
"issue": 30512,
"status": "done",
"branch": "claude/project-thread-k6o0gu",
"pr": "#31440",
"session": "session_01FEkQ5mqoYjnPaGZhS8jzcF",
"premise_still_valid": true,
"summary": "pt-BR bundles for @objectstack/platform-objects, mirroring #31233 (fr) file for file: objects (1697 leaves) and metadata forms (1263) generated bundles, their source-hash table (88 deliberate en byte copies, listed in Acceptance notes), the hand Setup bundle (141 leaves) with its en digests, registration in the extract config, setup.translation.ts, the apps barrel and metadata-translations, the 36/6/1 inline maps, and pt-BR beside fr in every locale-listing test. Plus a pt-BR twin of the #28107 plugin-audit Home-feed test. Draft PR #31440 at 1d1308b, Part of #30512; ru, de and ko follow.",
"tests": "platform-objects vitest run: 120 files / 1796 tests passed at the merged head. plugin-approvals approval-status-vocabulary 6/6, plugin-security people-org-assignment-nav-contribution 5/5, service-settings setup-nav-hub-parity 17/17, cli platform-page-i18n-parity 27/27, new plugin-audit activity-summary-pt-br-sys-user-labels 3/3. Ablation of the new test (platform pt-BR bundle skipped in bootedI18n): 2 failed, received 'Atualizou User "Carl Edited": Banned e Ban Reason' and 'Ban Reason: spam → abuse'; restored 3/3. platform-objects typecheck exit 0. First red found and fixed: repeater-row-properties refused the en echo 'pt-BR dashboard:widgets.layout ("Layout")' -> 'Layout do widget'. os i18n extract --locales=zh-CN,ja-JP,es-ES,zh-Hant,ar,fr,pt-BR --fill=default --source-hashes: 23 generated files sha256-identical on rerun, other 21 unchanged, before and after both merges of origin/main.",
"gates": "dispatch-gates --commands at 1d1308b (after the second origin/main merge): 68 commands, each run with its exit code captured before any pipe; --ran: 68 derived, 68 run, 0 NOT-MEASURED, 0 UNRUN, all exit 0. Scoped eslint (pnpm lint spelling) over the changed paths: exit 0. CI check-runs on #31440: in_progress at report time, not re-run locally.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "2 — mcp__github__pull_request_read (get #31233 body, get #31440 read-back); no write tool",
"api_writes": "3 — git push (branch, not REST); POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create -> #31440, labels [tests], no assignees); this os-dev-report comment via post-stamped",
"open_questions": [],
"security_findings": "withheld",
"out_of_scope_findings": [
"class: none · fr.source-hashes.ts records the digest of the previous en pages.connect_agent.subtitle, so fr readers get the en subtitle through the fallback; noted in Acceptance notes · carrier: none · noted, not filed"
],
"deviations": "PR over the 3000-line threshold (7434 changed lines, generated bundles): owes the seat's contract review and a human merge, stated in 需要你做的. Labels: the order named none and pr_create refuses an empty list, so the PR carries
tests(what the path labeler applies). Added one test outside #31233's file list beside the fr twin: plugin-audit activity-summary-pt-br-sys-user-labels.test.ts. origin/main moved 6 more commits after 1d1308b (docs/spec/runtime), none touching platform-objects or nav keys; not merged again."}
Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
ACCEPT → PR #31440 comment 6719237445 · 2026-11-08T08:26Z · pt-BR, head
1d1308b5. The PR has 7434 changed lines, so it goes the human-merge route: it carriespm:awaiting-mergeand review is requested from os-zhuang and hotlong. Once one of them approves, the seat has the card thread mergeorigin/mainand rerun the nav i18n checks, then lands it.ru→de→kocome next, and theruPR also fixes the stale frpages.connect_agent.subtitledigest.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Landed (pt-BR) · 2026-11-08T08:49Z
deac7f46c6(head1d1308b5, seat ACCEPT 6719237445, approved by os-zhuang)Part of #30512. Done so far: fr (#31233) and pt-BR. Still to do: ru, de, koNo status change:
pm:dispatchedstays. ru starts next on the same thread, from freshly fetchedorigin/main. It also fixes the stale frpages.connect_agent.subtitledigest.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Claim: PM loop round 2 · #30512 · 2026-11-08T08:51Z · build (locale
ru; thende→ko, the last withFixes #30512)Session:
session_01FEkQ5pXkgNXVpCn2GZDjyyAccount:
os-project-managerBranch:
claude/project-thread-k6o0gu(the card thread's harness-pinned branch, reset toorigin/maindeac7f46after #31440 merged; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30512Domain:
domain:serverSeat:
domain:server#3File surface:
packages/platform-objects/src/apps/translations/ru*(bundles, hand file, source-hash tables), the registration sites, the inline maps (sys-user.page.ts,sys-organization.page.ts,system.datasets.ts), the locale lists of the testsfr/pt-BRjoined, a changeset; plus the stalefrpages.connect_agent.subtitle(re-translated from currenten, hand digest refreshed) (stop on breach; explain in the report)Container & model:
L,mode:thread,model: default tier,effort: default (coordinator default)Clause-②: no (adds a locale bundle and refreshes one fr string; no schema, key or published shape moves; the dev confirms from the real diff)
Metadata-protocol: none
Responsibility: n/a, not a defect card
Thread-read: 6719237445
Premise: holds.
ar(#31120),fr(#31233) andpt-BR(#31440,deac7f46) are on main, andruis next in the released order.Serial constraints cleared: none of the seat's other cards touch
platform-objects/src/apps/translations/**. Over 3000 lines, so it gets a seat contract review and a human merge. Order:pm-orders/server/order-30512-pt-br.md(project files) applies toruunchanged except for the fr digest fix.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5mqoYjnPaGZhS8jzcF
os-dev-report
{
"issue": 30512,
"status": "done",
"branch": "claude/project-thread-k6o0gu",
"pr": "#31466",
"session": "session_01FEkQ5mqoYjnPaGZhS8jzcF",
"premise_still_valid": true,
"summary": "ru bundles for @objectstack/platform-objects, mirroring #31440 (pt-BR) and #31233 (fr) file for file: objects (1697 leaves) and metadata forms (1263) generated bundles, their source-hash table (45 deliberate en byte copies, listed in Acceptance notes), the hand Setup bundle (141 leaves) with its en digests, registration in the extract config, setup.translation.ts, the apps barrel and metadata-translations, the 36/6/1 inline maps, and ru beside pt-BR in every locale-listing test. Same PR: the stale fr pages.connect_agent.subtitle is retranslated from the current en text and its fr.source-hashes.ts digest refreshed (b0d7c6d174511bcb -> 51c467af44024a1b, equal to the derived digest). Draft PR #31466 at 9c137f2, Part of #30512; de and ko follow.",
"tests": "platform-objects vitest run: 120 files / 1841 tests passed, first run, no echo refusal. plugin-approvals approval-status-vocabulary 6/6, plugin-security people-org-assignment-nav-contribution 5/5, service-settings setup-nav-hub-parity 19/19, cli platform-page-i18n-parity 27/27. platform-objects typecheck exit 0. check:app-nav-i18n OK (13 contributors, 9 locales, 2 apps). os i18n extract --locales=zh-CN,ja-JP,es-ES,zh-Hant,ar,fr,pt-BR,ru --fill=default --source-hashes: rerun cmp-identical over every file in translations/, the 23 non-ru generated files not in the diff; check-i18n-bundles --filter=platform-objects in sync (26). SetupAppTranslations resolves fr pages.connect_agent.subtitle to the new French text. No new negative pin, so no ablation.",
"gates": "dispatch-gates --commands at 9c137f2 (after merging origin/main): 68 commands, each run with its exit code captured before any pipe; --ran: 68 derived, 68 run, 0 NOT-MEASURED, 0 UNRUN, all exit 0. Scoped eslint over the changed .ts paths (--no-inline-config): exit 0. CI check-runs on #31466: not yet reported at report time.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "1 — mcp__github__list_pull_requests (read-back of #31466); no write tool",
"api_writes": "3 — git push (branch, not REST); POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create -> #31466, labels [tests], no assignees); this os-dev-report comment via post-stamped",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: none · #30964 (branch b11gkm) adds sys_audit_log action label package_unmanaged_import, which regenerates a line in every translations/*.objects.generated.ts; whichever of #30964 and #31466 lands second merges origin/main and re-runs extraction (heads-up from the seat-3 thread) · carrier: none · noted, not filed"
],
"deviations": "PR over the 3000-line threshold (7327 changed lines, generated bundles): owes the seat's contract review and a human merge, stated in 需要你做的. Labels: pr_create refuses an empty list, so the PR carries
tests. Did not add a ru twin of #31440's plugin-audit activity-summary test, because plugin-audit is outside the claim's file surface; noted in the PR body. origin/main moved 8 commits after 9c137f2, none touching platform-objects; not merged again."}
Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
ACCEPT (ru) → PR #31466 comment 6720497415 · 2026-11-08T10:45Z · head
efe02a17· 7328 lines > 3000:pm:awaiting-merge, review requested from os-zhuang and hotlong. The frpages.connect_agent.subtitledigest fix rides in the same PR.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Landed (ru) · 2026-11-08T11:05Z
2ae3e30154(headefe02a17, seat ACCEPT 6720497415, approved by os-zhuang)Part of #30512). Done: ar, fr, pt-BR, ru (with the frconnect_agent.subtitledigest fix). Still to do: de, ko (ko carriesFixes #30512)No status change:
pm:dispatchedstays. de starts next on the same thread from freshorigin/main(claim follows).objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Claim: PM loop round 3 · #30512 · 2026-11-08T11:06Z · build (locale
de; thenko, the last withFixes #30512)Session:
session_01FEkQ5pXkgNXVpCn2GZDjyyAccount:
os-project-managerBranch:
claude/project-thread-k6o0gu(the card thread's harness-pinned branch, reset toorigin/main2ae3e30154after #31466 merged; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-30512Domain:
domain:serverSeat:
domain:server#3File surface:
packages/platform-objects/src/apps/translations/de*(bundles, hand file, source-hash tables), the registration sites, the inline maps (sys-user.page.ts,sys-organization.page.ts,system.datasets.ts), the locale lists of the testsfr/pt-BR/rujoined, a changeset (stop on breach; explain in the report)Container & model:
L,mode:thread,model: default tier,effort: default (coordinator default)Clause-②: no (adds a locale bundle; no schema, key or published shape moves; the dev confirms from the real diff)
Metadata-protocol: none
Responsibility: n/a, not a defect card
Thread-read: 6720497415
Premise: holds.
ar(#31120),fr(#31233),pt-BR(#31440) andru(#31466) are on main, anddeis next in the released order.Serial constraints cleared: PR #31475 (#30964) regenerates one
sys_audit_loglabel line in everytranslations/*.objects.generated.ts. Whichever of the two lands second mergesorigin/mainand re-runs the extract. Over 3000 lines, so it gets a seat contract review and a human merge. Order:pm-orders/server/order-30512-pt-br.md(project files) applies todeunchanged.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5mqoYjnPaGZhS8jzcF
os-dev-report
{
"issue": 30512,
"status": "done",
"branch": "claude/project-thread-k6o0gu",
"pr": "#31511",
"session": "session_01FEkQ5mqoYjnPaGZhS8jzcF",
"premise_still_valid": true,
"summary": "de bundles for @objectstack/platform-objects, mirroring #31466 (ru) and #31440 (pt-BR) file for file: objects (1698 leaves) and metadata forms (1263) generated bundles, their source-hash table (155 deliberate en byte copies, grouped in Acceptance notes), the hand Setup bundle (141 leaves) with its en digests, registration in the extract config, setup.translation.ts, the apps barrel and metadata-translations, the 36/6/1 inline maps, and de beside ru in every locale-listing test. Draft PR #31511 at 72391c4, Part of #30512; ko follows.",
"tests": "platform-objects vitest run: 120 files / 1886 tests passed. First run: repeater-row-properties refused 9 'Name' echoes in repeater rows; each now names its parent (Parametername, Filtername, Dimensionsname, Kennzahlname, Spaltenname, Variablenname x2, Indexname, Blockname), then green. plugin-approvals approval-status-vocabulary 6/6, plugin-security people-org-assignment-nav-contribution 5/5, service-settings setup-nav-hub-parity + translations 156/156, cli platform-page-i18n-parity 27/27. platform-objects typecheck exit 0. check:app-nav-i18n OK (13 contributors, 10 locales, 2 apps). os i18n extract --locales=...,ru,de --fill=default --source-hashes: rerun md5-identical for the de files, the 26 non-de generated files not in the diff; check-i18n-bundles --filter=platform-objects in sync (29). After rebasing onto 7d0b47c: extract no diff, platform-objects 1886 and service-settings 156 passed again. No new negative pin, so no ablation.",
"gates": "dispatch-gates --commands at e16f19c (on origin/main 507b53c): 68 commands, each run with its exit code captured before any pipe; --ran: 68 derived, 68 run, 0 NOT-MEASURED, 0 UNRUN, all exit 0. Then rebased onto 7d0b47c (3 commits: two spec, one skills doc; none in platform-objects) and reran extract, check-i18n-bundles and the two package suites green; the 68 gates were not rerun at 72391c4. Scoped eslint over the changed .ts paths (--no-inline-config): exit 0. CI check-runs on #31511: not yet reported at report time.",
"dogfood_battery": "n/a — no
!in the PR title and no (narrowing) arm","mcp_calls": "2 — mcp__github__pull_request_read (#31475 state), mcp__github__list_pull_requests (read-back of #31511); no write tool",
"api_writes": "3 — git push (branch, not REST); POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create -> #31511, labels [tests], no assignees); this os-dev-report comment via post-stamped",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"class: none · #31475 (branch b11gkm, still draft) adds sys_audit_log action label package_unmanaged_import, which regenerates a line in every translations/*.objects.generated.ts; whichever of #31475 and #31511 lands second merges origin/main and re-runs extraction (seat-3 serial note) · carrier: none · noted, not filed"
],
"deviations": "PR over the 3000-line threshold (generated bundles): owes the seat's contract review and a human merge, stated in 需要你做的. Labels: pr_create refuses an empty list, so the PR carries
tests. No de twin of #31440's plugin-audit activity-summary test, because plugin-audit is outside the claim's file surface; noted in the PR body. The remote branch had been deleted after #31466 merged, so the push created it anew rather than force-with-lease over old history."}
Generated by Claude Code