<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/scripts/theme-studio/face-coverage.org, 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-19T01:35:55+00:00</updated>
<entry>
<title>feat(theme-studio): add reproducible face-coverage generator and diff</title>
<updated>2026-06-19T01:35:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T01:35:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=8f56aced97f128b6b4d4dcf19fe5c1ba43447e6b'/>
<id>urn:sha1:8f56aced97f128b6b4d4dcf19fe5c1ba43447e6b</id>
<content type='text'>
face-coverage.org was rebuilt by a throwaway /tmp script each time. This makes it reproducible: face-coverage-dump.el dumps every face's name, docstring, and defface file from the live daemon (plus all group docs and package summaries), and face_coverage.py turns that into the tiered worklist (emacs-core / emacs-general / per-package), classifying each face by where its defface lives. make face-coverage regenerates the file; make face-coverage-diff reports the coverage delta against the committed copy.

The dump binds coding-system-for-write so writing the docstring JSON never drops into the interactive coding-system prompt. I validated the builder by regenerating and diffing against the hand-built worklist: headings identical, only the intro and one sharper description differ.
</content>
</entry>
<entry>
<title>docs(theme-studio): add package and subsystem descriptions to face coverage</title>
<updated>2026-06-19T01:26:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T01:26:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=25a24330c04d86c7c638e8114827881e88bee8b5'/>
<id>urn:sha1:25a24330c04d86c7c638e8114827881e88bee8b5</id>
<content type='text'>
I added a one-line description under each package and subsystem heading, pulled from its Emacs customization-group docstring or elpa package summary, with a parent-group fallback for sub-buckets. 109 of 120 buckets resolved; the rest are single-face buckets the face's own docstring already covers.
</content>
</entry>
<entry>
<title>docs(theme-studio): drain emacs-core orphans into subsystem and package buckets</title>
<updated>2026-06-19T01:14:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T01:14:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=35b5656c0fab2f16845e269d0c1f68d67d93f6d9'/>
<id>urn:sha1:35b5656c0fab2f16845e269d0c1f68d67d93f6d9</id>
<content type='text'>
I added the missing buckets so every built-in subsystem face and package face leaves emacs-core. abbrev and which-func became emacs-general subsystems; git-gutter, git-commit, twentyfortyeight (2048-game), yasnippet, and edit-indirect became their own package headings. The orphans that were genuinely core (mode-line-active, the tty-menu faces, the line-number tick faces, fixed-pitch-serif) joined the core set. emacs-core is now 74 faces with no orphans left.
</content>
</entry>
<entry>
<title>docs(theme-studio): regroup face coverage into core/general/package tiers</title>
<updated>2026-06-19T01:08:07+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T01:08:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=bcc778ad975a1c8f046132065600ed2b7c04c1a4'/>
<id>urn:sha1:bcc778ad975a1c8f046132065600ed2b7c04c1a4</id>
<content type='text'>
I regrouped the worklist into three top-level tiers: emacs-core (the standalone built-in faces), emacs-general (built-in subsystems like org, gnus, erc, diff, and vc, each a nested child), and one heading per third-party elpa package. The tier comes from where each face's defface lives, queried from the running Emacs: /usr/share/emacs is built-in, elpa is a package.
</content>
</entry>
<entry>
<title>docs(theme-studio): annotate face coverage list with docstrings</title>
<updated>2026-06-19T01:00:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T01:00:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=408a3a0fcf084072fd14adabed1ab282dad6d126'/>
<id>urn:sha1:408a3a0fcf084072fd14adabed1ab282dad6d126</id>
<content type='text'>
I added each face's Emacs docstring (first line) as the line beneath it, so the worklist reads as what every face is actually for. 1129 of 1293 faces carry one.
</content>
</entry>
<entry>
<title>docs(theme-studio): add face coverage master list</title>
<updated>2026-06-19T00:55:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-19T00:55:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=2174c6420802958db7a4860515f0844d814a718f'/>
<id>urn:sha1:2174c6420802958db7a4860515f0844d814a718f</id>
<content type='text'>
I added a hierarchical worklist of every known face: the live Emacs face-list unioned with everything the studio manages, grouped by package. Each face is marked DONE where the studio themes it, TODO where it doesn't, and each group is DONE, DOING, or TODO by how much of it is covered.

690 of 1293 faces are covered today. The gaps are mostly org, gnus, erc, custom, diff, and the built-in subsystems the package inventory doesn't reach yet.
</content>
</entry>
</feed>
