mirror of
https://github.com/okieselbach/AutopilotMonitor.git
synced 2026-10-24 12:42:38 +00:00
2f9a404323
Session durations come from device times, and a device clock can be off by hours for a whole session or change in the middle of one. Every upload carries the device send time next to the server receive time; their difference is the device clock error. This change records the session's start, WhiteGlove Part 2 start and end on the server clock next to the device values. Nothing reads them yet, so no stored value and no display changes. - ServerTime: the rule, defined by tests/fixtures/server-time/cases.json and run by both the backend (ServerTime.cs) and the web (lib/serverTime.ts). - Ingest: ServerTime.Tracker, the rule fed one upload at a time, keeps its state in the primary-only column ServerTimeState and writes StartedAtServer and ResumedAtServer in the counter merge (no extra read or write). It follows a session from its first upload only, and only when that upload carries agent_started; sessions already under way when this build arrives get their values at completion. On every upload prefix of every followed case it gives the rule's start and Part 2 start; a retried upload with agent_started is not counted as a restart. - Terminal: the counter reconcile, which every terminal path runs, also computes the rule over the same event scan and writes StartedAtServer, ResumedAtServer and CompletedAtServer. Fail-soft: a rule failure never costs the counter reconcile or the ingest write. - Re-registration carries the four columns from the fresh CAS read through the Replace (the agent's first upload often races its registration). - SessionSummary gets the three fields; the index mirrors them, the index merge drops primary-only columns; manifests and wire types regenerated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
461 lines
60 KiB
JSON
461 lines
60 KiB
JSON
{
|
|
"description": "Server-time rule: session start and end, WhiteGlove parts and per-event server times. C# ServerTime and TS serverTime must reproduce every expectation to the millisecond. See README.md.",
|
|
"cases": [
|
|
{
|
|
"name": "baseline",
|
|
"note": "Clock correct; start = IME history 90 s before the agent; final duration = device span.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:41:19.400Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.600Z", "sent": "2026-01-01T07:59:59.700Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:58:29.600Z", "sent": "2026-01-01T07:59:59.700Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.500Z", "sent": "2026-01-01T07:59:59.700Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.550Z", "sent": "2026-01-01T08:00:09.750Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.450Z", "sent": "2026-01-01T08:00:19.650Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.500Z", "sent": "2026-01-01T08:01:19.700Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.500Z", "sent": "2026-01-01T08:06:19.700Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.500Z", "sent": "2026-01-01T08:11:19.700Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.500Z", "sent": "2026-01-01T08:16:19.700Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:19.500Z", "sent": "2026-01-01T08:21:19.700Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:26:19.500Z", "sent": "2026-01-01T08:26:19.700Z", "recv": "2026-01-01T08:26:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:31:19.500Z", "sent": "2026-01-01T08:31:19.700Z", "recv": "2026-01-01T08:31:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:36:19.500Z", "sent": "2026-01-01T08:36:19.700Z", "recv": "2026-01-01T08:36:20.000Z"},
|
|
{"seq": 14, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:41:19.400Z", "sent": "2026-01-01T08:41:19.700Z", "recv": "2026-01-01T08:41:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:29.900Z", "startOffset": -0.3, "end": "2026-01-01T08:41:19.700Z", "duration": 2569.8, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": [{"seq": 2, "server": "2026-01-01T07:58:29.900Z"}]}
|
|
},
|
|
{
|
|
"name": "constant-ahead-9h",
|
|
"note": "Whole session 9 h ahead: duration unchanged, start converted by the run-1 offset.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T17:46:19.000Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T16:59:59.200Z", "sent": "2026-01-01T16:59:59.300Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T16:58:24.300Z", "sent": "2026-01-01T16:59:59.300Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T16:59:59.100Z", "sent": "2026-01-01T16:59:59.300Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:00:09.700Z", "sent": "2026-01-01T17:00:09.900Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:00:18.900Z", "sent": "2026-01-01T17:00:19.100Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:01:19.100Z", "sent": "2026-01-01T17:01:19.300Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:06:19.100Z", "sent": "2026-01-01T17:06:19.300Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:11:19.100Z", "sent": "2026-01-01T17:11:19.300Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:16:19.100Z", "sent": "2026-01-01T17:16:19.300Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:21:19.100Z", "sent": "2026-01-01T17:21:19.300Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:26:19.100Z", "sent": "2026-01-01T17:26:19.300Z", "recv": "2026-01-01T08:26:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:31:19.100Z", "sent": "2026-01-01T17:31:19.300Z", "recv": "2026-01-01T08:31:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:36:19.100Z", "sent": "2026-01-01T17:36:19.300Z", "recv": "2026-01-01T08:36:20.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T17:41:19.100Z", "sent": "2026-01-01T17:41:19.300Z", "recv": "2026-01-01T08:41:20.000Z"},
|
|
{"seq": 15, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T17:46:19.000Z", "sent": "2026-01-01T17:46:19.300Z", "recv": "2026-01-01T08:46:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:25.000Z", "startOffset": 32399.3, "end": "2026-01-01T08:46:19.700Z", "duration": 2874.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": [{"seq": 4, "server": "2026-01-01T08:00:10.400Z"}]}
|
|
},
|
|
{
|
|
"name": "constant-behind-3h",
|
|
"note": "Whole session 3 h behind: duration unchanged, live start corrected by +3 h.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T05:11:21.700Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T05:00:01.900Z", "sent": "2026-01-01T05:00:02.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T04:58:52.000Z", "sent": "2026-01-01T05:00:02.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T05:00:01.800Z", "sent": "2026-01-01T05:00:02.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T05:00:11.800Z", "sent": "2026-01-01T05:00:12.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T05:00:22.300Z", "sent": "2026-01-01T05:00:22.500Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T05:01:21.800Z", "sent": "2026-01-01T05:01:22.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T05:06:21.800Z", "sent": "2026-01-01T05:06:22.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T05:11:21.700Z", "sent": "2026-01-01T05:11:22.000Z", "recv": "2026-01-01T08:11:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:50.000Z", "startOffset": -10798.0, "end": "2026-01-01T08:11:19.700Z", "duration": 749.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "run2-clock-2h-back",
|
|
"note": "Run 2 starts with the clock 2 h behind: start stays in run 1, duration = server span (today 34 s).",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T07:03:54.700Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.400Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:58:35.500Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.300Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.600Z", "sent": "2026-01-01T08:00:09.800Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.500Z", "sent": "2026-01-01T08:00:19.700Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.500Z", "sent": "2026-01-01T08:01:19.700Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.500Z", "sent": "2026-01-01T08:06:19.700Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.500Z", "sent": "2026-01-01T08:11:19.700Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.500Z", "sent": "2026-01-01T08:16:19.700Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:19.500Z", "sent": "2026-01-01T08:21:19.700Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:26:19.500Z", "sent": "2026-01-01T08:26:19.700Z", "recv": "2026-01-01T08:26:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:31:19.500Z", "sent": "2026-01-01T08:31:19.700Z", "recv": "2026-01-01T08:31:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:36:19.500Z", "sent": "2026-01-01T08:36:19.700Z", "recv": "2026-01-01T08:36:20.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:41:19.500Z", "sent": "2026-01-01T08:41:19.700Z", "recv": "2026-01-01T08:41:20.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:46:19.500Z", "sent": "2026-01-01T08:46:19.700Z", "recv": "2026-01-01T08:46:20.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:51:19.500Z", "sent": "2026-01-01T08:51:19.700Z", "recv": "2026-01-01T08:51:20.000Z"},
|
|
{"seq": 17, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:56:19.500Z", "sent": "2026-01-01T08:56:19.700Z", "recv": "2026-01-01T08:56:20.000Z"},
|
|
{"seq": 18, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:03:09.500Z", "sent": "2026-01-01T07:03:09.600Z", "recv": "2026-01-01T09:03:20.000Z"},
|
|
{"seq": 19, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:03:09.400Z", "sent": "2026-01-01T07:03:09.600Z", "recv": "2026-01-01T09:03:20.000Z"},
|
|
{"seq": 20, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:03:29.400Z", "sent": "2026-01-01T07:03:29.600Z", "recv": "2026-01-01T09:03:30.000Z"},
|
|
{"seq": 21, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:03:39.500Z", "sent": "2026-01-01T07:03:39.700Z", "recv": "2026-01-01T09:03:40.000Z"},
|
|
{"seq": 22, "type": "enrollment_failed", "source": "DecisionEngine", "t": "2026-01-01T07:03:54.700Z", "sent": "2026-01-01T07:03:54.700Z", "recv": "2026-01-01T09:03:55.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:35.800Z", "startOffset": -0.3, "end": "2026-01-01T09:03:55.000Z", "duration": 3919.2, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "live-step-back-4m10s",
|
|
"note": "Live step -4:10 mid-session: today too short by 4:10; server duration correct.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T10:21:29.300Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T08:04:09.300Z", "sent": "2026-01-01T08:04:09.400Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T08:01:59.400Z", "sent": "2026-01-01T08:04:09.400Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:04:09.200Z", "sent": "2026-01-01T08:04:09.400Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:04:17.900Z", "sent": "2026-01-01T08:04:18.100Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:04:29.200Z", "sent": "2026-01-01T08:04:29.400Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:05:29.200Z", "sent": "2026-01-01T08:05:29.400Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:10:29.200Z", "sent": "2026-01-01T08:10:29.400Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:15:29.200Z", "sent": "2026-01-01T08:15:29.400Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:20:29.200Z", "sent": "2026-01-01T08:20:29.400Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:25:29.200Z", "sent": "2026-01-01T08:25:29.400Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:30:29.200Z", "sent": "2026-01-01T08:30:29.400Z", "recv": "2026-01-01T08:26:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:35:29.200Z", "sent": "2026-01-01T08:35:29.400Z", "recv": "2026-01-01T08:31:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:40:29.200Z", "sent": "2026-01-01T08:40:29.400Z", "recv": "2026-01-01T08:36:20.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:45:29.200Z", "sent": "2026-01-01T08:45:29.400Z", "recv": "2026-01-01T08:41:20.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:50:29.200Z", "sent": "2026-01-01T08:50:29.400Z", "recv": "2026-01-01T08:46:20.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:55:29.200Z", "sent": "2026-01-01T08:55:29.400Z", "recv": "2026-01-01T08:51:20.000Z"},
|
|
{"seq": 17, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:00:29.200Z", "sent": "2026-01-01T09:00:29.400Z", "recv": "2026-01-01T08:56:20.000Z"},
|
|
{"seq": 18, "type": "system_clock_changed", "source": "SystemTimelineWatcher", "t": "2026-01-01T09:05:28.400Z", "sent": "2026-01-01T09:05:29.400Z", "recv": "2026-01-01T09:01:20.000Z"},
|
|
{"seq": 19, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:01:29.200Z", "sent": "2026-01-01T09:01:29.400Z", "recv": "2026-01-01T09:01:30.000Z"},
|
|
{"seq": 20, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:06:29.200Z", "sent": "2026-01-01T09:06:29.400Z", "recv": "2026-01-01T09:06:30.000Z"},
|
|
{"seq": 21, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:11:29.200Z", "sent": "2026-01-01T09:11:29.400Z", "recv": "2026-01-01T09:11:30.000Z"},
|
|
{"seq": 22, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:16:29.200Z", "sent": "2026-01-01T09:16:29.400Z", "recv": "2026-01-01T09:16:30.000Z"},
|
|
{"seq": 23, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:21:29.200Z", "sent": "2026-01-01T09:21:29.400Z", "recv": "2026-01-01T09:21:30.000Z"},
|
|
{"seq": 24, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:26:29.200Z", "sent": "2026-01-01T09:26:29.400Z", "recv": "2026-01-01T09:26:30.000Z"},
|
|
{"seq": 25, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:31:29.200Z", "sent": "2026-01-01T09:31:29.400Z", "recv": "2026-01-01T09:31:30.000Z"},
|
|
{"seq": 26, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:36:29.200Z", "sent": "2026-01-01T09:36:29.400Z", "recv": "2026-01-01T09:36:30.000Z"},
|
|
{"seq": 27, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:41:29.200Z", "sent": "2026-01-01T09:41:29.400Z", "recv": "2026-01-01T09:41:30.000Z"},
|
|
{"seq": 28, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:46:29.200Z", "sent": "2026-01-01T09:46:29.400Z", "recv": "2026-01-01T09:46:30.000Z"},
|
|
{"seq": 29, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:51:29.200Z", "sent": "2026-01-01T09:51:29.400Z", "recv": "2026-01-01T09:51:30.000Z"},
|
|
{"seq": 30, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T09:56:29.200Z", "sent": "2026-01-01T09:56:29.400Z", "recv": "2026-01-01T09:56:30.000Z"},
|
|
{"seq": 31, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T10:01:29.200Z", "sent": "2026-01-01T10:01:29.400Z", "recv": "2026-01-01T10:01:30.000Z"},
|
|
{"seq": 32, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T10:06:29.200Z", "sent": "2026-01-01T10:06:29.400Z", "recv": "2026-01-01T10:06:30.000Z"},
|
|
{"seq": 33, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T10:11:29.200Z", "sent": "2026-01-01T10:11:29.400Z", "recv": "2026-01-01T10:11:30.000Z"},
|
|
{"seq": 34, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T10:16:29.200Z", "sent": "2026-01-01T10:16:29.400Z", "recv": "2026-01-01T10:16:30.000Z"},
|
|
{"seq": 35, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T10:21:29.300Z", "sent": "2026-01-01T10:21:29.600Z", "recv": "2026-01-01T10:21:30.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:57:50.000Z", "startOffset": 249.4, "end": "2026-01-01T10:21:29.900Z", "duration": 8619.9, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "wg-part1-step-27m",
|
|
"note": "WhiteGlove: +27 min step in Part 1, one event spooled across it (must not become the start); Part 1 and Part 2 in server time.",
|
|
"isPreProvisioned": true,
|
|
"completedAt": "2026-01-21T08:26:59.000Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.100Z", "sent": "2026-01-01T07:59:59.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:58:07.200Z", "sent": "2026-01-01T07:59:59.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.000Z", "sent": "2026-01-01T07:59:59.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.000Z", "sent": "2026-01-01T08:00:09.200Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.100Z", "sent": "2026-01-01T08:00:19.300Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.000Z", "sent": "2026-01-01T08:01:19.200Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.000Z", "sent": "2026-01-01T08:06:19.200Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "script_completed", "source": "ImeLogTracker", "t": "2026-01-01T08:11:15.200Z", "sent": "2026-01-01T08:38:19.200Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:38:29.000Z", "sent": "2026-01-01T08:38:29.200Z", "recv": "2026-01-01T08:11:30.000Z"},
|
|
{"seq": 10, "type": "agent_started", "source": "Agent", "t": "2026-01-01T08:43:29.100Z", "sent": "2026-01-01T08:43:29.200Z", "recv": "2026-01-01T08:16:30.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:43:29.000Z", "sent": "2026-01-01T08:43:29.200Z", "recv": "2026-01-01T08:16:30.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:43:39.000Z", "sent": "2026-01-01T08:43:39.200Z", "recv": "2026-01-01T08:16:40.000Z"},
|
|
{"seq": 13, "type": "whiteglove_complete", "source": "EspAndHelloTracker", "t": "2026-01-01T08:43:44.100Z", "sent": "2026-01-01T08:43:44.200Z", "recv": "2026-01-01T08:16:45.000Z"},
|
|
{"seq": 14, "type": "agent_started", "source": "Agent", "t": "2026-01-21T08:16:28.100Z", "sent": "2026-01-21T08:16:28.200Z", "recv": "2026-01-21T08:16:30.000Z"},
|
|
{"seq": 15, "type": "whiteglove_resumed", "source": "Agent", "t": "2026-01-21T08:16:26.400Z", "sent": "2026-01-21T08:16:28.200Z", "recv": "2026-01-21T08:16:30.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-21T08:16:28.000Z", "sent": "2026-01-21T08:16:28.200Z", "recv": "2026-01-21T08:16:30.000Z"},
|
|
{"seq": 17, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-21T08:16:39.000Z", "sent": "2026-01-21T08:16:39.200Z", "recv": "2026-01-21T08:16:40.000Z"},
|
|
{"seq": 18, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-21T08:16:49.100Z", "sent": "2026-01-21T08:16:49.300Z", "recv": "2026-01-21T08:16:50.000Z"},
|
|
{"seq": 19, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-21T08:16:59.000Z", "sent": "2026-01-21T08:16:59.200Z", "recv": "2026-01-21T08:17:00.000Z"},
|
|
{"seq": 20, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-21T08:21:59.000Z", "sent": "2026-01-21T08:21:59.200Z", "recv": "2026-01-21T08:22:00.000Z"},
|
|
{"seq": 21, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-21T08:26:59.000Z", "sent": "2026-01-21T08:26:59.300Z", "recv": "2026-01-21T08:27:00.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:08.000Z", "startOffset": -0.8, "end": "2026-01-21T08:26:59.800Z", "duration": 1747.8, "part1": 1116.9, "part2": 630.9, "part2Start": "2026-01-21T08:16:28.900Z", "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "end-upload-late-62s",
|
|
"note": "Terminal upload delayed 62 s: median of three ignores it, no false correction.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:51:40.000Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:10.200Z", "sent": "2026-01-01T08:00:10.400Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:20.100Z", "sent": "2026-01-01T08:00:20.300Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:20.100Z", "sent": "2026-01-01T08:01:20.300Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:20.100Z", "sent": "2026-01-01T08:06:20.300Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:20.100Z", "sent": "2026-01-01T08:11:20.300Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:20.100Z", "sent": "2026-01-01T08:16:20.300Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:20.100Z", "sent": "2026-01-01T08:21:20.300Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:26:20.100Z", "sent": "2026-01-01T08:26:20.300Z", "recv": "2026-01-01T08:26:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:31:20.100Z", "sent": "2026-01-01T08:31:20.300Z", "recv": "2026-01-01T08:31:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:36:20.100Z", "sent": "2026-01-01T08:36:20.300Z", "recv": "2026-01-01T08:36:20.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:41:20.100Z", "sent": "2026-01-01T08:41:20.300Z", "recv": "2026-01-01T08:41:20.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:46:20.100Z", "sent": "2026-01-01T08:46:20.300Z", "recv": "2026-01-01T08:46:20.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:51:20.100Z", "sent": "2026-01-01T08:51:20.300Z", "recv": "2026-01-01T08:51:20.000Z"},
|
|
{"seq": 17, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:51:30.100Z", "sent": "2026-01-01T08:51:30.300Z", "recv": "2026-01-01T08:51:30.000Z"},
|
|
{"seq": 18, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:51:40.000Z", "sent": "2026-01-01T08:51:40.300Z", "recv": "2026-01-01T08:52:42.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:59.700Z", "startOffset": 0.3, "end": "2026-01-01T08:51:39.700Z", "duration": 3160.0, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "start-upload-late-70s",
|
|
"note": "First upload delayed 70 s: start offset = median of the first three uploads.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:32:29.800Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:01:10.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:01:10.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:01:10.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:20.000Z", "sent": "2026-01-01T08:01:20.200Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:29.900Z", "sent": "2026-01-01T08:01:30.100Z", "recv": "2026-01-01T08:01:30.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:02:29.900Z", "sent": "2026-01-01T08:02:30.100Z", "recv": "2026-01-01T08:02:30.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:07:29.900Z", "sent": "2026-01-01T08:07:30.100Z", "recv": "2026-01-01T08:07:30.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:12:29.900Z", "sent": "2026-01-01T08:12:30.100Z", "recv": "2026-01-01T08:12:30.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:17:29.900Z", "sent": "2026-01-01T08:17:30.100Z", "recv": "2026-01-01T08:17:30.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:22:29.900Z", "sent": "2026-01-01T08:22:30.100Z", "recv": "2026-01-01T08:22:30.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:27:29.900Z", "sent": "2026-01-01T08:27:30.100Z", "recv": "2026-01-01T08:27:30.000Z"},
|
|
{"seq": 12, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:32:29.800Z", "sent": "2026-01-01T08:32:30.100Z", "recv": "2026-01-01T08:32:30.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:58:59.900Z", "startOffset": 0.1, "end": "2026-01-01T08:32:29.700Z", "duration": 2009.8, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "flicker-one-upload",
|
|
"note": "One upload in a wrong era (17x +-66 h flicker): ignored; duration = device span.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:41:29.600Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T07:59:59.900Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:58:59.900Z", "sent": "2026-01-01T07:59:59.900Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.700Z", "sent": "2026-01-01T07:59:59.900Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.700Z", "sent": "2026-01-01T08:00:09.900Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.700Z", "sent": "2026-01-01T08:00:19.900Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.700Z", "sent": "2026-01-01T08:01:19.900Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.700Z", "sent": "2026-01-01T08:06:19.900Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.700Z", "sent": "2026-01-01T08:11:19.900Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.700Z", "sent": "2026-01-01T08:16:19.900Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "system_clock_changed", "source": "SystemTimelineWatcher", "t": "2025-12-29T13:55:32.000Z", "sent": "2025-12-29T13:55:32.000Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-29T13:55:31.800Z", "sent": "2025-12-29T13:55:32.000Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:29.700Z", "sent": "2026-01-01T08:21:29.900Z", "recv": "2026-01-01T08:21:30.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:26:29.700Z", "sent": "2026-01-01T08:26:29.900Z", "recv": "2026-01-01T08:26:30.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:31:29.700Z", "sent": "2026-01-01T08:31:29.900Z", "recv": "2026-01-01T08:31:30.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:36:29.700Z", "sent": "2026-01-01T08:36:29.900Z", "recv": "2026-01-01T08:36:30.000Z"},
|
|
{"seq": 16, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:41:29.600Z", "sent": "2026-01-01T08:41:29.900Z", "recv": "2026-01-01T08:41:30.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": -0.1, "end": "2026-01-01T08:41:29.700Z", "duration": 2549.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "no-sent-at",
|
|
"note": "Agent without X-Send-Time-Utc: nothing computable, callers keep today's behaviour.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:30:00.000Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T08:00:00.000Z", "sent": null, "recv": null},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": null, "recv": null},
|
|
{"seq": 3, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:30:00.000Z", "sent": null, "recv": null}
|
|
],
|
|
"expect": {"start": null, "startOffset": null, "end": null, "duration": null, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "history-40min-before-agent",
|
|
"note": "Start anchor waited 40 min (history read at agent start): still the start, as today.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:21:19.900Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T08:00:00.100Z", "sent": "2026-01-01T08:00:00.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:20:00.100Z", "sent": "2026-01-01T08:00:00.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:00.000Z", "sent": "2026-01-01T08:00:00.200Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:10.000Z", "sent": "2026-01-01T08:00:10.200Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:20.100Z", "sent": "2026-01-01T08:00:20.300Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:20.000Z", "sent": "2026-01-01T08:01:20.200Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:20.000Z", "sent": "2026-01-01T08:06:20.200Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:20.000Z", "sent": "2026-01-01T08:11:20.200Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:20.000Z", "sent": "2026-01-01T08:16:20.200Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:21:19.900Z", "sent": "2026-01-01T08:21:20.200Z", "recv": "2026-01-01T08:21:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:19:59.900Z", "startOffset": 0.2, "end": "2026-01-01T08:21:19.700Z", "duration": 3679.8, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "guard-2h",
|
|
"note": "History 3 h before the agent is ignored (2-h guard as today); 50 min is accepted.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:16:19.700Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T05:00:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:10:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.800Z", "sent": "2026-01-01T08:01:20.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.800Z", "sent": "2026-01-01T08:06:20.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.800Z", "sent": "2026-01-01T08:11:20.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 10, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:16:19.700Z", "sent": "2026-01-01T08:16:20.000Z", "recv": "2026-01-01T08:16:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:10:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:16:19.700Z", "duration": 3979.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "sweep-end",
|
|
"note": "Sweep completion (CompletedAt between events): last live activity event before it.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:22:58.800Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:28.800Z", "sent": "2026-01-01T08:01:29.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:28.800Z", "sent": "2026-01-01T08:06:29.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:28.800Z", "sent": "2026-01-01T08:11:29.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:28.800Z", "sent": "2026-01-01T08:16:29.000Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:28.800Z", "sent": "2026-01-01T08:21:29.000Z", "recv": "2026-01-01T08:21:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:21:19.800Z", "duration": 1339.8, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "end-not-history-event",
|
|
"note": "CompletedAt equals a SystemTimelineWatcher record: not an activity event, last live one is used.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T11:26:20.000Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.800Z", "sent": "2026-01-01T08:01:20.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.800Z", "sent": "2026-01-01T08:06:20.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.800Z", "sent": "2026-01-01T08:11:20.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.800Z", "sent": "2026-01-01T08:16:20.000Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:21:19.800Z", "sent": "2026-01-01T08:21:20.000Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "system_clock_changed", "source": "SystemTimelineWatcher", "t": "2026-01-01T11:26:20.000Z", "sent": "2026-01-01T08:26:20.000Z", "recv": "2026-01-01T08:26:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:21:19.800Z", "duration": 1339.8, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "wg-stable",
|
|
"note": "WhiteGlove, stable clock: Part 1 + Part 2 equal the device spans (pause excluded).",
|
|
"isPreProvisioned": true,
|
|
"completedAt": "2026-01-04T08:36:49.300Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.400Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:58:59.500Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.300Z", "sent": "2026-01-01T07:59:59.500Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.300Z", "sent": "2026-01-01T08:00:09.500Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.300Z", "sent": "2026-01-01T08:00:19.500Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.300Z", "sent": "2026-01-01T08:01:19.500Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.300Z", "sent": "2026-01-01T08:06:19.500Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.300Z", "sent": "2026-01-01T08:11:19.500Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.300Z", "sent": "2026-01-01T08:16:19.500Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "whiteglove_complete", "source": "EspAndHelloTracker", "t": "2026-01-01T08:21:19.400Z", "sent": "2026-01-01T08:21:19.500Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "agent_started", "source": "Agent", "t": "2026-01-04T08:21:19.500Z", "sent": "2026-01-04T08:21:19.600Z", "recv": "2026-01-04T08:21:20.000Z"},
|
|
{"seq": 12, "type": "whiteglove_resumed", "source": "Agent", "t": "2026-01-04T08:21:18.600Z", "sent": "2026-01-04T08:21:19.600Z", "recv": "2026-01-04T08:21:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:21:19.400Z", "sent": "2026-01-04T08:21:19.600Z", "recv": "2026-01-04T08:21:20.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:21:29.400Z", "sent": "2026-01-04T08:21:29.600Z", "recv": "2026-01-04T08:21:30.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:21:39.400Z", "sent": "2026-01-04T08:21:39.600Z", "recv": "2026-01-04T08:21:40.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:21:49.400Z", "sent": "2026-01-04T08:21:49.600Z", "recv": "2026-01-04T08:21:50.000Z"},
|
|
{"seq": 17, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:26:49.400Z", "sent": "2026-01-04T08:26:49.600Z", "recv": "2026-01-04T08:26:50.000Z"},
|
|
{"seq": 18, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-04T08:31:49.400Z", "sent": "2026-01-04T08:31:49.600Z", "recv": "2026-01-04T08:31:50.000Z"},
|
|
{"seq": 19, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-04T08:36:49.300Z", "sent": "2026-01-04T08:36:49.600Z", "recv": "2026-01-04T08:36:50.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": -0.5, "end": "2026-01-04T08:36:49.700Z", "duration": 2269.7, "part1": 1339.9, "part2": 929.8, "part2Start": "2026-01-04T08:21:19.900Z", "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "frame1-closes-on-step",
|
|
"note": "Clock jumps 2 h back inside run 1: post-step events look earlier on the device clock but never move the start.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T06:21:59.700Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.800Z", "sent": "2026-01-01T08:01:20.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.800Z", "sent": "2026-01-01T08:06:20.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T06:11:19.900Z", "sent": "2026-01-01T06:11:20.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T06:11:29.900Z", "sent": "2026-01-01T06:11:30.000Z", "recv": "2026-01-01T08:11:30.000Z"},
|
|
{"seq": 10, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T06:11:39.900Z", "sent": "2026-01-01T06:11:40.000Z", "recv": "2026-01-01T08:11:40.000Z"},
|
|
{"seq": 11, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T06:11:59.800Z", "sent": "2026-01-01T06:12:00.000Z", "recv": "2026-01-01T08:12:00.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T06:16:59.800Z", "sent": "2026-01-01T06:17:00.000Z", "recv": "2026-01-01T08:17:00.000Z"},
|
|
{"seq": 13, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T06:21:59.700Z", "sent": "2026-01-01T06:22:00.000Z", "recv": "2026-01-01T08:22:00.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:21:59.700Z", "duration": 1379.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "running-unconfirmed-upload",
|
|
"note": "Running, newest upload 90 s late: its history event is held back until the next upload shows the clock unchanged (start may still move earlier).",
|
|
"isPreProvisioned": false,
|
|
"completedAt": null,
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:30.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.900Z", "sent": "2026-01-01T08:00:10.100Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:10.000Z", "sent": "2026-01-01T08:00:40.000Z", "recv": "2026-01-01T08:02:10.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:30.000Z", "startOffset": 0.0, "end": null, "duration": null, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "running-confirmed-upload",
|
|
"note": "Same session one upload later: the late upload was a delay, its history event is the start.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": null,
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:30.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.900Z", "sent": "2026-01-01T08:00:10.100Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:10.000Z", "sent": "2026-01-01T08:00:40.000Z", "recv": "2026-01-01T08:02:10.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:02:29.800Z", "sent": "2026-01-01T08:02:30.000Z", "recv": "2026-01-01T08:02:30.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:10.000Z", "startOffset": 0.0, "end": null, "duration": null, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "first-upload-without-agent-start",
|
|
"note": "The first upload carries no agent_started: run 1 still begins with it and the rule has a start; ingest follows only sessions whose first upload carries agent_started.",
|
|
"isPreProvisioned": false,
|
|
"completedAt": "2026-01-01T08:21:19.700Z",
|
|
"events": [
|
|
{"seq": 1, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:55:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "agent_started", "source": "Agent", "t": "2026-01-01T08:00:09.900Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.800Z", "sent": "2026-01-01T08:01:20.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.800Z", "sent": "2026-01-01T08:06:20.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.800Z", "sent": "2026-01-01T08:11:20.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.800Z", "sent": "2026-01-01T08:16:20.000Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 9, "type": "enrollment_complete", "source": "DecisionEngine", "t": "2026-01-01T08:21:19.700Z", "sent": "2026-01-01T08:21:20.000Z", "recv": "2026-01-01T08:21:20.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:55:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:21:19.700Z", "duration": 1579.7, "part1": null, "part2": null, "part2Start": null, "eventServerTimes": []}
|
|
},
|
|
{
|
|
"name": "wg-part2-clock-back-swept",
|
|
"note": "WhiteGlove Part 2 on a clock 4 days back, closed by the sweep at LastEventAt (a Part 1 time): the end stays where CompletedAt points, Part 2 does not fit the duration, its start is still reported.",
|
|
"isPreProvisioned": true,
|
|
"completedAt": "2026-01-01T08:21:19.900Z",
|
|
"events": [
|
|
{"seq": 1, "type": "agent_started", "source": "Agent", "t": "2026-01-01T07:59:59.900Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 2, "type": "ime_agent_version", "source": "ImeLogTracker", "t": "2026-01-01T07:59:00.000Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 3, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T07:59:59.800Z", "sent": "2026-01-01T08:00:00.000Z", "recv": "2026-01-01T08:00:00.000Z"},
|
|
{"seq": 4, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:09.800Z", "sent": "2026-01-01T08:00:10.000Z", "recv": "2026-01-01T08:00:10.000Z"},
|
|
{"seq": 5, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:00:19.800Z", "sent": "2026-01-01T08:00:20.000Z", "recv": "2026-01-01T08:00:20.000Z"},
|
|
{"seq": 6, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:01:19.800Z", "sent": "2026-01-01T08:01:20.000Z", "recv": "2026-01-01T08:01:20.000Z"},
|
|
{"seq": 7, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:06:19.800Z", "sent": "2026-01-01T08:06:20.000Z", "recv": "2026-01-01T08:06:20.000Z"},
|
|
{"seq": 8, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:11:19.800Z", "sent": "2026-01-01T08:11:20.000Z", "recv": "2026-01-01T08:11:20.000Z"},
|
|
{"seq": 9, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2026-01-01T08:16:19.800Z", "sent": "2026-01-01T08:16:20.000Z", "recv": "2026-01-01T08:16:20.000Z"},
|
|
{"seq": 10, "type": "whiteglove_complete", "source": "EspAndHelloTracker", "t": "2026-01-01T08:21:19.900Z", "sent": "2026-01-01T08:21:20.000Z", "recv": "2026-01-01T08:21:20.000Z"},
|
|
{"seq": 11, "type": "agent_started", "source": "Agent", "t": "2025-12-30T08:21:19.900Z", "sent": "2025-12-30T08:21:20.000Z", "recv": "2026-01-03T08:21:20.000Z"},
|
|
{"seq": 12, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-30T08:21:19.800Z", "sent": "2025-12-30T08:21:20.000Z", "recv": "2026-01-03T08:21:20.000Z"},
|
|
{"seq": 13, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-30T08:21:29.800Z", "sent": "2025-12-30T08:21:30.000Z", "recv": "2026-01-03T08:21:30.000Z"},
|
|
{"seq": 14, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-30T08:21:39.800Z", "sent": "2025-12-30T08:21:40.000Z", "recv": "2026-01-03T08:21:40.000Z"},
|
|
{"seq": 15, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-30T08:21:49.800Z", "sent": "2025-12-30T08:21:50.000Z", "recv": "2026-01-03T08:21:50.000Z"},
|
|
{"seq": 16, "type": "performance_snapshot", "source": "PerformanceCollector", "t": "2025-12-30T08:26:49.800Z", "sent": "2025-12-30T08:26:50.000Z", "recv": "2026-01-03T08:26:50.000Z"}
|
|
],
|
|
"expect": {"start": "2026-01-01T07:59:00.000Z", "startOffset": 0.0, "end": "2026-01-01T08:21:19.900Z", "duration": 1339.9, "part1": null, "part2": null, "part2Start": "2026-01-03T08:21:19.900Z", "eventServerTimes": []}
|
|
}
|
|
]
|
|
}
|