aboutsummaryrefslogtreecommitdiff
path: root/todo.org
Commit message (Collapse)AuthorAgeFilesLines
* feat(gallery): gallery upgrades — size/palette/screen-chips/spec-sheets, ↵Craig Jennings2026-07-121-8/+32
| | | | | | | | | | 25 new cards, grammar note Squash of the gallery-upgrades branch (25 commits). Usability: widget stages scale S/M/L (2.4x default), reading text at 12-13pt, a live palette section parsed from the generated :root block, screen-color families with per-card chips on the five screen widgets, and a collapsible spec sheet on every card (input model, solves, use, limits, origin, difficulty, prefer-when, period on the non-timeless). Collection grew 84 → 109 cards, all CDP-verified: reference cards R32-R36 (mechanical timer, four-way rocker, four-way toggle, day-date discs, LED dot matrix), the takuzu-survey build R37-R47 plus the N23 alarm lifecycle (pin matrix, dead-man, rotary dial, breaker panel, DSKY, cam timer, attitude indicator, heading bug, flip-disc, dekatron, landing gear), the promoted banked six R48-R53 (knife switch, decade box, two-hand control, voice-loop keyset, blinkenlights, circular chart), and the Ki-57/comfort-meter trio R54-R56 (vertical tape, twin-needle, comfort-zone crossed needles). Also: docs/design control-grammars reference note (taxonomy sources and proposed axes for the classification work), nine reference photos filed, and a component cleanup pass (dial digits above the finger wheel, legible demo defaults, unified captions).
* chore(todo): add widget gallery upgrade tasksCraig Jennings2026-07-121-0/+12
|
* docs(specs): add the widget component-generation spec (DRAFT)Craig Jennings2026-07-121-1/+8
| | | | The collection phase closed at 84 verified cards, so porting needs a decision procedure before consumer work starts. The spec carries the agreed five phases (demand inventory, web library extraction, Emacs ports, waybar audio pilot, Level-2 generator go/no-go) and records the baked architecture decisions. I left the web library's packaging shape as the one open decision, tracked as a VERIFY in todo.org. The gallery is the prototype evidence, with the R-series history as the iteration record.
* chore(todo): close the copy+close output-wall task (dotfiles dccd744)Craig Jennings2026-07-121-1/+4
|
* chore(todo): close the stuck enterprise-banner bug (dotfiles a157bed)Craig Jennings2026-07-121-2/+10
|
* chore(todo): close the net redaction task (dotfiles df1543a)Craig Jennings2026-07-121-1/+3
|
* chore(specs): flip net and bt doctor expansions to IMPLEMENTEDCraig Jennings2026-07-121-7/+14
| | | | All v1 phases of both specs shipped on dotfiles main in the 2026-07-11 build run (net: 21ca3ff, d73eba6, c9f8604, be15a81, 12e3e76; bt: d19fdca, f05a9b4, d7d859f), fake-verified green. The live halves stay on the VM live-verification task and the manual-testing checklist. vNext items from both specs are now logged as [#D] tasks.
* chore(todo): record privmodel silent-auto decision, maint reconciliation, ↵Craig Jennings2026-07-121-1/+23
| | | | and spec outline
* feat(gallery): add reference batch R01-R04 modeled on period hardwareCraig Jennings2026-07-121-0/+2
| | | | | | | | | | | I built four widgets as inline SVG (the substrate that ports to svg.el), modeled on 1950s-60s lab and console hardware from the reference photos now filed in the catalogue's working directory: - R01 moving-coil VU meter: cream face, authentic nonlinear dB arc (-20 to +3), red zone, ballistic needle on the live signal. - R02 calibrated vernier dial: rotating tick-ring disc with radial numerals under a fixed hairline, fluted bakelite knob, reads to a tenth. - R03 bat-handle toggle: chrome lever on a hex bushing, snaps ON/OFF with lit legends. - R04 bakelite fluted knob: scalloped skirt, glossy dome, amber index over a printed 0-10 scale. I verified all four in headless Chrome: the VU animates with ballistics, the dial and knob track drags, the toggle throws, no console exceptions. The gallery now carries 57 cards.
* chore: file roam inbox items and archive resolved workCraig Jennings2026-07-111-549/+41
| | | | Filed two archsetup tasks from the roam inbox (net panel enterprise-error banner that never dismisses, notification popup sizing). Archived three resolved subtrees into task-archive and ran the todo-cleanup passes (convert-subtasks, archive-done, child-priority sync).
* docs: add net Phase 2 + bt Phase 2 manual-testing checklistsCraig Jennings2026-07-111-0/+62
|
* chore: close bt Phase 2 (persistent-power verdict + fix) as shippedCraig Jennings2026-07-111-2/+2
|
* chore: close net Phase 2 (sharpened auth verdict) as shippedCraig Jennings2026-07-111-2/+2
|
* chore: note the net scenario harness is built, pending a VM runCraig Jennings2026-07-111-2/+2
|
* chore: close net Phase 1 verdicts, file the live-verification checklistCraig Jennings2026-07-111-2/+36
|
* chore: record net nm-masked verdict + first panelkit consumerCraig Jennings2026-07-111-2/+6
|
* chore: record the shared privilege model landing (panelkit)Craig Jennings2026-07-111-2/+5
|
* chore: close bt doctor Phase 1 as a dated log entryCraig Jennings2026-07-111-2/+2
|
* chore: close bt doctor Phase 0 as a dated log entryCraig Jennings2026-07-111-2/+2
|
* chore: close net doctor Phase 0 as a dated log entryCraig Jennings2026-07-111-2/+2
|
* chore: decompose net + bt doctor specs into build tasks, flip DOINGCraig Jennings2026-07-111-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 Jennings2026-07-111-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 Jennings2026-07-101-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 Jennings2026-07-101-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 Jennings2026-07-101-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-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 Jennings2026-07-091-234/+56
|
* chore(todo): file retention-repair GUI gap taskCraig Jennings2026-07-081-0/+5
|
* chore: health-check updates (workflow note, audit stamp, todo entries)Craig Jennings2026-07-081-0/+5
|
* chore: close maintenance-console build, flip spec to IMPLEMENTEDCraig Jennings2026-07-081-8/+9
|
* chore: close build Phase 12 in todo, file zfs DKMS image bugCraig Jennings2026-07-081-2/+5
|
* chore: log maint refactor sweep in todoCraig Jennings2026-07-081-0/+3
|
* chore: close build Phase 11b in todoCraig Jennings2026-07-081-2/+3
|
* chore: close build Phase 11, add fidelity phase 11bCraig Jennings2026-07-081-2/+6
|
* chore: close build Phase 10 in todoCraig Jennings2026-07-081-2/+3
|
* chore: close build Phase 9 in todoCraig Jennings2026-07-081-2/+3
|
* chore: log build Phase 9a in todoCraig Jennings2026-07-081-1/+4
|
* chore: close build Phase 8 in todoCraig Jennings2026-07-081-2/+3
|
* chore: close build Phase 7 in todoCraig Jennings2026-07-071-2/+2
|
* chore: close build Phase 6 in todoCraig Jennings2026-07-071-2/+2
|
* chore: close build Phase 5 in todoCraig Jennings2026-07-071-2/+2
|
* feat: Phase 4 threshold keys (logs, memory, power)Craig Jennings2026-07-071-2/+2
|