A CMTrace line carries local time and no offset — IME 1.104 writes DateTime.Now.TimeOfDay in both of its trace listeners. Converting it with the agent's own TimeZoneInfo.Local assumes both processes agree on the zone. They do not: each caches its zone at process start and neither follows a later tzutil or a Windows auto-timezone change, so the error is Offset_writer - Offset_agent and is zero only by coincidence. Measured over 11,068 sessions: 26 carry a real zone-offset error, +1 h (GMT to W. Europe, session bfff9b1c) through -17 h (a writer still on the Pacific OOBE default while the agent had already moved to E. Australia). Note the sign — this is why "make the agent's own clock honest" is the wrong fix: in the -17 h cases the agent was correct and the writer was stale, and clearing the agent's cache would have broken the majority of sessions where both are stale and the two errors cancel. The tracker tails at a 100 ms poll, so a line that appeared since the previous pass was written essentially "now". That makes the writer's offset measurable: round(lineLocal - agentUtcNow) onto the 15-minute grid every real UTC offset sits on. Per source file, because IntuneManagementExtension.log and AppWorkload.log are written by different processes; re-measured on every fresh anchor, so a writer restart is picked up within one poll. The freshness requirement is the load-bearing part and cannot be replaced by the residual guard: a backlog line exactly 30 minutes old is itself a clean multiple of the grid, rounds with zero residual, and would calibrate the offset half an hour wrong. RejectsBacklogLine_EvenWhenItRoundsCleanly pins that the calibrator cannot detect this on its own — only the caller's freshness rule prevents it. Additive only; no call site uses it yet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
AutopilotMonitor
Advanced monitoring and troubleshooting solution for Windows Autopilot deployments. Gain full visibility into every enrollment session with a detailed event timeline, fleet health dashboards, and session reporting. Define custom analysis rules to automatically detect issues and gather rules to collect targeted evidence. Retrieve diagnostics packages on demand, configure agent settings like auto-reboot behavior and automatic timezone adjustment — all managed centrally from the web dashboard.
Availability
Autopilot Monitor is publicly available — the Community plan is free. Sign in with your work account at autopilotmonitor.com; new organizations complete a short activation step after first sign-in.
Overview
Autopilot Monitor provides real-time tracking, intelligent diagnostics, and automated troubleshooting for Windows Autopilot enrollment processes. It consists of:
- Bootstrap Script — PowerShell script deployed via Intune that starts monitoring early in the enrollment process
- Monitoring Agent — Lightweight .NET application that collects telemetry and evidence during enrollment
- Backend API — Azure Functions-based ingestion and processing pipeline
- Web Dashboard — Next.js application for real-time monitoring and fleet analytics
Architecture
For detailed information about the system architecture, components, and data flow, see Architecture Documentation.
Documentation
Full admin documentation is available at docs.autopilotmonitor.com
License
This project uses a split licensing model:
- MIT License — Agent (
src/Agent/) and Shared library (src/Shared/) — unrestricted use on end-user devices - AGPL-3.0 — Backend (
src/Backend/), Web Dashboard (src/Web/), and MCP Server (src/McpServer/) — server-side components remain open source
See LICENSE for full details.



