4.6 KiB
4.6 KiB
Tasks: Graphical Interface
Tasks from the task list, under the phase each was done in and by their original numbers. Phases are the order the project was built in, across every spec; 001's tasks give that order in full.
Phase 9: GUI
Goal: A libcosmic interface over the existing IPC contract, adding no domain logic.
- T138 Implement the libcosmic application shell in
crates/gui/src/app.rsper the verified spike pattern in research R-001, pinning the exact libcosmic git revision — shell lives incrates/gui/src/app.rs, libcosmic pinned at87ab8179 - T139 [P] Implement the endpoint list view with live state, time in phase and traffic activity in
crates/gui/src/views/endpoints.rs(FR-044) — views live incrates/gui/src/app.rsrather than aviews/directory; time in phase added, and an idle session reads "listening" rather than as a fault - T140 [P] Implement the routing view with creation, enable/disable and broken-route display in
crates/gui/src/views/routes.rs— incrates/gui/src/app.rs; exercised by clicking through it on macOS, which is how the daemon refusing identifiers was found - T141 [P] Implement the invitation prompt with "always accept" in
crates/gui/src/app.rs(FR-014); the discovery view is still to come - T142 [P] Implement the Bluetooth scan and advertising views in
crates/gui/src/views/bluetooth.rs, rendering unavailable capabilities as unavailable (FR-053) — incrates/gui/src/app.rs; each role shows its capability's reason instead of controls when unavailable, decided by a new stableCapability.id. Advertising was switched on and off through it on macOS against the real radio - T143 [P] Implement the event history and MIDI monitor views in
crates/gui/src/views/diagnostics.rs(FR-046, FR-047) — incrates/gui/src/app.rs; the monitor streamsMonitorEndpointonly while its page is showing, and was watched carrying MIDI played into a real CoreMIDI port - T144 Implement the service-not-installed onboarding in
crates/gui/src/views/onboarding.rsoffering installation in one action and stating what it will do (FR-042) — incrates/gui/src/onboarding.rs; the offer follows what the service manager reports (install, start, or reinstall over a stale registration), and is withheld under--socket. Rendered against the real launchd; the button was not pressed, since it registers a real login item, and runs the same calls asservice install --start - T145 Implement the IPC client with event subscription and cache resync in
crates/gui/src/client.rs, tolerating resync at any time (contracts/ipc-protocol.md §6) — the cache is patched fromWatchStateand read again whenever the stream ends, with a two-second poll for what the stream does not carry; writing it found the stream reporting sessions without their state
Checkpoint: Feature complete on both platforms.
Phase 12: The redesigned window
The owner chose a design by working through a libcosmic study (R-078). The window is rebuilt first over the contract as it stands; each later task adds what it needs to the daemon, the configuration file and the contract, and then to the window.
- T180 Rebuild the window on the chosen list layout in
crates/gui/src/: pages Endpoints (one section per kind, each with its add action), Routes, Bluetooth, Activity, Monitor and Settings; a docked side panel holding each endpoint's details and actions; one modal dialog each for adding and editing ports, network sessions, routes and machines; the known machines in Settings; wording kept informat.rswith tests, per R-078, US2, SC-001 — done: the six pages, the docked panel and the add and edit dialogs over the current contract, with IAC buses and other applications' ports told apart from hardware by a newsoftwarefield on device details; editing a route's ends, deleting a network port, a machine's trust, and preferences wait on later tasks - T189 Remove the design study in
crates/gui/examples/designs/once the window matches it, per R-078 — done: moved out of the repository once the window was rebuilt on it
After the split
- T240 Keep the Monitor page's endpoint list inside the window: move the endpoint picker from the header's right corner to the left of the page, under a label that asks for a choice until one is made, since libcosmic's dropdown opens its list rightwards as wide as the longest name without holding it to the window, and from the corner it ran off the edge and cut names short (found 2026-09-27 while checking the test note on screen) — done: checked on screen against a scratch daemon, every name shown whole