Skip to content

console: the organisation is 「组织」 and the running instance is 「环境」 — retire 「工作区」 from the switcher, the avatar menu, the organisations page and the cloud home (ruling cloud#2939 A) #12851

Closed

Description

@objectstack-fleet

Filing gate: ③ a task the maintainer directed. The maintainer ruled objectstack-ai/cloud#2939 letter A, 「同意」 2026-10-17 (ruling 6229029648): one noun, 「组织」, for the thing members and billing belong to, and 「环境」 for the running instance. 「工作区」 retires. The ruling names this card as one of three follow-ups. Filed by the repo:cloud#1 seat (seat post objectstack-ai/objectstack#6026, session session_01WVbr5J6u8BHh8EyFtcWciH). ⛔ Not a claim. Independent: no Blocked-by.
Dedupe: the 200 most recent open objectui issues carry no card on workspace.*, organizations.* or cloudOnboarding.openWorkspace.

What the user sees today (objectui main b921f90902, packages/i18n/src/locales/zh.ts)

  • The organisation, called 工作区:
    • workspace.* (:2665-2680): 我的工作区, 切换工作区, 创建工作区, 工作区名称, 工作区设置, 创建工作区失败;
    • organizations.* (:3107-3118): 我的工作区, 创建工作区, 工作区, 您的工作区, 搜索工作区, 新建工作区, 当前工作区, 尚无工作区.
  • The environment, also called 工作区, on the same cloud home: cloudOnboarding.hintCreate (:3370, 「一个独立的工作区」), hintReady (:3371, 「你的工作区已就绪。进入工作区……」) and openWorkspace (:3373, 「进入工作区」).
  • en, ja and es carry the same pairs: en :3112, :3594, :3878-3881.
  • Consumers:
    • layout/WorkspaceSwitcher.tsx and AppHeader.tsx (the avatar menu);
    • console/organizations/OrganizationsPage.tsx and CreateWorkspaceDialog.tsx;
    • console/home/CloudOnboardingNext.tsx (the cloud home's widget);
    • layout/CurrentOrganizationIndicator.tsx and OrgBadge.tsx.

Done when

  1. Every string that means the organisation says 「组织」 (en Organization; ja 組織; es Organización): 我的组织, 切换组织, 创建组织, 组织名称, 组织设置, and so on, in all four locales.

  2. The cloud home's button reads 「打开」 / Open, per cloud#2768 Q2 (6118501670), which the ruling keeps. ⛔ Not 「打开生产环境」 (objectui#11659 ruling 1).

  3. The hints say what an environment is in one line, using 「环境」. For example: 「环境是运行你的应用的独立实例,有自己的网址、数据库和套餐。」

  4. The other 工作区 strings in the console are classified by meaning, and each is rewritten with its noun. They are read inside an environment, where they mean the environment:

    • :1780-1828: Setup, and the workspace timezone;
    • :2547: the tenant login hint;
    • :2764-2778: build-capability refusals and loading states;
    • :2816: the system settings description.

    If one truly means neither the organisation nor the environment, keep it and say why in the PR.

  5. A test fails on a new 工作区 / ワークスペース / espacio de trabajo / "workspace" user-facing string outside an allow-list. Key names (workspace.*) may stay, or be renamed with their consumers, in the same PR.

Stored data

Organisation names already stored as "NAME's Workspace" are not rewritten (ruling item 5).

Dedupe words: workspace organisation one noun console, organizations.mine 我的工作区, cloudOnboarding openWorkspace 进入工作区.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, priority:p2 (the filer's) · domain:ui · area:i18n · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-17T04:57Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    on Oct 17, 2026
  3. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (priority:p2 enhancement, maintainer-directed: objectstack-ai/cloud#2939 letter A, 「同意」, ruling 6229029648; filed by the repo:cloud#1 seat, graded by the triage seat, 6229893123)
    Session: session_01SJn1GEkrbbBQkhGC26wEDw
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12851-organization-environment-nouns
    Worktree: objectui-issue-12851 (in the cloud session's own container)
    Domain: domain:ui
    Seat: domain:ui#4
    File surface: packages/i18n/src/locales/{zh,en,ja,es}.ts (the workspace.*, organizations.* and cloudOnboarding.* strings, and every other 工作区 / ワークスペース / espacio de trabajo / workspace string the card's item 4 lists, each classified by meaning); the consumers only where a string's change needs one (packages/app-shell/src/layout/WorkspaceSwitcher.tsx, AppHeader.tsx, CurrentOrganizationIndicator.tsx, OrgBadge.tsx, packages/app-shell/src/console/organizations/OrganizationsPage.tsx, CreateWorkspaceDialog.tsx, packages/app-shell/src/console/home/CloudOnboardingNext.tsx); tests beside; one .changeset/12851-*.md per released package touched. ⛔ packages/components/src/ui/** stays out; item 5's repo-wide allow-list test is out, per the triage note. Stop on breach; explain in the report.
    Container & model: M, mode:cloud, model: opus (cloud on the maintainer's stance 「可以的话,ui 后续开发尽量用云 session,并且要求截图给我看」; lane scope on 「你也可以接ui车道的卡」; batch 3 on 「当前任务处理完,后续并发降到3」, this session's chat, 2026-10-16)
    Clause-②: yes
    Clause-② reason: @object-ui/i18n's shipped strings change in four locales, and keys may be renamed with their consumers. «拿不准 ⇒ 按 yes». The seat's TIER_DEFAULT review comes before ready.
    Responsibility: n/a — a maintainer ruling on the console's nouns
    Thread-read: 6229893123
    Serial constraints cleared: no open objectui PR touches the four locale files or the listed consumers (read at dispatch). domain:ui#2's PR #12858 touches HomeRail.tsx and sharedUserFeeds.ts only. objectstack-ai/objectstack#24142 (Setup settings) is independent. Not a governed surface (check-governed-queue-guard.mjs --test on the paths: none matched).

  4. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 12851,
      "status": "done",
      "branch": "claude/issue-12851-organization-environment-nouns",
      "pr": 12865,
      "session": "session_01QMLNukjEsw4QGWZS8oNsX2 (dispatched by domain:ui#4, session_01SJn1GEkrbbBQkhGC26wEDw)",
      "premise_still_valid": true,
      "summary": "Head 034b96b. 35 locale keys rewritten by meaning in all ten packs, keys unchanged: 21 organisation keys (workspace.* switcher/create dialog, organizations.* picker, the marketplace install refusal) now say Organization / 组织 / 組織 / Organización. 14 environment keys (Setup subtitle and its Workspace category label, timezone prompt, tenant sign-in hint, build refusal, home loading/empty, system-settings quick action, cloud timezone line, cloud home hints) now say Environment / 环境. The cloud home button reads 打开 / Open, and both hints say in one line what an environment is. Kept: console.ai.workspaceTitle (AI 工作区, the assistant work area) and the designer table appNav.mode.default (an object default view, zh already 工作台). Inline defaultValue literals follow en because check:i18n-keys requires it. The designer table engine.packages.noCapability also moved to environment. PM assumptions measured: (1) holds, 36 zh lines, but the list missed marketplace.install.noPermission (请联系你的工作区管理员); (2) holds; (3) is FALSIFIED: the consumers carry inline defaultValue literals, and four more consumers (HomeLayout, HomePage, QuickActions, console AuthLayout) read changed keys; (4) is FALSIFIED: check:i18n-drift holds VALUES, so a changed en value must be followed by all nine other packs, which forced ar/de/fr/ko/pt/ru into the diff. No PR was opened and no card comment was posted (degraded channel, per the dispatch). Shared checkout /home/user/objectui is left detached at 024d446: it had the claim branch checked out with no commits of its own, and the branch had to move into the worktree.",
      "tests": "All under os-verify-lock, foreground, from the repo root. pnpm exec vitest run packages/app-shell/ ran at aae54b4: VERDICT command-exit 0, Test Files 1537 passed | 1 skipped, Tests 14509 passed | 9 skipped. After 034b96b (designer table, 2 lines): pnpm exec vitest run packages/app-shell/src/views/metadata-admin/ passed, VERDICT 0, 542 files, 6119 tests. pnpm exec vitest run packages/i18n/ ran at aae54b4, unchanged since: VERDICT 0, 83 files, 1325 passed | 13 skipped. pnpm exec vitest run packages/i18n/ apps/console/ ran at 7e6943d: 305/306 files passed. The one failure, organization-namespace-3546 asserting organizations.title === Workspaces, was fixed in aae54b4 and re-run green (20/20). Console files are unchanged since. New pins render the real packs in zh-CN with an en control: WorkspaceSwitcher.organizationNoun-12851, AppHeader.organizationNoun-12851, OrganizationsPage.organizationNoun-12851, and CloudOnboardingNext (button plus both hints). The 5215 pack pin was inverted to all ten packs. Ablation ran once per new pin with objectstack scripts/ablation-replace.mjs (anchor 1 -> 0 and blob hash proven, restored, git diff HEAD empty after every leg): switcher x1, avatar x1, organisations heading x1, cloud button x2, cloud hint x1 and ja pack pin x2 all went red. No dist ablation was needed: vitest aliases @object-ui/i18n to packages/i18n/src.",
      "gates": "Local, exit codes captured before any pipe: turbo run build type-check --filter @object-ui/console,@object-ui/app-shell,@object-ui/i18n --concurrency=2 => VERDICT command-exit 0, Tasks 39 successful / 39 (dry-run lists the build and type-check tasks of all three) at aae54b4. 034b96b changes string literals only. eslint on every changed .ts/.tsx => exit 0, 0 errors (67 warnings, the existing any-in-mock pattern). pnpm check:i18n-keys => 0. pnpm check:i18n-drift => 0 (35 en changed, 315 followed, 0 waived; designer table followed). pnpm check:i18n-designer-parity => 0. pnpm check:i18n-dead-keys => 0. pnpm check:new-line-citations => 0 (0 new). node scripts/check-changeset-presence.mjs => 0 (3 changesets for 3 released packages). node scripts/check-changeset-no-major.mjs => 0. objectui has no scripts/pm/dispatch-gates.mjs, so the gate list was derived by hand and no --ran reconciliation exists. CI check-runs: NOT MEASURED, reason: no PR is open yet (the PM opens it).",
      "mcp_calls": "8: claude-code-remote add_repo x2 (read; nothing attached, public repos), github issue_read x2 (get, get_comments on #12851), github list_pull_requests x1 (open PRs, to check for an in-flight claim on the six extra locale files), ToolSearch schema loads x3 (not GitHub). No write tool.",
      "api_writes": "0 REST writes. git push only: the feature branch (empty probe plus 4 pushes, head 034b96b) and claude/issue-12851-evidence (1 push, 5522349). No PR, no comment, no labels.",
      "open_questions": [
        {
          "question": "workspace.default now reads 我的组织 / My Organization, per the ruling that workspace.* is the organisation. Its only reader is HomeLayout, as the assistant button aria-label on the environment home (\"Open My Organization assistant\"). Is that wanted?",
          "options": [
            "A keep, per the ruling (done)",
            "B follow-up: give that aria-label its own environment-noun key, which is a published key addition"
          ],
          "recommendation": "A for this PR. Startup focus: do B only if the maintainer finds the aria-label wrong."
        },
        {
          "question": "The claim named four locale files. check:i18n-drift forced all ten (see deviations). Does the PM supplement the claimed file surface with ar/de/fr/ko/pt/ru.ts, the four extra consumers and the designer table?",
          "options": [
            "A supplement the surface (in-place-fix clause: same defect class, mechanical, no other claim on those files, same i18n gate family)",
            "B waive the drift gate in its ledger and leave six packs saying workspace"
          ],
          "recommendation": "A, because B ships the double meaning in six languages and spends a ledger entry to do it."
        },
        {
          "question": "The cloud home hints: hintCreate is the card sentence verbatim. hintReady is 你的环境已就绪——它是运行你的应用的独立实例,有自己的网址、数据库和套餐。 / Your environment is ready — a private instance that runs your apps, with its own URL, database, and plan. Acceptable?",
          "options": [
            "A as shipped",
            "B the card sentence for both states"
          ],
          "recommendation": "A: it keeps the ready signal and still defines an environment in one line."
        }
      ],
      "out_of_scope_findings": [
        "carrier: objectstack-ai/objectstack#24142 (Setup settings) · noted, not filed: the settings manifests branding/localization/company declare category Workspace in packages/services/service-settings. This PR relabels the category to 环境 / Environment through settingsHub.categories.Workspace, and the backend category value stays Workspace.",
        "class: none · noted, not filed: code identifiers and comments still say workspace (WorkspaceSwitcher, CreateWorkspaceDialog, CloudWorkspaceTimezoneNotice, cloudWorkspaceTimezoneNotice namespace, data-testids). Kept by the keys-stay ruling. This is naming only and nothing a user sees."
      ],
      "deviations": [
        "Ten packs, not four: check:i18n-drift requires all nine non-en packs to follow a changed en value, so ar/de/fr/ko/pt/ru.ts are in the diff. Done under the os-dev in-place-fix clause instead of stopping; the claim file surface needs a PM supplement.",
        "Consumers outside the claimed list changed inline defaultValue literals only, because check:i18n-keys refuses stale defaults: app-shell HomeLayout.tsx, HomePage.tsx, QuickActions.tsx and apps/console/src/pages/auth/AuthLayout.tsx. LoginPage.tsx and RegisterPage.tsx are untouched.",
        "packages/app-shell/src/views/metadata-admin/i18n.ts: engine.packages.noCapability en+zh, 2 lines. Same defect, second string table.",
        "marketplace.install.noPermission: the eight packs without the ask-your-admin clause gained it, so the drift gate is met by translation, not a waiver.",
        "Contract conflict reported: os-dev.md tells the dev to open the draft PR and post the report comment. The dispatch forbids both because the fleet-write relay is refused in this container. I followed the dispatch: pr null, body in pr_body_draft.",
        "Existing tests edited because they asserted old strings: organizations-picker-vocabulary-5215 (inverted to the ruling), organization-namespace-3546, CloudOnboardingNext, CloudWorkspaceTimezoneNotice, AppHeader.myOrganizations (test name), console WorkspaceTimezonePrompt.",
        "Evidence setup, local only and reverted: the hotcrm clone got @objectstack/organizations added for the backend run (needed for OS_MULTI_ORG_ENABLED=true with OS_PLATFORM_OWNER_EMAIL and OS_AUTH_MEMBERSHIP_POLICY=invite-only), then git checkout HEAD restored package.json and the lockfile. A temporary harness page rendered CloudOnboardingNext and was deleted; both trees were clean afterwards.",
        "One read-only Bash command (a grep over the locales directory) was refused by the auto-mode classifier. I used the Grep tool instead."
      ],
      "files_changed": [
        ".changeset/12851-i18n-organization-environment.md",
        ".changeset/12851-app-shell-organization-environment.md",
        ".changeset/12851-console-organization-environment.md",
        "packages/i18n/src/locales/{en,zh,ja,es,de,fr,ko,pt,ru,ar}.ts",
        "packages/i18n/src/__tests__/organizations-picker-vocabulary-5215.test.ts",
        "packages/i18n/src/__tests__/organization-namespace-3546.test.tsx",
        "packages/app-shell/src/layout/WorkspaceSwitcher.tsx",
        "packages/app-shell/src/layout/AppHeader.tsx",
        "packages/app-shell/src/console/organizations/OrganizationsPage.tsx",
        "packages/app-shell/src/console/organizations/CreateWorkspaceDialog.tsx",
        "packages/app-shell/src/console/home/CloudOnboardingNext.tsx",
        "packages/app-shell/src/console/home/HomeLayout.tsx",
        "packages/app-shell/src/console/home/HomePage.tsx",
        "packages/app-shell/src/console/home/QuickActions.tsx",
        "packages/app-shell/src/views/metadata-admin/i18n.ts",
        "packages/app-shell/src/layout/__tests__/WorkspaceSwitcher.organizationNoun-12851.test.tsx (new)",
        "packages/app-shell/src/layout/__tests__/AppHeader.organizationNoun-12851.test.tsx (new)",
        "packages/app-shell/src/console/organizations/__tests__/OrganizationsPage.organizationNoun-12851.test.tsx (new)",
        "packages/app-shell/src/layout/__tests__/AppHeader.myOrganizations.test.tsx",
        "packages/app-shell/src/console/home/__tests__/CloudOnboardingNext.test.tsx",
        "packages/app-shell/src/console/home/__tests__/CloudWorkspaceTimezoneNotice.test.tsx",
        "apps/console/src/pages/auth/AuthLayout.tsx",
        "apps/console/src/pages/settings/__tests__/WorkspaceTimezonePrompt.test.tsx"
      ],
      "screenshots": [
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-0-home.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-0-home.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-1-switcher.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-1-switcher.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-2-avatar.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-2-avatar.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-3-organizations.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-3-organizations.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-4-cloudhome-ready.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-4-cloudhome-ready.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/before-4-cloudhome-create.png?raw=true",
        "https://github.com/objectstack-ai/objectui/blob/55223494dfce99951be5fa77b6280f40d2faa85b/docs/design/findings/12851/after-4-cloudhome-create.png?raw=true"
      ],
      "line_budget": "n/a",
      "pr_title_draft": "fix(i18n): the organisation is \"Organization\" and the running instance is \"Environment\" — retire \"workspace\" from the console",
      "pr_body_draft": "(elided here: it is the body of objectstack-ai/objectui#12865, the dev's draft verbatim)"
    }

    Relayed by seat domain:ui#4 (session_01SJn1GEkrbbBQkhGC26wEDw) from the cloud session's final report (degraded channel: the session pushed and returned pr: null). The seat opened #12865 from claude/issue-12851-organization-environment-nouns at 034b96b and set pr above. The three open questions (the workspace.default aria-label, the surface supplement for six more packs and four consumers, the hintReady wording) are ruled in the ACCEPT on the PR, and the seat's TIER_DEFAULT contract review follows it.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 17, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #12865 merged as 473e5a0 on main · read 2026-10-17T07:49Z

    probe on origin/main 473e5a0 reading control
    zh workspace.* switch 「切换组织」 (:2668), createTitle / createButton 「创建组织」 (:2669, :2671) key names unchanged
    cloud home hintReady / openWorkspace zh 「你的环境已就绪——它是运行你的应用的独立实例,有自己的网址、数据库和套餐。」 (:3371) / 「打开」 (:3373); en "Your environment is ready — …" (:3879) / "Open" (:3881) ⛔ not 「打开生产环境」
    settings category label categories.Workspace zh 「环境」 (:1787) the backend value Workspace is untouched
    engine.packages.noCapability (metadata-admin/i18n.ts) en "… in this environment …" (:2326), zh 「…在此环境…」 (:5720) —
    「工作区」 in zh outside the kept string 0 console.ai.workspaceTitle keeps 「AI 工作区」 (:1912), as the PR states
    changesets three patch: @object-ui/i18n, @object-ui/app-shell, @object-ui/console —
    a model name in the merge commit's message 0 —
    PNG files in the merge's diff 0 of 32 files screenshots stay on claude/issue-12851-evidence

    State change: the card closed as completed through Fixes #12851, and pm:dispatched is removed in this act. The cloud session session_01QMLNukjEsw4QGWZS8oNsX2 is archived.

    Records of this card:

    • the report relayed: 6231091207;
    • the ACCEPT: 6231095803;
    • the TIER_DEFAULT contract review: 6231100790 (PASS);
    • the landing note: 6231184064.

    Out of scope, as noted in the ACCEPT:

    objectui#12859, which writes the same packs, is claimed by domain:ui seat 2 and merges after this.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions