Symptom: Web UI showed register-session, then ~6.7s of silence, then a wall of ~100 events at once — visibly different from V1's streaming feel. Confirmed on session 3808befb-…: agent_started enqueued at 18:20:20.5, first BackendTelemetryUploader flush at 18:20:27.2 with firstId=0 lastId=99 (a full default 100-item batch). Root cause: the periodic drain pump was started at Start() step 15, after collector hosts had spun up. Steps 4-14 do meaningful synchronous work — gather-rule compile, Hello event-log subscriptions, PowerShell runspace open in DeliveryOptimizationCollector, ipinfo.io GeoLocation, analyzer scheduling — which on a constrained VM kept the calling thread (or the ThreadPool) busy for ~6.7s. During that window the spool accumulated 100 startup signals, saturating the batchSize cap. Even though immediate-flush wakeups did fire correctly, they only set a TaskCompletionSource that nobody was awaiting yet. Fix: move the drain pump start to step 3b, directly after the spool and the immediate-flush bridge are wired (step 3 + 3a). The pump's loop only references _spool / _transport (both built at step 3) and the wakeup TCS (step 3a) — no collector-state, classifier-state, or ingress dependency — so an early start is safe. An empty Peek returns OK(0) without an HTTP round-trip, so a pump tick that races ahead of any enqueue is a no-op. With the pump live from step 3b onward, the very first immediate-flush wakeup (e.g. agent_started in onIngressReady at step 13b) sets the TCS and the drain loop's WhenAny returns within milliseconds, then DrainAllAsync's peek-flush-peek loop drains whatever the spool has accumulated up to that moment in tight ~100-item batches. Tests: V2.Core 732/732 green; no behaviour-coupling on the old step 15 position. Solution build 0/0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Autopilot Monitor
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.
Private Preview
Autopilot Monitor is currently running as a Private Preview. Visit autopilotmonitor.com to request access and learn more.
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 documentation is available at autopilotmonitor.com/docs
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.



