aboutsummaryrefslogtreecommitdiff
path: root/todo.org
Commit message (Collapse)AuthorAgeFilesLines
* feat(gallery): palette as named instrument colors at the page bottom, ↵Craig Jennings14 hours1-0/+2
| | | | | | default size M The palette stops being a token dump: 36 named colors grouped by role (materials, faces and inks, lamps and jewels, phosphors, needles), each naming where it appears on the instruments. No hex codes render anywhere on the page, and page chrome is deliberately excluded — the card documents what the widgets are made of, not how the page is styled. Default widget size drops to M.
* fix(gallery): sweep-driven cleanup — contain the keyset bars, boost tiny ↵Craig Jennings14 hours1-0/+2
| | | | | | widgets A bounding-box audit over all 109 cards caught the voice-loop monitor bars streaking across the card: Chrome's CSS zoom miscomputes absolute insets, fr tracks, and stretched widths inside zoomed stages, so the keyset now uses fixed pixel tracks and bars, which zoom scales correctly. Seven intrinsically tiny widgets (toggle, chip, arm-to-fire, mini signal, ladder, thermometer, status lamp) get a boost zoom so they stop floating in oversized stages.
* feat(gallery): gallery upgrades — size/palette/screen-chips/spec-sheets, ↵Craig Jennings14 hours1-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 Jennings20 hours1-0/+12
|
* docs(specs): add the widget component-generation spec (DRAFT)Craig Jennings23 hours1-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 Jennings23 hours1-1/+4
|
* chore(todo): close the stuck enterprise-banner bug (dotfiles a157bed)Craig Jennings23 hours1-2/+10
|
* chore(todo): close the net redaction task (dotfiles df1543a)Craig Jennings23 hours1-1/+3
|
* chore(specs): flip net and bt doctor expansions to IMPLEMENTEDCraig Jennings24 hours1-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 Jennings24 hours1-1/+23
| | | | and spec outline
* feat(gallery): add reference batch R01-R04 modeled on period hardwareCraig Jennings33 hours1-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 Jennings2 days1-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 Jennings2 days1-0/+62
|
* chore: close bt Phase 2 (persistent-power verdict + fix) as shippedCraig Jennings2 days1-2/+2
|
* chore: close net Phase 2 (sharpened auth verdict) as shippedCraig Jennings2 days1-2/+2
|
* chore: note the net scenario harness is built, pending a VM runCraig Jennings2 days1-2/+2
|
* chore: close net Phase 1 verdicts, file the live-verification checklistCraig Jennings2 days1-2/+36
|
* chore: record net nm-masked verdict + first panelkit consumerCraig Jennings2 days1-2/+6
|
* chore: record the shared privilege model landing (panelkit)Craig Jennings2 days1-2/+5
|
* chore: close bt doctor Phase 1 as a dated log entryCraig Jennings2 days1-2/+2
|
* chore: close bt doctor Phase 0 as a dated log entryCraig Jennings2 days1-2/+2
|
* chore: close net doctor Phase 0 as a dated log entryCraig Jennings2 days1-2/+2
|
* chore: decompose net + bt doctor specs into build tasks, flip DOINGCraig Jennings2 days1-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 Jennings2 days1-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 Jennings2 days1-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 Jennings3 days1-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 Jennings3 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-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 Jennings4 days1-234/+56
|
* chore(todo): file retention-repair GUI gap taskCraig Jennings5 days1-0/+5
|
* chore: health-check updates (workflow note, audit stamp, todo entries)Craig Jennings5 days1-0/+5
|
* chore: close maintenance-console build, flip spec to IMPLEMENTEDCraig Jennings5 days1-8/+9
|
* chore: close build Phase 12 in todo, file zfs DKMS image bugCraig Jennings5 days1-2/+5
|
* chore: log maint refactor sweep in todoCraig Jennings5 days1-0/+3
|
* chore: close build Phase 11b in todoCraig Jennings5 days1-2/+3
|
* chore: close build Phase 11, add fidelity phase 11bCraig Jennings5 days1-2/+6
|
* chore: close build Phase 10 in todoCraig Jennings5 days1-2/+3
|
* chore: close build Phase 9 in todoCraig Jennings5 days1-2/+3
|
* chore: log build Phase 9a in todoCraig Jennings5 days1-1/+4
|
* chore: close build Phase 8 in todoCraig Jennings5 days1-2/+3
|
* chore: close build Phase 7 in todoCraig Jennings5 days1-2/+2
|
* chore: close build Phase 6 in todoCraig Jennings5 days1-2/+2
|