<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/docs/specs, branch main</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-06-16T18:36:55+00:00</updated>
<entry>
<title>docs(messenger): add the per-app keybinding alphabet to the unification spec</title>
<updated>2026-06-16T18:36:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-16T18:36:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=43872c7c20e64098ee19a05727e651be6955b9a1'/>
<id>urn:sha1:43872c7c20e64098ee19a05727e651be6955b9a1</id>
<content type='text'>
I added a "Global Prefix Keybinding Alphabet" section to the messenger-unification spec. The per-app C-; prefix is a third keybinding surface, separate from the in-buffer chords (C-c C-c / C-c C-k / C-c C-a) and decision 6's cross-app verbs. Today the action leaf under each app is ad hoc: the same key means different things in Slack, Signal, Telega, and ERC. The section spells out the canonical actions, shows the inconsistency as a matrix, and proposes one leaf alphabet across all four, with the core seven verbs as the unifiable floor and the richer verbs as optional per-backend extensions.

I also added a smoke-first parity note to Phase 1 (build the controllable signel replacement to the capability floor, not its ceiling) and promoted the todo task to [#A] "Unify Signel and All Messengers into one UX" with a direct link to the spec.
</content>
</entry>
<entry>
<title>docs: spec the theme-studio preview-locate feature; file org-agenda app task</title>
<updated>2026-06-15T19:39:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T19:39:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=80e20cbf3030a321702bbe7f879e9de45afce028'/>
<id>urn:sha1:80e20cbf3030a321702bbe7f879e9de45afce028</id>
<content type='text'>
Spec the general preview interaction: hover any element for its section/face/value, click a current-pane element to flash and jump to its assignment row, off-pane elements hover-only via a derived face-&gt;owning-app registry that previews also read for cross-pane live rendering. Decisions 5/5 settled. File the locate feature and the dependent org-agenda app (break the agenda faces out of the org-mode pane into their own, with a representative week-agenda preview) as tasks; org-agenda depends on the locate feature.
</content>
</entry>
<entry>
<title>feat(face-diagnostic): Phase 4 render, command, and init wiring</title>
<updated>2026-06-15T17:37:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T17:37:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=f0bf56d1ee2cd48a4e0f835d4524c31ea4da13c7'/>
<id>urn:sha1:f0bf56d1ee2cd48a4e0f835d4524c31ea4da13c7</id>
<content type='text'>
Phase 4 completes the face/font diagnostic. cj/describe-face-at-point renders cj/--face-diagnosis-at into a read-only *Face Diagnosis* buffer (cj/face-diagnostic-mode), with a region-scan mode over distinct face-runs (capped at 20) and an out-of-scope banner. It is required in init.el. The render is split into small section formatters tested on captured plists, and the command is smoke-tested and live-verified in the daemon, where it already surfaces the active auto-dim remaps. The command name is settled as cj/describe-face-at-point. The keybinding stays Craig's pick, and face-name buttons plus the module-header allowlist entry are filed as a follow-up. The spec is marked implemented and renamed to its lifecycle filename. 35 ERT tests, byte-compile clean.
</content>
</entry>
<entry>
<title>feat(face-diagnostic): Phase 2 merged attributes and real font</title>
<updated>2026-06-15T17:27:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T17:27:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=4c623eff69aca86026a4985f0ebf004989ab0d2d'/>
<id>urn:sha1:4c623eff69aca86026a4985f0ebf004989ab0d2d</id>
<content type='text'>
Extend the diagnostic core with the effective merged attributes and the real-font layer. cj/--face-diag-merged-attributes folds the ordered, remap-expanded spec stack (overlays over text-props over default), taking the first non-unspecified value per attribute, labeled "computed". cj/--face-diag-real-font reports font-at's font, or "unavailable" under batch and on terminals. cj/--face-diagnosis-at now returns groups 0-4. Settles spec decision #7 (the hand-fold approach), pinned by fixtures: overlay-over-text-prop, a default remap, a face-symbol attribute. 23 ERT tests, byte-compile clean.
</content>
</entry>
<entry>
<title>refactor(themes): retire dupre, fall back to modus-vivendi</title>
<updated>2026-06-15T16:21:41+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T16:21:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=4f0a8d80fe208e67f6debac430024053c6958729'/>
<id>urn:sha1:4f0a8d80fe208e67f6debac430024053c6958729</id>
<content type='text'>
WIP, the theme-studio export, is the active theme. dupre was only the fallback and a structural reference. Move the fallback to the built-in modus-vivendi, guaranteed present everywhere this config loads. Delete the three dupre files plus its test and palette assets, and fix the stale comments that pointed at dupre-faces.el for the auto-dim and org-keyword faces (those moved to org-faces-config.el). Repoint the dupre-clear-theme spec's palette reference to git history.
</content>
</entry>
<entry>
<title>docs: move the two docs-root specs into docs/specs/</title>
<updated>2026-06-15T16:15:58+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T16:15:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=7bcf6dad2b1078994346b61531bce281a75519f9'/>
<id>urn:sha1:7bcf6dad2b1078994346b61531bce281a75519f9</id>
<content type='text'>
Finish the reorg: theme-studio-palette-generator (doing — core planner, UI, and generatortest gate shipped, one refinement open) and theme-studio-semantic-theme-architecture (not-started) lived in docs/ root. Moved both into docs/specs/ with status filenames, ID and STATUS drawers, and id-linked references. Fixed their Related links from ../todo.org to ../../todo.org for the deeper path.
</content>
</entry>
<entry>
<title>docs: move specs to docs/specs/ with lifecycle-status filenames</title>
<updated>2026-06-15T15:24:40+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T15:24:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=45e0f6e896b2c34de25d5c3aa18474c79d6a1e72'/>
<id>urn:sha1:45e0f6e896b2c34de25d5c3aa18474c79d6a1e72</id>
<content type='text'>
Separate the 27 formal specs from working notes. Specs move to docs/specs/, notes stay in docs/design/. Each spec carries its lifecycle in the filename (-spec, -spec-doing, -spec-implemented, -spec-superseded) plus an authoritative ID and STATUS property drawer. The status came from checking each spec against the code, not the doc's own field: 6 implemented, 8 in progress, 12 not started, 1 superseded.

Inbound links become org-id links so future status renames don't break them; code-comment paths repoint to docs/specs/. Working notes, inventories, reviews, and brainstorms stay in docs/design/.
</content>
</entry>
</feed>
