- Schema migration 1-2: add segment_id to samples, unattributed bytes to day_aggregates
- Collector now derives hour observations and day aggregates from sample pairs
- Cross-hour deltas tracked as unattributed (no proportional allocation)
- Display states: 0 samples -> awaiting first, 1 sample -> awaiting another
- Monitoring period ensured open on each collection run
- Derivation failures preserve prior history
Closes#73
Add comprehensive test coverage for upgrade semantics:
- 12 Python unit tests for store migration (forward-only, downgrade
refusal, idempotent behavior) across migrate_to_latest, init_store,
and open_store_readonly
- Enhanced packaging upgrade test to verify all five acceptance
criteria: snapshot before migration, store not rebuilt, config
survival, timer/removal no-ops during upgrade
- RPM-specific test for config file preservation (noreplace conffile)
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>