<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/docs/prototypes, 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-08-01T03:45:08+00:00</updated>
<entry>
<title>docs: keep the timeline face's design history, not its engine</title>
<updated>2026-08-01T03:45:08+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-08-01T03:45:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1e81319c7a41623a8e361ef3cc3898b9a023530b'/>
<id>urn:sha1:1e81319c7a41623a8e361ef3cc3898b9a023530b</id>
<content type='text'>
Six prototypes from the world-face work, kept as the record of how the design got to where it is. The first five are self-contained; prototype 6 and the option-A pages load the engine, so they read here but do not run here.

The engine stays out on purpose. It carries the list of places I travel to, with coordinates, and this repo is published — a design record is not worth publishing that for. The README says how to copy the modules in locally to run prototype 6, and gitignore keeps such a copy from being committed by accident.

Dropping the prototype test target with it: the engine and its tests now live in one place, so the suite runs once rather than twice over identical files.
</content>
</entry>
<entry>
<title>refactor(prototypes): merge casting widgets into Dupre kit</title>
<updated>2026-07-25T20:00:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-25T20:00:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=ef00914a4dc5ef1347ca0bf9850157e659d0e654'/>
<id>urn:sha1:ef00914a4dc5ef1347ca0bf9850157e659d0e654</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(prototypes): world-clock face design iterations</title>
<updated>2026-07-24T05:29:42+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-24T05:29:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=f8e08a8ee1336057ea9ee90a4d0e3f93d7c82300'/>
<id>urn:sha1:f8e08a8ee1336057ea9ee90a4d0e3f93d7c82300</id>
<content type='text'>
Four working prototypes behind the vertical clock line that shipped as the world face: even spacing, true-longitude spacing, the centered both-sides refinement, and the horizontal variant. Kept as the walkable design history the face commit refers to.
</content>
</entry>
<entry>
<title>docs(settings-panel): seal the prototype arc and open the build</title>
<updated>2026-07-22T20:15:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-22T20:15:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=e5747a5d555547b9b13aa4310dec03dcd4dcb32b'/>
<id>urn:sha1:e5747a5d555547b9b13aa4310dec03dcd4dcb32b</id>
<content type='text'>
Prototypes P12-P37 land, along with the night-watch and levels-compare pages plus the shared-engine updates and the kit-candidate file. The spec flips from DRAFT through READY to DOING with rewritten implementation phases and seven recorded build findings. The build tasks are filed in todo.org, and phase 1 is closed against the dotfiles commits.
</content>
</entry>
<entry>
<title>fix(design): clamp the gauge once so needle and readout agree</title>
<updated>2026-07-21T04:43:11+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T04:43:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1844428cb3b769e830249b1b60433fa28d14cb77'/>
<id>urn:sha1:1844428cb3b769e830249b1b60433fa28d14cb77</id>
<content type='text'>
The needle angle clamped to 0-100 while the readout rendered the raw value, so a gauge fed 150 pinned the needle at +60 degrees under a "150%" label. A shared gallery-widget--clamp-value now feeds both halves.

Two hygiene fixes ride along. The module requires cl-lib explicitly instead of leaning on svg.el's transitive require. The token-file load resolves its directory through gallery-widget--source-dir, which falls back to default-directory when the form is re-evaluated outside a load and outside a file buffer (both location variables are nil there and file-name-directory errored).
</content>
</entry>
<entry>
<title>docs: expand desktop-settings spec and add panel prototypes</title>
<updated>2026-07-20T04:45:24+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-20T04:45:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=25f16a8f995cad5c6edc8050c3b17b7fbab2ff95'/>
<id>urn:sha1:25f16a8f995cad5c6edc8050c3b17b7fbab2ff95</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>docs: file interface design references</title>
<updated>2026-07-19T20:44:24+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-19T20:44:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=e1db61a0b2b8556651b1b7a05252c4aa46dda25f'/>
<id>urn:sha1:e1db61a0b2b8556651b1b7a05252c4aa46dda25f</id>
<content type='text'>
Record the reconciled weather work and future component direction.\nFile the clock and retro-interface reference materials for later design work.
</content>
</entry>
<entry>
<title>feat(gallery): bring the well-through-response ten to the extraction bar</title>
<updated>2026-07-19T00:00:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-19T00:00:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1dd929df9607bb1ff1d50e5afd535f4a3186c619'/>
<id>urn:sha1:1dd929df9607bb1ff1d50e5afd535f4a3186c619</id>
<content type='text'>
outputWell, toast, annunciator, tapeCounter, freqScale, patchBay, dataMatrix, warningFlag, seg14, and responseGraph each get the contract comment. The six DOM builders take dupre- prefixes across their markup and CSS blocks. patchBay's live jack and the annunciator's master caution adopt the kit-wide dupre-hot and dupre-on modifiers, and the annunciator board takes dupre-warn and dupre-fault. freqScale reuses the shared scoped dupre-tick and dupre-mk (as the tuner and dualknob do) and compounds its unit label to dupre-fs-band, since dupre-band is the EQ's. The four SVG-stage builders style through the shared .rsvg stage and inline attributes, so they get the SVG-built contract comment and no prefixes.

The annunciator documented a 0..2 state per cell but painted an undefined class on an out-of-range initial state or set(). It now clamps at build and at set. Two probe checks cover the batch: one fails red without that clamp, one drives each renamed DOM builder through its handle to catch a class-name mismatch the exception scan can't see.

Extraction audit: 104/111 contract comments.
</content>
</entry>
<entry>
<title>feat(gallery): bring the CRT-through-engraved ten to the extraction bar</title>
<updated>2026-07-18T23:05:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-18T23:05:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=2f87baa926531d7c8f2a9bd149638ed1a79a3604'/>
<id>urn:sha1:2f87baa926531d7c8f2a9bd149638ed1a79a3604</id>
<content type='text'>
roundCrt, attitudeIndicator, headingBug, chartRecorder, verticalTape, twinNeedle, comfortMeter, badges, tabularReadout, and engravedLabel each get the contract comment. The three DOM builders take dupre- prefixes across their markup and CSS blocks: badges (dupre-badge with the kit-wide dupre-red plus a new dupre-ghost), tabularReadout (dupre-readout and dupre-unit), and engravedLabel (dupre-engrave and dupre-cnt).

The rename surfaced a dead rule: .readout .u selects a descendant, but the unit caption is a sibling, so its style never applied. The caption now styles through a standalone .dupre-unit rule.

The builders now enforce their documented domains at build, not only in set(): twinNeedle and comfortMeter clamp their initial opts through set(), headingBug normalizes opts.value to 0..360, and badges coerces junk variants through one norm() shared by build and set(). Two probe checks cover the gates and drive the renamed DOM.

Extraction audit: 94/111 contract comments.
</content>
</entry>
<entry>
<title>feat(gallery): bring the needle-through-edge ten to the extraction bar</title>
<updated>2026-07-18T22:21:24+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-18T22:21:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=cf12fe73fc279914fd3f615851decc1b0449a8bb'/>
<id>urn:sha1:cf12fe73fc279914fd3f615851decc1b0449a8bb</id>
<content type='text'>
crossNeedle, thermometer, bourdon, stripChart, corrMeter, battCells, mcVu, chromeMinMax, aviationGauge, and edgeMeter each get the contract comment. The six DOM builders take dupre- prefixes across their markup and CSS blocks. Internals go compound where gauge, fader, and nixie already hold the plain names: bourdon's needle, hub, and cap, corrMeter's face, arc, needle, and label, crossNeedle's arc, and thermometer's tube and fill. crossNeedle's nA and nB become dupre-fwd and dupre-rfl, and battCells moves its cell modifiers to the shared dupre-on and dupre-warn.

The handles now enforce their documented domains: the needle meters clamp set() to 0-100, stripChart floors its history at two samples and survives a non-array set(), battCells floors its cell count at one, and mcVu clamps and paints opts.value at build instead of ignoring it for a hard-coded .35. Two probe checks cover the gates and drive the renamed DOM.

Extraction audit: 84/111 contract comments.
</content>
</entry>
</feed>
