<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/face-diagnostic.el, 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-15T18:58:04+00:00</updated>
<entry>
<title>feat(face-diagnostic): bind cj/describe-face-at-point to C-h F</title>
<updated>2026-06-15T18:58:04+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T18:58:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=a4add68ff8a4d84034f0412acd30b3494a24acad'/>
<id>urn:sha1:a4add68ff8a4d84034f0412acd30b3494a24acad</id>
<content type='text'>
Bind the diagnostic in the help cluster on C-h F (Face), Craig's pick. It shadows helpful-function, which also sits on C-h F in this config. face-diagnostic is required after help-config, so this binding wins. A test asserts C-h F resolves to the command.
</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 3 per-face provenance trace</title>
<updated>2026-06-15T17:30:30+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T17:30:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=3367f238927a9c17c6429025bc913e913efb60ce'/>
<id>urn:sha1:3367f238927a9c17c6429025bc913e913efb60ce</id>
<content type='text'>
Add group 5 to the diagnostic core: per-face provenance. cj/--face-diag-provenance reports, for each named face in the stack, which themes set it (theme-face), whether config saved or customized it (saved-face / customized-face), its :inherit chain, and the attributes still unspecified after inherit-following (the ones that fall through to the default -- the direct read on the all-white-elfeed class of bug). The version-sensitive theme-face / saved-face internals sit behind small accessors that treat missing properties as absent rather than erroring. 30 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>feat(face-diagnostic): Phase 1 pure read model for the face/font diagnostic</title>
<updated>2026-06-15T17:20:27+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-15T17:20:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=a18a78b91a214e0fe3c3a58a82cb7d8ee72f763f'/>
<id>urn:sha1:a18a78b91a214e0fe3c3a58a82cb7d8ee72f763f</id>
<content type='text'>
modules/face-diagnostic.el carries the Phase 1 core of the face-at-point diagnostic: cj/--face-diagnosis-at returns a plist with the buffer classification (theme-faced / terminal-ansi / document-shr / image-no-text), the character context (char, codepoint, Unicode name, script), and the face stack separated by source (text-property faces, overlays by priority, active face-remapping-alist entries, default). Built from small pure helpers, no display or prompts. 17 ERT tests cover Normal/Boundary/Error per helper. Not yet wired into init.el; the interactive command, rendering, and keybinding land in Phase 4. Spec: docs/specs/face-font-diagnostic-popup-spec.org.
</content>
</entry>
</feed>
