diff options
| -rw-r--r-- | docs/design/2026-07-14-undeclared-packages-evidence.org | 84 | ||||
| -rw-r--r-- | todo.org | 72 |
2 files changed, 136 insertions, 20 deletions
diff --git a/docs/design/2026-07-14-undeclared-packages-evidence.org b/docs/design/2026-07-14-undeclared-packages-evidence.org new file mode 100644 index 0000000..86fa0aa --- /dev/null +++ b/docs/design/2026-07-14-undeclared-packages-evidence.org @@ -0,0 +1,84 @@ +#+TITLE: Undeclared ratio packages — include/ignore evidence +#+AUTHOR: Craig Jennings +#+DATE: 2026-07-14 + +Evidence sweep for the "Review undeclared ratio packages for installer inclusion" task. Source: =make package-diff= run on ratio 2026-07-14 (64 explicit packages installed but not declared; the June run saw 62). Per package: pacman's description, what requires it (dependency vs standalone), and the install date. The include/ignore decisions are Craig's; the buckets below carry the default lean. + +Rerun =make package-diff= after any include pass to confirm the count drops. + +** Candidates to declare (30) +Explicitly installed apps and tools with nothing requiring them. Each needs Craig's include/ignore call. +- =aws-cli-v2= :: Universal Command Line Interface for Amazon Web Services (version 2) · installed 2026-04-25 +- =baobab= :: A graphical directory tree analyzer · installed 2026-07-08 +- =bats= :: Bash Automated Testing System · installed 2026-04-21 +- =blueman= :: GTK+ Bluetooth Manager · installed 2026-01-25 +- =drawio-desktop= :: Official Electron build of draw.io · installed 2026-07-08 +- =emacs= :: The extensible, customizable, self-documenting real-time display editor · installed 2026-05-03 +- =flatpak= :: Linux application sandboxing and distribution framework (formerly xdg-app) · installed 2026-06-13 +- =geeqie= :: Lightweight image viewer · installed 2026-07-13 +- =git-lfs= :: Git extension for versioning large files · installed 2026-04-24 +- =github-cli= :: The GitHub CLI · installed 2026-07-08 +- =hugo= :: Fast and Flexible Static Site Generator in Go · installed 2026-07-13 +- =imv= :: Image viewer for Wayland and X11 · installed 2026-07-13 +- =inform= :: The Inform 6 compiler · installed 2026-07-11 +- =lc0= :: UCI-compliant chess engine designed to play chess via neural network, specifically those of the LeelaChessZero project. · installed 2026-05-16 +- =ledger= :: Double-entry accounting system with a command-line reporting interface · installed 2026-04-25 +- =libreoffice-fresh= :: LibreOffice branch which contains new features and program enhancements · installed 2026-07-13 +- =minidlna= :: A DLNA/UPnP-AV Media server (aka ReadyDLNA) · installed 2026-05-16 +- =openai-codex= :: OpenAIs lightweight coding agent that runs in your terminal · installed 2026-07-13 +- =pacoloco= :: Pacman caching proxy server · installed 2026-07-08 +- =proton-vpn-gtk-app= :: ProtonVPN GTK app, Maintained by Community · installed 2026-07-08 +- =protontricks= :: Run Winetricks commands for Steam Play/Proton games among other common Wine features · installed 2026-05-09 +- =python-pip= :: The PyPA recommended tool for installing Python packages · installed 2026-06-04 +- =python-pipx= :: Install and Run Python Applications in Isolated Environments · installed 2026-07-08 +- =python-sphinx= :: Python documentation generator · installed 2026-04-29 +- =shortwave= :: Internet radio player · installed 2026-03-22 +- =spotify-launcher= :: Client for spotify's apt repository in Rust for Arch Linux · installed 2026-06-04 +- =tidal-dl-ng= :: A tool for downloading music and albums from TIDAL · installed 2026-01-30 +- =typescript-language-server= :: Language Server Protocol (LSP) implementation for TypeScript using tsserver · installed 2026-03-02 +- =whisper.cpp= :: Port of OpenAI's Whisper model in C/C++ · installed 2026-06-04 +- =zoom= :: Video Conferencing and Web Conferencing Service · installed 2026-07-08 + +** Dependencies of other packages (6) +Something installed requires these; leaving them to dependency resolution is the default lean. +- =blas-openblas= :: An optimized BLAS library based on GotoBLAS2 1.13 BSD (Provides BLAS/CBLAS/LAPACK/LAPACKE system-wide) · required by: gsl python-numpy suitesparse · installed 2026-05-16 +- =lc0-network-sm= :: Small network for lc0 chess engine, requires ~1.6 GB of memory, recommended for CPU usage. · required by: lc0 · installed 2026-05-16 +- =openblas= :: An optimized BLAS library based on GotoBLAS2 1.13 BSD · required by: blas-openblas lc0 libggml-git · installed 2026-04-25 +- =pkcs11-helper= :: A library that simplifies the interaction with PKCS11 providers for end-user applications using a simple API and optional OpenSSL engine · required by: openvpn · installed 2026-02-20 +- =proton-vpn-daemon= :: Daemons for Proton VPN Linux client (split tunneling service) · required by: proton-vpn-cli proton-vpn-gtk-app · installed 2026-05-05 +- =python-lyricsgenius= :: A Python client for the Genius.com API, that provides a simple interface to the song, artist, and lyrics data stored on Genius.com · required by: tidal-dl · installed 2026-01-25 + +** Libraries with no requirer (7) +The task's library watchlist: likely former dependencies now orphaned, or toolchain pieces. Lean: ignore unless a build recipe needs them pinned. +- =eigen= :: Lightweight C++ template library for vector and matrix math, a.k.a. linear algebra · installed 2026-04-05 +- =freerdp= :: Free implementation of the Remote Desktop Protocol (RDP) · installed 2026-07-08 +- =lib32-openal= :: Cross-platform 3D audio library, software implementation (32-bit) · installed 2026-05-12 +- =rust-bindgen= :: Automatically generates Rust FFI bindings to C (and some C++) libraries · installed 2026-07-08 +- =sane= :: Scanner Access Now Easy · installed 2026-02-24 +- =tk= :: A windowing toolkit for use with tcl · installed 2026-02-26 +- =webkit2gtk= :: Web content engine for GTK · installed 2026-05-03 + +** Structural (pacstrap / VM harness / kernel) (21) +Already excluded by the task's 2026-06-14 analysis; listed so the report matches the raw diff count. +- =archiso= :: Tools for creating Arch Linux live and install iso images · installed 2026-04-05 +- =base= :: Minimal package set to define a basic Arch Linux installation · installed 2026-02-12 +- =bridge-utils= :: Utilities for configuring the Linux ethernet bridge · installed 2026-01-26 +- =btrfs-progs= :: Btrfs filesystem utilities · required by: archinstall grub-btrfs libguestfs snap-pac snapper · installed 2026-05-12 +- =dnsmasq= :: Lightweight, easy to configure DNS forwarder and DHCP server · installed 2026-06-08 +- =efibootmgr= :: Linux user-space application to modify the EFI Boot Manager · installed 2026-05-10 +- =ex-vi-compat= :: The ex and vi commands based on vim's compatibility modes · installed 2026-02-06 +- =grub= :: GNU GRand Unified Bootloader (2) · required by: grub-btrfs · installed 2026-01-25 +- =libguestfs= :: Access and modify virtual machine disk images · installed 2026-07-08 +- =linux= :: The Linux kernel and modules · installed 2026-07-13 +- =linux-headers= :: Headers and scripts for building modules for the Linux kernel · installed 2026-07-13 +- =linux-lts= :: The LTS Linux kernel and modules · installed 2026-07-13 +- =linux-lts-headers= :: Headers and scripts for building modules for the LTS Linux kernel · installed 2026-07-13 +- =linux-lts-strix= :: The LTS Linux with Strix Halo PMFW VPE-idle-pg workaround patch kernel and modules · installed 2026-04-30 +- =logrotate= :: Rotates system logs automatically · installed 2026-04-19 +- =qemu-full= :: A full QEMU setup · required by: libguestfs · installed 2026-07-13 +- =sudo= :: Give certain users the ability to run some commands as root · required by: base-devel devtools · installed 2026-07-08 +- =virt-manager= :: Desktop user interface for managing virtual machines · installed 2026-01-26 +- =virt-viewer= :: A lightweight interface for interacting with the graphical display of virtualized guest OS. · installed 2026-01-26 +- =yay= :: Yet another yogurt. Pacman wrapper and AUR helper written in go. · installed 2026-07-08 +- =zram-generator= :: Systemd unit generator for zram devices · installed 2026-06-08 + @@ -62,6 +62,8 @@ New "Palette — design tokens" section above Controls: 33 tiles read live from Six period families defined (green = P1 phosphor built on =phos=, amber = P3 on the gold family, red = the nixie neon pulled out, blue = P4 white-blue, vfd = the marquee's =--vfd=, white = mono LCD), applied via scoped CSS vars with the shipped color as fallback — defaults are pixel-identical until a chip is clicked. Chips on the five clearly-screen widgets: R10 data matrix (amber), R17 CRT scope (green face), R19 waveform LCD (white), R31 radar (amber — the "in amber" one; green chip gives the classic PPI), N11 oscilloscope (green). Answers to the green question: the kit deliberately has four greens — phos #7fe0a0 (CRT trace), vfd #63e6c8 (marquee, blue-leaning), sevgrn #57d357 (LED), jewel-g #6fce33 (jewel lens); the phosphor-screen green is phos, not the others. Nixie left chipless: neon is only ever orange. Families live in gallery JS, not tokens.json — tokenize the winners once picked, the way amber earned its tokens. CDP-verified: recolors land on all five, interactions intact, zero exceptions. *** 2026-07-12 Sun @ 13:15:19 -0500 Added spec sheets to all 84 cards Every card now carries a collapsible "spec sheet" (a details element under the note) with up to 8 fields: input (always present, names the model — click ports everywhere including Emacs click-regions, drag needs a click/key idiom there, display widgets take no real input), solves, use (common vs specialty + where it shines), limits, origin, difficulty, prefer-when, and period (present on 41 of 84 — only where the component is clearly not timeless, e.g. nixie 1955-75 sits with keypads/telegraphs and clashes with VFD and LED seven-seg). Content lives in one INFO object keyed by card number; card() renders it. CDP-verified: 84/84 sheets present (missing-key check), fields render, zero exceptions. +*** 2026-07-14 Tue @ 02:00:49 -0500 Judged the two 2026-07-13 cross-needle references covered +The weather-station comfort meter is R56's form exactly (crossing lands in a printed categorical verdict; five zones vs R56's three is content, not mechanism). The SWR cross-needle meter is N13's defining mechanism (the crossing derives a number off printed iso-curves — forward/reflected watts → SWR). No new cards; both references stay filed in working/retro-stereo-widgets/references/. *** TODO Widget validation pass Craig validates every control via the card lamps (his worklist, not agent-checkable): click cycles off → amber → green, state persists per card in localStorage (key =gv-<no>=). Gate change with the option-1 approval (2026-07-12): the lamps no longer gate the widgets.js extraction (lossless, proceeds now) — they gate per-widget Emacs ports and the final catalogue blessing. When the pass completes, bake the final statuses into the gallery source. *** TODO Component classification taxonomy @@ -92,11 +94,12 @@ Restyle the audio panel's GTK CSS onto =tokens-waybar.css= + the banked composit After ~5 hand ports, weigh widget-level codegen with evidence (mechanical duplication vs judgment per port). Recorded as a dated decision in the spec; go spawns its own spec. *** TODO Flip the spec to IMPLEMENTED When the phases above close: status heading keyword → =IMPLEMENTED=, dated history line with the reason, Metadata =Status= mirror. Three lines, one file. -** TODO [#C] Org-capture float popup grows too large :bug:hyprland:quick:solo: +** TODO [#C] Maint live-refresh hairline replacement :feature:maint: :PROPERTIES: -:LAST_REVIEWED: 2026-07-13 +:LAST_REVIEWED: 2026-07-14 :END: -The org-capture float (confirmed by Craig, 2026-07-13) gets too large; it needs a max on its scale so it never exceeds a threshold — his guess is roughly X by 120 (from roam inbox, 2026-07-11). Fix shape: a maxsize windowrule on the org-capture float rule in the dotfiles hyprland config (archsetup owns dotfiles end to end). Pre-flight question: the exact cap values. Minor severity × most users, frequently = P3 = [#C]. +From the roam inbox (routed 2026-07-13): the memory-killer section seemed to update too often, and "it's a bit unclear what the line is doing; consider something else." Diagnosis (2026-07-14): the data cadence is already the requested 3s (gui live tier, _LIVE_SECONDS); the perceived churn is the live-refresh hairline — the 2px bar under the live sections that drains full-to-empty over each 3s window, redrawn at 150ms (gui._hair_tick, viewmodel.refresh_fraction). It exists to tell a stale board from a frozen one (2026-07-09), but it reads as constant unexplained motion. Design call for Craig: replace the draining line with something whose meaning is legible — candidates: a dot that blinks once per refresh, a "3s" age caption that only appears when refresh is overdue, slowing the drain redraw, or dropping the indicator on live tiers and keeping it only when data goes stale. Keep the stale-vs-frozen distinguishability that motivated the hairline. + ** TODO [#B] Net doctor expansion v1 — VM live verification :feature:dotfiles:network: :PROPERTIES: :SPEC_ID: ce29b103-ed9d-4f56-bf8c-9ed8fe680ff3 @@ -118,6 +121,12 @@ On dotfiles main (=12e3e76=, pushed). =gather_context= derives an auth cause on *** 2026-07-12 Sun @ 09:14:00 -0500 Flipped the net spec to IMPLEMENTED and logged the vNext items Spec status heading now IMPLEMENTED (dated history line + Status mirror); all four phase headings DONE. vNext items (flaky/drops cluster, DoT/DNSSEC verdict, profile hygiene) logged as the "Net doctor vNext" task. The privileged-fix live halves remain with the VM live-verification sub-task and the manual-testing checklist — findings there come back as bugs. +** TODO [#C] Net panel speedtest history :feature:dotfiles:network: +:PROPERTIES: +:LAST_REVIEWED: 2026-07-14 +:END: +From the roam inbox (routed 2026-07-13): the networking panel should track speedtests over time with appropriate info. Shape: persist each SPEED TEST result (timestamp, down/up, latency, server) to a small local store and surface history in the net panel. Design questions for work time: retention window, which fields matter, and presentation within the panel's ~400px width (recent-results list vs trend readout). Point-in-time results exist today; the gap is comparison across days and venues. + ** TODO [#D] Net doctor vNext :feature:dotfiles:network: Deferred from the [[file:docs/specs/2026-07-11-net-doctor-expansion-spec.org][net doctor expansion spec]] (IMPLEMENTED, v1 shipped): event-log correlation for the flaky/drops cluster (powersave, roaming stalls, USB autosuspend, no-reconnect-after-resume, firmware crashloop drop signatures — needs history a one-shot probe can't see); a DoT/DNSSEC-specific verdict distinguishing "the venue resolver mangles DNSSEC" from the generic DNS-not-resolving; per-profile autoconnect/duplicate-profile hygiene. @@ -139,23 +148,17 @@ Two fix shapes, decide at work time: (1) wire a digest key — e.g. on the timel :PROPERTIES: :LAST_REVIEWED: 2026-07-09 :END: -=FS_PROFILE=zfs make test-vm-base= fails inside the VM at initramfs time: archangel reports "ZFS module not found! DKMS build may have failed" against the installed kernel (linux-lts 6.18.38 at the 2026-07-08 attempt). Likely a kernel/OpenZFS version skew — the archzfs zfs-dkms may not support 6.18 yet. Consequences: the maint scenario harness's zfs lane (Phase 12) is filtered but unexercised, and a real zfs bare-metal install via archangel would plausibly hit the same wall. Diagnosis needs the in-VM pacman/DKMS logs (rerun create-base-vm.sh with =--keep=-style access or pull /var/log from the ISO session before teardown). Priority per the bug matrix: Major severity (zfs install path broken) × some-users-sometimes = P3. When fixed, run =FS_PROFILE=zfs bash scripts/testing/run-maint-scenarios.sh --list= and add zfs scenario files (zpool scrub / autotrim / snapshot destroy) to the harness. +=FS_PROFILE=zfs make test-vm-base= fails inside the VM at initramfs time: archangel reports "ZFS module not found! DKMS build may have failed" against the installed kernel (linux-lts 6.18.38 at the 2026-07-08 attempt). Consequences: the maint scenario harness's zfs lane (Phase 12) is filtered but unexercised, and a real zfs bare-metal install via archangel would plausibly hit the same wall. Priority per the bug matrix: Major severity (zfs install path broken) × some-users-sometimes = P3. When fixed, run =FS_PROFILE=zfs bash scripts/testing/run-maint-scenarios.sh --list= and add zfs scenario files (zpool scrub / autotrim / snapshot destroy) to the harness. +*** 2026-07-14 Tue @ 01:40:48 -0500 Diagnosed: OpenZFS/kernel version skew, blocked on archzfs +Reproduced in ~1 minute of install: =dkms install zfs/2.3.3 -k 6.18.38-2-lts= exits 1 during pacstrap. Root cause confirmed: OpenZFS 2.3.3's META declares Linux-Maximum 6.15, and the VM installs linux-lts 6.18.38. The first release supporting 6.18 is 2.4.0 (2.4.1 covers 6.19), and archzfs currently serves only zfs-dkms 2.3.3-1 — nothing on our side to fix. Unblock condition: archzfs publishes zfs-dkms ≥2.4.0; recheck with =curl -s https://archzfs.com/archzfs/x86_64/ | grep -o 'zfs-dkms-[0-9.]*'=, then rerun =FS_PROFILE=zfs make test-vm-base=. -** TODO [#C] Consistent keybinding family for the panel console :feature:hyprland: +** TODO [#B] Consistent keybinding family for the panel console :feature:hyprland: :PROPERTIES: :LAST_REVIEWED: 2026-07-09 :END: Consider putting every panel (net, bluetooth, audio, timer, and the coming maintenance console) on one consistent chord family — a shared modifier set (Super+Shift, Control+Alt, or similar) plus a mnemonic letter per panel (N/B/A/T/M). Today the panels open via waybar clicks only; a uniform chord family makes them keyboard-reachable and predictable. Watch for collisions with existing binds: Super+Shift+A is already PTT toggle, and the hold-to-talk grave bind is load-bearing. Decide the family, audit current hyprland binds for conflicts, wire via the dotfiles hyprland config, and document in the keybind reference. Both machines (velox can't QMK-remap, so chords must work on a plain laptop keyboard). - -** TODO [#C] Realtime lamp output for the net + bt doctors :feature:solo: -:PROPERTIES: -:LAST_REVIEWED: 2026-07-09 -:END: -Retrofit the net doctor (=~/.dotfiles/net/src/net/doctor.py=) and bluetooth doctor (=~/.dotfiles/bluetooth/src/bt/doctor.py=) to stream results as a live output wall — one lamp per escalation step, amber while running, green on success, red on failure — instead of a final summary. Matches the maintenance-console doctor design (see [[file:docs/design/maintenance-console-design-ideas.org][maintenance-console-design-ideas.org]], "Doctor = live output wall"). Goal: every doctor in the system reads the same way. Both doctors already step through an escalation chain re-probing after each, so the steps are natural lamp boundaries. - -Scope note (Craig, 2026-07-07): realtime lamp *behavior* only. The maintenance console's wider results-wall layout (date+time stamp column, COPY, persistent history) does NOT backport — the net/bt panels are ~400px wide and lack the horizontal real estate. Their existing output wells keep their compact layout; this task just makes them stream live. - -Addendum (Craig, 2026-07-07): DO backport the 3.5-entry height convention — every panel's output well caps at 3.5 visible entries, the half-visible entry being the scroll cue, with the dark slate-on-black scrollbar. Layout stays compact per above; only the height cap + scroll affordance carries over. +*** 2026-07-14 Tue @ 00:31:36 -0500 Folded Craig's ask for a maintenance-panel keybinding; bumped [#C] → [#B] +Craig asked (in session, 2026-07-14) for a maintenance keybinding specifically — the panel he's reaching for without one. Maintenance (M) is the priority chord when this task gets worked. The capture graduated the task from parking lot to active backlog. ** DOING [#B] Run-time privilege model, standard across every panel doctor :feature:dotfiles: :PROPERTIES: @@ -188,8 +191,10 @@ The support machinery was deliberately kept for this task: =layout-navigate= and ** TODO [#C] Dotfiles stow conflicts: first-launch risk + restow directory handling :bug:dotfiles: :PROPERTIES: -:LAST_REVIEWED: 2026-07-02 +:LAST_REVIEWED: 2026-07-14 :END: +*** 2026-07-14 Tue @ 00:51:51 -0500 Ratio calibre check passed; waypaper canonical decided (dark-lion) +Ratio's ~/.config/calibre is a directory symlink into the dotfiles repo (stow folded the whole dir), so the first-launch gap never existed there — check closed. Craig decided dark-lion.jpg is the canonical waypaper wallpaper; the repo config.ini updated from the that-one-up-there.jpg placeholder (the file is skip-worktree volatile, unskipped for the commit and re-flagged). Remaining: when velox is back online, run make conflicts / make reset there so its old conflict copy clears against the updated repo. *** 2026-07-02 Thu @ 17:30:00 -0400 Shipped the Makefile hardening + first-launch guard (dotfiles 42a82d2) The solo-able subset landed in the speedrun. =make conflicts <de>= is the loud first-launch guard: dry-runs all tiers, parses all four stow error shapes (plain file conflict, foreign symlink, dir-over-file, and restow's unstow_contents non-directory ERROR), lists each blocker with a directory/foreign-symlink marker, exits 1 when any exist. =make reset= now pre-clears the directory and foreign-symlink blockers =--adopt= aborts atomically on (removals printed; repo version wins per the target's contract), then adopts + git-checkouts as before. =make restow='s overwrite path switched rm -f → rm -rf so directory conflicts clear. 8 sandbox tests drive the real Makefile against a throwaway HOME (44 suites green). Also verified on velox: the whereami and mpd-playlists conflicts noted in this task were already hand-converted 2026-06-29 — =make conflicts hyprland= reports clean live. REMAINING (deferred per Craig's speedrun pre-flight): the waypaper canonical decision (live velox dark-lion.jpg vs repo that-one-up-there.jpg) and the ratio calibre-symlink check (ratio paused). From the velox calibre incident (2026-06-27, note in ~/.dotfiles/inbox/processed/): calibre was launched before =make stow= ran, wrote its own default config into =~/.config/calibre/=, and silently blocked its own stow — it ran on factory defaults while the rest of common/ stowed fine. General pattern: any GUI app that auto-creates config on first run, launched before stow, blocks its own stow the same way. Velox was repaired by hand (=ln -srf= symlinks byte-identical to =stow --no-folding= output). @@ -200,12 +205,14 @@ Remaining work (re-graded C 2026-07-02 — the first-launch risk and the Makefil ** TODO [#B] Audit dotfiles/common directory :chore:dotfiles: :PROPERTIES: -:LAST_REVIEWED: 2026-07-02 +:LAST_REVIEWED: 2026-07-14 :END: Refiled from the archsetup task audit (2026-06-28), landed via ~/.dotfiles/inbox; the dotfiles content split into its own repo 2026-06-16 but the task tracking stays here per Craig (2026-07-02). Three parts: - Review all 50+ scripts in =~/.local/bin= and remove unused ones. - Check dotfiles for uninstalled packages and remove orphaned configs. - Verify all stowed files are actually used. +*** 2026-07-14 Tue @ 01:40:48 -0500 Built the audit evidence report +Shipped as =docs/2026-07-14-bin-audit-evidence.org= in the dotfiles repo (260752a). 150 scripts bucketed: 69 keep (referenced or cron-driven), 74 kill candidates (zero references in the tree), 7 flagged (all dwm-tier, expected on a hyprland host). Config sweep: audacious and wofi configs are orphan candidates, ranger needs an install-vs-delete call (declared in archsetup but not installed on ratio). Shell history was too shallow (~700 lines) to prove by-hand disuse either way — the kill pass stays Craig's call in the parent task. ** TODO [#B] Waybar network module — custom/net :feature:waybar:network: :PROPERTIES: @@ -325,13 +332,13 @@ Rescoped 2026-07-04 (audit): the tunnels track already shipped most of the origi ** TODO [#C] Waybar collapse control: replace the triangle glyph :feature:waybar: :PROPERTIES: -:LAST_REVIEWED: 2026-07-04 +:LAST_REVIEWED: 2026-07-14 :END: From the 2026-07-04 roam capture. The waybar collapse mechanism (click the triangle, the bar sections redisplay shortened) works, but the triangle glyph doesn't match the instrument-console aesthetic the panels now use. Replace it with something in keeping with the console look. Aesthetic decision — bring Craig two or three concrete glyph/style options (a machined chevron, a console-key style expander, an engraved caret) before wiring. Dotfiles waybar config (handled per the archsetup-owns-dotfiles rule). Raised alongside the net-panel/audio speedrun; deferred from it because the glyph choice is a taste call. ** TODO [#C] Net panel: driver-health diagnostic tier :feature:network: :PROPERTIES: -:LAST_REVIEWED: 2026-07-04 +:LAST_REVIEWED: 2026-07-14 :END: Follow-up from the 2026-07-04 net-panel hardening speedrun (Craig's cj question on the no-WiFi item). The shipped no-wifi-hardware verdict covers "no adapter at all." This tier covers "adapter present but the driver is wedged": read-only health signals — =ip link= (device present but no-carrier / down), =dmesg= / =journalctl -k= for firmware-load failures, =rfkill= for a hard block, =modinfo= / =lsmod= for the driver module — classified before a generic reset. Remedy actions: a privileged =modprobe -r <mod> && modprobe <mod>= reload of the wifi driver, and a firmware-package pointer when the failure is a missing/failed firmware load. Dotfiles net-package work (handled per the archsetup-owns-dotfiles rule). Design pass first to decide whether it's worth a repair tier vs a needs-user-action pointer. @@ -580,6 +587,8 @@ Root cause was in =retry_install=: =last_exit_code=$?= ran AFTER =if eval ...; t :END: Triggered by the 2026-06-14 =make package-diff= run on ratio: 62 packages are installed but not declared in archsetup. Stripped of the structural buckets — pacstrap base/boot/kernel (base, linux*, grub, efibootmgr, sudo, btrfs-progs, fwupd, logrotate, ex-vi-compat, linux-lts-strix, zram-generator), the =make deps= VM set (qemu-full, virt-manager, virt-viewer, libguestfs, bridge-utils, dnsmasq, archiso), and the yay bootstrap — these 40 remain. Check the ones to add to the installer, then rerun =make package-diff= to confirm they clear. +Evidence report (2026-07-14, count now 64): [[file:docs/design/2026-07-14-undeclared-packages-evidence.org][docs/design/2026-07-14-undeclared-packages-evidence.org]] (archsetup 78081e4) — description, requirer, and install date per package, bucketed candidates (30) / dependency-pulled (6) / orphan libraries (7) / structural (21). The include/ignore pass reads the candidates bucket; the checklist below stays until Craig walks it. + Some entries are libraries likely pulled in as dependencies (blas-openblas, openblas, eigen, tk, lib32-openal, pkcs11-helper, gtk4-layer-shell, webkit2gtk, sane, freerdp, rust-bindgen) — check those only if you want them declared explicitly rather than left to dependency resolution. - [ ] aws-cli-v2 @@ -625,7 +634,7 @@ Some entries are libraries likely pulled in as dependencies (blas-openblas, open ** TODO [#B] Security hardening + audit :security: :PROPERTIES: -:LAST_REVIEWED: 2026-06-28 +:LAST_REVIEWED: 2026-07-14 :END: Umbrella for the security-hardening and audit effort. Consolidated from the 2026-06-28 task audit, re-homing the scattered security tasks as children so the work reads as a unit. Each child ships independently and keeps its prior priority. @@ -673,6 +682,9 @@ See Framework community notes on logind.conf and sleep.conf settings :END: archsetup installs =python-lyricsgenius= with =--mflags --skipinteg=, skipping makepkg integrity + PGP checks — a workaround originally for an expired-signature issue upstream (surfaced by the 2026-06-23 --noconfirm audit). Periodically test whether the cause has cleared: if a plain =aur_install python-lyricsgenius= builds without complaint, drop the =--skipinteg= workaround. Removal needs a real AUR build to confirm, so it isn't a blind change. +*** 2026-07-14 Tue @ 01:40:48 -0500 Rechecked: still needed, same cause +Fresh AUR clone, =makepkg --verifysource= on 3.7.0-1 (PKGBUILD unchanged): tarball passes, =LICENSE.txt= still FAILS its b2sum — the github-master pin, structural as diagnosed 2026-06-24. =--skipinteg= stays. + *** 2026-07-02 Thu @ 05:08:37 -0400 Rechecked: still needed, same cause =makepkg --verifysource= on 3.7.0-1: tarball passes, =LICENSE.txt= still FAILS its b2sum — the PKGBUILD still pins a hash for a file fetched from github @@ -1558,3 +1570,23 @@ Work: give bluetooth a copy key, give maint the overlay pair, and lift the four Copy text is per panel but one rule: it pastes as that panel's CLI prints, so the paste lines up with the terminal a user is already looking at. audio's =viewmodel.wall_copy_text()= is the worked example. Consistent with the 2026-07-07 scope note on the sibling task above: net's compact glyph overlay is what standardizes, not maint's wide COPY-key header row. +** DONE [#C] Org-capture float popup grows too large :bug:hyprland:quick:solo: +CLOSED: [2026-07-14 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-07-13 +:END: +Craig answered the pre-flight (2026-07-14): cap at 120 wide, height proportional. Applied as 120 Emacs columns (11 px/col measured from the live daemon) = 1320 px wide, height 653 px from the old rule's aspect. Ratio's size rule shrank from the 1892x936 scratchpad match and both hosts gained a max_size growth cap (the field is max_size — bare "maxsize" is invalid and hyprctl reload won't say so; check hyprctl configerrors). Verified live: config clean, a probe window floats at exactly 1320x653. Dotfiles 9c4dc2f. +** DONE [#C] Panel smoke: faceplate state-word assertion fails on the live compositor :bug:dotfiles:test: +CLOSED: [2026-07-14 Tue] +Diagnosed and fixed within the session: not a race — test drift. Dotfiles b581d5d (2026-07-05) made the faceplate word the static subsystem identity (NETWORKING / BLUETOOTH / AUDIO) and updated the audio smoke, but the net and bt smokes kept asserting the retired live-state words and had failed on every run since. Both now assert the identity word like audio's (dotfiles 32cd99f); both smokes run RESULT: OK end to end, which also green-gates the doctor-streaming change. +** DONE [#C] Realtime lamp output for the net + bt doctors :feature:solo: +CLOSED: [2026-07-14 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-07-09 +:END: +Shipped in dotfiles 0318a91. Both doctors stream: diagnose() emits each step as it completes (bt streams the first diagnosis only — the fix loop's re-diagnoses would replay the chain), and a repair's row goes up amber at attempt start and settles green/red with narration + evidence at completion, so the lamp blinks for the repair's real duration. The 3.5-entry height cap turned out to already be in both wells (it landed with the doctor expansions), so only the streaming half needed building. 5 new tests across net + bt; both suites green; AT-SPI smokes at parity with HEAD (one pre-existing state-word failure, filed separately). +Retrofit the net doctor (=~/.dotfiles/net/src/net/doctor.py=) and bluetooth doctor (=~/.dotfiles/bluetooth/src/bt/doctor.py=) to stream results as a live output wall — one lamp per escalation step, amber while running, green on success, red on failure — instead of a final summary. Matches the maintenance-console doctor design (see [[file:docs/design/maintenance-console-design-ideas.org][maintenance-console-design-ideas.org]], "Doctor = live output wall"). Goal: every doctor in the system reads the same way. Both doctors already step through an escalation chain re-probing after each, so the steps are natural lamp boundaries. + +Scope note (Craig, 2026-07-07): realtime lamp *behavior* only. The maintenance console's wider results-wall layout (date+time stamp column, COPY, persistent history) does NOT backport — the net/bt panels are ~400px wide and lack the horizontal real estate. Their existing output wells keep their compact layout; this task just makes them stream live. + +Addendum (Craig, 2026-07-07): DO backport the 3.5-entry height convention — every panel's output well caps at 3.5 visible entries, the half-visible entry being the scroll cue, with the dark slate-on-black scrollbar. Layout stays compact per above; only the height cap + scroll affordance carries over. |
