Optional second destination so each heartbeat and event is posted to a
mirror server (the office NAS) alongside the primary — dual-write to
de-risk the migration. Default off (blank mirror URLs); existing installs
unchanged.
- event_forwarder: mirror_reachable() fast-fail probe + mirror_forward_pass()
(reliable event mirror with its OWN state file, total exception isolation,
never raises into the primary path).
- series4_ingest: mirror_api_url/mirror_sfm_url/mirror_sfm_state_file config;
best-effort heartbeat mirror; isolated event-mirror pass after the primary.
- settings dialog: new 'Mirror' tab.
- 9 new tests incl. the isolation invariant (down mirror = fast no-op that
never touches primary state). 42 passing.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>