Files
AutopilotMonitor/src/Shared
Oliver Kieselbach fdc0e3e8ce fix(v2): normalize timeline event Source values + stop periodic collectors before diag ZIP
Source attribution review on session df7abbc2 surfaced four inconsistencies in the Source field
on the Events table — assembly leakage, V1-parity carry-overs, and a CamelCase / snake_case mix
on the same emitter. Normalize so every Source is a CamelCase class-name or the stable lifecycle
label "Agent":

- Program.cs `agent_started` — "AutopilotMonitor.Agent.V2" -> "Agent" (V1 parity, drops assembly leak)
- ImeLogTrackerAdapter `script_completed` — "IME" -> "ImeLogTracker" (consistent with the seven
  sibling events emitted from the same adapter)
- StartupEnvironmentProbes (5 sites: device_location, agent_trace, timezone_auto_set, two
  ntp_time_check shapes) — "Network" -> "StartupEnvironmentProbes" (class-name consistency;
  eventType already encodes the sub-probe)
- EventTimelineEmitter default — "decision_engine" -> "DecisionEngine" (CamelCase, matches the
  override path used by phase_transition; eliminates the per-event mix on the wire)

Tests adjusted: ImeLogTrackerAdapterTests, StartupEnvironmentProbesTests, EventTimelineEmitterTests,
InformationalEventPostTests. EnrollmentEvent.Source XML doc updated to reflect the new convention.

Same session also showed `performance_snapshot` (seq 220) firing AFTER `diagnostics_collecting`
(seq 219), because periodic collectors keep ticking through the termination handler. Fix:

- New EnrollmentOrchestrator.StopCollectorHosts() — idempotent; the existing Stop() now delegates
  to it so we never double-stop.
- EnrollmentTerminationHandler gains an optional `stopPeripheralCollectors` callback and invokes
  it best-effort right before RunUploadDiagnosticsWithEvents (after DelayLateEventGrace). The
  WhiteGlove Part 1 path returns earlier and is unaffected — the agent stays alive for Part 2.
- Program.cs wires `() => orchestrator.StopCollectorHosts()` so all collector hosts (Performance,
  AgentSelfMetrics, DeliveryOptimization, ESP/Hello, IME log, …) are stopped before the diag ZIP
  is built. Late `performance_snapshot` / `agent_metrics_snapshot` no longer slip in after the
  `diagnostics_collecting` event.

Tests: V2.Core 732/732, DecisionCore 232/232, Backend 736/736.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:02:11 +02:00
..
2026-03-26 07:02:33 +01:00