The last snapshot does not explain the whole event
Display callbacks often arrive in bursts. Waiting for them to settle avoids applying a layout against an intermediate setup, but looking only at the final display identities loses information about what happened during that wait.
A monitor can be unplugged and reconnected inside one debounce window. The final set is unchanged even though a reconnect may have disturbed its position. MonitorMate accumulates topology and wake flags while replacing the pending work item, then passes those flags with the refreshed display list.
Preserve the reason to check, not permission to write
An accumulated flag makes the settled event eligible for a restoration check. AutoFixPipeline still requires auto-fix to be enabled globally and on the matching profile, no active apply operation and geometry that actually differs from the saved layout.
Matching uses the complete set of stable display fingerprints. If no exact profile matches, the pipeline does not borrow a layout from a subset or superset. After a successful apply, a delayed refresh updates the topology signature before releasing the re-entry guard.
A geometry-only rearrangement in System Settings has no wake or topology cause and does not qualify merely because it differs from a profile. Preserving event context supports that distinction as well as the rapid-reconnect case.
Verify it with real event sequences
The recorded August fix and current code establish how the flags survive debouncing and how the restore decision is gated. They do not reproduce the timing of every display, dock or wake sequence.
Useful hardware checks include a reconnect within the debounce window, a wake with unchanged identities, a missing monitor and a deliberate position change. Each needs to show both the settled geometry and whether an apply occurred. No physical display-event matrix was run for this review.
Display events and automatic correction
After a burst of display events settles, the service checks both the display list and what caused the events.
macOS events
Settling and eligibility
Profile and correction
Scroll or drag the background to move. Use the zoom buttons to resize.Arrow keys move between components. Enter selects.
Choose a component to explore
Select a numbered component on the map or use the component menu. Its details and connections will appear here.
No component selected.
All connections (9)
- 01 · Display callbacks and wake → 02 · Debounce contextevent flags · Async task
- 02 · Debounce context → 03 · Fresh display snapshotsettled refresh · Direct call
- 02 · Debounce context → 04 · Eligible causeaccumulated context · Direct call
- 03 · Fresh display snapshot → 04 · Eligible causesignature comparison · Direct call
- 04 · Eligible cause → 06 · Apply gateseligible event · Direct call
- 05 · Saved profile and settings → 06 · Apply gatesmatching settings · Direct call
- 06 · Apply gates → 07 · Core Graphics applycorrection needed · Direct call
- 07 · Core Graphics apply → 08 · Refresh and reseedafter apply · Async task
- 08 · Refresh and reseed → 03 · Fresh display snapshotnew observed signature · Response / return