You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`GET /auth/me/localization` answers the deployment's resolved `currency` and `timezone` instead of `null`
6
+
7
+
The handler read both off the request `ExecutionContext`, citing ADR-0053, but the resolver serving this surface is a hand-rolled envelope that never carried them — so every authenticated caller was answered `currency: null, timezone: null` whatever the `localization` settings said, and the console's regional-formatting seed was fed nulls. All three values now come from one reading of the same `resolveLocalizationContext` cascade the dispatcher's shared assembler uses. `locale` resolution is unchanged. `timezone` now always answers (cascade floor `UTC`); `currency` still answers `null` when the deployment configures none — that value has no floor.
fix(rest): metadata label lookup honours the stack's declared `i18n.fallbackLocale` / `defaultLocale` instead of falling through to the `en` bundle (#14882)
6
+
7
+
On a workspace whose labels are authored in `zh-CN` (`defaultLocale: 'zh-CN'`,
8
+
`fallbackLocale: 'zh-CN'`) and which ships only a courtesy `en` translation bundle,
9
+
`GET /api/v1/meta/object/:name`, the `/meta/:type` list, `GET /api/v1/meta` and the
10
+
public-form schema served the ENGLISH bundle labels to a `zh-CN` request (`Entry Sheet`
11
+
for an authored `填报单`, `KPI Assessment` for `KPI 考核管理`). The document translators walk
12
+
`requested locale → fallback chain → authored label` and default the chain to a literal
13
+
`['en']`; every REST seam passed none, so the declared fallback never reached the chain
14
+
and `en` was consulted before the authored label.
15
+
16
+
Every metadata translation seam now passes `fallbackChain: [i18n.getFallbackLocale()]` —
17
+
the locale the i18n service's own `t()` falls back to, which `I18nServicePlugin` receives
18
+
from the stack config as `fallbackLocale || defaultLocale || 'en'`. For the workspace
19
+
above a `zh-CN` request now resolves `zh-CN → zh-CN → authored label` (the authored
20
+
Chinese labels), an `en` request still gets the `en` bundle, and a `zh-CN` bundle, when one
21
+
is shipped, still wins over the authored label.
22
+
23
+
Feature-detected: an i18n service that does not declare a fallback (the method is
24
+
optional on `II18nService`; the core in-memory fallback has none) gets no chain and the
25
+
resolver's own default applies exactly as before. A stack declaring `defaultLocale: 'zh-CN'`
26
+
with `fallbackLocale: 'en'` is likewise unchanged — the declared `en` is honoured as it
feat(spec): `II18nService.getFallbackLocale()` — the declared fallback locale is readable, so the metadata-document translators can be handed the chain the deployment declared (#14882)
6
+
7
+
`ResolveOptions.fallbackChain` on the `@objectstack/spec/system` label
| 50 |`manage_metadata` bypassed on metadata writes | runtime, rest | Get: schema writes without the capability |`domains/meta.ts:471`, `:874`, `rest-server.ts:5048`, `:6474`, `:6722`, `:7153`, `:7346`|
161
+
| 50 |`manage_metadata` bypassed on metadata writes | runtime, rest | Get: schema writes without the capability |`domains/meta.ts:471`, `:874`, `rest-server.ts:5084`, `:6510`, `:6758`, `:7189`, `:7382`|
162
162
| 51 | The shared metadata-write verdict itself returns `allowed`| metadata-core | Get: the one function all of row 50's doors consult answers yes before any capability is examined |`meta-write-capability.ts:134`|
163
163
| 52 | Anonymous-deny seam satisfied on the domain dispatchers and the package/federation routes | runtime, rest | Get: passes with no `userId`|`domains/actions.ts:421`, `domains/ai.ts:60`, `domains/automation.ts:989`, `domains/meta.ts:232`, `domains/security.ts:78`, `domains/packages.ts:422`, `external-datasource-routes.ts:302`, `package-routes.ts:97`|
164
164
| 53 | MCP principal check satisfied | runtime | Get: MCP surface reachable with no user |`domains/mcp.ts:61`|
| View titles, descriptions, empty states |`objects.<name>._views.<view>`|
69
+
| Bulk-action copy on a list view (button, confirm prompt, dialog fields) |`objects.<name>._views.<view>.bulkActions.<def>.label` / `.confirmText` / `.confirmLabel` / `.params.<param>.label` / `.help` / `.placeholder` — a bulk param's hint is `help`, not `helpText`|
Copy file name to clipboardExpand all lines: docs/qa/platform-checklist/areas/access-security.json
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -2572,9 +2572,9 @@
2572
2572
"evidence": "the probe trace"
2573
2573
},
2574
2574
{
2575
-
"clause": "localization rides the ExecutionContext without a setup gate: an ordinary member's /auth/me/localization answers 200 with currency/locale/timezone keys (nulls legal) — the SETTINGS surface is setup-gated, the resolved defaults deliberately are not",
2575
+
"clause": "localization is RESOLVED without a setup gate: an ordinary member's /auth/me/localization answers 200 with currency/locale/timezone keys carrying the deployment cascade's own answers — the SETTINGS surface is setup-gated, the resolved defaults deliberately are not. \"Nulls legal\" no longer holds for all three (#15387, which repaired a resolver that carried none of them and made the endpoint answer null for currency AND timezone to every authenticated caller): locale and timezone ALWAYS answer, on cascade floors en-US / UTC, so a null for either is a FAIL and a regression of that repair. currency is the one key with no floor — null there is legal, and only when the deployment configures no localization.currency",
2576
2576
"oracle": "api",
2577
-
"verify": "member trace carries authenticated:true plus the three keys",
2577
+
"verify": "member trace carries authenticated:true plus the three keys, with timezone and locale non-null; configure localization.currency and localization.timezone and re-trace — both must move to the configured values (an unmoved trace is the #15387 defect, not a pass)",
0 commit comments