Destination
Production-ready multi-currency support implemented across transactions, recurring transactions, budgets, projections, statistics, charts, alerts, imports, exports, SQLite, Tauri, and Axum. Live and historical conversions must remain secure, reliable, efficient, private, and complete across user financial history.
Notes
- Domain: Zai personal finance. Consult
CONTEXT.md; use /grilling and /domain-modeling for user-facing decisions, /research for external facts, and /prototype for UI decisions.
- Product and UX questions belong to the user. Technical choices belong to the agent and must follow Secure, Reliable, Efficient, and Private pillars.
- Current ratified product language and behavior are being captured in
CONTEXT.md; first child ticket records that contract on the tracker.
- All financial records remain local. Exchange-rate requests must never send amounts, descriptions, categories, notes, or other financial data.
- This effort includes producing the final implementation handoff, then implementing the accepted contract. Decision tickets remain decision-focused.
- Refer to issues by linked title, never bare number.
Decisions so far
- Confirm multi-currency product and UX contract — Accepted the complete product and UX contract for currency lifecycle, stable actual valuation, live projections, transaction and recurring behavior, visibility, failures, setup, and import/export.
- Choose privacy-safe live and historical exchange-rate sources — Approved ECB as the only automatic first-production source, with per-user complete-coverage enablement, private fixed requests, local caching, and manual rates outside the validated intersection.
- Define supported-currency metadata and complete historical coverage — Chose a versioned ISO/SIX and CLDR manifest with atomic provider-gated coverage; only exact, approved carry-forward, and not-yet-due dates are complete, while expected gaps fail closed.
- Define money, currency, and exchange-rate persistence contract — Chose exact
i64 Money, immutable provider and transaction rate history, atomic generation read models, database-enforced invariants and indexes, and use-case repository transactions.
- Define exchange-rate service, refresh, privacy, and recovery contract — Chose a Rust-owned cache-first ECB service with fixed private requests, atomic validation and publication, provider-calendar freshness, bounded recovery, and one Currency settings Warning per failure episode.
- Define multi-currency import, export, and legacy EUR migration contract — Defined strict currency-aware preview, atomic import and currency preparation, one full-fidelity export, silent legacy EUR migration, staged default changes, fail-closed downgrade, and semantic round-trip gates.
Not yet specified
- Final implementation decomposition and sequencing after all contracts are accepted.
Out of scope
- Cryptocurrencies, commodities, obsolete currencies, and user-defined currency codes.
- Dedicated exchange-rate history or trading screen; transaction details/edit and Currency settings provide current visibility.
- Exchange-rate refresh after the app process quits, login agents, cloud processing, telemetry, or remote financial-data processing.
- Automatic bank/card fee or spread reconciliation beyond manual transaction exchange-rate correction.
Destination
Production-ready multi-currency support implemented across transactions, recurring transactions, budgets, projections, statistics, charts, alerts, imports, exports, SQLite, Tauri, and Axum. Live and historical conversions must remain secure, reliable, efficient, private, and complete across user financial history.
Notes
CONTEXT.md; use/grillingand/domain-modelingfor user-facing decisions,/researchfor external facts, and/prototypefor UI decisions.CONTEXT.md; first child ticket records that contract on the tracker.Decisions so far
i64Money, immutable provider and transaction rate history, atomic generation read models, database-enforced invariants and indexes, and use-case repository transactions.Not yet specified
Out of scope