Skip to content

v1.7.10

Choose a tag to compare

@jleinenbach jleinenbach released this 05 Jul 20:32
36445be

⚠️ A full restart of Home Assistant is required after updating.
Reloading the integration alone is not enough: a version update changes the
integration's Python code, which Home Assistant only picks up on a full
restart. After updating, restart Home Assistant and confirm that
manifest.json shows 1.7.10.

This release makes re-authentication far less trigger-happy, keeps polling from
running faster than you configured, adds automatic recovery from a stuck Find My
push session, and hardens a corrupt-input edge case. It also adds
diagnostics-only reporting that finally explains why a re-authentication was
requested. Nothing is removed for existing working installs, and the config
schema is unchanged.

Highlights

A network hiccup no longer throws away a valid login and asks you to sign in again

  • A transient network or gateway error can no longer discard a perfectly valid,
    still-cached login and force a needless re-authentication.
    Previously the
    code that decides whether a login was really rejected matched too broadly: any
    error text that merely contained 401, 403, unauthorized or forbidden
    was treated as a hard credential rejection, even when it was just a passing
    network blip. In the field this produced a confusing loop reported by an
    affected user: a valid, cached token was thrown away, the integration stopped
    receiving fresh locations, and Home Assistant prompted for re-authentication
    even though the credentials were completely intact and no real denial had
    happened.
  • Genuine credential rejections are now recognized by their structured type,
    not by guessing from message text
    , so a real "signed out" situation is still
    handled correctly and promptly.

A genuinely rejected login now stops retrying instead of hammering forever

  • When Google returns a definitive credential rejection whose message is
    HTTP-generic only (e.g. HTTP 403 Forbidden), it is now classified correctly
    and stops.
    Before, that case could be treated as retryable, so a rejected
    token stayed cached and was retried indefinitely instead of triggering a clean
    re-authentication.

Polling no longer runs faster than you configured

  • Adaptive predictive polling can no longer pull the effective interval down
    toward the 60-second safety floor.
    The predictive pre-fetch now respects your
    configured location_poll_interval; the 60-second minimum stays purely an API
    safety limit, not a target. If you configured a slower cadence to save battery
    or quota, it is honored again.

Automatic recovery from a stuck Find My push session

  • A "zombie" push-session failure mode now heals itself. In this transient
    state the Find My push connection reports itself as started and keeps
    heartbeating, yet never delivers a single new location, which previously forced
    a manual reload of the integration roughly every two hours. A liveness watchdog
    now detects the starvation and performs a single, cooperative reconnect with
    backoff (bounded by a maximum retry ceiling), so the connection recovers on its
    own.

You can finally see why a re-authentication was requested

  • The diagnostics download now records a structured reason code for each
    re-authentication
    (transient network-adjacent, stale shared key, or a
    permanent Nova/Spot auth failure), so the cause is distinguishable instead of
    opaque. This is diagnostics-only and does not change behavior.

Under the hood

  • Corrupt ignored_at values are dropped instead of raising. A non-finite or
    non-numeric value written by a corrupt .storage edit no longer breaks the
    drop-invalid, never-raise contract; it is simply ignored.
  • Re-auth provenance labels are now stable. The internal origin labels that
    used to drift with source line numbers were replaced with stable qualified
    function names, and a redaction-safe DEBUG probe was added so a missed rejection
    becomes observable in the field without ever logging raw error text (no token or
    email can leak).
  • Every fixed behavior ships with regression tests, including mutation-sharp
    tests for the reauth classification on both OAuth paths, the polling-cadence
    contract, the corrupt-input guard, and the push-session watchdog. The coverage
    floor was raised from 72 % to 73 %. Each contributing change was CI-green and
    reviewed before it was merged.
  • No breaking changes for existing installs: the config_entry schema version
    is unchanged, and diagnostics remain strictly redacted.

Reminder: restart Home Assistant after updating, then verify the version is
1.7.10 under Settings -> Devices & Services -> Google Find My.

Full Changelog: v1.7.9...v1.7.10