aboutsummaryrefslogtreecommitdiff
path: root/todo.org
Commit message (Collapse)AuthorAgeFilesLines
* chore: record the shared privilege model landing (panelkit)Craig Jennings7 hours1-2/+5
|
* chore: close bt doctor Phase 1 as a dated log entryCraig Jennings7 hours1-2/+2
|
* chore: close bt doctor Phase 0 as a dated log entryCraig Jennings7 hours1-2/+2
|
* chore: close net doctor Phase 0 as a dated log entryCraig Jennings8 hours1-2/+2
|
* chore: decompose net + bt doctor specs into build tasks, flip DOINGCraig Jennings8 hours1-0/+28
| | | | | | | | I ran spec-response Phase 6 on both READY specs. Each gets a SPEC_ID-bound parent task in todo.org with one child per implementation phase. Both specs flip from READY to DOING. Only the read-only detection phases are buildable now, so they're marked solo: net Phase 0 (the control-plane probe) and bt Phases 0-1 (the two probes plus the firmware-hint Guide verdict). The privileged phases stay lower priority and carry a note: they're gated on the shared cross-panel run-time privilege model that doesn't exist yet. Shipping them before the Confirm floor would let --fix run root ops via passwordless sudo ungated. I held off writing the manual-testing checklists. The phases that need live or reboot verification are the blocked ones, so their checklists would be planning work that can't start yet.
* chore: file follow-up task for the net diagnostics redaction gapCraig Jennings8 hours1-0/+5
| | | | Split out of the net-doctor-expansion spec review: connection names and SSIDs leak into the copyable report and --json engine-wide, so it wants one systemic pass rather than being solved per-verdict.
* docs: add the run-time privilege model as a doctor decisionCraig Jennings11 hours1-0/+7
| | | | | | | | The input and output doctor reaches firmware, ALSA saved state, modprobe, and packages, which need root. The parent spec decided "no sudo anywhere," correct when the feature was user-scope PipeWire. This supersedes that. The doctor resolves its privilege at run time from three signals: passwordless sudo (sudo -n true, which never hangs), a tty to prompt at, and whether it is the GUI panel. Four remedy classes follow. Auto is user-scope and runs anywhere. Privileged needs sudo, so it runs where passwordless sudo exists, prompts on a CLI, and degrades to Guide otherwise. Reboot-tail runs the applicable part, then instructs the reboot. Guide is physical, BIOS, or wait-for-upstream. Passwordless sudo is not consequence-free, so every Privileged and Reboot-tail remedy defaults to Confirm or Arm, never silent Auto. This was Craig's call, and he wants it as a cross-panel standard. I filed a task to factor the privilege resolution into a shared helper the net, bluetooth, maint, and audio doctors all use.
* docs: spec the audio doctor's input side, one doctor per directionCraig Jennings24 hours1-0/+15
| | | | | | | | | | | | The doctor never examines the microphone. diag collects default_source and default_source_present, the classifier reads neither, so a muted mic, a stale default source, and a mic the sound server can't see all classify as healthy. Chrome losing the mic this morning surfaced it: the stack was genuinely fine and the doctor had nothing useful to say. The design grew past the gap in one conversation. An empty source list is normal on a mic-less desktop and a failure on a machine that should have one, and no probe can tell those apart. The missing fact comes from the user's finger: a doctor key on each of the OUTPUTS and INPUTS section headers, where pressing the input one asserts a mic should exist. That retires the DOCTOR header key I shipped hours earlier, and it dissolves the precedence question a single classifier would have faced. A new probe tier sits below PipeWire. /proc/asound lists capture-capable cards, needs no package, spawns no process, and can't hang, so it separates "the software lost a microphone the kernel sees" from "nothing is plugged in". Push-to-talk stays as it is. It mutes the source, the one state where the server guarantees nothing is captured. A link-based push-to-talk fails open, and a crash mid-hold is a hot mic reading as muted. The doctor reads ptt.read_state() instead of guessing. Four decisions are open. Three are closed.
* docs: close the audio-doctor spec and its taskCraig Jennings27 hours1-1/+21
| | | | | | | | The doctor shipped end to end, so the spec goes to IMPLEMENTED and the task closes with a dated record of what landed. Three things the Decisions did not anticipate are written into the history rather than left for a reader to infer. A tenth verdict for missing tooling, because an absent pactl is an unobserved stack and not a broken one. A re-probed marker between a fix run's two row blocks. And DIAGNOSE as the read-only key's name, which Craig settled after asking why this panel carries two keys where the net panel carries one. I filed the wall-controls convergence as its own task. Craig wants the net panel's copy and close pair on every output wall, and today no two of the four agree.
* docs: close the audio-doctor decisions, spec is READYCraig Jennings41 hours1-1/+1
| | | | | | | | | | | | | | | | | All eight decisions resolved. DOCTOR is a section-header key; CLI-first with the GUI as a face; hung and dead are two verdicts sharing one remedy; the remedy tiers stand as drafted; a stream-active guard refuses the audible remedies and is overridable by pressing again; xruns stay out of v1. Two consequences the questions did not make obvious. Taking the guard is what lets the pipewire-pulse restart stay at Confirm — the danger lives in the state of the machine, not the identity of the remedy. And the guard must read stream state from pw-dump rather than pactl: the remedies it protects are the ones you reach for when the Pulse layer is dead, so a pactl-fed guard would go blind exactly when it is needed. Tier 4 drops its xrun probe to match the decision, rather than leaving the probe list contradicting the answer.
* docs(todo): close the minimal-tier zsh PATH gapCraig Jennings41 hours1-1/+6
| | | | | Fixed in dotfiles c6a7878. Recorded that the test asserts the tier invariant rather than the file, since a per-file fix is what missed the tier.
* docs(todo): task-review pass over the oldest-unreviewed batchCraig Jennings42 hours1-7/+19
| | | | | | | | | | | | Seven tasks walked. Three carried a topic tag but no type tag, so they were invisible to any filter that asks what kind of work they are. The net/bt realtime-lamp retrofit gains :solo:. Its scope question was settled in July, and what remains is buildable and testable without a decision. Priorities held on review. The zsh PATH gap and the zfs base-image failure both already sit where the severity-by-frequency read puts them, and the keybinding family still turns on a design choice nobody has made.
* docs(todo): one manual-testing parent, and remove the last false bylinesCraig Jennings42 hours1-13/+19
| | | | | | | | | | | | | | The maintenance console's in-person checklist was a second top-level "Manual testing and validation" task. It is now a child of the one parent, so the pending checks live in a single place rather than two the agenda shows apart. The audio doctor moves to [#B]. Its spec is written and Phase 0 shipped; six decisions are all that stand between it and a build, which is active backlog rather than parking lot. Four dated artifacts still credited a co-author who is not a person. They are records, but they are tracked and would publish, so they carry one author now like everything else.
* docs(todo): reconcile the open tasks against realityCraig Jennings42 hours1-62/+93
| | | | | | | | | | | | | | | | | | | | Archived the nine tasks that shipped today. Verified the rest against the world rather than against memory, and recorded what moved. The telega watch item has not recurred: zero assertions in the server log, and the newest coredump predates the fix. It is a watch item with no defect behind it, so it drops to [#D] per the severity-by-frequency read. The net module's Phase 4 is filed and waiting on the dotfiles project, which already tracks it — tagged blocked rather than re-sent. The manual-testing container carried no priority and no type tag, which kept the project's largest live collection of pending checks out of the agenda entirely. It has both now, plus a check for the one thing today's work cannot verify without a reboot. The release epic gained what the docs scrub landed, and what it uncovered: four tracked files still name a co-author who is not a person.
* docs: correct the audio-doctor spec's timeout claim, close Phase 0Craig Jennings42 hours1-2/+6
| | | | | | | | | | | | | | 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 Jennings42 hours1-1/+4
| | | | | | | | | | | | | | | | | | | | 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(todo): close the roam-inbox batchCraig Jennings45 hours1-8/+31
| | | | | | Eight tasks from the 2026-07-09 roam sweep, each with what landed and where. The signal-count task turned out to be a semantics bug rather than a counting one, and the session-identifier task was tmux, not waybar.
* docs: move the host inventories into the org-roam knowledge baseCraig Jennings46 hours1-0/+40
| | | | | | | | | | | | | | | | | | | | 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(todo): archive completed and cancelled tasksCraig Jennings2 days1-234/+56
|
* chore(todo): file retention-repair GUI gap taskCraig Jennings3 days1-0/+5
|
* chore: health-check updates (workflow note, audit stamp, todo entries)Craig Jennings3 days1-0/+5
|
* chore: close maintenance-console build, flip spec to IMPLEMENTEDCraig Jennings3 days1-8/+9
|
* chore: close build Phase 12 in todo, file zfs DKMS image bugCraig Jennings3 days1-2/+5
|
* chore: log maint refactor sweep in todoCraig Jennings3 days1-0/+3
|
* chore: close build Phase 11b in todoCraig Jennings3 days1-2/+3
|
* chore: close build Phase 11, add fidelity phase 11bCraig Jennings3 days1-2/+6
|
* chore: close build Phase 10 in todoCraig Jennings3 days1-2/+3
|
* chore: close build Phase 9 in todoCraig Jennings3 days1-2/+3
|
* chore: log build Phase 9a in todoCraig Jennings3 days1-1/+4
|
* chore: close build Phase 8 in todoCraig Jennings3 days1-2/+3
|
* chore: close build Phase 7 in todoCraig Jennings3 days1-2/+2
|
* chore: close build Phase 6 in todoCraig Jennings3 days1-2/+2
|
* chore: close build Phase 5 in todoCraig Jennings3 days1-2/+2
|
* feat: Phase 4 threshold keys (logs, memory, power)Craig Jennings4 days1-2/+2
|
* feat: Phase 3 threshold keys, arch-audit dep, btrfs scrub timerCraig Jennings4 days1-2/+2
| | | | | | The thresholds TOML gains packages.keyring_warn_days, the [security] cve_min_warn floor, [systemd] expected_timers_extra, and two curation tables: kept_orphans (deliberate keeps the orphan count skips) and qkk_known (fnmatch paths for -Qkk mismatches that are config knowledge, like the resolver symlink and the pacman-contrib file this script edits itself). The installer now pulls arch-audit (the console's CVE source) and enables btrfs-scrub@-.timer on btrfs installs. Ratio had the scrub timer enabled out-of-band, so a fresh install would have warned "missing" forever on the console's maintenance-timers check. The todo Phase 3 task closes as a dated log entry.
* feat: storage threshold keys + close build Phase 2Craig Jennings4 days1-2/+2
| | | | The TOML gains the Phase 2 storage bands (btrfs unallocated floor, SMART wear/temp, fstrim staleness, top-consumers scan knobs). Collectors shipped in dotfiles; installed copies refreshed on ratio and velox.
* feat: seed maintenance-thresholds.toml + close build Phase 1Craig Jennings4 days1-2/+2
| | | | | | The TOML carries every severity value the console and the system-health-check workflow grade against (the workflow's hard-won numbers: the 10 GB cache trigger, the 35/60-day scrub bands, the snapper TIMELINE limits from the 2026-05-26 /home lesson) plus the shipped curation defaults. Canonical home is configs/ here. Installer wiring stays Phase 13, so for now the file is hand-copied to ~/.config/archsetup/ on ratio. Phase 1 of the build landed in dotfiles (43a39ac): maint package skeleton, two-layer thresholds engine, capability probe, and the status contract with three pilot collectors, 48 tests. The todo phase task flips to its dated log entry.
* docs: maintenance-console spec to DOING + build decompositionCraig Jennings4 days1-2/+53
| | | | | | 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 Jennings4 days1-0/+13
| | | | | | | | 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: per-device activity lamp shipped (audio metering option 3)Craig Jennings5 days1-0/+7
| | | | 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 Jennings5 days1-8/+42
| | | | 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 Jennings5 days1-16/+15
| | | | 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(todo): close instrument-console panel bug batch (all 8 shipped)Craig Jennings6 days1-16/+15
|
* docs(todo): file instrument-console panel bugs from inboxCraig Jennings6 days1-0/+17
|
* docs(todo): fix Proton CLI sign-in command (signin, not login)Craig Jennings6 days1-1/+1
|
* fix(wireguard): replace dead Proton configs with a working setCraig Jennings6 days1-2/+2
| | | | | | The seven Proton configs imported April 10 completed the WireGuard handshake but Proton routed no data: DNS and traffic through the tunnel timed out on every server. Fresh configs from the Proton dashboard route data normally. That confirms the old keys were deauthorized account-side, not a local routing, firewall, or NetworkManager fault. Swap in three fresh configs (NL, US-CA, US-TX) and point the panel tunnels manual-test at the new connection names.
* chore(todo): archive completed waybar and timer tasksCraig Jennings6 days1-82/+33
| | | | The wrap archive pass relocated finished DONE/CANCELLED tasks out of Open Work — six into the Resolved section, four into the task archive — including the timer GTK panel now that the redesign shipped and its live testing settled.
* docs(timer): record the shipped redesign and flip spec to IMPLEMENTEDCraig Jennings6 days1-43/+62
| | | | | | 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 Jennings6 days1-6/+37
| | | | | | 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.
* chore(todo): file driver-health and collapse-glyph follow-upsCraig Jennings7 days1-0/+12
| | | | Two follow-ups from the 2026-07-04 net-panel/audio speedrun: a driver-health diagnostic tier for the net panel (the "adapter present but wedged" case beyond no-hardware), and replacing the waybar collapse triangle with a glyph that matches the instrument-console look (an aesthetic call, options to bring Craig first).