Skip to content

fix(i18n): translate SSO/SCIM/user-position/import-job admin objects - #3531

Merged
os-zhuang merged 1 commit into
mainfrom
claude/recursing-moser-1d041d
Jul 27, 2026
Merged

fix(i18n): translate SSO/SCIM/user-position/import-job admin objects#3531
os-zhuang merged 1 commit into
mainfrom
claude/recursing-moser-1d041d

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

What

An audit following the bundle-ownership guard rollout (#3502) found live, registered, UI-facing system objects that were never added to their package's i18n-extract.config.ts and carried no translation bundle entry — so non-English admins saw raw English label metadata. The orphan-only guards from #3502 catch stray bundle keys, not owned-and-live-but-never-extracted objects, so this gap was invisible.

This adds i18n coverage for four such objects, with real zh-CN / ja-JP / es-ES translations (not --fill=default English placeholders):

Object Package UI surface
sys_sso_provider platform-objects listViews + Register SSO/SAML + Verify-Domain actions
sys_scim_provider platform-objects admin grid
sys_user_position plugin-security userActions create/edit/delete (sibling sys_user_permission_set already translated)
sys_import_job platform-objects Import-Wizard history / Setup import grid / dashboards

The three verified-internal objects (sys_approval_approver, sys_approval_token, sys_audience_binding_suggestion) are correctly left untranslated.

sys_import_job — why included

Lower-confidence at audit time (engine-owned, view-only, no listViews). Confirmed genuinely UI-surfaced: the objectui @object-ui/plugin-grid Import Wizard has a real import-history view (importHistory.test.ts, isImportJobActive/isImportJobUndoable), its own docstring names the Setup import grid + dashboards, and its structurally-identical siblings sys_job / sys_job_run are already translated. Leaving it out would reproduce the very sibling-inconsistency this audit fixes.

How

Per object: added the schema to its package's extract config (import + objects[]), added the translation block to all four locale bundles, and extended the bundle-ownership.test.ts OWNED_OBJECTS. English blocks were tool-scaffolded via os i18n extract (proven regen-stable — a no-op run on the unmodified config produced a 0-line diff), then non-English leaves were hand-translated. Out-of-scope metadata-forms regen and pre-existing plugin-security object drift were reverted so the diff is exactly these four objects.

Verify

  • pnpm turbo test --filter=@objectstack/platform-objects --filter=@objectstack/plugin-security — green (both ownership guards pass; platform-objects guard re-run fresh to rule out cache)
  • pnpm turbo build --filter=... --force — green, DTS type-check active (OS_SKIP_DTS unset) → bundles are valid TranslationData
  • Structural parity confirmed across all four locales for every object; non-English strings differ from English except intentional keep-tokens (ID, OAuth/SAML placeholders, urn: NameID format)

Single patch changeset (both packages share one fixed group).

🤖 Generated with Claude Code

Four live, UI-facing system objects were registered but never added to their
package's i18n extract config, so non-English admins saw raw English `label`
metadata. Adds sys_sso_provider, sys_scim_provider, sys_import_job
(platform-objects) and sys_user_position (plugin-security) to their extract
configs with real zh-CN/ja-JP/es-ES translations across all four locale
bundles, and extends the bundle-ownership guards' OWNED_OBJECTS to cover them.

sys_import_job is included after confirming it is genuinely UI-surfaced (the
objectui plugin-grid Import Wizard's import-history view, the Setup import
grid, and dashboards) and consistent with its already-translated siblings
sys_job / sys_job_run.

The orphan-only guards from #3502 could not catch this
"owned-and-live-but-never-extracted" gap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Building Building Preview, Comment Jul 27, 2026 2:42am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/xl labels Jul 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/platform-objects, @objectstack/plugin-security.

12 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/deployment/cli.mdx (via @objectstack/plugin-security)
  • content/docs/permissions/access-recipes.mdx (via packages/plugins/plugin-security)
  • content/docs/permissions/authorization.mdx (via @objectstack/plugin-security)
  • content/docs/permissions/explain.mdx (via @objectstack/plugin-security)
  • content/docs/permissions/permissions-matrix.mdx (via packages/plugins/plugin-security)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/plugin-security)
  • content/docs/plugins/index.mdx (via @objectstack/plugin-security)
  • content/docs/plugins/packages.mdx (via @objectstack/platform-objects, @objectstack/plugin-security)
  • content/docs/releases/implementation-status.mdx (via @objectstack/plugin-security)
  • content/docs/ui/audience-based-interfaces.mdx (via packages/plugins/plugin-security)
  • content/docs/ui/dashboards.mdx (via @objectstack/plugin-security)
  • content/docs/ui/setup-app.mdx (via @objectstack/platform-objects)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit d1cabaa into main Jul 27, 2026
15 of 16 checks passed
@os-zhuang
os-zhuang deleted the claude/recursing-moser-1d041d branch July 27, 2026 03:13
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant