Step 3: the executor honors the new GatherRule fields. Phase scope (ActivePhases / ActiveFromPhase), applied to ALL trigger types: - interval: timers keep running, an out-of-scope tick is a free early-return (no start/stop lifecycle races on phase transitions). - startup: scoped rules not yet in scope at UpdateRules are deferred and run exactly once from OnPhaseChanged when their scope activates (same _startupRulesExecuted dedup; not part of the WaitForStartupRules latch). - phase_change: evaluated against the NEW phase; scope gate runs BEFORE the (rule, phase) dedup add so an out-of-scope pass does not consume the slot. - on_event: gated by current phase. - From-phase latch: phase != Unknown/Failed && ordinal >= threshold; sticky for the session incl. through Failed; re-evaluated on config refresh so a rule delivered after its threshold passed latches immediately. - Before the first phase signal, scoped rules are inactive. - IgnorePhaseScope bypass for --run-gather-rules (no phase context; logged). EmitMode on_change: - Canonical hash (keys ordinal-sorted at every level, invariant formatting, SHA-256) of the raw collector result BEFORE ruleId/ruleTitle injection. - First non-empty result always emits; unchanged results increment a per-rule suppression counter; the next emitted event carries suppressedPolls + suppressedSinceUtc. Empty results (emitOnlyIfExists miss) touch nothing, so the combo yields zero noise, one event on appearance, then only on change. - State survives UpdateRules refreshes (agent restart => at most one re-emit). Tests: GatherRuleExecutorPhaseScopeTests (scope matrix synchronous via internal IsRuleInScope; trigger wiring async with positive waits), GatherRuleExecutorEmitModeTests (state machine via internal ShouldEmitOnChange, canonical-hash properties, ExecuteRule wiring). V2.Core.Tests 1847/1847. 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 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.



