Skip to content

feat(application): cross-platform system sleep/wake events#5425

Merged
leaanthony merged 6 commits into
masterfrom
feat/system-power-events
May 13, 2026
Merged

feat(application): cross-platform system sleep/wake events#5425
leaanthony merged 6 commits into
masterfrom
feat/system-power-events

Conversation

@leaanthony

@leaanthony leaanthony commented May 13, 2026

Copy link
Copy Markdown
Member

Summary

Adds cross-platform sleep/wake events so apps can react to the system suspending/resuming. Closes a long-standing gap: Windows already exposed WM_POWERBROADCAST as Windows.APMSuspend / APMResumeAutomatic / APMResumeSuspend, but macOS and Linux had no equivalent.

app.Event.OnApplicationEvent(events.Common.SystemDidWake, func(*application.ApplicationEvent) {
    // fires on macOS, Windows, and Linux (with logind)
})

What's added

macOS — observes NSWorkspace's notification centre (separate from the default one used by NSApplicationDelegate):

  • Mac.ApplicationWillSleepNSWorkspaceWillSleepNotification
  • Mac.ApplicationDidWakeNSWorkspaceDidWakeNotification
  • Mac.ApplicationScreensDidSleepNSWorkspaceScreensDidSleepNotification
  • Mac.ApplicationScreensDidWakeNSWorkspaceScreensDidWakeNotification

Declared with the ! suffix in events.txt so the generator skips its auto-selector emission (NSWorkspace selectors don't belong on NSApplicationDelegate); observer registration is wired by hand in application_darwin.go::init() next to the existing theme-change observer.

Linux — subscribes to org.freedesktop.login1.Manager.PrepareForSleep on the system bus. The signal fires twice with a boolean arg (true before suspend, false on resume), dispatched to Linux.SystemWillSleep and Linux.SystemDidWake. Mirrors monitorThemeChanges() in shape. Logs a warning and exits the goroutine cleanly on distros without logind/elogind (Alpine, Void, some Devuan setups) so the rest of the app keeps working.

Common forwardingCommon.SystemWillSleep and Common.SystemDidWake. Each platform's events_common_<os>.go map gains an entry that forwards the platform-specific event into the common one (same pattern as Common.ThemeChanged and Common.ApplicationStarted):

Source → Common
Mac.ApplicationWillSleep Common.SystemWillSleep
Mac.ApplicationDidWake Common.SystemDidWake
Windows.APMSuspend Common.SystemWillSleep
Windows.APMResumeAutomatic Common.SystemDidWake
Linux.SystemWillSleep Common.SystemWillSleep
Linux.SystemDidWake Common.SystemDidWake

Docs updated in docs/src/content/docs/features/events/system.mdx, reference/events.mdx, and guides/events-reference.mdx.

Design notes

  • Windows.APMResumeSuspend deliberately NOT mapped to Common.SystemDidWake: it fires after APMResumeAutomatic when the resume was triggered by user input, so mapping both would double-fire the common event for keyboard/mouse wakes.
  • Mac.ApplicationScreensDidSleep/Wake kept platform-specific. They fire on display-power transitions (e.g. lid lowered) distinct from full system sleep, with no clean Windows/Linux equivalent — display-power state on Linux lives in DE-specific D-Bus interfaces (GNOME ScreenSaver, KDE PowerManagement) too fragmented to unify.
  • Linux uses the system bus, not the session bus that monitorThemeChanges uses — logind is a system-level service.

Test plan

  • darwin: go build, go vet, go test ./pkg/events/ ./pkg/application/ — all pass
  • linux (Ubuntu, GTK4/3 + WebKit2GTK-4.1): go build, go test ./pkg/application/ — all pass
  • windows: GOOS=windows go vet ./pkg/events/ clean (CGO build path not exercised here; events_common_windows.go is straight Go mirroring the existing map pattern)
  • manual sleep test on macOS — observe Common.SystemDidWake fire after pmset sleepnow + wake
  • manual sleep test on Linux — observe Common.SystemDidWake fire after systemctl suspend + wake
  • manual sleep test on Windows — observe Common.SystemDidWake fire after standby + wake

Automated tests don't cover any of the existing AppDelegate-selector or D-Bus paths either; the manual sleep test mirrors how Common.ThemeChanged and the Windows APM events are validated today.


Supersedes #5423 (closed; that PR's branch was based on a stale tree with unrelated drift).

Summary by CodeRabbit

  • New Features

    • Added system lifecycle events across platforms: common SystemWillSleep/SystemDidWake, macOS application & screen sleep/wake, Windows APMResumeAutomatic, and Linux SystemWillSleep/SystemDidWake — apps can listen for suspend/resume and react (flush, reconnect, refresh).
  • Documentation

    • Expanded docs and guides with examples and platform-specific guidance (macOS screen events, Windows resume behavior, Linux systemd-logind notes).

Review Change Stack

Mirrors the windows:APMSuspend / APMResumeAutomatic / APMResumeSuspend
events that Wails v3 already raises from WM_POWERBROADCAST on Windows.

NSWorkspace power notifications post to its own notification center
(not the default NSNotificationCenter that NSApplicationDelegate uses)
so the events are declared with the `!` suffix in events.txt to skip
the delegate-selector auto-generation, and observers are wired by hand
in application_darwin.go's init() alongside the existing theme-change
observer on NSDistributedNotificationCenter.

New events:
- mac:ApplicationWillSleep         (NSWorkspaceWillSleepNotification)
- mac:ApplicationDidWake           (NSWorkspaceDidWakeNotification)
- mac:ApplicationScreensDidSleep   (NSWorkspaceScreensDidSleepNotification)
- mac:ApplicationScreensDidWake    (NSWorkspaceScreensDidWakeNotification)

Verification: compile + vet + existing unit tests pass on macOS, linux,
windows. Runtime firing of the observers is not exercised by automated
tests (same gap as the rest of the AppDelegate selectors) — to be
confirmed via xbar2's #807 follow-up wiring and a manual sleep test.

Motivation: xbar2 needs DidWake to force a plugin refresh sweep after
sleep, addressing upstream xbar issue #807 (the most-upvoted open bug).
Adds Linux equivalents to the mac:ApplicationDidWake / WillSleep events
introduced in the previous commit, completing power-event coverage
across macOS, Windows, and Linux.

Implementation subscribes to org.freedesktop.login1.Manager's
PrepareForSleep signal on the system bus. The signal fires twice with
a boolean arg — true just before suspend (→ linux:SystemWillSleep),
false on resume (→ linux:SystemDidWake). The pattern mirrors
monitorThemeChanges() in the same file (goroutine + AddMatchSignal +
range over Signal channel), differing only in bus (system vs session)
and dispatch logic.

Graceful degradation: distros without logind/elogind reachable on the
system bus (Alpine, Void, some Devuan setups) log a warning and the
goroutine exits — the rest of the application keeps running. This
matches the existing theme-monitor behaviour for missing session bus.

New events:
- linux:SystemWillSleep   (PrepareForSleep arg=true)
- linux:SystemDidWake     (PrepareForSleep arg=false)

Verification: darwin build + vet + tests pass. Linux cross-compile
requires a GTK toolchain not available in this environment, so runtime
behaviour will be confirmed when the branch is built on Linux + a
manual systemctl suspend test. The function structure is a near-copy
of the existing monitorThemeChanges() so the parse-time risk is low.
godbus API calls (ConnectSystemBus, WithMatchInterface, WithMatchMember,
WithMatchObjectPath) verified against v5.2.2 (the version in go.mod).
Adds two cross-platform power events so apps can listen for sleep/wake
once instead of branching on OS:

    app.OnApplicationEvent(events.Common.SystemDidWake, …)

Each platform's events_common_<os>.go map gains an entry that
forwards the platform-specific event into the common one (same
pattern as Common.ThemeChanged and Common.ApplicationStarted):

  darwin:  Mac.ApplicationWillSleep    → Common.SystemWillSleep
           Mac.ApplicationDidWake      → Common.SystemDidWake
  windows: Windows.APMSuspend          → Common.SystemWillSleep
           Windows.APMResumeAutomatic  → Common.SystemDidWake
  linux:   Linux.SystemWillSleep       → Common.SystemWillSleep
           Linux.SystemDidWake         → Common.SystemDidWake

Notes:
- Windows APMResumeSuspend is deliberately not mapped — it fires
  *after* APMResumeAutomatic when the wake was triggered by user
  input, so mapping both would double-fire Common.SystemDidWake.
- Mac.ApplicationScreensDidWake / ScreensDidSleep are kept platform-
  specific; they fire on display power state (separate from system
  sleep) and have no Linux/Windows equivalent.

Verified: darwin build + tests pass locally; Linux build + tests
pass on lin-node1; windows cross-vet of pkg/events clean.
Adds documentation for the new Common.SystemWillSleep / SystemDidWake
events plus the macOS Mac.ApplicationWillSleep / DidWake / ScreensDidSleep
/ ScreensDidWake and Linux SystemWillSleep / SystemDidWake variants.

- features/events/system.mdx: code examples in the Common block + the
  macOS and Linux platform tabs; clarifies the Windows resume choice
  (APMResumeAutomatic vs APMResumeSuspend).
- reference/events.mdx: adds the two common events to the application-
  events table.
- guides/events-reference.mdx: adds rows to the Common, macOS, and
  Linux tables; notes the logind dependency on Linux and the screen-
  vs-system sleep distinction on macOS.
Copilot AI review requested due to automatic review settings May 13, 2026 08:53
@coderabbitai

coderabbitai Bot commented May 13, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 54847b29-6a94-4274-bebf-a8bb15fd2214

📥 Commits

Reviewing files that changed from the base of the PR and between 335a902 and db85bdb.

📒 Files selected for processing (7)
  • docs/src/content/docs/guides/events-reference.mdx
  • v3/pkg/application/application_linux.go
  • v3/pkg/application/events_common_android.go
  • v3/pkg/application/events_common_darwin.go
  • v3/pkg/application/events_common_ios.go
  • v3/pkg/application/events_common_linux.go
  • v3/pkg/application/events_common_windows.go
✅ Files skipped from review due to trivial changes (2)
  • v3/pkg/application/events_common_android.go
  • docs/src/content/docs/guides/events-reference.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • v3/pkg/application/application_linux.go

Walkthrough

Adds cross-platform system sleep/wake lifecycle events: new event types and renumbered IDs, runtime event name registrations, macOS and Linux native handlers, Windows-to-common mappings, standardized forwarding, and updated documentation with examples.

Changes

System Sleep/Wake Event Lifecycle

Layer / File(s) Summary
Event Type and ID Infrastructure
v3/pkg/events/events.go
Adds SystemDidWake/SystemWillSleep fields to Common/Linux/Mac event structs; renumbers event IDs across constructors and updates the eventToJS mapping.
Platform Header Constants
v3/pkg/events/events_darwin.h, v3/pkg/events/events_ios.h, v3/pkg/events/events_linux.h
Renumbers platform Event* macro constants, increases MAX_EVENTS, and adds Linux EventSystemDidWake/EventSystemWillSleep.
Event Name Registry and Text Manifests
v3/pkg/events/events.txt, v3/internal/generator/collect/known_events.go, v3/pkg/events/known_events.go
Adds new sleep/wake event name entries and extends generator/runtime knownEvents maps to recognize them.
Runtime Event Type Constants
v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts
Exports new Types.Common, Types.Linux, and Types.Mac event name strings for sleep/wake events for JS runtime.
macOS Native Event Handlers
v3/pkg/application/application_darwin.go, v3/pkg/application/application_darwin_delegate.m, v3/pkg/application/events_common_darwin.go
Registers NSWorkspace observers; implements AppDelegate handlers for workspaceWillSleep/workspaceDidWake and screens sleep/wake; maps mac events to common SystemWillSleep/SystemDidWake.
Linux D-Bus Power Monitoring
v3/pkg/application/application_linux.go, v3/pkg/application/events_common_linux.go
Adds monitorPowerEvents() to subscribe to systemd-logind PrepareForSleep, publish platform SystemWillSleep/SystemDidWake events, wires into startup, and maps to common events.
Common Event Mapping and Forwarding
v3/pkg/application/events_common_*.go (darwin, linux, windows, android, ios)
Standardizes event forwarding by constructing new ApplicationEvent objects with mapped IDs and preserved ctx instead of mutating incoming events; updates Windows mapping to include APMSuspend/APMResumeAutomatic.
Event Documentation and Examples
docs/src/content/docs/features/events/system.mdx, docs/src/content/docs/guides/events-reference.mdx, docs/src/content/docs/reference/events.mdx
Expands docs with common and platform-specific sleep/wake examples and adds new lifecycle entries to reference tables.

Sequence Diagrams

sequenceDiagram
  participant Application
  participant macOS
  participant Linux
  participant Windows
  participant EventBus
  Application->>macOS: Register workspace observers
  Application->>Linux: Subscribe to logind signals
  Application->>Windows: Wire APM mapping
  macOS->>EventBus: ApplicationWillSleep → SystemWillSleep
  Linux->>EventBus: PrepareForSleep(true) → SystemWillSleep
  Windows->>EventBus: APMSuspend → SystemWillSleep
  macOS->>EventBus: ApplicationDidWake → SystemDidWake
  Linux->>EventBus: PrepareForSleep(false) → SystemDidWake
  Windows->>EventBus: APMResumeAutomatic → SystemDidWake
Loading

🎯 4 (Complex) | ⏱️ ~60 minutes

  • Possibly related PRs:

  • Suggested labels:
    Documentation, v3-alpha, runtime, MacOS, Windows, size:XXL, lgtm

  • Poem

🐰 A rabbit hops through system sleep,

Wakes the app from slumber deep,
macOS, Linux, Windows say "awake!",
Events fire and states remake —
Flush, reconnect, render anew.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat(application): cross-platform system sleep/wake events' clearly and concisely summarizes the main change—adding system sleep/wake event support across macOS, Linux, and Windows platforms.
Description check ✅ Passed The description comprehensively covers the feature, implementation details, and design rationale. It includes a summary, detailed breakdown by platform, common forwarding mappings, docs changes, design notes, and test plan. All major template sections are well-addressed.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/system-power-events

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/src/content/docs/guides/events-reference.mdx`:
- Around line 426-427: Add a new row for the Windows resume event
`windows:APMResumeAutomatic` to the Windows events reference table (near the
existing `common:SystemWillSleep` and `common:SystemDidWake` rows): include the
event name `windows:APMResumeAutomatic`, a short description like "System
resumed from automatic resume (APMResumeAutomatic)", and recommended actions
such as "Reconnect, refresh stale data" formatted as a markdown table row
matching the surrounding pipe-separated layout and backtick-wrapped event names.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 56432a83-116c-40cf-bbfd-365a3e526f24

📥 Commits

Reviewing files that changed from the base of the PR and between 6944537 and 4a62fe2.

📒 Files selected for processing (17)
  • docs/src/content/docs/features/events/system.mdx
  • docs/src/content/docs/guides/events-reference.mdx
  • docs/src/content/docs/reference/events.mdx
  • v3/internal/generator/collect/known_events.go
  • v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts
  • v3/pkg/application/application_darwin.go
  • v3/pkg/application/application_darwin_delegate.m
  • v3/pkg/application/application_linux.go
  • v3/pkg/application/events_common_darwin.go
  • v3/pkg/application/events_common_linux.go
  • v3/pkg/application/events_common_windows.go
  • v3/pkg/events/events.go
  • v3/pkg/events/events.txt
  • v3/pkg/events/events_darwin.h
  • v3/pkg/events/events_ios.h
  • v3/pkg/events/events_linux.h
  • v3/pkg/events/known_events.go

Comment thread docs/src/content/docs/guides/events-reference.mdx

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds cross-platform system sleep/wake lifecycle events to Wails v3, aligning macOS and Linux capabilities with the existing Windows power-broadcast events and providing unified common events (Common.SystemWillSleep, Common.SystemDidWake) for application code to consume.

Changes:

  • Adds new common + platform-specific event types (macOS sleep/wake + screen sleep/wake, Linux sleep/wake) and regenerates event IDs/mappings across Go/C headers/TS runtime.
  • Implements Linux sleep/wake monitoring via org.freedesktop.login1.Manager.PrepareForSleep on the system bus.
  • Implements macOS sleep/wake monitoring via NSWorkspace notification center observers, plus updates documentation to describe the new events.

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
v3/pkg/events/known_events.go Registers new common/linux/mac event names as known events.
v3/pkg/events/events.txt Declares new events (including !-suffixed mac/linux entries for generator behavior).
v3/pkg/events/events.go Adds new event constants and regenerates numeric IDs + eventToJS map.
v3/pkg/events/events_linux.h Regenerates Linux C header event IDs (adds sleep/wake) and MAX_EVENTS.
v3/pkg/events/events_ios.h Regenerates iOS C header event IDs due to global ID shifts.
v3/pkg/events/events_darwin.h Regenerates macOS C header event IDs (adds sleep/wake + screen sleep/wake) and MAX_EVENTS.
v3/pkg/application/events_common_windows.go Forwards Windows power events into new common sleep/wake events.
v3/pkg/application/events_common_linux.go Forwards Linux sleep/wake events into new common sleep/wake events.
v3/pkg/application/events_common_darwin.go Forwards macOS sleep/wake events into new common sleep/wake events.
v3/pkg/application/application_linux.go Adds monitorPowerEvents() using logind PrepareForSleep signal; hooks it into app run.
v3/pkg/application/application_darwin.go Registers NSWorkspace sleep/wake + screen sleep/wake observers during init.
v3/pkg/application/application_darwin_delegate.m Adds delegate handlers for the new NSWorkspace notifications and emits events.
v3/internal/runtime/desktop/@wailsio/runtime/src/event_types.ts Exposes the new event string constants to the JS runtime.
v3/internal/generator/collect/known_events.go Updates generator-side known event list to include the new events.
docs/src/content/docs/reference/events.mdx Documents new common SystemWillSleep / SystemDidWake events.
docs/src/content/docs/guides/events-reference.mdx Adds new common + platform-specific sleep/wake entries to the reference guide.
docs/src/content/docs/features/events/system.mdx Adds usage examples and platform notes for the new sleep/wake events.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread v3/pkg/application/application_linux.go
Comment on lines +301 to +305
if err = conn.AddMatchSignal(
dbus.WithMatchInterface("org.freedesktop.login1.Manager"),
dbus.WithMatchMember("PrepareForSleep"),
dbus.WithMatchObjectPath("/org/freedesktop/login1"),
); err != nil {
Comment on lines 7 to 12
var commonApplicationEventMap = map[events.ApplicationEventType]events.ApplicationEventType{
events.Windows.SystemThemeChanged: events.Common.ThemeChanged,
events.Windows.ApplicationStarted: events.Common.ApplicationStarted,
events.Windows.SystemThemeChanged: events.Common.ThemeChanged,
events.Windows.ApplicationStarted: events.Common.ApplicationStarted,
events.Windows.APMSuspend: events.Common.SystemWillSleep,
events.Windows.APMResumeAutomatic: events.Common.SystemDidWake,
}
Comment on lines 7 to 12
var commonApplicationEventMap = map[events.ApplicationEventType]events.ApplicationEventType{
events.Linux.ApplicationStartup: events.Common.ApplicationStarted,
events.Linux.SystemThemeChanged: events.Common.ThemeChanged,
events.Linux.SystemWillSleep: events.Common.SystemWillSleep,
events.Linux.SystemDidWake: events.Common.SystemDidWake,
}
Comment on lines 7 to 12
var commonApplicationEventMap = map[events.ApplicationEventType]events.ApplicationEventType{
events.Mac.ApplicationDidFinishLaunching: events.Common.ApplicationStarted,
events.Mac.ApplicationDidChangeTheme: events.Common.ThemeChanged,
events.Mac.ApplicationWillSleep: events.Common.SystemWillSleep,
events.Mac.ApplicationDidWake: events.Common.SystemDidWake,
}
Comment thread docs/src/content/docs/features/events/system.mdx Outdated
taliesin-ai and others added 2 commits May 13, 2026 19:12
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Three review issues from #5425:

1. Common-event forwarding mutated the incoming *ApplicationEvent's Id
   before re-queuing. Because application listeners run concurrently
   (see EventProcessor.dispatchEventToListeners), this could race with
   other listeners observing the source event. Fix: emit a fresh
   ApplicationEvent for the common copy, sharing only ctx. Applied
   uniformly to all five setupCommonEvents implementations
   (darwin / linux / windows / ios / android) since they all had the
   same pattern.

2. Linux monitorPowerEvents claimed to warn and exit on systems without
   logind/elogind, but AddMatchSignal would succeed on any system bus
   and the goroutine would block forever on a channel that never
   receives. Probe org.freedesktop.DBus.NameHasOwner for
   org.freedesktop.login1 up front and warn + return if absent. Also
   constrain the match rule with WithMatchSender so a hostile bus
   name can't spoof PrepareForSleep signals (Copilot).

3. docs/guides/events-reference.mdx Windows table omitted
   APMResumeAutomatic. Added it with a note distinguishing it from
   APMResumeSuspend (CodeRabbit).

Verified: darwin + linux build/test pass; dbus-send NameHasOwner
returns true for org.freedesktop.login1 on the Linux test node.
@leaanthony

Copy link
Copy Markdown
Member Author

Addressed the review feedback (pushed as `db85bdb`, rebased on top of the earlier Copilot autofix `335a902`):

  1. Common-event forwarding race (Copilot, all 3 OS files): forwarding listeners no longer mutate the incoming `*ApplicationEvent.Id` before re-queuing — they emit a fresh `ApplicationEvent` sharing only the context. Same fix applied uniformly to all five `setupCommonEvents` implementations (darwin / linux / windows / ios / android) since the pattern was identical everywhere.

  2. Linux sender match (Copilot): added `dbus.WithMatchSender("org.freedesktop.login1")` to the `AddMatchSignal` rule so a hostile bus name can't spoof `PrepareForSleep`. The Copilot autofix in `335a902` already added the `NameHasOwner` probe; I kept that (with a slightly tighter call style + a rationale comment) and added the sender constraint alongside it.

  3. Windows docs row (CodeRabbit): added `windows:APMResumeAutomatic` to the reference table with a note distinguishing it from `APMResumeSuspend` (always-fires vs user-input-only).

Verified darwin build + tests pass; `dbus-send NameHasOwner` returns `true` for `org.freedesktop.login1` on the Linux test node, and the rebased branch builds + tests clean there too.

@leaanthony leaanthony merged commit ba1291c into master May 13, 2026
79 of 80 checks passed
@leaanthony leaanthony deleted the feat/system-power-events branch May 13, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants