Skip to content

i18n(plugin-sharing): ship the sharing and queue objects in all eleven platform languages - #30767

Queued
objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/project-thread-1jep1s
Queued

objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/project-thread-1jep1s

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

domain:server#1 · os-elon-musk · session_016WV4cya5ej5GQV86RPbRPK

Part of #30512 — package 8 of 11 (@objectstack/plugin-sharing). The card stays open: approvals, settings and platform-objects follow, and the last PR of the series makes the bundle check read the platform locale table.

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么: 共享插件的 5 个对象(记录共享、共享规则、共享链接、队列、队列成员)的名称、字段、选项、帮助和视图名,补上繁中、阿语、法语、巴葡、俄语、德语、韩语 7 种,与平台语言表的 11 种一致。队列和队列成员也在内;队列记录页的标题也补了这 7 种(与各语言队列对象名同词)。
  • 为什么改: 平台语言表要求每个界面带齐 11 种语言;这是第 3 期按包补齐的第 8 个包(每种语言 151 条)。用这 7 种语言的管理员打开「设置 → 共享规则 / 队列」不再看到英文。
  • 风险与回滚: 只加翻译数据和注册行,不动逻辑、schema、接口;原有 4 种语言一字未改。唯一的测试改动是「收件人类型在各对象上叫法一致」的测试多扫 7 种语言(覆盖变宽,没有放宽任何断言)。回滚即撤 PR。
  • 先看: src/translations/index.ts(按表标签注册,zh-CN 在 zh-Hant 前,每种语言带上页面标题)、src/translations/pages.ts(手写的队列页标题表),再看 recipient-vocabulary-consistency.test.ts,最后抽看任一语言的 sys_queue 段。
  • 两分钟验证: node scripts/check-i18n-bundles.mjs --filter=sharing 输出 plugins/plugin-sharing in sync;pnpm --filter @objectstack/plugin-sharing test 全绿。
  • 需要你做的: 无,席位落地。

What changes

  • Seven new locales for the sharing package under the platform locale table's tags (zh-Hant, ar, fr, pt-BR, ru, de, ko): each a TAG.objects.generated.ts with all 151 object leaves of sys_record_share, sys_sharing_rule, sys_share_link, sys_queue and sys_queue_member, plus its TAG.source-hashes.generated.ts, written by the repo's own os i18n extract --fill=default --source-hashes and served through withSourceFallback like the existing three. zh-CN stays ahead of zh-Hant in index.ts.
  • The hand-written page table src/translations/pages.ts (the queue record page sys_queue_detail, from feat(service-settings,plugin-audit,plugin-sharing): config_change rows name their settings row; record pages for audit rows and queues #30728) gains an entry per new locale. Each value is the locale's own sys_queue object label, so the page title and the object read the same word, and each records the same en digest the existing three carry. index.ts passes each new locale's pages entry and its recorded digest to withSourceFallback, like the existing three.
  • The extract command in scripts/i18n-extract.config.ts lists the seven tags and its merge baseline imports the seven bundles with their page entries, so check:i18n covers them from this PR on.

Tests

  • recipient-vocabulary-consistency.test.ts (each recipient option reads the same on every object that offers it, within a locale) adds the seven new bundles to its list. Coverage widens; no assertion changed.
  • sys-queue-page.test.ts already iterates every locale of SharingTranslations and checks the served page label equals the table's, so the seven new page labels are held to it with no test edit.

Acceptance notes

Verification

Package suite, typecheck, build (verify lock)
turbo run build --filter=!@objectstack/docs: 118/118 tasks successful, exit 0
pnpm --filter @objectstack/plugin-sharing test && typecheck   (at head dc12d9dc, on main e00bcc6a)
 Test Files  67 passed (67)
      Tests  1424 passed (1424)
check:test-typecheck: OK (tsconfig.test.json)
os-verify-lock: VERDICT command-exit 0
same suite at cb13b51f (the same patch on main e8dc4833): 67 files, 1424 passed, VERDICT command-exit 0
i18n gates and the derived families
node scripts/check-i18n-bundles.mjs --filter=sharing           (at dc12d9dc)
  plugins/plugin-sharing         in sync (21 bundle(s))                      EXIT 0
node scripts/check-i18n-stale-fill.mjs                          (at dc12d9dc)
check-i18n-stale-fill: OK (11 bundle set(s) — no new stale fills, 1 baselined).   EXIT 0
dispatch-gates --commands (at cb13b51f): 61 families, each run and recorded with its exit code: 61 x exit 0
dispatch-gates --ran: 61 derived, 61 run, 0 NOT-MEASURED (a derived zero)
re-derived at dc12d9dc's tree: the identical 61-command list
pnpm lint (repo-wide, at cb13b51f): exit 0
eslint --no-inline-config on the changed .ts files: exit 0
changed lines 2694 (+2691 / -3), 19 files: under the 3000-line human-merge threshold

The branch is one commit on main e00bcc6a (after #30744 landed). Its diff has the same patch id (3f616c44) as cb13b51f, where the derived families ran on main e8dc4833; none of the five main commits in between touches plugin-sharing (they are #30744 itself, #30734 in service-settings, plugin-auth, plugin-email and service-sms, and three in cloud-connection, the dispatch skill and the UI packages). The package suite and both i18n checks were re-run on this head's tree.

Dogfood: not run — content-only package PR, no ! in the title and no (narrowing) arm.


Generated by Claude Code

…n platform languages

Seven new locales (zh-Hant, ar, fr, pt-BR, ru, de, ko) for sys_record_share,
sys_sharing_rule, sys_share_link, sys_queue and sys_queue_member: 151 object
leaves each, generated and hashed by the repo's own extract, registered in
index.ts under the platform-table tags (zh-CN before zh-Hant) and in the
extract command + merge baseline, so check:i18n covers them. The
recipient-vocabulary consistency test scans the seven new bundles.

Carried from the released handover commit ec0e96d (written by
session_01Utp6Cai5CRdAs4u9gTipWU). Main gained the sys_queue record page
(#30728) after that commit, with a hand-authored pages section in four
locales; the seven locales are wired through it here too: pages.ts gains a
label per new locale (the locale's own sys_queue object label, recorded
against the same en digest), and index.ts / the extract config pass each
locale's pages entry like the existing three.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cya5ej5GQV86RPbRPK
@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 6, 2026
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/plugin-sharing, touching 23 documentable anchor(s).

8 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/automation/approvals.mdx (via sys_queue (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_queue_member (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/automation/queues-and-assignment-rules.mdx (via sys_queue (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_queue_member (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/data-modeling/objects.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/permissions/permissions-matrix.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/permissions/sharing-rules.mdx (via sys_queue (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_sharing_rule (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/permissions/system-context.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_sharing_rule (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/plugins/packages.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/protocol/objectql/security.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))

⛔ 7 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v14.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v15.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v16.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v17/17-0.mdx (via sys_sharing_rule (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v17/17-1.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects), sys_sharing_rule (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v17/17-3.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))
  • content/docs/releases/v17/index.mdx (via sys_record_share (symbol, a field of const object arObjects; a field of const object deObjects; a field of const object frObjects; a field of const object koObjects; a field of const object ptBRObjects; a field of const object ruObjects; a field of const object zhHantObjects))

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

What this run could not see
  • the SDK route bridge reached 63 of 221 client-bound route-ledger rows — the other 158 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 158: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 103 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 11 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json adf6ee0948d8dd8e747678e6d5107e0c4a86bb31 → packageMentionDocs.

Which tree this was computed on

This run read content/docs from 92f33fcf15c4732289f90d6b57f0ad1f13fc1dcc — the merge of head dc12d9dc6b0a9c7bd1db50291ff3b086a1f40b93 into base adf6ee0948d8dd8e747678e6d5107e0c4a86bb31, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 92f33fcf15c4732289f90d6b57f0ad1f13fc1dcc && git checkout 92f33fcf15c4732289f90d6b57f0ad1f13fc1dcc
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin adf6ee0948d8dd8e747678e6d5107e0c4a86bb31 dc12d9dc6b0a9c7bd1db50291ff3b086a1f40b93 && git checkout -B drift-repro adf6ee0948d8dd8e747678e6d5107e0c4a86bb31 && git merge --no-ff dc12d9dc6b0a9c7bd1db50291ff3b086a1f40b93

node scripts/docs-audit/affected-docs.mjs --json adf6ee0948d8dd8e747678e6d5107e0c4a86bb31

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs adf6ee0948d8dd8e747678e6d5107e0c4a86bb31 → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#1 · os-elon-musk · session_016WV4cytLmJxfAmgPVjUbbW

席位核对 · ACCEPT · 2026-11-06T02:09Z · #30512 (package 8 of 11, plugin-sharing)

Head-sha: dc12d9d

  • Shape: 19 files, +2691/−3, all in packages/plugins/plugin-sharing/: seven new locale bundles with source-hash companions (zh-Hant, ar, fr, pt-BR, ru, de, ko) for the sharing and queue objects, translations/index.ts registering them under the platform-table tags, translations/pages.ts, the extract config's --locales list and stack locales, one test, and one patch changeset. That is under the 3000-line threshold and inside claim 6672078792. Not governed. One commit on origin/main e00bcc6a.
  • Spot check (read in the diff):
    • pages.ts gains a sys_queue_detail label per new locale, each the locale's own sys_queue object label, with the same en digest 87d4b808a85ea103 as the existing three. SharingLocale widens to eleven tags; it is internal (the package exports is . only, and the entry does not re-export it), so no public surface moves.
    • recipient-vocabulary-consistency.test.ts iterates all eleven locales, so the one-word-per-recipient rule is pinned for the new ones.
    • The zh-Hant text is Traditional (spot-read sys_record_share).
  • Gates: every check-run on this head has concluded: 35 success, 13 skipped, 0 failure. Locally, the dev report 6674574414 shows build 118/118, plugin-sharing 67 files / 1424 tests, typecheck clean, check-i18n-bundles --filter=sharing in sync, stale-fill OK, the 61 derived families and pnpm lint exit 0 at cb13b51f, the same patch id.
  • Accepted deviations:
  • Observation, not taken here: the inline Members title map in sys-queue.page.ts still carries four locales. It is outside this PR's commit surface; it rides a later plugin-sharing change or the last PR of this card.
  • Contract: Clause-②: no, Metadata-protocol: none, confirmed from the diff: translations only, with no key or shape change.
  • Landing: ready, then auto-merge, through the relay. The card's plugin-sharing checklist row is ticked on merge.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 6, 2026 02:11
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge November 6, 2026 02:11
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 6, 2026
Any commits made after this event will not be merged.

This branch has not been deployed

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

Labels

documentation Improvements or additions to documentation size/xl tests tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant