Skip to content

feat(currency): add GEL, OMR, THB, MYR, KHR and TRY (Refs #250) - #253

Merged
alex-mextner merged 2 commits into
mainfrom
feat/gel-omr-thb
Nov 13, 2026
Merged

alex-mextner merged 2 commits into
mainfrom
feat/gel-omr-thb

Conversation

@alex-mextner

@alex-mextner alex-mextner commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

Why

GEL, THB, MYR and TRY had display metadata but were not consistently accepted as built-in currencies; OMR and KHR were missing. Expenses could fall back to the wrong currency, and reports reconstructed from rounded EUR cents could lose small amounts such as OMR baisa or KHR.

Changes

  • Add GEL, OMR, THB, MYR, KHR and TRY across expense entry, defaults, onboarding, settings, budgets, calculator, receipts, AI guards, Google Sheets, reports and Mini App analytics.
  • Share complete Unicode currency aliases across parsers: case-insensitive ISO codes, symbols, RM and TL, Russian declensions, English and local names, prefix or suffix placement, attached amounts and grouped thousands. Keep ambiguous bare rial names and unrelated words distinct.
  • Preserve three decimal places for OMR and two for the other added currencies. Reports use original amounts for the selected new currency plus converted foreign subtotals; existing currencies retain their established reporting behavior.
  • Add dated offline conversion rates and safe handling of missing quotes. Keep numeric Sheets values precise and distinguish adjacent OMR baisa when deleting a row.
  • Cover the real message-handler, pending SQLite and numeric Sheets flow, native totals, receipt parsing, mixed-currency reports, rate outages and rendered Mini App widgets with synthetic data.

Validation

Verified head: 3b3e6c7b5a3caf3b8cb88169b7246c7b4fd7b0ac, based on main c1a609cc3942586b2c7aa98085e3d7deccfb282a. Rebase preserved the feature patch and retained the new Claude/HF changes. The follow-up commit only fixes SSR text extraction and Knip package scoping.

  • RunPod: TEST_CONCURRENCY=4 bun run test passed 6,499 tests across 258 isolated files. Native pre-push completed with exit 0.
  • Mini App: bun run build passed 28 React-render tests, TypeScript and Vite. Vite retains its CJS API deprecation notice and the existing 582.38 kB JavaScript chunk advisory.
  • Backend typecheck and Biome passed, with 513 source files checked. Native pre-commit and commit-message checks also passed; complexity/file-size checks reported no errors or warnings.
  • A focused real-handler integration run passed 32 tests and 439 assertions. External services and financial fixtures are synthetic; no user financial records were written.
  • CodeQL's test-helper finding is fixed with Bun HTMLRewriter; all 28 exact rendered-value assertions remain intact. Knip now resolves the SSR test against the Mini App's declared React dependencies, with no analysis suppressions.
  • Knip still exits 1: backend debt is tracked in chore: pre-existing knip and root biome findings on main #135. Correct Mini App analysis additionally exposes existing unused BalanceLine.tsx, Heatmap.tsx, widgets/index.ts, SmallMultiples.tsx, AnyDataSourceRef and WidgetTypeConfig; their source files are identical to current main. These findings are not reported as a passing check.

Release

Released as bae7c8d through the canonical production deployment. Required CI/security checks and Stage QA passed. The owner approved the native hatch for the requested model-review waiver; ordinary commit and push hooks were retained.

Independent production verification confirmed the deployed revision, a healthy restarted bot, and public/origin Mini App assets matching the deployed files. A bounded smoke against the actual deployed currency/fuzzy modules passed 147 assertions across all six currencies and 30 aliases, precision and native totals. Only the unrelated environment initializer was isolated; config reads and network calls were zero, and no user financial records were written. Task #250 is done with all eight criteria verified and deployment recorded.

Refs #250

Add GEL, OMR, THB, MYR, KHR and TRY to all input and reporting paths.
Share Unicode aliases with expense, budget, calculator and AI guards.
Keep native totals precise without changing EUR-cent storage or legacy
reporting; preserve OMR baisa and two-decimal ringgit, riel and lira.
Cover settings, receipts, Sheets, Mini App and live/offline conversions.

Refs #250
@github-actions

github-actions Bot commented Nov 13, 2026 •

Copy link
Copy Markdown

🔁 PR closed. Stage bot switched back to main.

Replace the test-only HTML-stripping regular expression flagged by CodeQL
with Bun's HTML parser while preserving all exact currency assertions.

Analyze the Mini App and its SSR tests against its own package manifest
in Knip, preserving the backend entries and existing analysis settings.

Refs #250
@alex-mextner
alex-mextner merged commit bae7c8d into main Nov 13, 2026
16 of 17 checks passed
@alex-mextner
alex-mextner deleted the feat/gel-omr-thb branch November 13, 2026 17:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants