Money empty state: cramped form spacing, opaque card (use glass card) #540

Open
opened 2026-09-30 17:28:37 +00:00 by kayg · 10 comments
Owner

Owner report (2026-09-30, screenshot of Money "No budget yet")

"the fields are too close along with the heading and the action button. please aim for relaxed spacing (apple hig?) and of course the card should be transparent/blurry (codereuse?)"
File: apps/web/src/routes/money/+page.svelte (the EmptyState plus the create-budget form).
Fix:

  • The card uses the shared glass card surface (.glass-card / the existing glass tokens), the same as the other cards. It must not be an opaque one-off panel (reuse gate; tokens only, #287).
  • Relaxed, HIG-style spacing uses the spacing tokens: a clear gap between the heading/description and the form; each label sits close to its field, with a larger gap between field groups; a generous gap before the primary button. If the shared form-field or form-stack primitive lacks this rhythm, fix it there (Settings forms use the same one) rather than locally.
  • The action button aligns with the fields (full-width or right-aligned per the existing form pattern; pick the one Settings uses).
  • The description is user friendly and has no jargon. For example: "Give every amount a job, one category at a time. Your budget is saved as plain files in Money in your Home." Keep it short.
    Test: e2e screenshots (a production build) at 390 and 1440 px, both themes, with a real background set, so the blur is visible. Assert that the card's computed backdrop-filter is not none.
## Owner report (2026-09-30, screenshot of Money "No budget yet") "the fields are too close along with the heading and the action button. please aim for relaxed spacing (apple hig?) and of course the card should be transparent/blurry (codereuse?)" File: `apps/web/src/routes/money/+page.svelte` (the EmptyState plus the create-budget form). **Fix:** - The card uses the shared glass card surface (`.glass-card` / the existing glass tokens), the same as the other cards. It must not be an opaque one-off panel (reuse gate; tokens only, #287). - Relaxed, HIG-style spacing uses the spacing tokens: a clear gap between the heading/description and the form; each label sits close to its field, with a larger gap between field groups; a generous gap before the primary button. If the shared form-field or form-stack primitive lacks this rhythm, fix it there (Settings forms use the same one) rather than locally. - The action button aligns with the fields (full-width or right-aligned per the existing form pattern; pick the one Settings uses). - The description is user friendly and has no jargon. For example: "Give every amount a job, one category at a time. Your budget is saved as plain files in Money in your Home." Keep it short. **Test:** e2e screenshots (a production build) at 390 and 1440 px, both themes, with a real background set, so the blur is visible. Assert that the card's computed backdrop-filter is not none.
Author
Owner

Starting #540 on job/money-empty-540 from dev at aa372eef6c. I am reviewing the shared glass surface and Settings form rhythm, then I will capture the requested production-build screenshots and test the computed backdrop filter.

Starting #540 on job/money-empty-540 from dev at aa372eef6c9312403f59a65d5b90cb3648ff52ed. I am reviewing the shared glass surface and Settings form rhythm, then I will capture the requested production-build screenshots and test the computed backdrop filter.
Author
Owner

Finding: the existing Money e2e helper sent auto_scheme: { mode, location: null }. Appearance defines AutoSchemeSettings with deny_unknown_fields and only a mode field, so the real server returns 422 before screenshots. Location has its own Settings home in DESIGN §47. I am updating the test request payload to that current contract; this does not change an expected status or server behavior.

Finding: the existing Money e2e helper sent `auto_scheme: { mode, location: null }`. Appearance defines `AutoSchemeSettings` with `deny_unknown_fields` and only a `mode` field, so the real server returns 422 before screenshots. Location has its own Settings home in DESIGN §47. I am updating the test request payload to that current contract; this does not change an expected status or server behavior.
Author
Owner

The regression now reaches the real photo background and confirms the baseline defect: at 390px in light mode, the Money empty-state card has computed backdrop-filter: none. This is the expected red result from the requested assertion. The existing form also needs its shared stack selector to match Money forms where .money-form and .inline-form are on the same element.

The regression now reaches the real photo background and confirms the baseline defect: at 390px in light mode, the Money empty-state card has computed `backdrop-filter: none`. This is the expected red result from the requested assertion. The existing form also needs its shared stack selector to match Money forms where `.money-form` and `.inline-form` are on the same element.
Author
Owner

Performance finding: docs/perf/baseline.json has route samples at 390, 820 and 1440 px for Today, Files, Photos, Notes, Search and Appearance, but no /money samples. The local profile completed with host load average 16.17 before and 33.09 after, so those timings are not representative. The perf VM lock is free; I am preparing a release artifact for one locked run.

Performance finding: docs/perf/baseline.json has route samples at 390, 820 and 1440 px for Today, Files, Photos, Notes, Search and Appearance, but no /money samples. The local profile completed with host load average 16.17 before and 33.09 after, so those timings are not representative. The perf VM lock is free; I am preparing a release artifact for one locked run.
Author
Owner

Completed #540.

Built

  • The Money empty state now uses the shared glass card and overlay roles. The shared EmptyState component forwards surface classes; plain empty states keep their neutral surface.
  • Shared form styles now apply to the Money form and Settings forms. Labels stay 4 px from controls, form groups use a 20 px gap, and the primary action has a 24 px gap and aligns to the field edge.
  • The copy is short and explains where the budget is saved.
  • The production e2e uploads a CC0 wallpaper through Files, selects it through Appearance, and checks the card's computed backdrop-filter and form spacing at 390, 820 and 1440 px in both themes.
  • The route profile now waits for the Money empty-state card and checks its computed blur.
  • Fixed the e2e Appearance request. It no longer sends the removed Location field, which previously caused a 422.

Files

  • apps/web/src/routes/money/+page.svelte
  • apps/web/src/lib/components/empty-state.svelte
  • apps/web/src/lib/components/money/CreateBudgetForm.svelte
  • apps/web/src/routes/layout.css
  • apps/web/src/routes/settings/parts/settings-forms.css
  • apps/web/src/calternal-app.css
  • apps/web/e2e/money.mjs
  • apps/web/e2e/route-perf.mjs

Commits and head

Gate output
bun run check:
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/money-empty-540/apps/web
Getting Svelte diagnostics...
svelte-check found 0 errors and 0 warnings

bun run test:
Test Files 140 passed (140)
Tests 914 passed (914)
Start at 21:28:51
Duration 199.74s (transform 56%, environment 16%, import 13%, tests 11%, setup 4%)

  Transform  |component| transforming modules took 366.79s · 46% of tracked time, re-done on every run
             persist transforms across runs with fsModuleCache: true
             learn more: https://vitest.dev/guide/improving-performance#caching-between-reruns

bun run build:
✓ built in 55.95s
> Using @sveltejs/adapter-static
Wrote site to "build"
✔ done

bun e2e/money.mjs:
PASS the User flow wrote exact Markdown and the screens show the derived numbers
PASS captured 36 Money screenshots in /home/kayg/Developer/calternal-wt/money-empty-540/artifacts/money

The production Settings Account/Profile screenshot probe captured six images. Its 4/20/24 px spacing assertions passed at every width and theme. The release server build for the perf run completed:
Finished release profile [optimized] target(s) in 15m 59s
cargo clean:
Removed 14821 files, 7.0GiB total

No Rust source changed, so Rust format, clippy and test gates did not apply. git diff --check returned no output.

Performance
One locked run on perf-test at 4× CPU throttle used five route samples per viewport and 50 samples per API read. The load average began at 0.05, 0.09, 0.03 and ended at 7.29, 4.86, 2.23.

Viewport Money data-ready p50/p95 Money LCP p50/p95 Baseline
390 px 667 / 1449 ms 536 / 1144 ms No Money row
820 px 709 / 717 ms 616 / 636 ms No Money row
1440 px 1094 / 1128 ms 1056 / 1092 ms No Money row

The baseline has no /money route samples. Its server idle CPU/RSS is 0.2% / 185,220,301 bytes; this run measured 1.0% / 280,596,480 bytes. The 24-client burst returned 54,172 HTTP 200 responses with 3 / 15.3 ms p50/p95 latency; the baseline returned 71,751 HTTP 200 responses at 2.1 / 11.9 ms. The current route profile covers ten routes while the baseline covers six, so these server-level values do not give a direct Money-only comparison. The full profile is attached: perf JSON.

Screenshot attachments
Money empty state with a real wallpaper:

Settings Account/Profile form:

Decision not specified in DESIGN.md
I chose 4 px between each label and control, 20 px between field groups, and 24 px before the main action. The action aligns to the right edge of the fields, matching right-aligned Settings form actions.

Completed #540. **Built** - The Money empty state now uses the shared glass card and overlay roles. The shared EmptyState component forwards surface classes; plain empty states keep their neutral surface. - Shared form styles now apply to the Money form and Settings forms. Labels stay 4 px from controls, form groups use a 20 px gap, and the primary action has a 24 px gap and aligns to the field edge. - The copy is short and explains where the budget is saved. - The production e2e uploads a CC0 wallpaper through Files, selects it through Appearance, and checks the card's computed backdrop-filter and form spacing at 390, 820 and 1440 px in both themes. - The route profile now waits for the Money empty-state card and checks its computed blur. - Fixed the e2e Appearance request. It no longer sends the removed Location field, which previously caused a 422. **Files** - apps/web/src/routes/money/+page.svelte - apps/web/src/lib/components/empty-state.svelte - apps/web/src/lib/components/money/CreateBudgetForm.svelte - apps/web/src/routes/layout.css - apps/web/src/routes/settings/parts/settings-forms.css - apps/web/src/calternal-app.css - apps/web/e2e/money.mjs - apps/web/e2e/route-perf.mjs **Commits and head** - 98d92428d: Polish Money empty budget form surface and spacing - a3f45cefd: Benchmark the Money empty-state glass card - HEAD: a3f45cefd4119fcbd662f58423fda4ae2a5f068e **Gate output** bun run check: Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/money-empty-540/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings bun run test: Test Files 140 passed (140) Tests 914 passed (914) Start at 21:28:51 Duration 199.74s (transform 56%, environment 16%, import 13%, tests 11%, setup 4%) Transform |component| transforming modules took 366.79s · 46% of tracked time, re-done on every run persist transforms across runs with fsModuleCache: true learn more: https://vitest.dev/guide/improving-performance#caching-between-reruns bun run build: ✓ built in 55.95s > Using @sveltejs/adapter-static Wrote site to "build" ✔ done bun e2e/money.mjs: PASS the User flow wrote exact Markdown and the screens show the derived numbers PASS captured 36 Money screenshots in /home/kayg/Developer/calternal-wt/money-empty-540/artifacts/money The production Settings Account/Profile screenshot probe captured six images. Its 4/20/24 px spacing assertions passed at every width and theme. The release server build for the perf run completed: Finished release profile [optimized] target(s) in 15m 59s cargo clean: Removed 14821 files, 7.0GiB total No Rust source changed, so Rust format, clippy and test gates did not apply. git diff --check returned no output. **Performance** One locked run on perf-test at 4× CPU throttle used five route samples per viewport and 50 samples per API read. The load average began at 0.05, 0.09, 0.03 and ended at 7.29, 4.86, 2.23. | Viewport | Money data-ready p50/p95 | Money LCP p50/p95 | Baseline | | --- | ---: | ---: | --- | | 390 px | 667 / 1449 ms | 536 / 1144 ms | No Money row | | 820 px | 709 / 717 ms | 616 / 636 ms | No Money row | | 1440 px | 1094 / 1128 ms | 1056 / 1092 ms | No Money row | The baseline has no /money route samples. Its server idle CPU/RSS is 0.2% / 185,220,301 bytes; this run measured 1.0% / 280,596,480 bytes. The 24-client burst returned 54,172 HTTP 200 responses with 3 / 15.3 ms p50/p95 latency; the baseline returned 71,751 HTTP 200 responses at 2.1 / 11.9 ms. The current route profile covers ten routes while the baseline covers six, so these server-level values do not give a direct Money-only comparison. The full profile is attached: [perf JSON](https://git.kayg.org/attachments/3b31fe17-6914-4b6a-b8a9-6e84c023294c). **Screenshot attachments** Money empty state with a real wallpaper: - [Light 390 px](https://git.kayg.org/attachments/966debb2-4a8c-4a99-a2fc-a883f0798747) - [Light 820 px](https://git.kayg.org/attachments/780ca15f-326d-4290-89c7-94f49adc6485) - [Light 1440 px](https://git.kayg.org/attachments/0c23a3c0-b977-4604-8bc9-83ab8fcd3bfb) - [Dark 390 px](https://git.kayg.org/attachments/5933e1b6-3ef1-4573-9856-97f1b5008006) - [Dark 820 px](https://git.kayg.org/attachments/b612a29b-2efc-452c-ab6c-a513f36b6a15) - [Dark 1440 px](https://git.kayg.org/attachments/d11bd0e5-4297-471b-9e56-eaa4ec6c7df0) Settings Account/Profile form: - [Light 390 px](https://git.kayg.org/attachments/a70f4294-2511-4d02-8cd8-bded72f9395b) - [Light 820 px](https://git.kayg.org/attachments/3fd23535-872f-43f6-8aa9-d2b72ae51d45) - [Light 1440 px](https://git.kayg.org/attachments/8180e33f-c7f7-498d-bf16-69879dfed0c0) - [Dark 390 px](https://git.kayg.org/attachments/562531ec-78f7-4720-9453-0e63837a3656) - [Dark 820 px](https://git.kayg.org/attachments/f2a7ca04-3949-4fd5-9ea7-14d7a0a2cb40) - [Dark 1440 px](https://git.kayg.org/attachments/e24aafaf-1ba2-41f4-923b-e97ce3e04dee) **Decision not specified in DESIGN.md** I chose 4 px between each label and control, 20 px between field groups, and 24 px before the main action. The action aligns to the right edge of the fields, matching right-aligned Settings form actions.
Author
Owner

Starting round 2 on job/money-empty-540.

Branch HEAD: a3f45cefd4119fcbd662f58423fda4ae2a5f068e (Benchmark the Money empty-state glass card).
Base shared with origin/dev: 15e17aeafc8ea160c109e62fba57f6961c39d21f.

I’m addressing the phone card gutters at 360/390/430, switching currency to the shared searchable Select with code and name labels, and adding the requested Account/Profile overflow assertion at 390. I’ll rerun the Money e2e and web gates, capture 390/820/1440 evidence in both themes, and merge the current origin/dev once before final gates.

Starting round 2 on `job/money-empty-540`. Branch HEAD: `a3f45cefd4119fcbd662f58423fda4ae2a5f068e` (Benchmark the Money empty-state glass card). Base shared with `origin/dev`: `15e17aeafc8ea160c109e62fba57f6961c39d21f`. I’m addressing the phone card gutters at 360/390/430, switching currency to the shared searchable Select with code and name labels, and adding the requested Account/Profile overflow assertion at 390. I’ll rerun the Money e2e and web gates, capture 390/820/1440 evidence in both themes, and merge the current `origin/dev` once before final gates.
Author
Owner

Finding: the focused currency catalog test caught a source-data mismatch before the UI run. The first web test run produced 162 UI choices while crates/calternal-money/src/units.rs has 165 accepted codes; comparison identified BHD, USD and USN as missing. I added those codes to the picker list and will rerun the focused test before the full web gates.

Finding: the focused currency catalog test caught a source-data mismatch before the UI run. The first web test run produced 162 UI choices while `crates/calternal-money/src/units.rs` has 165 accepted codes; comparison identified BHD, USD and USN as missing. I added those codes to the picker list and will rerun the focused test before the full web gates.
Author
Owner

Confirmed the reported phone overflow in the Money empty form. The landing grid could keep an intrinsic minimum width, so the 100%-wide card exceeded the padded route content on narrow screens. I set a shrinkable grid track and constrained the card to that track. The e2e now asserts both card edges remain inside the route gutters, width stays at or below 520px, and there is no horizontal page scroll at 360, 390, and 430px in light and dark. The Account/Profile edit form also passes its 390px gutter and control bounds checks in both themes.

Confirmed the reported phone overflow in the Money empty form. The landing grid could keep an intrinsic minimum width, so the 100%-wide card exceeded the padded route content on narrow screens. I set a shrinkable grid track and constrained the card to that track. The e2e now asserts both card edges remain inside the route gutters, width stays at or below 520px, and there is no horizontal page scroll at 360, 390, and 430px in light and dark. The Account/Profile edit form also passes its 390px gutter and control bounds checks in both themes.
Author
Owner

The first local route-profile run reached the screenshot pass, then stopped because the 2,000-file fixture made .files-frame [data-file-item] match four rows while the capture helper requires one target. I am changing the profile to pass the first ready row as its screenshot target. The currency measurements had run, but the runner writes its JSON after this screenshot pass, so I will rerun the profile after the fix.

The first local route-profile run reached the screenshot pass, then stopped because the 2,000-file fixture made `.files-frame [data-file-item]` match four rows while the capture helper requires one target. I am changing the profile to pass the first ready row as its screenshot target. The currency measurements had run, but the runner writes its JSON after this screenshot pass, so I will rerun the profile after the fix.
Author
Owner

Built

  • Fixed the Money empty-state card so it stays within the page gutters at 360, 390, and 430 px. The e2e checks the card bounds, 520 px maximum width, and horizontal overflow in light and dark themes.
  • Reused the shared Select and Menu for currency choice. The searchable list has all 165 supported currency codes and displays the code with its locale-formatted name.
  • Added currency-select performance coverage for open, search, and a 24-query burst over all 165 options.
  • Checked the Account/Profile edit form at 390 px in light and dark. Its card, controls, and page stay within the viewport.

Files

  • apps/web/src/routes/money/+page.svelte
  • apps/web/src/lib/components/money/CreateBudgetForm.svelte
  • apps/web/src/lib/money/currencies.ts and currencies.test.ts
  • packages/ui/src/components/Select.svelte
  • packages/ui/src/components/menu/Menu.svelte
  • apps/web/src/lib/components/Select.svelte.test.ts
  • apps/web/e2e/money.mjs
  • apps/web/e2e/route-perf.mjs

Screenshots

Money empty state, production build:

Account/Profile edit form at 390 px:

Gates

bun run check (exit 0):

$ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json
Text sizes and UI shape values use shared role tokens.
UI transitions and animation options use shared motion tokens or documented exceptions.
Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/money-empty-540/apps/web
Getting Svelte diagnostics...

svelte-check found 0 errors and 0 warnings

bun run test Vitest summary:

 Test Files  140 passed (140)
      Tests  932 passed (932)
   Start at  04:31:33
   Duration  186.56s (transform 53%, environment 17%, import 16%, tests 11%, setup 3%)

Vitest also emitted jsdom scrollTo() and CSS parse diagnostics. The tests reported no failures. The shell log-tail wrapper then printed zsh:1: read-only variable: status after Vitest completed; the quoted Vitest summary is its output.

Production Money e2e:

PASS the User flow wrote exact Markdown and the screens show the derived numbers
PASS captured 36 Money screenshots in /home/kayg/Developer/calternal-wt/money-empty-540/artifacts/money

Local performance profile (calternal-dev, one run, viewports 390/820/1440): currency open visible p50/p95 616/1,508 ms; search visible p50/p95 314/418 ms; 24-query burst p50/p95 1,368.2/2,843.6 ms. The server idle sample was 0.8% CPU and 350,117,888 bytes RSS; request-storm peak was 127.76% CPU and 350,117,888 bytes RSS. docs/perf/baseline.json has no Money route or currency-search row, so these are first local figures and are not a like-for-like comparison with the perf-test baseline.

No Rust source changed, so Rust format, clippy, and test gates were not run. cargo clean completed: Removed 7169 files, 4.5GiB total. The web build output and generated SvelteKit output were removed. The worktree is clean.

Decisions and gaps

  • The e2e browser locale is en-US, so the default is USD. The locale test verifies en-IN selects INR. The implementation uses a region-to-currency map and falls back to EUR where the region is not mapped or unavailable; DESIGN §48 does not define this fallback.
  • There is no comparable Money/currency metric in the existing baseline. The new local profile is a first data point, not a performance regression comparison.

Branch: job/money-empty-540
Head: a5b9c9ab7a160ed644590f3bdf93803425cb8939

## Built - Fixed the Money empty-state card so it stays within the page gutters at 360, 390, and 430 px. The e2e checks the card bounds, 520 px maximum width, and horizontal overflow in light and dark themes. - Reused the shared Select and Menu for currency choice. The searchable list has all 165 supported currency codes and displays the code with its locale-formatted name. - Added currency-select performance coverage for open, search, and a 24-query burst over all 165 options. - Checked the Account/Profile edit form at 390 px in light and dark. Its card, controls, and page stay within the viewport. ## Files - `apps/web/src/routes/money/+page.svelte` - `apps/web/src/lib/components/money/CreateBudgetForm.svelte` - `apps/web/src/lib/money/currencies.ts` and `currencies.test.ts` - `packages/ui/src/components/Select.svelte` - `packages/ui/src/components/menu/Menu.svelte` - `apps/web/src/lib/components/Select.svelte.test.ts` - `apps/web/e2e/money.mjs` - `apps/web/e2e/route-perf.mjs` ## Screenshots Money empty state, production build: - 390 light: [money-empty-light-390.png](https://git.kayg.org/attachments/b66db05c-7b7f-4697-9c60-368ff3ef9866) - 390 dark: [money-empty-dark-390.png](https://git.kayg.org/attachments/90bdf142-2f96-407e-88ae-ba714fc0fa8b) - 820 light: [money-empty-light-820.png](https://git.kayg.org/attachments/af919f61-9e4d-4fc2-8ec1-d8046f83e827) - 820 dark: [money-empty-dark-820.png](https://git.kayg.org/attachments/8b40850e-fd4f-4008-8ad0-5194a7bccbda) - 1440 light: [money-empty-light-1440.png](https://git.kayg.org/attachments/0c7feb61-d32f-4ff0-85fb-11398bf2d51f) - 1440 dark: [money-empty-dark-1440.png](https://git.kayg.org/attachments/ebd619f9-cc2a-436b-b171-929c873ff912) Account/Profile edit form at 390 px: - Light: [settings-account-profile-light-390.png](https://git.kayg.org/attachments/785c71fc-e9fb-4f5a-bce1-847f743a1d8a) - Dark: [settings-account-profile-dark-390.png](https://git.kayg.org/attachments/9a0b7dec-9d6f-46fc-ac1a-7d6ae5d47840) ## Gates `bun run check` (exit 0): ```text $ node scripts/check-type-tokens.mjs && node scripts/check-motion-tokens.mjs && svelte-kit sync && svelte-check --tsconfig ./tsconfig.json Text sizes and UI shape values use shared role tokens. UI transitions and animation options use shared motion tokens or documented exceptions. Loading svelte-check in workspace: /home/kayg/Developer/calternal-wt/money-empty-540/apps/web Getting Svelte diagnostics... svelte-check found 0 errors and 0 warnings ``` `bun run test` Vitest summary: ```text Test Files 140 passed (140) Tests 932 passed (932) Start at 04:31:33 Duration 186.56s (transform 53%, environment 17%, import 16%, tests 11%, setup 3%) ``` Vitest also emitted jsdom `scrollTo()` and CSS parse diagnostics. The tests reported no failures. The shell log-tail wrapper then printed `zsh:1: read-only variable: status` after Vitest completed; the quoted Vitest summary is its output. Production Money e2e: ```text PASS the User flow wrote exact Markdown and the screens show the derived numbers PASS captured 36 Money screenshots in /home/kayg/Developer/calternal-wt/money-empty-540/artifacts/money ``` Local performance profile (`calternal-dev`, one run, viewports 390/820/1440): currency open visible p50/p95 616/1,508 ms; search visible p50/p95 314/418 ms; 24-query burst p50/p95 1,368.2/2,843.6 ms. The server idle sample was 0.8% CPU and 350,117,888 bytes RSS; request-storm peak was 127.76% CPU and 350,117,888 bytes RSS. `docs/perf/baseline.json` has no Money route or currency-search row, so these are first local figures and are not a like-for-like comparison with the perf-test baseline. No Rust source changed, so Rust format, clippy, and test gates were not run. `cargo clean` completed: `Removed 7169 files, 4.5GiB total`. The web build output and generated SvelteKit output were removed. The worktree is clean. ## Decisions and gaps - The e2e browser locale is `en-US`, so the default is USD. The locale test verifies `en-IN` selects INR. The implementation uses a region-to-currency map and falls back to EUR where the region is not mapped or unavailable; DESIGN §48 does not define this fallback. - There is no comparable Money/currency metric in the existing baseline. The new local profile is a first data point, not a performance regression comparison. Branch: `job/money-empty-540` Head: `a5b9c9ab7a160ed644590f3bdf93803425cb8939`
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#540
No description provided.