diff options
Diffstat (limited to 'docs/design/2026-07-03-instrument-console-panels-spec.org')
| -rw-r--r-- | docs/design/2026-07-03-instrument-console-panels-spec.org | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/docs/design/2026-07-03-instrument-console-panels-spec.org b/docs/design/2026-07-03-instrument-console-panels-spec.org deleted file mode 100644 index 315e0b4..0000000 --- a/docs/design/2026-07-03-instrument-console-panels-spec.org +++ /dev/null @@ -1,158 +0,0 @@ -#+TITLE: Instrument-console rebuild — net + bluetooth panels -#+DATE: 2026-07-03 -#+TODO: TODO | DONE -#+TODO: DRAFT READY DOING | IMPLEMENTED SUPERSEDED CANCELLED - -* IMPLEMENTED Status -:PROPERTIES: -:ID: e73877f5-4f5b-4f81-b946-dbaa6145e0d5 -:END: -- 2026-07-03 Fri @ 06:49 -0400 :: DOING → IMPLEMENTED: all six phases shipped - (net GTK-free layer 81ec9c3, net view 800ef60; bt GTK-free layer 5318b34, bt - view 66f03d9; phase-6 dead-code removal f4e688e). Both panels are single-screen - instrument consoles, verified live on velox — 46 suites + full make test green, - both AT-SPI smokes green end to end, render matching the approved prototype. The - three folded tasks (network panel redesign, bt switch placement + title, bt - rename devices) closed with the build. -- 2026-07-03 Fri @ 02:07 -0400 :: DRAFT → READY → DOING in one stroke: Craig - approved the design through five interactive prototype iterations and - authorized the no-approvals speedrun ("let's build them now... go"). The - review gate was the live prototype session itself. -- 2026-07-03 Fri @ 02:07 -0400 :: Created (DRAFT) from the prototype session. - -* Metadata - -| Field | Value | -|---------------------+------------------------------------------------------------| -| Status | implemented | -|---------------------+------------------------------------------------------------| -| Owner | Craig Jennings | -|---------------------+------------------------------------------------------------| -| Repos | dotfiles (net/, bluetooth/, themes), archsetup | -|---------------------+------------------------------------------------------------| -| Normative reference | [[file:../../assets/2026-07-03-instrument-console-panels-prototype.html][assets/2026-07-03-instrument-console-panels-prototype.html]] | -|---------------------+------------------------------------------------------------| - -* Summary - -Rebuild both GTK layer-shell panels (net, bluetooth) from the tabbed layout -to the instrument-console design: one screen, no tabs, a faceplate with a -state word + badges + radio switch + close, engraved section labels, lamp -rows that act on click, dial meters under the console keys, and a doctor -that does it all. The interactive prototype =panel-console-v3.html= is the -normative design reference — when this spec and the prototype disagree on a -visual or interaction, the prototype wins. - -* Decisions (all resolved — Craig, prototype session 2026-07-02/03) - -- Replace the tabbed panels outright. No fallback flag; git history is the - rollback. Net panel first, bluetooth second. -- Advanced repair tiers leave the panel entirely. DOCTOR runs the full - diagnose → classify → lightest-repair → re-verify escalation (the engine - already does this). The surgical tiers stay CLI-only (=net repair ...=). -- Faceplate (both panels): state lamp + state word, badges, unit label - (NET·01 / BT·01), radio switch (wifi radio / bt adapter power), close ✕. - Badges: TUNNEL (gold, net), AIRPLANE (gold, both), LOW BATT (red, bt). -- Sections in order — net: CHANNEL, NETWORKS (+ hidden action), TUNNELS, - CONSOLE (DOCTOR / SPEED TEST keys), meters, output. bt: ADAPTER (with - clickable =discoverable= chip), PAIRED, NEARBY (+ scanning note), CONSOLE - (DOCTOR / SCAN), battery gauges, output. -- Section row budgets, half-row peek, internal scroll (thin slate - scrollbar): NETWORKS 5.5 rows, TUNNELS 4.5, PAIRED 5.5, NEARBY 4.5. - In-range networks sort active-first then strongest-signal-first. Counts on - the engraved headers ("networks · 12 in range", "tunnels · 1 up of 9", - "paired · 3", "nearby · 12"). The panel silhouette never grows with list - length; only the output well is variable and it caps at ~170px. -- Lamp-row grammar: green = live/connected, gold = available/actionable, - off = down/stored, red = failed; busy = pulsing gold during transitions. - Rows act on click (tunnels toggle, networks join, paired devices - connect/disconnect toggle, nearby devices pair). -- Arm-first for anything disruptive or destructive, 3s auto-disarm: - - forget (network or bt device): hover reveals ✕; first click arms the - row terracotta ("forget? click ✕ again"), second fires. No dialog. - - disconnect (active network): click the active row; first click arms in - GOLD ("disconnect? click again") — disruptive, not destructive — second - fires. -- Meters (net): two dials, RX·DOWN / TX·UP, gold needles, mode tag top-left - (LIVE green / TEST gold), HOLD tag top-right. Idle: live link throughput. - Speed test: cards flash gold, needles sweep the measured rate, then PIN - the final value with HOLD; clicking a held meter releases it to LIVE. - Scale 0–100 Mbps, auto-relabel to 0–1000 when a reading exceeds 100. - Dial top inset ~13px so the corner tags never touch the arc. -- Speed test output well gets ONLY: location line ("location: <city> by - <sponsor>"), ping (+jitter), final line, conditioned tip(s). The rates - live in the meters, not the text. -- Battery gauges (bt): same dial chrome; one per connected device (two - slots; empty slot dim "NO DEVICE"/"ADAPTER OFF"); needle+value red under - 15% and the LOW BATT faceplate badge lights. -- Output well: doctor streams the checks with their narration lines - (viewmodel.STEP_NARRATION) and repair steps in gold; verdict line closes - (olive for pass/fixed). A dismiss ✕ appears in the well's corner whenever - it has content. Both panels. -- WiFi radio switch: =nmcli radio wifi on|off=. Off empties NETWORKS to one - dim "wifi radio off" row, drops the connection, kills tailscale rows' - reachability; on rejoins the last network (NM autoconnect does this for - real). Airplane mode is system-level (Super+Shift+A owns it): both panels - reflect it (state word AIRPLANE, gold badge, switches down); a switch - flipped under airplane refuses with a toast naming the exit. A routed - ethernet link keeps the net panel ONLINE through airplane mode. -- Ethernet: presence-based row pinned atop NETWORKS when a cable is up - ("enp… · active · wired · 1.0 Gbps" / "wired · standby"); CHANNEL swaps - the signal ladder for "wired · <speed> full-duplex" when routed; clicking - the row toggles route ownership via device disconnect/connect. -- Pairing (bt): nearby row click → busy → passkey-confirm dialog (large - gold digits) → device moves to PAIRED and connects. SCAN key refreshes - with a "scanning…" note on the header. -- Rename (bt): hover ✎ on a paired row → dialog prefilled → bluez - =set-alias= (closes the filed rename task). -- Tooltips: any ellipsized row label carries its full text as the tooltip. -- Dialogs (join / hidden SSID / passkey / rename) keep the in-panel dupre - dialog style (gold border, dark well inputs, gold caret). -- Close: ✕ on the faceplate + Esc (already shipped; keep). -- Folded tasks: "Network panel redesign", "Bluetooth panel: switch placement - + panel title", "Bluetooth panel: rename devices" — all close with this - build's phases. - -* Engine gaps (small, close during phases) - -- radio verb: =nmcli radio wifi on|off= helper (manage or sysio) + tests. -- hidden-SSID join: =manage.add= grows a hidden flag - (=802-11-wireless.hidden yes=). -- ethernet: device rows from =nmcli dev= (type ethernet) + disconnect/ - connect verbs (device-level; =net down --iface= already disconnects). -- bt rename: btctl =set-alias= one-shot verb + verify-after read. -- bt battery: already exposed (indicator uses it). -- speedtest meters: =run_speedtest_stream= on_update already ticks (pty). -- link speed for wired channel line: =ethtool=-free read from - =/sys/class/net/<dev>/speed=. - -* Implementation phases - -1. [X] Spec + task wiring (this file; todo.org parent task with :SPEC_ID:). -2. [X] Net GTK-free layer (TDD): viewmodel row composers for the console - sections (network rows sorted+counted, tunnel rows, channel facts, - faceplate state word derivation, meter scale logic, arm state machines - for forget/disconnect), PanelModel restructure (sections, no tabs). - Engine gaps: radio verb, hidden join, ethernet rows, wired link speed. -3. [X] Net view rebuild: gui.py single-page console built in Python - (faceplate, engraved scrolled sections, console keys, cairo dial meters - with mode/hold tags, output well + dismiss), panel.css additions - (engrave, lamps, dial, badges, arm tints). AT-SPI smoke + driver - rewritten for the console layout. Shipped with phase 4 (dotfiles - 800ef60): a view-only intermediate is a broken panel (rows and switches - that do nothing), so view + interactions landed together. -4. [X] Net interactions: join/hidden/forget (arm terracotta)/disconnect - (arm gold)/radio switch/ethernet toggle/doctor stream/speed-test-drives- - meters, toasts. Verified live on velox (DOCTOR streams, SPEED TEST sweeps - both dials then HOLD). Shipped in dotfiles 800ef60 with phase 3. -5. [X] Bluetooth panel: same treatment end to end (faceplate + power - switch, adapter chip, paired/nearby lamp rows, pair passkey flow, - rename via set-alias, forget arm, battery gauges + LOW BATT, DOCTOR / - SCAN keys, output). bt smoke rewritten. Shipped in two commits mirroring - net: dotfiles 5318b34 (GTK-free layer + engine gaps) and 66f03d9 (view + - interactions + smoke). rename lands on the bluez Alias via busctl - (set-alias has no MAC-addressed one-shot); verified live on velox (smoke - green end to end, screenshot matches the prototype). -6. [X] Live verification both panels on velox + all suites + smokes green; - summary of findings written to file; folded tasks closed; dead code - removed; session context finalized. |
