v2.0.0
Positions now carry the reporting period of the filing they came from, so an answer covers exactly one quarter instead of summing the same holding once per filed period. The ETL normalises whatever shape EDGAR reports the period in (ISO, compact, US and quarter labels) to the quarter end, and drops a filing whose report date cannot be read; the committed sample gains a prior quarter, so every fund now reports for 2024-03-31 and 2024-06-30 across 820 filings and 24,336 positions. Exposure and the positions listing take an as_of parameter that selects the latest period on or before the given date, and without it the latest period of all is used. A new endpoint at /positions/delta reports the lines a holder opened, closed and moved between two periods, matched on CUSIP, and /periods lists what the store holds. The explorer exposure panel gains a period selector and prints the period each answer was computed over. Tests are 30 ETL pytest, 35 API unit, 19 Testcontainers integration and 8 explorer specs, all green against Fuseki.