diff --git a/docs/roadmap/ROADMAP.yaml b/docs/roadmap/ROADMAP.yaml index 73babca..6e8368e 100644 --- a/docs/roadmap/ROADMAP.yaml +++ b/docs/roadmap/ROADMAP.yaml @@ -12,10 +12,7 @@ notes: - Priority ordering is maintained here so agents can parse one short file first. priority_queue: - CORE-001D - - CORE-002C - BT-003B - - BT-003B - - CORE-002 - PORT-003 - BT-002 - BT-001C @@ -26,12 +23,12 @@ priority_queue: - OPS-001 - BT-003 recently_completed: + - CORE-002 + - CORE-002C - CORE-001D2B - CORE-001D2A - CORE-002B - CORE-002A - - CORE-001D1 - - SEC-001 states: backlog: - DATA-002A @@ -45,8 +42,6 @@ states: - BT-003B - BT-001C - CORE-001D - - CORE-002 - - CORE-002C in_progress: [] done: - DATA-001 @@ -67,7 +62,9 @@ states: - CORE-001C - CORE-001D2A - CORE-001D2B + - CORE-002 - CORE-002A - CORE-002B + - CORE-002C blocked: [] cancelled: [] diff --git a/docs/roadmap/backlog/CORE-002-instrument-aware-quote-units.yaml b/docs/roadmap/backlog/CORE-002-instrument-aware-quote-units.yaml deleted file mode 100644 index 8f4cb9d..0000000 --- a/docs/roadmap/backlog/CORE-002-instrument-aware-quote-units.yaml +++ /dev/null @@ -1,28 +0,0 @@ -id: CORE-002 -title: Instrument-Aware Quote Units and Conversion Multipliers -status: backlog -priority: P0 -effort: M -depends_on: - - CORE-001A - - CORE-001B - - CORE-001C -tags: [core, units, pricing, domain] -summary: > - Complete the instrument-aware quote-unit rollout so quoted instruments like GLD are - handled explicitly as USD/share and only converted to ounce-equivalent values through - named metadata-backed seams. -acceptance_criteria: - - GLD quotes are modeled explicitly as prices per share, not as ambiguous gold-ounce prices. - - Instrument metadata encodes that 1 GLD share represents 0.1 troy ounces of gold exposure. - - Storage/domain value classes know the unit relationship and convert correctly when calculations combine instrument prices with ounce-based quantities. - - Cross-unit operations fail closed when no explicit instrument conversion path exists. - - Visible ounce-based pages beyond overview use the explicit conversion seam instead of heuristic fallbacks. - - Tests cover GLD share <-> troy-ounce conversion and reject unsupported mixed-unit operations. -technical_notes: - - `CORE-002A` is complete: overview now uses explicit GLD share -> USD/ozt conversion with quote-unit metadata and cache normalization. - - `CORE-002B` is complete: hedge/runtime displays now use the explicit converted collateral spot seam and recompute runtime snapshots from that spot. - - Remaining suggested slice is `CORE-002C`: historical/workspace collateral conversion alignment for backtests/event-style GLD share defaults. - - Prefer explicit instrument/unit types over ad hoc scale factors in page/service code. - - This should integrate with the Decimal/unit-safe domain model rather than bypass it with raw floats. - - Consider extending historical/unit types so both live overview paths and backtesting/event paths can share the same conversion rules. diff --git a/docs/roadmap/backlog/CORE-002C-historical-workspace-share-conversion.yaml b/docs/roadmap/backlog/CORE-002C-historical-workspace-share-conversion.yaml deleted file mode 100644 index 05d8258..0000000 --- a/docs/roadmap/backlog/CORE-002C-historical-workspace-share-conversion.yaml +++ /dev/null @@ -1,22 +0,0 @@ -id: CORE-002C -title: Historical Workspace Collateral to GLD Share Conversion Alignment -status: backlog -priority: P1 -effort: M -depends_on: - - CORE-002A - - CORE-001C -tags: - - core - - units - - backtesting - - event-comparison -summary: Align workspace-derived collateral defaults with explicit GLD share semantics in historical/backtest-style paths so workspace collateral is converted through named metadata rather than ad hoc share assumptions. -acceptance_criteria: - - Backtest/event-style workspace seeding uses explicit metadata-backed collateral/share conversion rules. - - Historical/unit materialization remains compatible while avoiding ambiguous share-vs-ounce assumptions. - - Unsupported or missing conversion metadata fails closed. - - Tests cover workspace-derived default seeding and changed browser-visible read paths where relevant. -technical_notes: - - Likely file targets include `app/domain/backtesting_math.py`, `app/services/backtesting/ui_service.py`, `app/services/backtesting/comparison.py`, and `app/services/event_comparison_ui.py`. - - Reuse the instrument metadata seam introduced in `CORE-002A`/`CORE-002B`. diff --git a/docs/roadmap/done/CORE-002-instrument-aware-quote-units.yaml b/docs/roadmap/done/CORE-002-instrument-aware-quote-units.yaml new file mode 100644 index 0000000..5275c19 --- /dev/null +++ b/docs/roadmap/done/CORE-002-instrument-aware-quote-units.yaml @@ -0,0 +1,20 @@ +id: CORE-002 +title: Instrument-Aware Quote Units and Conversion Multipliers +status: done +priority: P0 +effort: M +depends_on: + - CORE-001A + - CORE-001B + - CORE-001C +tags: + - core + - units + - pricing + - domain +summary: Instrument-aware quote-unit semantics are now rolled out across overview, hedge/runtime, and historical workspace-derived paths. +completed_notes: + - `CORE-002A`: overview now treats GLD quotes as USD/share and converts through explicit instrument metadata. + - `CORE-002B`: hedge/runtime now recomputes live collateral metrics from converted quote-unit semantics. + - `CORE-002C`: historical/backtest/event workspace defaults now convert stored collateral weight into GLD share units explicitly. + - Unsupported or missing conversion metadata fails closed instead of being guessed. diff --git a/docs/roadmap/done/CORE-002C-historical-workspace-share-conversion.yaml b/docs/roadmap/done/CORE-002C-historical-workspace-share-conversion.yaml new file mode 100644 index 0000000..53f17eb --- /dev/null +++ b/docs/roadmap/done/CORE-002C-historical-workspace-share-conversion.yaml @@ -0,0 +1,19 @@ +id: CORE-002C +title: Historical Workspace Collateral to GLD Share Conversion Alignment +status: done +priority: P1 +effort: M +depends_on: + - CORE-002A + - CORE-001C +tags: + - core + - units + - backtesting + - event-comparison +summary: Historical workspace defaults now convert persisted collateral weight into GLD share units through instrument metadata instead of dividing raw USD notional by historical entry spot. +completed_notes: + - Added `asset_quantity_from_workspace_config(...)` in `app/domain/backtesting_math.py`. + - Backtests and event comparison workspace defaults now seed GLD historical units from stored collateral weight via the instrument metadata seam. + - Added regressions for workspace-seeded historical defaults and route-level browser checks. + - Follow-up UX hardening now explains undercollateralized historical starts with user-facing validation instead of raw internal model errors.