Skip to content

v3.0.1

Pre-release
Pre-release

Choose a tag to compare

@LTimothy LTimothy released this 02 Aug 05:03
· 63 commits to main since this release

A bug-fix release. Most of it comes from one root cause: the app and the
server disagreed about which day a schedule ends on. The app asked whether
the off time falls before the on time, which is right. The server used a
fixed rule that a time at or before noon belongs to the next day, and never
looked at the on time at all. The presence monitor carried a third copy of
that rule. All three now share one model: a day's schedule opens at its
power-on time, so a time at or after that belongs to the same day and
anything earlier falls on the next one.

Fixed in the schedulers:

  • A side could stay on for days. A Saturday 23:00 to 13:00 schedule put the
    power-off ten hours before its own power-on, so the next one to actually
    run was the following Saturday. A morning nap or an after-midnight
    schedule had smaller versions of the same problem.
  • Alarms took their day from the power-off time rather than from the alarm's
    own time, so changing only when the bed switches off could move the alarm
    to a different weekday. The alarm then found the side already off and
    skipped itself, which looked like no alarm at all.
  • Temperature adjustments could scatter one night's changes across three
    days, since each entry applied the old rule to a different time.
  • An alarm saved without a time passed validation and then threw while being
    scheduled. Because every job was cancelled before the rebuild, one bad
    entry could leave the pod with no power, temperature, alarm, or priming
    jobs, and it stayed that way across restarts. Schedules are now validated
    more strictly, an unusable alarm is skipped rather than fatal, and each day
    is scheduled on its own so one failure cannot take down the rest.
  • An alarm override accepted any text. "25:00" quietly armed the alarm for
    01:00 the next day. Override times and dates are now validated.
  • A slow clock sync at boot could leave the pod with no jobs for the life of
    the process, because the retry budget ran out after 100 seconds and stopped
    for good. It now keeps retrying on a longer interval.
  • The daily reboot silently never scheduled when priming was set before
    01:00, because the hour worked out to -1.
  • Powering on no longer overwrites a temperature you set by hand while the
    temperature schedule is paused.

Fixed in presence auto-off:

  • Auto-off treated "no presence data" as "nobody there" and could switch a
    side off with someone in it, 45 minutes after the biometrics stream stopped
    reporting. Turning biometrics off in settings stops that stream, so this
    was reachable from the app. Presence is now three states, and auto-off
    holds when it is unknown rather than assuming an empty bed.
  • A clock correction after boot read as hours of absence and switched a side
    off on the next check.

Fixed in the app:

  • Dismissing a vibrating alarm latched the dialog closed, so the next alarm
    did not show one.
  • Several controls kept an optimistic value after the save failed, showing a
    temperature, power state, or away-mode setting the pod never accepted.
  • The sleep chart labelled times like "22:30pm" and could put the wrong
    weekday under a bar.
  • A schedule with alarms saved in the older single-alarm shape always looked
    edited, so discard never went quiet.
  • A malformed settings response could blank the whole app instead of one
    section, and an invalid live-update frame could write over the cached
    device status and show the bed as off.

Also in this release:

  • Settings now links to Software and updates, which was built and routed but
    had no way in. Its version picker and instant rollback were gated behind a
    version floor that no release had reached, so both were unavailable; the
    floor now sits at 3.0.0, where the features it guards actually shipped.

Known limitation, not fixed here: on the spring daylight-saving change, a job
scheduled in the hour that does not exist that day is skipped, and a weekly
job skips a full week rather than a day. The autumn case, where an alarm
could fire twice, is fixed. Addressing the spring case means replacing the
recurrence rules with explicit per-day scheduling, which is a larger change
to safety-critical code than belongs in a patch release.