Skip to content

Setup → Positions under zh-CN lists the built-in positions in English (Platform Admin, Organization Owner, Everyone, Guest …) while the built-in permission sets are translated #26562

Closed

Description

@objectstack-fleet

Filing gate: ① user-visible defect, reproduced in the browser on @objectstack 18.2.0 (found in the hotclm 18.2 upgrade pass, objectstack-ai/hotclm#155), zh-CN console as the dev admin.

Symptom. /_console/apps/setup/metadata/position lists 14 positions. The app's seven render in Chinese (18.2 made position label/description translatable). The platform's own seven render label and description in English: Platform Admin, Organization Owner, Organization Admin, Organization Member, Organization External Member, Everyone, Guest (e.g. "Built-in audience anchor: every authenticated member holds this position implicitly…").

The sibling page /_console/apps/setup/metadata/permission renders every built-in permission set in Chinese (管理员 — 完全访问, 成员 — 标准访问, 外部成员 — 仅本人记录 …), so the bundle exists for sets and is missing for positions.

Expected. The built-in positions carry zh-CN (and the other shipped locales') positions.<name>.label / .description in the platform bundle, like the built-in permission sets.

Business reason. Setup → Positions is where a Chinese-speaking administrator assigns people; half the list, including the two audience anchors every grant is reasoned about (Everyone, Guest), is English.

Reader. The platform lane that owns the built-in position declarations and their translation bundle (plugin-security / platform-objects i18n).

Duplicate search. objectstack issues, all states, "built-in positions untranslated zh-CN": 0 direct hits; nearest #25893 (Setup pages English under zh-CN, closed, other pages), #25909 (Positions list Description column, closed).

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p2 · domain:server · area:i18n · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T08:56Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    bugSomething isn't working
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Oct 27, 2026
  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 9 · card thread · the built-in positions untranslated under zh-CN
    Session: session_01R1q2xdtYgU6FKrZ7LgjPCC (the seat); the card thread is session_01FEkQ5nLEq1iuL8pxDHXN76
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-8fpct3 (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: the card thread's own container checkout
    Domain: domain:server
    Seat: domain:server#1
    Ruling-ref: triage 6437681727 (p2): the seven built-in positions get positions.<name>.label / .description translations in the hand-authored group beside the permission sets (plugin-security/src/translations/permission-sets.ts), through the positions group #25652 added, for every locale the permission-set group covers. Intake split with domain:server#2 for the 18.2.0 wave-2 cards (#25807).
    File surface: packages/plugins/plugin-security/src/translations/**, its tests and a patch changeset. ⛔ No packages/spec/** (lane red line).
    Container & model: S, mode:thread, default model and effort (set at thread open)
    Clause-②: no — translations of already-declared labels; the dev measures it on the diff
    Metadata-protocol: none
    Responsibility: a Chinese-speaking administrator sees half of Setup → Positions in English, including the Everyone and Guest anchors
    Thread-read: 6437681727
    Premise: holds (read 2026-10-27T09:14Z at origin/main a14f3e6103: card open, pm:queue, no live claim)
    Serial constraints cleared: none known on these paths; the dev re-measures open PRs on the files it touches before pr_create.

  4. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 26562,
    "status": "done",
    "branch": "claude/project-thread-8fpct3",
    "pr": "#26606",
    "session": "session_01FEkQ5nLEq1iuL8pxDHXN76",
    "premise_still_valid": true,
    "summary": "Reader measured first: GET /api/v1/meta/position runs translateMetaList (packages/rest/src/meta-item-read-gate.ts) then translateMetadataDocument('position') then translatePosition, which reads positions.NAME.label/.description from the i18n service bundle that SecurityPlugin loads SecurityTranslations into; so the bundle was missing, not the reader. Added hand-authored packages/plugins/plugin-security/src/translations/builtin-positions.ts (zh-CN, ja-JP, es-ES, the permission-set group's locales) for the seven built-ins and wired it as positions beside permissions in SecurityTranslations, outside withSourceFallback like the permission sets. New test translations/builtin-positions.test.ts proves the served overlay per locale. Changeset @objectstack/plugin-security patch; no packages/spec change.",
    "tests": "Red on main a14f3e6: builtin-positions.test.ts 'Tests 27 failed | 2 passed (29)'. Green at head 352780c: 'Tests 29 passed (29)'. Package under lock (build && typecheck && test): VERDICT command-exit 0, 'Test Files 230 passed (230)', 'Tests 4991 passed | 45 skipped (5036)'. eslint packages/plugins/plugin-security --no-inline-config exit 0. No ablation: the test is red on main and the diff adds data only.",
    "gates": "dispatch-gates --commands: 61 derived families at head 352780c (loop started on 65852aec, same tree, message-only amend). All 61 exit 0; three answered exit 3 first (prerequisite) and were re-run after it: check-plugin-teardown-shape --self-test after fetch --unshallow (48 cases pass), check:i18n ('check-i18n-bundles: OK (10 package(s) - all bundles in sync') and check:dual-build-cjs-loads after a full turbo build (VERDICT command-exit 0). --ran reconciliation: '61 derived famil(ies) accounted for - 61 run, 0 NOT-MEASURED'. test:repo not run locally (no repo-project test touched), CI Test Core owns it. PR check-runs: in_progress at report time.",
    "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "0",
    "api_writes": "2 - fleet-write relay pr_create (#26606, read-back 8798/8798 bytes identical, assignee os-project-manager); this os-dev-report comment on #26562 via post-stamped. Plus one git push (not REST).",
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed

    PR #26606 merged at 2026-10-27T10:47Z by the merge queue as fb91e97933 on main (Fixes #26562; ACCEPT 6439551718).

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-26606-*' 0 refs
    origin/main by content git cat-file -e origin/main:packages/plugins/plugin-security/src/translations/builtin-positions.test.ts present
    Ancestry git merge-base --is-ancestor fb91e97933 origin/main holds

    State: this card closed by Fixes (completed); pm:dispatched removed.


    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 notificationsbugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions