diff --git a/docs/roadmap/ROADMAP.yaml b/docs/roadmap/ROADMAP.yaml index f9bde08..90266d9 100644 --- a/docs/roadmap/ROADMAP.yaml +++ b/docs/roadmap/ROADMAP.yaml @@ -11,8 +11,8 @@ notes: - One task lives in one YAML file and changes state by moving between status folders. - Priority ordering is maintained here so agents can parse one short file first. priority_queue: - - CORE-001D - CORE-002 + - CORE-001D - BT-003B - PORT-003 - BT-002 @@ -24,12 +24,12 @@ priority_queue: - OPS-001 - BT-003 recently_completed: + - CORE-001D1 - SEC-001 - SEC-001A - CORE-001A - CORE-001B - CORE-001C - - PORT-004 states: backlog: - DATA-002A diff --git a/docs/roadmap/backlog/CORE-001D-decimal-boundary-cleanup.yaml b/docs/roadmap/backlog/CORE-001D-decimal-boundary-cleanup.yaml index e563641..190890e 100644 --- a/docs/roadmap/backlog/CORE-001D-decimal-boundary-cleanup.yaml +++ b/docs/roadmap/backlog/CORE-001D-decimal-boundary-cleanup.yaml @@ -7,13 +7,14 @@ depends_on: - CORE-001B - CORE-001C tags: [core, decimal, persistence] -summary: Make Decimal/unit-safe values reliable across persistence, APIs, and provider boundaries. +summary: Complete the remaining Decimal/unit-safe boundary cleanup after the shipped persistence seam. acceptance_criteria: - - Persistence format for unit-safe values is explicit and stable. - - Decimal-bearing JSON/API serialization is documented and tested. - - Float-heavy integrations have named conversion boundaries. + - Provider and cache adapter boundaries are explicit, documented, and tested. + - Decimal-bearing JSON/API serialization expectations are documented for remaining external seams. + - Float-heavy service entrypoints are narrowed or wrapped in named normalization adapters. - Remaining raw-float domain hotspots are identified or removed. technical_notes: - - Prioritize portfolio/workspace persistence, provider normalization, and cache serialization seams. + - `CORE-001D1` is complete: portfolio/workspace persistence now uses an explicit unit-aware schema with strict validation and atomic saves. + - Remaining focus is `CORE-001D2` provider/cache normalization and `CORE-001D3` service entrypoint tightening. - Pre-launch policy: unit-aware schema changes may be breaking until persistence is considered live; old flat payloads may fail loudly instead of being migrated. - See `docs/CORE-001D_BOUNDARY_CLEANUP_PLAN.md` for the current hotspot inventory and proposed sub-slices. diff --git a/docs/roadmap/done/CORE-001D1-persistence-seam.yaml b/docs/roadmap/done/CORE-001D1-persistence-seam.yaml new file mode 100644 index 0000000..0644efa --- /dev/null +++ b/docs/roadmap/done/CORE-001D1-persistence-seam.yaml @@ -0,0 +1,22 @@ +id: CORE-001D1 +title: Portfolio Persistence Serialization Seam +status: done +priority: P1 +effort: M +depends_on: + - CORE-001B + - CORE-001C +tags: + - core + - decimal + - persistence + - workspace +summary: Portfolio and workspace persistence now use an explicit unit-aware schema with strict validation and atomic saves. +completed_notes: + - Added `schema_version: 2` persistence envelopes for portfolio/workspace config storage. + - Persisted bookkeeping-sensitive numeric values now carry explicit unit or currency metadata. + - Load path now rejects invalid JSON, unsupported schema versions, malformed payload shapes, and incomplete v2 payloads. + - Save path now validates before writing and replaces files atomically. + - Invalid workspace config files are no longer treated as routeable workspaces. + - Legacy non-workspace routes were removed so canonical workspace URLs are the only supported dashboard paths. + - Validated with unit tests, `make build`, and live Playwright on `main`.