Skip to content

i18n phase 3 (platform metadata and built-in emails): extraction and bundle checks read PLATFORM_LOCALES; backfill the seven missing locales #30512

Open

Description

@objectstack-fleet

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

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.

Activity

  1. added
    enhancementNew feature or request
    pm:queueReady for the PM dispatch loop
    area:i18nThe customer's own language, across UI, metadata and notifications
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-set
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    Claim: PM loop round 11
    Session: session_01Utp6Cbvcmv8YWFhFJwzjKL (seat) · dev thread session_01Utp6Cai5CRdAs4u9gTipWU
    Account: os-bill
    Branch: claude/project-thread-o3y7uf (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>; packages land sequentially on it, one PR merged before the next opens)
    Worktree: objectstack-issue-30512
    Domain: domain:server
    Seat: domain:server#2
    File surface: packages/**/src/translations/** (new locale files under the table tags zh-Hant, ar, fr, pt-BR, ru, de, ko; regenerated source hashes; the package index.ts registration lines) and each package's translation tests, one changeset per PR; last PR: scripts/check-i18n-bundles.mjs, the i18n:extract script and their tests, content/docs/protocol/kernel/i18n-standard.mdx only 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: high
    Clause-②: 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 and EMAIL_TEMPLATE_FLOOR_LOCALE (out of this thread) | every user whose language is on the platform table
    Thread-read: none
    Premise: read, to be measured first — at f6faf751: 11 translations/ packages with en, zh-CN, ja-JP, es-ES; PLATFORM_LOCALES exported and unread
    Serial constraints cleared: seat 4's PR #30446 (#30286) adds keys under service-settings/src/translations — that package's PR waits for it and merges main first; no other seat claims the translations/ packages or the bundle check; pull main before each PR and before landing.

    Order: project file server-seat2/dispatch-30512.md, delivered as the card thread's opening message.

  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU

    os-dev-report

    Package 1 of 11: @objectstack/service-realtime, PR #30536 (draft, head 28ebd235). 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

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU

    os-dev-report

    Package 2 of 11: @objectstack/plugin-webhooks, PR #30586 (draft, head c6c30383). 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

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    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.ts writes its user-facing copy by hand, ORGANIZATION_MFA_REFUSAL_COPY and ORGANIZATION_MFA_REQUIRED_NOTICE_COPY, keyed by type CopyLocale = 'en' | 'zh-CN' | 'ja-JP' | 'es-ES' (:149 on origin/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, ru or ar reads 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_OPENINGS in ui/packages/app-shell/src/console/organizationMfaNotices.ts (:70), with a byte-exact fixture per language in ui/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

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU

    os-dev-report

    Package 3 of 11: @objectstack/service-mailbox, PR #30606 (draft, head 34c094b3). 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

  7. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cai5CRdAs4u9gTipWU

    os-dev-report

    Package 4 of 11: @objectstack/plugin-audit, PR #30625 (draft, head fedf6bfd). 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

  8. 48 remaining items

  9. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy

    Claim: PM loop round 1 · #30512 · 2026-11-08T06:20Z · build (locale pt-BR; ru → de → ko follow, the last with Fixes #30512)
    Session: session_01FEkQ5pXkgNXVpCn2GZDjyy
    Account: os-project-manager
    Branch: claude/project-thread-k6o0gu (the card thread's harness-pinned branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30512
    Domain: domain:server
    Seat: domain:server#3
    File 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 tests fr joined 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) and fr (#31233) on main; pt-BR is 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).

  10. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 8, 2026
  11. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  12. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    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 carries pm:awaiting-merge and review is requested from os-zhuang and hotlong. Once one of them approves, the seat has the card thread merge origin/main and rerun the nav i18n checks, then lands it. ru → de → ko come next, and the ru PR also fixes the stale fr pages.connect_agent.subtitle digest.

  13. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy

    Landed (pt-BR) · 2026-11-08T08:49Z

    Probe Reading
    PR #31440 MERGED 2026-11-08T08:49Z through the merge queue as deac7f46c6 (head 1d1308b5, seat ACCEPT 6719237445, approved by os-zhuang)
    This card stays open, as intended: Part of #30512. Done so far: fr (#31233) and pt-BR. Still to do: ru, de, ko

    No status change: pm:dispatched stays. ru starts next on the same thread, from freshly fetched origin/main. It also fixes the stale fr pages.connect_agent.subtitle digest.

  14. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy

    Claim: PM loop round 2 · #30512 · 2026-11-08T08:51Z · build (locale ru; then de → ko, the last with Fixes #30512)
    Session: session_01FEkQ5pXkgNXVpCn2GZDjyy
    Account: os-project-manager
    Branch: claude/project-thread-k6o0gu (the card thread's harness-pinned branch, reset to origin/main deac7f46 after #31440 merged; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30512
    Domain: domain:server
    Seat: domain:server#3
    File 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 tests fr/pt-BR joined, a changeset; plus the stale fr pages.connect_agent.subtitle (re-translated from current en, 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) and pt-BR (#31440, deac7f46) are on main, and ru is 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 to ru unchanged except for the fr digest fix.

  15. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  16. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    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 fr pages.connect_agent.subtitle digest fix rides in the same PR.

  17. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy

    Landed (ru) · 2026-11-08T11:05Z

    Probe Reading
    PR #31466 MERGED 2026-11-08T11:05Z through the merge queue as 2ae3e30154 (head efe02a17, seat ACCEPT 6720497415, approved by os-zhuang)
    This card stays open, as intended (Part of #30512). Done: ar, fr, pt-BR, ru (with the fr connect_agent.subtitle digest fix). Still to do: de, ko (ko carries Fixes #30512)

    No status change: pm:dispatched stays. de starts next on the same thread from fresh origin/main (claim follows).

  18. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy

    Claim: PM loop round 3 · #30512 · 2026-11-08T11:06Z · build (locale de; then ko, the last with Fixes #30512)
    Session: session_01FEkQ5pXkgNXVpCn2GZDjyy
    Account: os-project-manager
    Branch: claude/project-thread-k6o0gu (the card thread's harness-pinned branch, reset to origin/main 2ae3e30154 after #31466 merged; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30512
    Domain: domain:server
    Seat: domain:server#3
    File 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 tests fr/pt-BR/ru joined, 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) and ru (#31466) are on main, and de is next in the released order.
    Serial constraints cleared: PR #31475 (#30964) regenerates one sys_audit_log label line in every translations/*.objects.generated.ts. Whichever of the two lands second merges origin/main and 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 to de unchanged.

  19. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdomain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpm:blockingDerived cache from the Blocked-by reverse index: open card with open dependents — never hand-setpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions