Scheduler
SnapshotScheduler.decide is a pure function. Platforms supply Timer / BGAppRefresh / WKApplicationRefresh; they must not fork the decision.
- Disabled = cadence
.offandcapturesOnSystemEvents == false. - Cadence off with system events still enabled is a valid schedule.
minimumInterval(default 900s) applies to every trigger, including wake/unlock.- First run with no
lastCapturecaptures immediately when enabled. skipsWhenUnchangedis applied later bySnapshotService.capture(skipIfUnchanged:), not bydecide.
Tests: Tests/Domain/SchedulerTests.swift and scheduler invariants.