4.4 KiB
Contextual Signal Glass Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Build a curated event broker, quiet shared Signal Glass host, and persistent privacy/activity indicators.
Architecture: Producers publish structured events to one bounded broker. A single per-screen host renders transient events ahead of existing focus controls, while persistent privacy state renders independently in the bar.
Tech Stack: Quickshell QML, QtQuick, Quickshell PipeWire/Bluetooth/Io APIs, Hyprland, Bash contract tests
Spec: docs/superpowers/specs/2026-08-17-contextual-signal-glass-design.md
Global Constraints
- Initial discovery must not emit user-visible events.
- DND suppresses ambient events but never persistent privacy state.
- No idle visual animation or unbounded queue/process loop.
- Existing Focus behavior and tests must remain compatible.
Task 1: Status event broker
Files:
- Create:
config/dot/quickshell/services/StatusEvents.qml - Modify:
config/dot/quickshell/shell.qml - Test:
tests/quickshell/status-events-contract.sh
Interfaces:
-
Produces:
publish(event: var),dismiss(): void,invoke(): void,activeEvent,active, and IPC diagnostics. -
Write an IPC contract that publishes ambient and critical fixtures, verifies replacement and DND filtering, and dismisses cleanly.
-
Run the contract and verify it fails because the IPC target is absent.
-
Implement broker normalization, priority, four-entry queue, stable-key replacement, expiry, and action routing.
-
Wire a diagnostics-only IPC target and run the contract to green.
Task 2: Shared Signal Glass host
Files:
- Create:
config/dot/quickshell/modules/signals/SignalGlass.qml - Create:
config/dot/quickshell/modules/signals/EventCard.qml - Create:
config/dot/quickshell/modules/signals/FocusCard.qml - Create:
config/dot/quickshell/modules/signals/qmldir - Modify:
config/dot/quickshell/shell.qml - Retire:
config/dot/quickshell/modules/focus/FocusCapsule.qml
Interfaces:
-
Consumes:
StatusEvents.activeEvent,FocusSession.active, andFocusSession.capsuleVisible. -
Produces: one
qs-signal-glasslayer surface per monitor. -
Add a static source contract proving only one Signal Glass host is instantiated.
-
Extract the existing focus presentation without changing its actions.
-
Implement the compact event presentation and event-first/focus-second arbitration.
-
Verify focus contracts and QML construction.
Task 3: Event producers and persistent activity
Files:
- Create:
config/dot/quickshell/services/PrivacyState.qml - Create:
config/dot/quickshell/services/DeviceEvents.qml - Modify:
config/dot/quickshell/services/Capture.qml - Modify:
config/dot/quickshell/services/NightLight.qml - Modify:
config/dot/quickshell/services/FocusSession.qml - Test:
tests/quickshell/activity-state-contract.sh
Interfaces:
-
Produces:
PrivacyState.microphoneActive,cameraActive,screenSharingActive,recordingActive,activeKinds, and transition events. -
Write contracts for capture events and independent persistent-state reporting.
-
Instrument Panama-owned capture, Night Light, and focus completion transitions.
-
Add initialized transition monitoring for output, Bluetooth, KDE Connect, and privacy activity.
-
Run the contracts and verify missing optional integrations fail quietly.
Task 4: Bar indicator and detail panel
Files:
- Create:
config/dot/quickshell/modules/bar/ActivityIndicator.qml - Create:
config/dot/quickshell/modules/bar/ActivityPanel.qml - Modify:
config/dot/quickshell/modules/bar/Bar.qml - Modify:
config/dot/quickshell/services/ShellState.qml
Interfaces:
-
Consumes:
PrivacyStatebooleans andCapture.stopRecording(). -
Add the indicator beside Focus with semantic icon/color selection.
-
Add a compact details popover and safe Stop action for Panama recording.
-
Verify overlay exclusivity, click targets, and all active-state combinations.
Task 5: System verification
- Run all Quickshell contract tests.
- Run QML/runtime diagnostics and inspect logs for warnings.
- Capture ambient, privacy, recording, and focus-restoration states.
- Restart the live Quickshell instance and repeat the smoke contract.