[Unit] # Cadence timer for the Mosaic wake FALLBACK safety drain (F7, EPIC #892, W7). # Drives mosaic-wake-fallback.service on a LOW-FREQUENCY per-class cadence bound, # INDEPENDENT of the event-driven detector daemon, so a stalled detector can never # silently starve delivery. This is the framework-shipped canon-side FALLBACK WAKE: # a heartbeat-shaped timer that survives ONLY as the per-class fallback cadence # (WAKE-DOCTRINE) bounded by urgency SLO — never the steady-state wake mechanism. Description=Mosaic wake fallback cadence timer (per-class safety wake) After=default.target [Timer] # BASE cadence placeholder. The A10 installer OVERRIDES this per-class from the # watch-list schema's per-class `fallback_cadence` bound, via a BLANK-RESET drop-in # (an empty OnUnitActiveSec= reset line, then the new value) written under # mosaic-wake-fallback.timer.d/. systemd merges base + drop-ins so exactly ONE # effective OnUnitActiveUSec results (wake-install.sh verify-single). The base value # here is a conservative safety floor for a host installed before any per-class # drop-in is written — it is deliberately low-frequency (never the primary wake). OnUnitActiveSec=1h # Also fire shortly after boot so a freshly-booted host does not wait a full cadence # for its first safety drain. OnBootSec is a distinct key from OnUnitActiveSec and # does NOT count toward the exactly-one-OnUnitActiveUSec blank-reset invariant. OnBootSec=15min # Catch up a missed elapse (host asleep/off) rather than silently skipping it — a # fallback that silently skips is exactly the starvation this unit exists to prevent. Persistent=true Unit=mosaic-wake-fallback.service [Install] WantedBy=timers.target