aboutsummaryrefslogtreecommitdiff
path: root/todo.org
Commit message (Collapse)AuthorAgeFilesLines
* docs: close audit test-quality clusterCraig Jennings6 days1-1/+3
|
* docs: close gallery-widget elisp bugsCraig Jennings6 days1-1/+3
|
* docs: close VM-framework robustness clusterCraig Jennings6 days1-1/+3
|
* docs: close stale inetutils task (done in 1115543)Craig Jennings6 days1-2/+4
|
* docs: close pacman-hook-order tautology taskCraig Jennings6 days1-1/+3
|
* docs: close net-scenarios green-exit taskCraig Jennings6 days1-1/+3
|
* docs: close stale cmail umask task (fixed in dffecf5)Craig Jennings6 days1-1/+3
|
* docs: close nvme early-module taskCraig Jennings6 days1-1/+3
|
* docs: file the Hyprland issue draft for manual postingCraig Jennings6 days1-1/+1
|
* docs: file the Hyprland layoutmsg crash with preserved evidenceCraig Jennings6 days1-0/+5
| | | | SIGSEGV via uncaught bad_variant_access in Layout::CAlgorithm::layoutMsg on a layoutmsg mfact dispatch. Upstream bug, seen on v0.54.1 (March) and v0.55.4 (today), both times from the layout-resize binds. Crash reports and tmpfs log excerpts land in working/hyprland-layoutmsg-crash/ so the evidence survives a reboot; graded [#B] (Critical x rare) in todo.org.
* docs: complete the code audit (S5-S7) and triage findings into tasksCraig Jennings6 days1-0/+18
| | | | | | | | Ran read-only audits over the last three coverage slices: the VM test framework (S5), the Python (S6), and the elisp prototype (S7). That closes the sentry code-inspection sweep -- all seven slices covered. S5 turned up five bugs (one Major: run-net-scenarios prints a diagnose failure but exits green) and three refactors. S6 found one bug plus a High test-quality defect -- the pacman-hook-order test compares two string literals, so the boot-critical hook ordering it claims to guard is never actually measured. S7 found three Minor bugs in the gallery-widget prototype (the needle clamps while the readout doesn't, a missing cl-lib require, a nil-path load) plus refactor and coverage gaps. Appended every finding to the sentry findings doc, marked the coverage tracker, and filed six graded tasks: the two Major/High defects as [#C], and four [#D] clusters (VM-framework robustness, prototype elisp bugs, test-quality, and a test-framework/prototype refactor group). Detection only -- nothing fixed here.
* docs: log validate_yesno + NVIDIA constant refactors, reslice rollupCraig Jennings6 days1-1/+3
|
* docs: close normalize-notify atomicity taskCraig Jennings6 days1-1/+3
|
* docs: close unguarded chmod/cp cluster taskCraig Jennings6 days1-1/+3
|
* docs: close resume-idempotency cluster taskCraig Jennings6 days1-1/+3
|
* docs: close wireguard tunnel-ordering taskCraig Jennings6 days1-1/+3
|
* docs: close sudoers.pacnew validation taskCraig Jennings6 days1-1/+3
|
* docs: close run_step state + exit-code taskCraig Jennings6 days1-1/+3
|
* docs: close df disk-space pre-flight taskCraig Jennings6 days1-1/+3
|
* docs: close chpasswd guard taskCraig Jennings6 days1-1/+3
|
* chore: reorder open-work tasks in todo.orgCraig Jennings6 days1-244/+244
|
* docs: file waybar module-separator taskCraig Jennings6 days1-0/+4
|
* docs: file archsetup move off cgit to private remoteCraig Jennings6 days1-1/+4
|
* docs: close WireGuard leak task, note cgit follow-upCraig Jennings6 days1-3/+11
| | | | | | Record the resolution (keys expired, all 10 configs purged from history, server gc'd, verified via anonymous clone) and file the cgit-exposure audit as the systemic follow-up. Update the config README to the out-of-band workflow.
* docs: log overnight code audit and file triaged installer bugsCraig Jennings6 days1-80/+112
| | | | | | Overnight sentry ran its hygiene passes plus a code-inspection pass over the installer and the scripts/ directory. It archived 6 completed tasks to Resolved and logged 19 bugs and 12 refactors in docs/design/2026-07-19-sentry-code-findings.org. I filed the bugs as tasks graded by severity times frequency. Nothing in the codebase changed, this was detection only. Two things stand out. The installer does no partitioning (it's a post-install config layer), so the real data-loss surface is boot config, and it overwrites GRUB_CMDLINE wholesale, which can drop a cryptdevice or resume param and leave a machine unbootable. Three WireGuard configs with live private keys are tracked in git, flagged for a rotate-or-keep decision.
* docs: expand desktop-settings spec and add panel prototypesCraig Jennings7 days1-17/+48
| | | | | | | | I folded the home-handoff control-set decisions into the desktop-settings panel spec. The controls table gains night-light, Do Not Disturb, power profile, lock/suspend actions, scenes, and a wallpaper sub-view. Volume and theme are out of scope, with reasons, and the format pickers move to their own display-format sibling spec (stubbed). The scenes and wallpaper-shape decisions close. The spec stays DRAFT pending UI prototyping. I added five direction prototypes over a shared engine (tile grid, sectioned rack, scenes-first, instrument cluster, expandable rows) so the layout gets picked against working behavior. I closed the shipped Next Session Focus work in todo.org: notification loudness, clock right-click dismiss, date-only scrolling, the wired-interface indicator, and best-saved WiFi connect, plus velox boot recovery. The three design-blocked network and audio items stay TODO with their open question recorded.
* docs: set next session focusCraig Jennings7 days1-0/+14
| | | | Prioritize autonomous Waybar, panel, and audio work.
* docs: clarify clock panel dismissalCraig Jennings7 days1-3/+4
| | | | Reserve left click and use right click to close the open panel.
* docs: file interface design referencesCraig Jennings7 days1-0/+69
| | | | Record the reconciled weather work and future component direction.\nFile the clock and retro-interface reference materials for later design work.
* docs: record weather comfort signalsCraig Jennings7 days1-0/+2
|
* docs: record weather baseline correctionCraig Jennings7 days1-0/+2
|
* docs: record weather bottom alignmentCraig Jennings7 days1-0/+2
|
* docs: record weather chip groupingCraig Jennings7 days1-0/+2
|
* docs: record weather alignmentCraig Jennings7 days1-0/+2
|
* docs: record weather glyph polishCraig Jennings7 days1-0/+2
|
* docs: record weather glyph sizingCraig Jennings7 days1-0/+2
|
* docs: record weather glyph updateCraig Jennings7 days1-0/+2
|
* docs: record weather location refreshCraig Jennings7 days1-0/+2
|
* docs: record weather forecast deliveryCraig Jennings7 days1-0/+3
|
* docs: clarify weather forecast toggleCraig Jennings7 days1-1/+1
|
* docs: define weather forecast click actionCraig Jennings7 days1-1/+1
|
* docs: define weather forecast viewsCraig Jennings7 days1-1/+1
|
* chore: track weather integrationCraig Jennings7 days1-1/+12
|
* chore: track package and notification workCraig Jennings8 days1-0/+17
| | | | Add the installed-package drift audit and notification sound loudness tasks.
* chore: archive resolved backlog tasks and note probe-flake recurrenceCraig Jennings8 days1-145/+8
| | | | Moved the completed maintenance, audio, and timer tasks into the archive, applied the lint counter fixes, and logged the batch-6/batch-9 fader-drag probe-flake recurrences on the existing tracking task.
* refactor(gallery): rename GW namespace to DUPRE, kit to The Dupre KitCraig Jennings8 days1-1/+1
| | | | | | The gallery and its library are now The Dupre Kit, named for the dupre color theme. GW was too opaque to remember. The stylesheet id is now dupre-css, the card handle property is .dupre, and page prose says instrument instead of widget. File names stay put. Renaming them is a separate decision. Historical log entries in todo.org keep their GW references as a record.
* feat(gallery): grow the split-flap into a randomized multi-row board with ↵Craig Jennings8 days1-0/+3
| | | | | | | | | | | | skins, faces and a flap-rate slider The N20 card becomes a three-row, six-cell departure board. Every advance sends each row to a completely different word, drawn at random from a 24-word pool with rows kept mutually distinct, and each cell runs at its own mechanical rate (a fixed 0.8x-1.35x of the base flap time), so letters and whole words finish at genuinely different times. A slider on the card sets the base rate (setFlapMs on the handle). The board advances only after it has settled and dwelt two seconds on the reading: the builder announces settle once per command (onSettle) and the page schedules the next advance from that signal, since a fixed-interval ticker would retarget mid-cascade and the panel would never rest. The chain stays gated off under reduced motion, where the board paints once and rests. Customization lands as two construction axes on the chip rig: skin (cream-on-black default, true-white ink, the ivory board, or white cards with dark lettering) and face (Berkeley Mono or Helvetica, the grotesque real boards wore). The skin chips are miniature flap cells, a letter in the skin's real ink on its real board colour, and the font chips letter themselves in their actual face, so every choice previews itself. The flap-rate slider rides in the chips row, and the card's amber word readout is gone: the board is the display. The deterministic seam for callers and tests is setText; randomness lives only in the demo path (next/scramble), which re-aims against the last commanded grid rather than in-flight glyphs. The settle work caught a real ordering bug: setText assigned each cell's target and ran it in one pass, so a cell finishing synchronously saw its neighbours' stale, already-satisfied targets and announced a partial board as settled. Targets now all land before any cell runs. Review caught two more: the dwell chain had escaped the reduced-motion gate (the board self-advanced every two seconds forever under reduced motion), and the skin chips rendered blank because the STYLES entries were strings where the rig paints an object's dot swatch. Since this is heading for extraction as a regular component, the builder got the full refactor pass: a contract comment covering every opt and the handle surface, small named helpers, no page globals, and all CSS in the one split-flap block. The same bar is filed as a sweep task for every other builder. Probe coverage grows to 78 checks: the reduced-motion rest, the live dwell measurement, the scramble contract, both style axes, the speed api and the swatch legibility.
* feat(gallery): make the N20 split-flap an honest Solari mechanismCraig Jennings8 days1-0/+3
| | | | | | | | The card's flip was a 0.3s drop-fade that teleported each cell straight to its target character — a suggestion of a split-flap, not one. Since the gallery card is the spec the ports get measured against, the fake would have propagated. Three behaviors replace it, studied from the HotFX split-flap component and re-derived (its repo carries no license, so no code was copied). The charset is the drum: opts.chars declares the flap order and a changed cell steps one flap at a time through intermediates, never jumping, so cells arrive staggered by travel distance. A set() mid-cascade re-aims the running cells at the new target. The fold is real: two half-panel animations per flip — the current top falls, the next bottom lands — over four clipped layers with backfaces hidden, replacing the drop-fade keyframe. animate:false (the reduced-motion gate) collapses every move to an instant jump. The handle grows setText, chars, and reading() so probes can sample the displayed state mid-cascade; the default width goes 3 to 4 cells, which stops truncating every demo word. Probe checks were written red first: cascade arrival, intermediate readings, one-flap-at-a-time stepping in charset order, mid-cascade retarget, and the instant animate:false path.
* chore(clock): file absorption follow-ups and fix the install-dep commentCraig Jennings8 days1-0/+7
|
* feat(gallery): add the index typewriterCraig Jennings10 days1-0/+22
| | | | | | | | | | | | The oldest way to type without a keyboard, and the first card where selecting and committing are separate acts. One hand walks a stylus over a printed plate, the other pulls a lever, and only the lever prints. You can hunt across every character and nothing happens until the second hand moves. Every other control in the kit fires on contact. The keyboard follows the same rule: typing selects, Enter is the lever. A keypress that printed would make this the ABC keypad with a nicer plate, which is the one thing it must not be. It also does no case folding, where the keypad must. This plate carries both cases as distinct cells, so Shift does exactly the work a shift key would on a machine that hasn't got one. KEYS and ACTIONS are derived from the layout table rather than kept beside it, so rewriting the table relays the plate, the keymap and the allowlist together. A binding aimed at a character the plate no longer carries isn't expressible. After the AEG Mignon Model 4, keeping the two things worth keeping: the extended set a keyboard skips, and both cases with no shift key. Its frequency order goes. Reading the plate is the interaction, and P U G Q / V I N A B isn't something you can read your way around, so ours is alphabetical with capitals beside lowercase at the same column offset. I expect to revisit the keys, so the layout is a table the geometry computes itself from. I built it at four, five and nine rows to check the gutter survives a rewrite in either direction. There's no space cell yet, so Space isn't ours and still scrolls the page. The real machine has a separate space key.