PR #148 review (CHANGES_REQUIRED) follow-up:
- Move the panel payload dict shaper (_instance_payload) from the
HA-importing sensor.py into core/snapshot.py as instance_payload, and
have sensor.py import it from core. The API panel route now shares ONE
shaping implementation with the HA sensor layer (done -> completed,
on_time passthrough, missed omitted unless include_missed).
- build_snapshot takes the HA-local now explicitly instead of
reading datetime.now(time_zone) internally, so date and time come from
a single clock read and the overdue check is pinned in tests. The
coordinator passes the same now it already resolved; time_zone is
dropped (now is timezone-aware).
- Strengthen tests/test_core_snapshot.py with explicit literal expected
values instead of self-equality: an AWAY child (2-week absent-week
schedule + a presence override => next_present), a due-timed quest
exercised as overdue under a pinned 12:00 now, a completed quest
(done -> completed, on_time True), cycle_day == 2, and a constructed
missed view proving omission from the panel payload and retention in
the admin payload.
- Docstring cleanups: state plainly that settings is currently
unused (no 'wired' implication); correct the coordinator docstring
(settings are passed in, not resolved off the entry); trim the
coordinator __all__ to what other modules actually import.
- Derive the seed/materialize date from coordinator._local_now() so the
seed date and snapshot date cannot diverge near midnight; drop the
redundant bo/ghost/list_children leftovers from the prior seed.