# 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`

**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`, and `FocusSession.capsuleVisible`.
- Produces: one `qs-signal-glass` layer 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`

**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: `PrivacyState` booleans and `Capture.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.
