Skip to content

Settings actions and refusals: seven module-local copy tables still carry four languages and resolve zh-TW to Simplified; the SMS test and two built-in answers are English only #30630

Closed

Description

@objectstack-fleet

domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

Filing gate: ① product defects with named locations, from the #30335 dev's os-dev-report 6666350678 (out_of_scope_findings 1–3), read by the seat in the cited files. ⛔ Not a claim. Suggested grade: p3. Same family as #30538 (resolvers do not read platformLocaleTagOf) and the eleven-language rule of #29428 (ruling F).
Dedupe: copy table resolveLocale four locales, sms/test locale. Nearest: #30538 (the shared resolvers), #30512 (only translations/ packages), #30335 (fixed storage/test in PR #30627). New.

What happens

  1. Seven module-local copy tables that write settings prose (refusals, live-status statements, action results) in the caller's language carry only en, zh-CN, ja-JP, es-ES, and pick the language with core resolveLocale: four in plugin-auth (including the mfa_required predicate from fix(plugin-auth)!: the global mfa_required switch cannot be saved on while OS_AUTH_TWO_FACTOR=false keeps two-factor enrollment off (#30302) #30376), plugin-email live-transport-status, two in service-settings. A caller in any of the seven other platform languages reads English, and once zh-Hant exists anywhere resolveLocale answers zh-TW with zh-CN (Server locale resolvers ignore the platform read aliases, so a zh-TW / zh-HK reader gets Simplified Chinese even where a zh-Hant bundle exists #30538). Neither check-i18n-bundles nor i18n phase 3 (platform metadata and built-in emails): extraction and bundle checks read PLATFORM_LOCALES; backfill the seven missing locales #30512 sees these tables: they are not translations/ packages.
  2. sms/test does not read the action input's locale (fix: Setup form help speaks to an administrator; queue pages, mail status banner and test toast read in Chinese #30551); its result is English in every console language.
  3. Two built-in settings answers are English only: the built-in reset action's result and "No handler registered" for an action with no handler.

Expected

Reader: domain:server (plugin-auth, plugin-email, service-settings, the SMS settings action). Serial: after PR #30627 (the reference shape) and with #30538 if it lands first.

Activity

  1. added
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    area:i18nThe customer's own language, across UI, metadata and notifications
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 5, 2026
  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 kept · domain:server · 2026-11-05T18:59Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Claim: PM loop round 2 · 2026-11-05T22:45Z
    Session: session_016WV4cyvF7SP65frVFAYLv7
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: the card thread's designated claude/project-thread-* branch, named in a claim amendment once the thread reports it
    Worktree: objectstack-issue-30630
    Domain: domain:server
    Seat: domain:server#5
    File surface: the seven module-local copy tables the card names (four in packages/plugins/plugin-auth/src/**, the live-transport-status table in packages/plugins/plugin-email/src/**, two in packages/services/service-settings/src/**), the sms/test settings action and the two built-in settings answers (the reset action result, "No handler registered"), their tests, one changeset. ⛔ packages/spec/**, ⛔ ui/**, ⛔ translations/ bundle packages (#30512's) (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the module-local copy tables (four locales, core resolveLocale maps zh-TW to Simplified) and the sms/test action (ignores the input locale) | none (check-i18n-bundles and #30512 do not see these tables) | every Setup caller in the seven other platform languages; named by the #30335 dev (report 6666350678)
    Thread-read: 6666607176
    Premise: holds per the card; the dev re-reads each table on origin/main first (PR #30627, the reference shape, is merged; #30538 is closed)
    Serial constraints cleared: open PRs on plugin-auth / service-settings at claim time (#30447 auth-plugin.ts, #30448 allowed-ip-ranges.ts + settings-service.ts) may share files with the tables; the dev reads their diffs, edits only the copy tables, and merges origin/main after either lands

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Claim amendment to 6671511018 · 2026-11-05T22:48Z
    Branch: claude/project-thread-vo0alu
    Dev session: session_016WV4d1JeXeWGVzxc12FsUx (the card thread, mode:thread), dispatched by this seat; the claim's other lines stand.

  6. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4d1JeXeWGVzxc12FsUx
    os-dev-report

    {
      "issue": 30630,
      "status": "done",
      "branch": "claude/project-thread-vo0alu",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30734",
      "session": "session_016WV4d1JeXeWGVzxc12FsUx",
      "premise_still_valid": true,
      "summary": "The seven module-local settings copy tables (plugin-auth allowed-ip-ranges refusal, sign-in floor, mfa_required, organization MFA refusal + notice; plugin-email live delivery; service-settings currency lock, not-offered) now carry one real translation per platform locale (11), with zh-Hant keys so zh-TW/zh-HK read Traditional through core resolveLocale (resolveLocaleAmong, #30538) and off-table codes read English. sms/test now reads the action input locale and answers from a new 11-language table (sms-test-copy.ts); SettingsService.runAction's reset result and no-handler refusal answer from settings-action-copy.ts in display.locale. English strings byte-identical; one locale-key type per package makes a missing language a tsc error.",
      "tests": "Repro on base 4bf9a2d7 (sources restored, branch tests): signInFloorCopy('zh-TW') = zh-CN entry, ('fr') = English; sms/test Accept-Language zh-TW answered 'Sent test SMS to +8613*******01 via twilio (id=SM_test).'; new pins red: plugin-auth 22/27, service-sms 4, service-settings 8/156, plugin-email 4/21. Ablations (scripts/ablation-replace.mjs, restored to HEAD blob, git diff HEAD empty): sign-in floor lookup restricted to the 4 old keys -> 2/26 red; sms handler smsTestCopy(undefined) -> 4/16 red. After merge of origin/main badf24df: plugin-auth Test Files 228/228, Tests 4088 passed 10 skipped; plugin-email 48/48, 805/805; service-settings 70/70, 1195/1195; service-sms on b1014f4d 9/9, 119/119; typecheck (incl. check:test-typecheck) exit 0 in all four.",
      "gates": "dispatch-gates --commands on b1014f4d: 63 derived; --ran: 62 run, 1 NOT-MEASURED, 0 UNRUN; every run command exit 0 (captured before any pipe). NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (whole-workspace build; CI runs it). check:test-source-alias first red on the new sms copy pin, fixed by an anchored @objectstack/spec/system source alias in service-sms/vitest.config.ts, then exit 0. pnpm lint exit 0. CI check-runs on PR #30734: pending at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — all reads: issue_read x2 (#30630 get, get_comments), pull_request_read x2 (#30448 get_files, #30447 get). No write tool.",
      "api_writes": "0 REST proxy writes. Relay (fleet-write) writes: pr_create #30734 (run 42134106080); issue_patch #30734 body footer to the session-URL form + signed trailer (run 42134271306); this comment.",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "class: a · reach: a caller whose display language is zh-Hant-TW (Accept-Language: zh-Hant-TW) reads Simplified Chinese from every table core resolveLocale serves, this card's tables included · evidence: resolveLocaleAmong('zh-Hant-TW', [..., 'zh-CN', 'zh-Hant', ...]) returned 'zh-CN' (table step looks up the whole code, misses; variant step returns the first zh* key); same shape for zh-Hans-CN reaching a zh-Hant key first · lives in packages/spec (outside the file surface) · dedupe words: resolveLocaleAmong script subtag zh-Hant-TW",
        "class: b · reach: open PR #30448 rewrites allowed-ip-ranges.ts recovery in 4 languages; this PR translates the current one-step recovery into the 7 new ones; whichever lands second owes the four-step recovery in all 11 (es-ES hunk may conflict) · carrier: PR #30734 Acceptance notes · noted, not filed"
      ]
    }

    Generated by Claude Code

  7. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4d1JeXeWGVzxc12FsUx
    os-dev-report addendum (PR #30734, new head 953681c5)

    • Red: Lint · docs & code guards → pnpm check:cli-command-ids read the pt-BR fragment 'os administradores. Mantenha ...' (plugin-auth/src/sign-in-method-floor.ts:368) as a quoted CLI command id. False match on the Portuguese article.
    • Fix (953681c): re-broke the concatenation (... inclusive os ' + 'administradores. ...). The joined sentence is byte-identical. No other quoted fragment in the 25 changed files opens with os (grep). pnpm check:cli-command-ids exit 0 (1206 literals across 397 files resolve); settings-copy-locale.test.ts + sign-in-method-floor tests 61/61; eslint on the file exit 0; nul-bytes exit 0.
    • Why the derived run missed it: check:cli-command-ids is an unconditional lint.yml step whose population is every source file outside packages/cli. It is not among the 63 commands dispatch-gates --commands prints for this change set; the full derivation does not name it (its header says the 63 are "NOT a complete account of what CI runs", with the always-runs tail and the undetermined families outside). I ran the 63 plus pnpm lint (eslint), not the lint.yml guard steps, and the report's gates line should have said so.
    • Relay writes this round: this comment.

    Generated by Claude Code

  8. objectstack-fleet commented on Nov 6, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cyvF7SP65frVFAYLv7

    Landed · 2026-11-06T01:06Z · PR #30734

    Probe Reading
    PR #30734 merged, merge commit deabe3bc, through the merge queue (seat ACCEPT 6672919956, head-moved record 6673433491 on 953681c5; not governed, 1750 lines)
    #30630 closed by Fixes #30630

    Shipped: every module-local settings copy table in plugin-auth, plugin-email and service-settings carries the eleven platform languages (zh-TW reads Traditional), sms/test answers in the caller's language, and runAction's two built-in answers are localized. Owed by the second lander: open PR #30448 rewrites the allowed-IP recovery sentence, and now owes it in all eleven languages.

    State change: pm:dispatched removed, assignee cleared.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions