Oliver Kieselbach fef5834ad0 v2 single-rail 13: remove dead Registry-guard in CheckEnrollmentCompleteMarker
The registry-based ghost-restart branch in CheckEnrollmentCompleteMarker
(HKLM\SOFTWARE\AutopilotMonitor\Deployed present + !SessionExists) has
never fired in production and was structurally unreachable:

- session.id is created via SessionIdPersistence.GetOrCreate BEFORE the
  guard runs (both in V1 LoadConfiguration:131 and V2 Program.cs:216), so
  the !SessionExists() retry-cleanup arm is never reachable at runtime.
- Even if the arm were reachable, the Deployed regkey cannot distinguish
  "fresh install" from "ghost restart": it is written by --install and
  intentionally preserved by CleanupService as a bootstrap-script
  reentry lock (read by scripts/Bootstrap/Install-AutopilotMonitor-v2.ps1
  Guard 1 to prevent re-install on production devices). Both scenarios
  therefore present as "Deployed present + session.id absent".

Remove the registry-guard block and its dead retry-cleanup path. Keep
the file-based enrollment-complete.marker path intact — it is written
by CheckSessionAgeEmergencyBreak before its own retry-cleanup attempt
and serves the "cleanup-disabled emergency break" exit-cleanly case.

Also drop the now-obsolete "Create SessionId BEFORE guards" justification
comment in Program.cs and the matching boot-sequence doc wording —
neither remaining guard (file-based marker, session-age watchdog) keys
on session.id absence for ghost detection. CheckEnrollmentCompleteMarker
loses the now-unused dataDirectory parameter; callsites updated.

Tests: ProgramGuardsTests.cs keeps marker-absent / marker-without-
selfdestruct / marker-with-selfdestruct-retry coverage; the first-run-
after-install regression test is renamed to match its actual scope
(returns_false_when_marker_file_is_absent). 630/630 V2.Core tests green.

No behavior change — removed path was unreachable. TryWriteDeploymentMarker
in Program.InstallMode.cs stays (writes the bootstrap-reentry-lock);
CleanupService continues to intentionally leave the regkey in place.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 03:24:52 +02:00
2026-04-22 19:36:19 +02:00
2026-03-17 18:24:01 +01:00
2026-03-26 07:02:33 +01:00
2026-04-04 19:17:01 +02:00

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.

S
Description
Windows Autopilot & Intune enrollment monitoring: live session timelines, fleet health, diagnostics, and an MCP server for AI-assisted troubleshooting.
Readme AGPL-3.0 60 MiB
Languages
C# 72.7%
TypeScript 25.7%
PowerShell 1%
JavaScript 0.5%