Skip to content

i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in ru, de and ko - #30830

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/project-thread-1jep1s
Nov 6, 2026
Merged

objectstack-fleet[bot] merged 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 9 of 11, second half (@objectstack/plugin-approvals in ru, de, ko; the first half, zh-Hant, ar, fr, pt-BR, landed in #30790). With it the package serves all eleven platform languages. The card stays open: 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

维护者速读

  • 改了什么: 审批插件的 3 个对象(审批请求、审批动作、审批委派)的名称、字段、选项、帮助和动作,审批通知的 40 条句子,审批请求记录页的标题和「详情 / 时间线」两个标签,以及审批邮件里「打开审批」那一行,补上俄语、德语、韩语 3 种。繁中、阿语、法语、巴葡已在上半包(i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in zh-Hant, ar, fr and pt-BR #30790)落地,至此本包 11 种语言齐全。
  • 为什么改: 平台语言表要求每个界面带齐 11 种语言;这是第 3 期按包补齐的第 9 个包的下半(每种语言 164 条对象文本 + 40 条消息)。用这 3 种语言的审批人和提交人看到的审批界面、通知和邮件不再是英文。
  • 风险与回滚: 只加翻译数据和注册行,不动逻辑、schema、接口;邮件模板的结构、选模板的规则和 EMAIL_TEMPLATE_FLOOR_LOCALE 都没动,只给「打开审批」那一行加了 3 种语言(按裁决 A)。原有 8 种语言一字未改。测试改动只是各语言测试把 3 种新语言加进列表(覆盖变宽,没有放宽任何断言)。回滚即撤 PR。
  • 先看: src/translations/index.ts(按表标签注册,zh-CN 在 zh-Hant 前,每种语言带页面标题和消息)、src/approval-email-templates.ts 的 APPROVAL_EMAIL_LINK_LINES、src/translations/messages.ts,再看 sys-approval-request-page.test.ts。
  • 两分钟验证: node scripts/check-i18n-bundles.mjs --filter=approvals 输出 plugins/plugin-approvals in sync;pnpm --filter @objectstack/plugin-approvals test 全绿。
  • 需要你做的: 无,席位落地。

What changes

  • Three new locales under the platform locale table's tags (ru, de, ko): each a TAG.objects.generated.ts with all 164 object leaves of sys_approval_request, sys_approval_action and sys_approval_delegation, 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 seven. zh-CN stays ahead of zh-Hant in index.ts.
  • The hand-written records gain an entry per new locale: messages.ts (the 40 approval notification sentences; approvalMessages widens to all eleven), pages.ts (the record page label sys_approval_request_detail, recorded against the same en digest the existing seven carry), and the record page's inline Details / Timeline labels in sys-approval-request.page.ts.
  • approval-email-templates.ts: APPROVAL_EMAIL_LINK_LINES (the line that opens the request from its e-mail, {{approvalUrl}} kept byte-identical) gains the three locales. This follows the seat's ruling A, as recorded in the handover commit 7db48bdd and carried by i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in zh-Hant, ar, fr and pt-BR #30790: the link line is added per locale; the e-mail templates' shape, the template selection and EMAIL_TEMPLATE_FLOOR_LOCALE are unchanged.
  • The extract command in scripts/i18n-extract.config.ts lists the three tags and its merge baseline imports the three bundles with their page entries, so check:i18n covers them from this PR on.

Tests

  • sys-approval-request-page.test.ts pins the served locale set; it now lists the eleven locales this PR serves, and every served locale is still held to carrying the authored page label.
  • approval-status-vocabulary.test.ts, approve-decision-question.test.ts, decision-question-i18n.test.ts, success-copy-names-request-i18n.test.ts and admin-copy-vocabulary.test.ts add the three new bundles to their locale lists. Coverage widens; no assertion changed.

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-approvals test && typecheck   (at head c582c205, on main c17719dd)
 Test Files  115 passed (115)
      Tests  1498 passed (1498)
check:test-typecheck: OK (tsconfig.test.json)
os-verify-lock: VERDICT command-exit 0
same suite at 89c1a860 (the same patch on top of #30790's final head): 115 files, 1498 passed, VERDICT command-exit 0
i18n gates, the derived families and the docs & code guards lane
node scripts/check-i18n-bundles.mjs --filter=approvals         (at c582c205)
  plugins/plugin-approvals       in sync (21 bundle(s))                      EXIT 0
node scripts/check-i18n-stale-fill.mjs                          (at c582c205)
check-i18n-stale-fill: OK (11 bundle set(s) — no new stale fills, 1 baselined).   EXIT 0
CI lane "Lint · docs & code guards", every command run locally   (at c582c205)
  56 commands (lane-verdict excepted), 56 x exit 0, check-cli-command-ids included
dispatch-gates --commands (at 89c1a860): 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 c582c205: the identical 61-command list
pnpm lint (repo-wide, at 89c1a860): exit 0
changed lines 1474 (+1464 / -10), 19 files: under the 3000-line human-merge threshold

The branch is one commit on main c17719dd (after #30790 landed). Its diff has the same patch id (01aee2a9) as the handover commit and as 89c1a860, where the derived families ran on top of #30790's final head; none of the main commits in between touches plugin-approvals. The package suite, both i18n checks and the docs & code guards lane were re-run on this head.

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


Generated by Claude Code

…ord page and e-mail link line in ru, de and ko

The second half of the approvals package: ru, de and ko for
sys_approval_request, sys_approval_action and sys_approval_delegation
(generated and hashed by the repo's own extract), the approval
notification messages, the record page's label and its Details /
Timeline tabs, and the line that opens an approval from its e-mail
(APPROVAL_EMAIL_LINK_LINES). With it the package serves all eleven
platform languages. The e-mail templates' shape, the template selection
and EMAIL_TEMPLATE_FLOOR_LOCALE are unchanged. The per-locale tests list
the three new locales.

Carried unchanged from the released handover commit 2dffb78 (written by
session_01Utp6Cai5CRdAs4u9gTipWU).

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-approvals, touching 58 documentable anchor(s).

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

  • content/docs/automation/approvals.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_delegation (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/automation/flows.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/automation/workflows.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/data-modeling/field-types.mdx (via sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/data-modeling/objects.mdx (via sys_approval_delegation (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/plugins/packages.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/ui/translations.mdx (via sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))

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

  • content/docs/releases/v16.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_delegation (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects), sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/releases/v17/17-6.mdx (via sys_approval_request (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/releases/v17/17-7.mdx (via sys_approval_action (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))
  • content/docs/releases/v18/18-1.mdx (via sys_approval_delegation (symbol, a field of const object deObjects; a field of const object koObjects; a field of const object ruObjects))

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
  • 1 name(s) were too generic to anchor anything (single lowercase words)
  • 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 — 6 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 d996c3817e09b9bea8ea963b04982734255ecb6c → packageMentionDocs.

Which tree this was computed on

This run read content/docs from da7dd7619bddd9459099c9f2870f210adf7af7c6 — the merge of head c582c20554665466c6ac52ed920d500f09dbef36 into base d996c3817e09b9bea8ea963b04982734255ecb6c, 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 da7dd7619bddd9459099c9f2870f210adf7af7c6 && git checkout da7dd7619bddd9459099c9f2870f210adf7af7c6
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin d996c3817e09b9bea8ea963b04982734255ecb6c c582c20554665466c6ac52ed920d500f09dbef36 && git checkout -B drift-repro d996c3817e09b9bea8ea963b04982734255ecb6c && git merge --no-ff c582c20554665466c6ac52ed920d500f09dbef36

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

⚠️ 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 d996c3817e09b9bea8ea963b04982734255ecb6c → 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-06T06:04Z · #30512 (package 9 of 11, plugin-approvals, second half)

Head-sha: c582c20

  • Shape: 19 files, +1464/−10. Everything is in packages/plugins/plugin-approvals/, plus one patch changeset. Under the 3000-line threshold and inside claim 6672078792. Not governed. One commit on origin/main c17719dd. It is the handover patch 2dffb78d carried unchanged (patch id 01aee2a9). What it adds:
    • three new locale bundles (ru, de, ko), each with its source-hash companion;
    • their registration in translations/index.ts;
    • the three locales' entries in messages.ts and pages.ts;
    • the record page's inline Details / Timeline labels;
    • APPROVAL_EMAIL_LINK_LINES;
    • the extract config's --locales list and stack locales;
    • six tests that add the three bundles to their locale lists.
  • Spot check (read in the diff):
    • APPROVAL_EMAIL_LINK_LINES gains three lines, each keeping {{approvalUrl}} byte-identical. The template shape and selection are untouched, exactly as in the first half (i18n(plugin-approvals): ship the approval objects, notifications, record page and e-mail link line in zh-Hant, ar, fr and pt-BR #30790).
    • ruMessages, deMessages and koMessages each carry all 40 keys of enMessages, with the same placeholder set per key (seat-checked over the file at this head). No value starts with the article os , so check-cli-command-ids has nothing to read; the dev also ran that lane locally.
    • The widened locale keys stay unreachable from the package entry, as in the first half.
    • sys-approval-request-page.test.ts pins the served set at all eleven locales and still holds each one to its authored label. The other test edits only add the three bundles to their lists, and no assertion is relaxed.
  • Gates: every check-run on this head has concluded: 48 distinct checks, the latest run of each 35 success, 13 skipped, 0 failure. Locally (dev report 6677862325): build 118/118, plugin-approvals 115 files / 1498 tests, typecheck OK, check-i18n-bundles --filter=approvals in sync (21 bundles), stale-fill OK, and the docs & code guards lane at 56 × exit 0. The 61 derived families and pnpm lint exit 0 at 89c1a860, the same patch, with an identical re-derived list.
  • Contract: Clause-②: no, Metadata-protocol: none, confirmed from the diff: translations and internal locale-key widening only.
  • Landing: ready, then auto-merge, through the relay. With it, plugin-approvals serves all eleven platform languages. The card stays open for the plugin-sharing sys_assignment_rule follow-up and for settings A/B.

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review November 6, 2026 06:04
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Nov 6, 2026
Merged via the queue into main with commit ae82d05 Nov 6, 2026
49 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-1jep1s branch November 6, 2026 06:27
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.

2 participants