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
fix(plugin-hono-server): resolve the /auth/me/localization regional defaults instead of answering null
The handler read `currency` / `timezone` off the request ExecutionContext,
citing ADR-0053 — but `makeExecutionContextResolver`, the resolver that serves
this surface, is a hand-rolled envelope that assigns neither. Both were
therefore `undefined` on every request and the `?? null` answered `null` to
every authenticated caller, whatever the `localization` settings said.
All three values now come from ONE reading of `resolveLocalizationContext`,
the same cascade the dispatcher's shared assembler fills `execCtx` from, so
the two faces agree by construction rather than by comment. `locale` keeps its
three #14788 rungs and its answers are unchanged; what changed underneath is
that the cascade is read even when rung 1 or 2 wins, because the other two
values need it whichever rung answers the language. The identity read and the
settings read are independent and now run concurrently — the console races
this endpoint against a 500 ms budget on a first visit.
The #14788 pin asserted `timezone: null` as the contract; it was pinning the
defect, and it now asserts the corrected one. `currency: null` in that fixture
is UNCHANGED and still correct: the cascade gives `timezone` a floor (`UTC`)
and `currency` none. The platform checklist's "nulls legal" clause is
rewritten to that asymmetry.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D47qPfEWVPmhguWgBZCi5N
`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.
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