<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/docs/design, branch main</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-07-20T21:10:37+00:00</updated>
<entry>
<title>docs: complete the code audit (S5-S7) and triage findings into tasks</title>
<updated>2026-07-20T21:10:37+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T21:10:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=074599118036aa4a76fa9210ac1b1704d5e55b9e'/>
<id>urn:sha1:074599118036aa4a76fa9210ac1b1704d5e55b9e</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>docs: log overnight code audit and file triaged installer bugs</title>
<updated>2026-07-20T12:27:16+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T12:27:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=f5c571712834c87615a040b2901fc3a21e4a98aa'/>
<id>urn:sha1:f5c571712834c87615a040b2901fc3a21e4a98aa</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>docs: document single Dupre theme</title>
<updated>2026-07-19T01:03:16+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-19T01:03:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=6acbbb47e122c720e864e1d59ccdacb91b19f4e5'/>
<id>urn:sha1:6acbbb47e122c720e864e1d59ccdacb91b19f4e5</id>
<content type='text'>
Remove retired theme-switching guidance and Hudson references from active documentation.
</content>
</entry>
<entry>
<title>fix: order pacman safety hooks</title>
<updated>2026-07-19T00:46:05+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-19T00:46:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=be2277d0db1afa06c1a1ab468f70b34c8d98e0a1'/>
<id>urn:sha1:be2277d0db1afa06c1a1ab468f70b34c8d98e0a1</id>
<content type='text'>
Install snapshot and live-update hooks before mkinitcpio removal, migrate legacy paths, and cover the ordering invariant.
</content>
</entry>
<entry>
<title>feat(gallery): add the ABC entry keypad</title>
<updated>2026-07-16T20:12:23+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-16T20:12:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=9b15e96cfa93b1b8424827616432ba3fbea2756c'/>
<id>urn:sha1:9b15e96cfa93b1b8424827616432ba3fbea2756c</id>
<content type='text'>
The kit entered digits three ways and text no way at all, so the panels that need a WiFi password had nothing to reach for. R57 takes free alphanumeric text. A-Z is laid out alphabetically rather than QWERTY, the industrial convention wherever the operator isn't assumed to touch-type, and what makes this a faceplate instead of a keyboard.

I followed two reference plates and departed from both, arguing each departure at its site. Their letters are blue and the kit has no blue control colour, so letters take the standard pale cap and digits a darker one: the photos' two-tone grouping without the foreign hue. Letters sit left and digits right so the alphabet reads down one unbroken block. With the digits on the left it stops column-aligning with itself halfway down.

DEL is new, because without a backspace one mistyped character costs the whole entry. It sits beside the digits in amber while CLR is exiled to the corner in red. DEL is constant and costs a character, CLR is rare and costs everything, so the safe key gets the good spot and the colour grades the cost before the legend is read. CANCEL is gone: on a plate that is the whole terminal it has a transaction to abandon, but here it did exactly what CLR does.

The window draws spaces as ␣. SVG collapses whitespace, and past the truncation boundary there are no pad dots left for a space to displace, so SPACE was a keypress with no feedback at all. The buffer keeps the real character.
</content>
</entry>
<entry>
<title>docs: record the component taxonomy and the alphanumeric survey</title>
<updated>2026-07-16T14:11:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-16T14:11:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=b23d41767eee19d1cbb2aad0c72326a1a898a451'/>
<id>urn:sha1:b23d41767eee19d1cbb2aad0c72326a1a898a451</id>
<content type='text'>
Crossing Foley's elemental tasks against cardinality over the kit finds two empty cells: selecting one of a dynamic set (the device and network lists) and alphanumeric text entry (a WiFi password). Panels that already exist want both.

The cross needed an axis the note didn't carry. Cardinality lumps all one-of-N together, so a chicken-head selector and a WiFi list share a cell that then reads as covered. Set stability is what separates them. The axis is invisible from inside hardware, where every option set is engraved at manufacture. That's why a catalogue modelled on period gear goes blind exactly where its software consumers live.

The period answer to a changing set was never a control but a re-labelable slot: jukebox title strips, Rolodex cards, scribble strips. The slot is manufactured, the label isn't.

Reference photos supersede the teletype for text entry. They're all ABC-order industrial keypads, whose colour-coded CANCEL, CLEAR/NO and ENTER/YES land on the palette untranslated. A survey adds two idioms unlike a keypad: the index typewriter, which selects on one control and commits on another, and the chorded keyset, which has no key per letter at all.
</content>
</entry>
<entry>
<title>docs: evidence sweep for the 64 undeclared ratio packages</title>
<updated>2026-07-14T06:22:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-14T06:22:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=4a5c4e7bfb7f94f20a6eb6a44806e64fa282efed'/>
<id>urn:sha1:4a5c4e7bfb7f94f20a6eb6a44806e64fa282efed</id>
<content type='text'>
Per package: description, requirer, install date, bucketed into candidates (30), dependency-pulled (6), orphaned libraries (7), and structural (21). The include/ignore pass reads the candidates bucket; rerun make package-diff after to confirm the count drops.
</content>
</entry>
<entry>
<title>feat(gallery): gallery upgrades — size/palette/screen-chips/spec-sheets, 25 new cards, grammar note</title>
<updated>2026-07-13T00:06:39+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-13T00:06:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=594995fa65149638e843f98b6a99a9cc2090457f'/>
<id>urn:sha1:594995fa65149638e843f98b6a99a9cc2090457f</id>
<content type='text'>
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).
</content>
</entry>
<entry>
<title>docs: catalogue net + bt failure modes and draft two doctor expansion specs</title>
<updated>2026-07-11T05:54:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-11T05:54:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=70d2ebcad0fbc43b1b80d4bfff3d8eddeda4a66b'/>
<id>urn:sha1:70d2ebcad0fbc43b1b80d4bfff3d8eddeda4a66b</id>
<content type='text'>
I ran the audio doctor's design arc for the net and bluetooth doctors: a blind by-layer research catalogue of failure modes, a symptom-cluster triage, then a spec per doctor.

The taxonomy holds ~74 network and ~55 bluetooth distinct root causes, each sourced to a forum or issue-tracker report, sorted into eight network and five bluetooth symptom clusters. The clusters are keyed to each doctor's existing probe ladder, so the fix-versus-guide boundary falls along the tiers the doctor already walks. Every entry carries a remedy class (auto, privileged, reboot-tail, or guide), reusing the audio doctor's four-class run-time privilege model.

The two specs are expansions, not rewrites. The net doctor is already the most mature of the three: its classifier reaches six of the eight clusters today, so its spec adds only the control-plane cluster (a rival network manager, a masked NetworkManager, a bad keyfile) and sharper auth naming. The bt doctor's chain is structurally right but blind at both ends, so its spec adds a probe that names the firmware blob the kernel already logged and a probe that catches an adapter that power-on won't keep on across reboots. Both stay DRAFT with three open decisions each, headed for spec-review.
</content>
</entry>
<entry>
<title>docs: fold the saturation-test findings into the audio taxonomy</title>
<updated>2026-07-11T04:30:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-11T04:30:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=716e3f1e46ec47d1550978edff70df7087d76849'/>
<id>urn:sha1:716e3f1e46ec47d1550978edff70df7087d76849</id>
<content type='text'>
A blind resample tested whether the nine-cluster taxonomy was representative or an artifact of the first sweep. Ten agents drew 108 fresh reports through five different doors per direction, mostly non-Arch and 2024-2026, none shown the clusters. Zero forced a new cluster. About 70 re-found existing entries. The other 34 were new distinct root causes that all fit existing clusters.

I folded the 34 new entries in, 16 input and 18 output, each tagged with its cluster and remedy class, and recorded the test and its verdict. The clusters are complete and stable. Entries keep growing under them without changing the design.
</content>
</entry>
</feed>
