Skip to content

Implement push-based inhibition capabilities #222

Description

@Staphylococcus

Parent: #216, within the #89 GNOME/Plasma MVP. Target: v1.8.0.

Outcome

Implement push-based inhibition, starting with GNOME SessionManager. Each capability maintains current inhibition state from ordered source events and exposes a Boolean permission facade, with separate diagnostics. The section combines participating adapters' Booleans.

Scope

  • Implement inhibition only, following Compose independent activity and inhibition capabilities for GNOME and Plasma #216's independent capability contract. An adapter may also supply activity, but sharing a source/connection does not merge those paths.
  • Establish initial GNOME inhibition state and refresh after reconnect. Change-only notifications and periodic reconciliation trigger an internal state refresh. Those queries update the same contribution; they do not register GNOME again in Implement pull-based inhibition capabilities #223.
  • Keep event ordering, owner validation, obsolete-message rejection, connections and retries inside the adapter.
  • Combine different adapters' Booleans: any observed inhibition blocks. Startup, absence and source failure contribute no inhibitor. Quiet healthy subscriptions and pending refreshes retain the last observed state; failed reads drop that source's contribution without manufacturing a release.
  • Supply bounded diagnostics consistent with the Boolean. Keep transition history needed by inhibition's release policy internal; aggregate delay belongs to Integrate inhibition at the Boolean blanking gate #225.

Acceptance

  • GNOME inhibition is testable without its activity capability; inhibitor events never enter the activity stream or inactivity engine.
  • Startup with existing inhibition and changes during initial synchronization are covered.
  • Tests cover overlapping inhibitors, one ending while another remains, quiet subscriptions, owner loss/replacement, reconnect and delayed old events.
  • Internal refresh queries update one contribution, without an independent pull contributor for the same GNOME fact.
  • Section tests combine independent adapters' Booleans and matching diagnostics, including neutral startup/absence/failure, retained state during pending refreshes, and periodic reconciliation of missed additions/removals.

Boundary

#221 owns activity. This slice does not add activity queries, reinterpret idle notifications as inhibition, read preferences, implement aggregate release delay or decide TV actions. #223 implements capabilities whose acquisition mode is pull. #225 joins inhibition permission with activity eligibility only at can_blank().

Completion record — 2026-09-12

Implementation merged into dev in #227. The current runtime suite passes (1,019 unit tests, 151 Cucumber scenarios and runtime integration tests), including activity delivery, private-bus inhibition, cancellation/recovery, preference and gate coverage.

Real GNOME SessionManager overlap, final-release delay and gamepad/restore checks passed. Periodic refresh, owner replacement and obsolete events are covered by adapter tests.

#216 retains native Wayland coverage; #217 retains remaining VM lifecycle validation; #218/#219 retain portable configuration and diagnostics work. No prerelease/main promotion is authorized by closing this implementation slice.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions