aboutsummaryrefslogtreecommitdiff
path: root/docs
Commit message (Collapse)AuthorAgeFilesLines
* docs: correct the audio-doctor spec's timeout claim, close Phase 0Craig Jennings11 hours1-8/+13
| | | | | | | | | | | | | | The draft said build_status had no pactl timeout and froze the panel. Driving it disproved that: pactl.run defaults to timeout=8 and raises PactlTimeout, so the panel degrades. The real defect was narrower and is now fixed. Two of build_status's four reads sat outside its degrade guard, so a server that answered the device lists and then stopped answering raised out of a function contracted to return ok:False, and waybar's audio module died rather than dimming. Corrected in place with the reasoning, rather than dropped, since a spec that quietly loses a wrong claim teaches nothing about why it was wrong.
* docs: spec the audio panel doctorCraig Jennings12 hours1-0/+258
| | | | | | | | | | | | | | | | | | | | Answers the four questions the request asked, from a live survey rather than from memory. There is no PulseAudio: the stack is pipewire, wireplumber, and pipewire-pulse, all user-scope, so no remedy in this feature needs sudo — which is why it mirrors the net panel's doctor rather than the maintenance console's privileged verb table. Two findings shape the design. pactl hangs against a server that accepts and never answers, which is exactly the fault a doctor exists to diagnose, so every probe is bounded. And the panel cannot diagnose itself, because pactl is the layer most likely to be down — the probes read systemctl and pw-dump before they touch it. Filed the panel's own missing timeout as a separate bug. It freezes the audio panel today, independently of any doctor. Seven decisions left open; the spec is DRAFT and nothing gets built until they close.
* docs: remove personal paths and false co-authorship before releaseCraig Jennings14 hours7-17/+17
| | | | | | | | | | | | | | | | | The repo carries an open task to publish it, and docs/ leaked things a clone could neither use nor should see. Absolute paths under one user's home become the repo root, a home-relative path, or a named variable, so the snippets stay runnable for anyone. The testinfra example takes its user from an env var instead of hardcoding one. References into a private sibling project and into the gitignored tooling directory are replaced by what they mean; as written they were dead links in any clone but the author's. Five documents claimed a co-author who is not a person. An #+AUTHOR line survives conversion into docx, a wiki page, or a PDF, so it is worth being exact about: these documents have one author.
* docs: move the host inventories into the org-roam knowledge baseCraig Jennings15 hours7-931/+167
| | | | | | | | | | | | | | | | | | | | The four host capability inventories, the TrueNAS hardware specs, and the ratio USB/xHCI record now live as roam nodes under ~/org/roam/hardware/, linked from the Homelab Hardware Inventory index. The copies here are gone. Carried rather than pointed at. A pointer keeps one canonical copy, but a third project that discovers a durable hardware fact would then have to write into this repo to record it, which the cross-project rules forbid — so the fact would land in an inbox instead of on the device's page. Moving keeps one canonical copy without closing the write path. system-health-check.org resolves a host's inventory by its #+HOSTNAME: keyword under ${ROAM_DIR:-$HOME/org/roam}/hardware/, never by filename: a node's timestamp prefix does not survive a rename. A host with no roam clone takes the same NO INVENTORY FILE path it always did. strix-soak-watch.org lands here from home, beside the workflow whose Phase 3 invokes it. It is a workflow, not an inventory page.
* chore: health-check updates (workflow note, audit stamp, todo entries)Craig Jennings45 hours2-2/+2
|
* chore: close maintenance-console build, flip spec to IMPLEMENTEDCraig Jennings46 hours1-2/+3
|
* docs: adopt system-health-check workflow and host inventoriesCraig Jennings46 hours6-0/+1948
| | | | | | | | The workflow and the four host capability inventories move here from the home project. System maintenance is archsetup's domain, and this puts the thresholds TOML and both of its consumers in one repo. The workflow's prose severity rules now cite the installed TOML keys, and the TOML wins on disagreement. Inventory paths point at docs/homelab-inventory/. A note routes routine ratio/velox checks to the maint CLI, leaving this workflow for the non-Arch hosts and forensic deep dives. Only the #+HOSTNAME: capability inventories moved (ratio, velox, mybitch, truenas, plus the truenas hardware-specs asset they link). The personal gear records stay in home, and the home-side removal is handed off through its inbox.
* chore: close build Phase 11, add fidelity phase 11bCraig Jennings2 days1-0/+3
|
* docs: maintenance-console spec to DOING + build decompositionCraig Jennings2 days1-0/+346
| | | | | | The spec encodes the converged 2026-07-06/07 design as 13 decisions and 13 phases (CLI-first maint package, four-layer test strategy) and carries its full review trail inside, live-verified on ratio. Late calls landed during authoring: the bar glyph replaces custom/sysmon, doubles as the laptop battery display, and keeps the btop scratchpad on right-click. todo.org now carries the build: 13 phase tasks under a SPEC_ID-stamped parent, the manual-testing collector, the flip-to-IMPLEMENTED closer, and the vNext deferral.
* docs: add maintenance console design + interactive prototypesCraig Jennings2 days10-0/+5666
| | | | | | | | The design doc replaces the install-health framing in system-monitor-design-ideas.org with a maintenance console: dense metric subpanels behind a persistent selector, a doctor that streams into a results wall, determinate remedies only (guard-armed updates, curation lifecycles for noise, listeners, containers, and orphans), rotary band selectors on the tall subpanels, and a CLI-first build with a four-layer test strategy. Every decision is dated in the doc. Prototypes A-E5 keep the exploration path: five divergent layouts converging into E5, a fully interactive simulation whose GOOD/BAD snapshots become the build's test fixtures. todo.org gains the spec-create task, the panel keybinding-family task, and scope notes on the net/bt doctor retrofit.
* docs: PTT waybar-indicator prototypeCraig Jennings3 days1-0/+133
| | | | | | | Design prototype for the push-to-talk bar indicator: an always-present outline tag (account-voice glyph) left of the mic — dim grey when off so the bar never reflows, gold + glow when armed, brighter while transmitting, click-to-toggle. The states and icon were settled against this before wiring it into waybar.
* docs: per-device activity lamp shipped (audio metering option 3)Craig Jennings4 days1-2/+8
| | | | Records Phase 5 of the audio signal-metering spec: a per-device three-state activity lamp on each output/input row, so the panel shows which specific device is carrying audio, not just the default. GUI-only over the per-device state field already in the engine. Adds the live-check to the manual checklist; the per-row live level meter stays the deferred vNext.
* docs: audio-panel signal-metering spec (implemented)Craig Jennings4 days1-0/+226
| | | | Records the signal-metering layer for the audio panel: a three-state activity lamp from the pactl state field, and a windowed peak meter feeding the VU needles, keyed per device so per-device metering stays a later GUI-only change. Two review rounds before build (the first caught a parec sample-rate-vs-update-rate bug verified live); marked implemented across four dotfiles commits. Live-eyeball checks filed as a manual-testing checklist.
* docs: archive shipped panel-bug batch; track system-monitor design captureCraig Jennings4 days1-0/+1008
| | | | todo-cleanup moved the closed instrument-console panel-bug batch (net/bt/audio) to Resolved. Bring the system-monitor design-ideas capture under version control.
* docs(timer): record the shipped redesign and flip spec to IMPLEMENTEDCraig Jennings5 days4-47/+1925
| | | | | | The timer-panel UI/UX redesign built and shipped to dotfiles across five phased commits. This captures the archsetup-side records. The three design prototypes (the three-directions study, the hero-rack iteration, and the final) land under docs/prototypes, which the spec's Prototype iterations section links. The spec flips DOING to IMPLEMENTED with a history line summarizing the build. The manual-testing checklist is rebuilt around the redesigned panel (repeat timers, recurring alarms with snooze and a ringing state, the configurable pomodoro cycle, the stopwatch sweep dial, locked presets, and bar-tooltip parity), and the two obsolete fuzzel-dialog tests are marked superseded. A dated entry under the closed feature task records the redesign.
* docs(todo): timer panel shipped — spec IMPLEMENTED, task closed, manual ↵Craig Jennings5 days1-3/+4
| | | | | | tests filed The timer GTK panel built and shipped to dotfiles (4 commits). Flipped the spec to IMPLEMENTED, closed the Timer GTK panel task, and filed the live-verification checklist (bar-opens-panel, create/validate, fire-time sort, pause/cancel/promote, stopwatch lap/stop/save, 10-cap + live countdown) under Manual testing and validation.
* docs(spec): timer panel to DOING, fold in the cj-comment build scopeCraig Jennings5 days1-2/+23
| | | | Craig directed the build. Consolidated the four resolved decisions with his cj input from the sibling timer-module spec: GTK app in the instrument-console look, a queue/output-wall auto-sorted by fire time, stopwatch lap/stop with saveable runs, notify integration, 5/25-min configurable defaults, up to 10 timers, and widget-gallery elements. wtimer stays the engine; the bar's fuzzel creation flow retires and the module opens the panel.
* docs(spec): fold the wallpaper-manager input into desktop-settings scopeCraig Jennings5 days1-0/+7
| | | | Craig's 2026-07-04 roam input on the panel's open "few other things" question: it gathers the mouse/trackpad, no-sleep, and auto-dim toggles and adds a wallpaper manager (where the displaced waypaper lands) with its own depth — multiple source directories, persistent switching, and a sunup/sundown day-night pair. Flagged that the wallpaper piece may warrant its own sub-spec.
* docs: gather panel design prototypes into docs/prototypes/Craig Jennings6 days8-3/+2720
| | | | | | I gathered all five self-contained HTML/CSS design prototypes into one home: the instrument-console pair (moved from assets/), plus the net-panel rescan, sound panel, widget gallery, and waybar redesign (moved out of working/). Added a README index and updated every inbound link: build summary, the instrument-console and audio specs, and todo.org. Also fixed a broken link the earlier sort left in the build summary. It still pointed at the instrument-console spec's old docs/design/ path after the move to docs/specs/.
* docs(spec): restore faceplate design edits to desktop-settings specCraig Jennings6 days1-4/+25
| | | | The specs were sorted into docs/specs/ on another machine, from a copy of this one that predated the 2026-07-03 panel-family design discussion. That lost the faceplate refinements. I re-applied them: the instrument-console faceplate aesthetic in place of the plain palette note, the audio/bt Kin row, a dated Status line, and the still-open "few other things" scoping question. The four decisions that pass resolved stay closed. Only the question it never addressed comes back.
* docs(spec): resolve timer and desktop-settings panel decisionsCraig Jennings6 days2-44/+47
| | | | | | Both DRAFT panel specs had open design decisions blocking their builds. I resolved them. Timer panel: standalone rather than folded into desktop-settings, the fuzzel flow retires once the panel lands, the preset chips gain 10m/30m/2h, and live state comes from a new wtimer watch mode instead of 1s polling. Desktop-settings panel: auto-dim and airplane collapse into the panel while touchpad and caffeine stay on the bar, Super+Shift+G opens it, the code lives in dotfiles settings/ beside net/, and the brightness slider floors at 5%. Both stay DRAFT and decision-complete, ready for a spec-review before build.
* docs(spec): sort formal specs into docs/specs/ with lifecycle statusCraig Jennings6 days7-0/+42
| | | | Moved the seven formal specs from docs/design/ into docs/specs/, each stamped with a lifecycle status heading: four IMPLEMENTED (bluetooth, net-other-interfaces, audio, instrument-console), one CANCELLED (file-manager-swallow), two DRAFT (desktop-settings, timer). Rewrote the seven todo.org links to the new paths. The two -spec.org files without the spec spine (waybar-network-module, waybar-timer-module) stayed in docs/design/ as notes.
* chore(todo): close audio panel spec IMPLEMENTED, file manual testsCraig Jennings6 days1-0/+160
| | | | The audio panel got built end-to-end in a no-approvals speedrun (the code lives in the dotfiles repo). This is the archsetup-side bookkeeping: the spec flips DRAFT to IMPLEMENTED with all five Decisions resolved, the todo task closes with the resolution, and the live-eyeball checklist (default switching, faders, master quick-mute, and push-to-talk in a real meeting) lands under Manual testing and validation.
* chore(todo): instrument-console rebuild complete, spec IMPLEMENTEDCraig Jennings7 days1-8/+19
| | | | Closed out the panel rebuild. Both panels verified live on velox: 46 suites and both AT-SPI smokes green, the dead-code removal shipped in dotfiles f4e688e, and the render carries the phase-3/4/5 screenshots since no view code changed. Flipped the parent task and its three folded children (network panel redesign, bt switch placement, bt rename) to DONE, ticked the spec's last phase, and flipped the spec to IMPLEMENTED. Filed the approved prototype and the build summary flat into assets/ with dated names, updated the inbound links, and dropped the working dir. The real-device bt interactions (pair, rename, connect, forget, discoverable, power, low-batt badge) can't be auto-driven, so they're a manual-test checklist.
* chore(todo): bt panel instrument-console shipped — phase 5 of the rebuildCraig Jennings7 days1-2/+6
| | | | | | Ticks spec phase 5 and records the two-commit bt rebuild (dotfiles 5318b34 layer + 66f03d9 view). Phase 6 (live verify + close-outs + IMPLEMENTED) remains. Claude-Session: https://claude.ai/code/session_013xt96EetpueCFriY4jGyfw
* chore(todo): net panel instrument-console shipped — phases 3+4Craig Jennings7 days1-5/+9
| | | | Ticked spec phases 3 and 4 (net view rebuild + interactions, dotfiles 800ef60) and logged the dated todo entry. Phases combined into one commit because a view-only intermediate is a broken panel. BT panel (phase 5) next.
* chore(todo): net console layer shipped — phase 2 of the panel rebuildCraig Jennings7 days1-1/+1
| | | | | | Tick spec phase-2 checkbox and record the dotfiles 81ec9c3 build (net GTK-free presenter layer + engine verbs) as a dated entry under the instrument-console parent task. Claude-Session: https://claude.ai/code/session_013xt96EetpueCFriY4jGyfw
* feat(spec): instrument-console rebuild spec for both panels, task wiringCraig Jennings7 days1-0/+139
|
* docs(spec): swallow pattern reassigned — the file manager is dirvish, not ↵Craig Jennings7 days1-2/+12
| | | | | | nautilus Craig corrected the target: Super+F opens the dirvish popup (an Emacs frame), so the swallow belongs in elisp, where it's strictly better — Emacs launches the viewer, so a directly-spawned handler plus a process sentinel gives exact hide/restore and a failure notify, no window-event heuristics. Spec cancelled with the gio double-fork finding kept for reference; task closed as reassigned.
* docs(spec): file-manager swallow pattern, native swallow ruled out by testCraig Jennings7 days1-0/+131
| | | | Hyprland's enable_swallow matches by PID ancestry, and nautilus's gio launch path orphans the handler process (verified live: the spawned viewer reparents to init while the launcher still runs). The spec designs an event-listener daemon on the IPC socket instead — swallow nautilus when a window opens while it's active, restore on that window's close. DRAFT with four decisions pending review.
* feat(vpn): wireguard config import for the NM migrationCraig Jennings7 days1-2/+10
| | | | scripts/import-wireguard-configs.sh imports the seven Proton configs into NetworkManager with autoconnect forced off. Each config stages through a wgpvpn.conf temp copy (NM's import name must be a valid interface name; several config names exceed the 15-char limit) and is renamed by the UUID parsed from the import output, so a stray same-named connection can't be hit. A leftover wgpvpn connection — a run that died between import and rename, autoconnect still armed — makes the script refuse to run. 10 tests over a fake nmcli; velox migration verified (all seven wireguard, autoconnect no). The tunnels spec is implemented: all six phases shipped.
* docs(spec): tunnels spec reviewed READY and decomposed to DOINGCraig Jennings7 days1-2/+11
|
* feat(bluetooth): prove the fresh-install panel wiring in VM assertionsCraig Jennings8 days1-2/+23
| | | | Phase 5 needed no new install code: the waybar module, keybind, and shared panel css ride the dotfiles hyprland tier the installer already stows, and sudoers is covered by the existing grant. I added hyprland-gated assertions instead: bt bins stowed executable, custom/bluetooth in the waybar config, the bt-panel bind in hyprland.conf, panel.css present. This closes the bluetooth-panel task and flips the spec to implemented.
* feat(bluetooth): retire blueman, assert the swap in VM testsCraig Jennings8 days1-0/+18
| | | | I dropped blueman from the desktop_environment bluetooth loop (bluez + bluez-utils stay) and added the VM assertions: bluetooth stack installed, blueman absent as the retirement regression guard. No new sudoers rule was needed for bt-priv, since the existing blanket grant already covers systemctl restart bluetooth.
* docs(spec): bluetooth phase 3 shipped, visual batch closedCraig Jennings8 days1-0/+18
|
* docs(spec): net-panel keyboard claims verified live, false ones struckCraig Jennings8 days1-2/+7
|
* docs(spec): bluetooth phase 2 shipped, AT-SPI smoke deferred until meeting endsCraig Jennings8 days1-0/+17
|
* docs(spec): bluetooth phase 1 shipped, pw-dump ground truth noted, css ↵Craig Jennings8 days1-1/+19
| | | | factoring moved to phase 2
* docs(spec): bluetooth panel reviewed READY, decomposed to DOING; net-panel ↵Craig Jennings8 days1-3/+55
| | | | | | kbd-nav probe deferred Fused reviewer + responder pass: gate passed (all four decisions resolved, phases decomposable, bluez 5.86 verbs verified), two non-blocking findings recorded and dispositioned inline (empty-state/no-adapter copy, eventlog + redaction carry-over — both clone the net-panel donor). Build parent now carries the five phase sub-tasks and the spec's ID. The keyboard-nav verification task logs its code-level findings; the live AT-SPI probe waits until Craig's meeting ends (no test windows or synthetic input while zoom holds focus).
* docs(spec): bluetooth panel decisions resolved, profile switching in v1Craig Jennings8 days1-37/+46
| | | | Craig approved all four decisions (pair implies trust+connect, blueman retired outright, battery in captions, 8s scan bursts) and pulled audio-profile switching into v1: the doctor's audio step gains a one-click Switch to A2DP repair over wpctl, and a degraded profile shows in the device caption.
* docs(spec): bluetooth panel initial spec, net-panel UX findings filedCraig Jennings8 days1-0/+317
| | | | The bluetooth panel spec clones the net panel's stack: a GTK-free engine over bluetoothctl one-shot verbs, a GTK4 layer-shell popup, two tabs with ASCII mockups, a diagnostics doctor chain, and four decisions awaiting review. The UX pass surfaced two net-panel findings, filed as tasks: error toasts auto-dismiss before an error can be read, and the V2 spec's keyboard-navigation claims aren't verifiably implemented.
* docs(spec): resolve the four net-panel decisions, tunnel badge joins v1Craig Jennings8 days1-27/+62
| | | | Craig answered all four decision TODOs in the tunnels spec. The bar badge moves from optional to v1. All seven Proton WireGuard configs import cleanly into NetworkManager (only the six import-safe directives), so wg-quick drops out of the spec. Proton runs through the official proton-vpn-cli (stable since April, Arch extra repo) instead of the GTK app, which the install drops. The implementation phases pick up the badge, the package swap, and the one-time config import.
* docs: timer-panel spec (DRAFT); log tonight's roam-driven waybar fixesCraig Jennings8 days1-0/+113
|
* docs(design): specs for net-panel tunnels and settings panel; animation ↵Craig Jennings8 days3-0/+318
| | | | | | feasibility Two DRAFT specs — tailscale/VPN/wireguard surfaces in the net panel, and the desktop-settings dropdown panel on the net panel's Blueprint/GTK4 stack — each with open decisions marked for review. The expansion-animation note concludes the collapse-by-reload mechanism can't animate (no widget survives the SIGUSR2 rebuild) and recommends closing that task.
* docs: fold Craig's cj comments into the network module specCraig Jennings9 days1-4/+55
| | | | Set the notification format (title "Networking", label then string), add VPN kill-switch detection and correction off the deferred-vpn branch, and make the no-terminal rule absolute for the module UX. Filed a VERIFY for the one tension: the dead-GUI console-recovery path versus no terminals.
* docs: fold the fourth spec review into the network module specCraig Jennings9 days1-4/+263
| | | | Dispositioned all nine fourth-review findings (8 accept, 1 modify) and wove them into a new "V2 panel UX" section: a single nav target, Saved/Available-now/Wired connection groups, join-from-row instead of an Add page, the supported-auth join matrix, progressive loading, future-tense verified Forget, a findable redacted diagnostics report, and the Waybar visual contract. The modify kept the full speed test under Performance per the prior decision while accepting an inline latency probe stored in the doctor report. Findings cookie now reads complete.
* docs: bring network module spec current + add diagnostic verbose-captureCraig Jennings10 days1-44/+222
| | | | | | The spec had drifted behind the code and the redesign. Marked Phases 1-3 shipped, recorded the native captive-login engine and the live-testing portal UX fixes, and folded in the V2 redesign: no terminals, the passwordless sudo-helper, verify-every-action, the Connections/Diagnostics/Performance nav, and the full failure-mode catalog moving to the task. Added the automatic diagnostic verbose-capture feature. On a failing diagnose it elevates the underlying stack (NetworkManager, resolved, wpa_supplicant) to debug, captures the journal and dmesg window, restores with a guaranteed crash-guarded path, and writes a redacted bundle. A manual Debug on/off toggle covers intermittent failures. The redesign task gains a child for it.
* docs: capture captive-portal login learnings + close the ZFS taskCraig Jennings10 days1-0/+89
| | | | File the captive-portal-login design doc from the 2026-06-30 Hyatt saga — the actual mechanism (system DoT + browser DoH both bypass the hotel's redirecting DNS; plain DNS is what works), the working hotel-wifi script, and the plan to make it a first-class net-panel action — plus a [#B] feature task to bake it in. Also close the ZFS pre-pacman snapshot task: the installer step shipped and the ZFS VM install passed 97/0 with the new hook assertion.
* feat: install pre-pacman ZFS snapshot hook on ZFS-root systemsCraig Jennings10 days1-7/+26
| | | | | | archsetup took sanoid from install-archzfs but never ported the pre-pacman snapshot hook, so a ZFS-root install had no transaction-triggered rollback point — the working setup only existed as a hand-placed script on velox, lost on reinstall. Add configure_pre_pacman_snapshots(): a PreTransaction pacman hook plus a self-pruning script that keeps the 10 most recent pre-pacman snapshots (sanoid ignores them — they aren't autosnap_ names). It's gated to ZFS-root and runs late in boot_ux, so the hook doesn't fire during the install's own package operations and the first snapshot is the fresh system. The script ships as scripts/zfs-pre-snapshot, made ZFS_PRE_* env-overridable so the pruning logic is unit-testable. Unit tests drive it against a fake zfs (creates a snapshot, prunes the oldest past KEEP, ignores non-pre-pacman snapshots, honors the lockfile interval, warns on failure); a Testinfra test asserts the hook and script land on a ZFS install; the orchestrator test pins the new boot_ux substep.
* docs: file ZFS pre-pacman snapshot installer step from home handoffCraig Jennings10 days1-0/+87
| | | | The pre-pacman snapshot script accumulated 53 unpruned snapshots on velox since April — nothing prunes them, and Sanoid ignores the non-autosnap_ names. The fix is a self-pruning script (KEEP=10), but the home handoff confirmed the live script isn't archsetup-authored (it's hand-placed on velox), so incorporating it is a net-new ZFS-root installer step rather than a patch to an existing one. Filed as a [#B] feature with the design notes and the script preserved in docs/design, since it still needs the trigger hook file and a ZFS-root VM test before it can land.