feat(CORE-001D2B): normalize options cache boundaries

This commit is contained in:
Bu5hm4nn
2026-03-25 19:05:00 +01:00
parent 442a0cd702
commit 5217304624
5 changed files with 566 additions and 21 deletions

View File

@@ -26,12 +26,12 @@ priority_queue:
- OPS-001
- BT-003
recently_completed:
- CORE-001D2B
- CORE-001D2A
- CORE-002B
- CORE-002A
- CORE-001D1
- SEC-001
- SEC-001A
states:
backlog:
- DATA-002A
@@ -66,6 +66,7 @@ states:
- CORE-001B
- CORE-001C
- CORE-001D2A
- CORE-001D2B
- CORE-002A
- CORE-002B
blocked: []

View File

@@ -16,6 +16,7 @@ acceptance_criteria:
technical_notes:
- `CORE-001D1` is complete: portfolio/workspace persistence now uses an explicit unit-aware schema with strict validation and atomic saves.
- `CORE-001D2A` is complete: DataService quote/provider cache normalization is now a named boundary adapter with explicit symbol mismatch rejection and GLD quote-unit repair.
- `CORE-001D2B` is complete: option expirations and options-chain payloads now use explicit normalization boundaries with malformed cached payload discard/retry behavior.
- Remaining focus is the rest of `CORE-001D2` provider/cache normalization plus `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.

View File

@@ -0,0 +1,21 @@
id: CORE-001D2B
title: Options Chain and Expiration Boundary Normalization
status: done
priority: P1
effort: S
depends_on:
- CORE-001D2A
tags:
- core
- decimal
- options
- cache
- provider
summary: Option expirations and options-chain payloads now use explicit cache/provider normalization boundaries with malformed cached payload discard rules.
completed_notes:
- Added named normalization adapters for option expirations and options-chain payloads in `app/services/data_service.py`.
- Cached payload symbol mismatches are discarded instead of being silently reused.
- Malformed cached list-shape payloads are discarded and refreshed rather than being treated as valid empty results.
- Fresh provider payloads are normalized before caching.
- Added focused coverage in `tests/test_options_normalization.py`.
- Validated with focused pytest coverage, `make build`, and a targeted browser-visible `/options` check on `main`.