OPT-38 round 2: a kept tomorrow reading is flagged kept only from 20:00
checks / unit (pull_request) Successful in 23m11s
infra-pin / fresh (pull_request) Successful in 1s

Before the bell ends it replaced today's Home line and the event log with
the kept-for-tonight wording. stand_in() docstring covers the tomorrow case.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
glenn schrooyen
2026-11-07 06:02:00 +01:00
co-authored by Claude
parent c43873b142
commit 0bacafadf0
4 changed files with 49 additions and 12 deletions
+7 -3
View File
@@ -332,8 +332,9 @@ class Hold:
The kept reading must be for `day0`, and either (a) at most `FRESH_S`
old, or (b) used at night: from the end of the bell to local midnight,
at most `KEPT_MAX_AGE_S` old. `kept` is true when (b) was needed,
or `as_today` (OPT-34: a tomorrow figure standing in for today, after
at most `KEPT_MAX_AGE_S` old; a "tomorrow" reading at any hour
(OPT-38; `read_sum()` flags it kept only from the end of the bell).
`kept` is true when (b) was needed, or `as_today` (OPT-34: a tomorrow figure standing in for today, after
midnight and until the bell starts, `KEPT_MORNING_MAX_AGE_S`)."""
rec = self._r.get((kind, entity, day0))
if rec is None:
@@ -558,6 +559,9 @@ def read_sum(today, tomorrow, now: datetime, hold: Hold | None = None):
if why0 is not None:
return None, why0, gaps
tday = _sum(tdays) if tomorrow and len(tdays) == len(tomorrow) else None
kept = kept or (tday is not None and tkept)
# OPT-38: before the bell ends a kept tomorrow reading is no "kept for
# tonight": it must not replace today's line or the log.
kept = kept or (tday is not None and tkept
and _local_hour(now) >= BELL_TO_H)
# The oldest member's report is when the sum was last fully known.
return Forecast(_sum(days), tday, min(ats), kept), None, gaps