Parent
Epic: #99
Design: doc/ops-monitor.md (§4–5, §8, Issue A)
Summary
Add a pure, testable ActiveSync ops health model under src/:
Horde\ActiveSync\Ops\HealthStatus (ok / warn / critical)
SignalCode reason codes
CollectionHealth, DeviceHealth, FleetSummary
HealthEvaluator (heuristics)
DeviceHealthFactory (Device + SyncCache → DeviceHealth)
No CLI/UI in this issue.
Heuristics (v1)
- Heartbeat:
lasthbsyncstarted vs lastsyncendnormal → hb_in_flight / hb_stuck / hb_missing_end
foldersyncrequired counter → warn / critical at guard ceiling
- Activity window from SyncCache
timestamp
- Blocked / wipe-pending as signals
- Tunables as method args / options object (CLI flags later)
Acceptance
Notes
Honest limit: true mid-Sync “stuck request” needs later request touchpoints (follow-up). v1 is state-derived only.
Parent
Epic: #99
Design:
doc/ops-monitor.md(§4–5, §8, Issue A)Summary
Add a pure, testable ActiveSync ops health model under
src/:Horde\ActiveSync\Ops\HealthStatus(ok / warn / critical)SignalCodereason codesCollectionHealth,DeviceHealth,FleetSummaryHealthEvaluator(heuristics)DeviceHealthFactory(Device + SyncCache → DeviceHealth)No CLI/UI in this issue.
Heuristics (v1)
lasthbsyncstartedvslastsyncendnormal→hb_in_flight/hb_stuck/hb_missing_endfoldersyncrequiredcounter → warn / critical at guard ceilingtimestampAcceptance
doc/ops-monitor.mdsrc/Ops types if neededNotes
Honest limit: true mid-Sync “stuck request” needs later request touchpoints (follow-up). v1 is state-derived only.