Part 2 of the eaf3d8c4 fix (follows088c3b04). In that session 147 of 157 app events were replayed from a previous enrollment's IME log — all 10 "installed apps" were phantoms, polluting the timeline, AppInstallSummaries, MCP counts, the app_tracking_summary header, culprit lists and final-status.json. Rename (nothing deployed yet): historic_script_replay_detected → historic_ime_replay_detected; SuppressIfHistoricReplay / IsHistoricImeReplay. Agent: - EmitAppState suppresses stale-replay transitions BEFORE the sub-phase declaration, timing bookkeeping and terminal-signal dedup — covers the informational event, the AppInstallCompleted/Failed DecisionSignal, the shadow download_progress and the summary snapshot. Behavior note: phantom terminal signals can no longer spuriously re-arm the AdvisoryCompletion window (app signals are otherwise observation-only — verified no completion gate reads them). EmitDoTelemetry gets the same guard. - Tracker-level guard at the HandlePatternMatch choke point skips the 23 app-mutating actions (incl. espphasedetected — a stale AccountSetup line would make fresh DeviceSetup lines bounce as "backward") for source lines >24h stale, so replayed apps never enter PackageStates, persistence, app_tracking_summary, culprit lists or final-status. New internal UtcNowProvider seam (no ctor change), threshold single-sourced as ImeLogTracker.HistoricReplayThreshold. - SimulationMode now bypasses all replay suppression —088c3b04had broken the --replay-log-dir dev tool, which feeds historic lines on purpose. Backend: IsHistoricImeReplay guard in AggregateAppInstallEvent keeps replayed events out of AppInstallSummaries (SLA/dashboards/metrics inherit). Web: generic lib/historicReplay.ts partition (scriptExecutions becomes a wrapper); InstallProgress hides replayed installs with a muted note; DownloadProgress filters silently. MCP: get_session_summary filters replayed events — cleans appInstalls stats, errorCount (replayed app_install_failed are Error-severity) and keyEvents. Tests: +13 agent (app suppression, tracker guard), +1 backend, +7 web, +6 MCP. Agent 2039, backend 3211, web 602, MCP 455 all green; drift test validates the rename. Co-Authored-By: Claude Fable 5 <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.
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 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.



