Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Added¶
- Feat: Development environment for Docker based app (197b418)
- Feat: TASK-156 — Add active/deleted status breakdown to Inventory UI
Full-stack change: inventory summary now returns per-type active/deleted counts. ResourceRepository groups by status column; IdentityRepository derives status from deleted_at via SQL CASE. New TypeStatusCounts frozen dataclass in core.models.counts. Frontend displays total prominently with "Active: N / Deleted: N" secondary text. All existing tests updated; new tests for mixed-status resources and identity deleted_at derivation. (cc1def8)
Fixed¶
- Fix: TASK-158 — Add timezone query param to all date-filtered API endpoints
Wire the timezone parameter (added to resolve_date_range in TASK-157) through all 6 call sites: billing, chargebacks (list + allocation-issues), aggregation, export, and tags bulk-by-filter. GET endpoints accept timezone as a query param; POST endpoints accept it in the request body via ExportRequest and BulkTagByFilterRequest schemas. Backward compatible — omitting timezone preserves UTC behavior. (050e7b5) - Fix: TASK-157 — Add timezone parameter to resolve_date_range
resolve_date_range now accepts an optional IANA timezone string so date boundaries are computed in the user's local timezone before converting to UTC. Fixes data discrepancy where non-UTC users missed records near midnight boundaries (e.g. America/Denver end_date=Dec 31 now correctly produces end_dt=2026-01-01T07:00:00 UTC instead of 00:00:00 UTC). (35800b0) - Fix: Remove 10k row limit on aggregate endpoint that silently truncated totals
The hardcoded limit=10000 on the aggregate SQL query caused the dashboard to show $8k instead of $16.6k when identity_id × daily buckets exceeded 10k rows. Grafana was correct because it queries SQLite directly. (3353312)