aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-24 16:57:56 -0500
committerCraig Jennings <c@cjennings.net>2026-05-24 16:57:56 -0500
commitcad351ec00c3f78cfb6e203d87c7309a620e485c (patch)
treea3698e1e1c83269a437efa350024eb35246e08a1 /docs
parent02baa68063f02cc571789c03b1101c28d139200d (diff)
downloaddotemacs-cad351ec00c3f78cfb6e203d87c7309a620e485c.tar.gz
dotemacs-cad351ec00c3f78cfb6e203d87c7309a620e485c.zip
docs(load-graph): classify domain, integration, and optional modules
Eighth classification batch: 17 domain/integration/optional modules — ai-config, ai-vterm, browser-config, calendar-sync, calibredb-epub-config, chrono-tools, dirvish-config, dwim-shell-config, erc-config, eshell-config, eww-config, flyspell-and-abbrev, games-config, gloss-config, httpd-config, jumper, latex-config. I annotated each header, added a Batch 8 table to the inventory, and extended the validation allowlist. 82 of 102 modules are now classified. Almost all are eager only by init order and become command/hook/mode-loaded. calendar-sync stays eager when its .local.el is present. One new hidden dependency: calendar-sync guards its C-; g registration with a boundp shim and doesn't require keybindings, so the binding drops standalone. I deferred elfeed-config rather than annotate it. Its header edit triggers byte-compilation, and the existing tests only pass when the module loads as interpreted source — the compiled cj/elfeed-process-entries inlines an elfeed struct accessor the stubs can't intercept, and the batch test environment has no elfeed package to build real structs. It needs its tests rewritten first, recorded in the inventory and a new todo task. Also made the header allowlist scoping test durable: it used games-config (now classified) as its unclassified example; switched to a sentinel name plus a duplicate-entry guard.
Diffstat (limited to 'docs')
-rw-r--r--docs/design/module-inventory.org66
1 files changed, 47 insertions, 19 deletions
diff --git a/docs/design/module-inventory.org b/docs/design/module-inventory.org
index aa6d3c1f..519839f4 100644
--- a/docs/design/module-inventory.org
+++ b/docs/design/module-inventory.org
@@ -30,7 +30,8 @@ This inventory is independent from the helper inventory owned by
- Batch 5 (Dev entry-points, diff, help, lint, VC, Layer 2): classified. 9 modules.
- Batch 6 (Programming modules, Layer 2-4): classified. 10 modules.
- Batch 7 (Org modules, Layer 3-4): classified. 13 modules.
-- 65 of 102 modules classified.
+- Batch 8 (Domain / integration / optional modules, Layer 2-4): classified. 17 modules.
+- 82 of 102 modules classified. (elfeed-config deferred — see Pending classification.)
- No load-order changes have been made; =init.el= keeps its current eager order.
* Legend
@@ -180,6 +181,33 @@ and refile idle-timer caches are the side effects the spec tracks separately.
| =org-webclipper= | 4 | O/D/P | eager | command | none | org-protocol handler | yes |
| =hugo-config= | 3 | D/P | eager | command | user-constants, host-environment | package config | yes |
+** Batch 8 — Domain / integration / optional modules (Layer 2-4)
+
+AI, browser, calendar, ebook, file-manager, shell, IRC, web, games, and other
+domain workflows. Almost all are eager only by init order and become command-,
+hook-, or mode-loaded. calendar-sync stays eager when its .local.el is present.
+flyspell-and-abbrev is the one Core-UX member (text-mode hooks).
+
+| Module | Layer | Cat | Current | Target | Runtime requires | Top-level side effects | Direct load |
+|--------+-------+-----+---------+--------+------------------+------------------------+-------------|
+| =ai-config= | 3 | D/P | eager | command | keybindings, system-lib | cj/ai-keymap under cj/custom-keymap | yes |
+| =ai-vterm= | 3 | D | eager | command | cl-lib, seq, cj-window-geometry-lib, cj-window-toggle-lib, host-environment | 4 global keys | yes |
+| =browser-config= | 3 | D/P | eager | command | cl-lib | 1 global key | yes |
+| =calendar-sync= | 3 | D/S | eager (.local.el) | eager (.local.el) | cl-lib, subr-x, system-lib, cj-org-text-lib | calendar keymap (boundp-guarded), guarded timer/network | conditional |
+| =calibredb-epub-config= | 4 | O/D/P | eager | command | user-constants, subr-x | add-hook, advice-add, package config | yes |
+| =chrono-tools= | 3 | D/P | eager | command | user-constants | package config | yes |
+| =dirvish-config= | 3 | D/P | eager | command | user-constants, system-utils, host-environment, system-lib, external-open-lib | 3 add-hook, package config | yes |
+| =dwim-shell-config= | 3 | D/P | eager | command | cl-lib | package config | yes |
+| =erc-config= | 4 | O/D/P | eager | command | cl-lib, keybindings | ERC keymap under cj/custom-keymap | yes |
+| =eshell-config= | 3 | D/P | eager | command | system-utils | add-hook, advice-add, package config | yes |
+| =eww-config= | 3 | D/P | eager | command | cl-lib | package config | yes |
+| =flyspell-and-abbrev= | 2 | C/P | eager | hook | cl-lib | mode-hook package config | yes |
+| =games-config= | 4 | O | eager | command | none | package config | yes |
+| =gloss-config= | 4 | O/D/P | eager | command | none | package config | yes |
+| =httpd-config= | 4 | O/D/P | eager | command | none | package config | yes |
+| =jumper= | 4 | O/L | eager | command | cl-lib | jumper keymap | yes |
+| =latex-config= | 3 | D/P | eager | mode | none | package config | yes |
+
* Hidden dependencies found
Discoveries that belong to Phase 2 (make dependencies explicit). Recorded here,
@@ -205,33 +233,33 @@ not fixed here.
- =flycheck-config= binds =(:map cj/custom-keymap ...)= through use-package but
does not require keybindings, so the binding fails when the module loads
standalone. Phase 2 fix: require keybindings (or move to the registration API).
+- =calendar-sync= guards its =C-; g= registration with =(when (boundp
+ 'cj/custom-keymap) ...)= and does not require keybindings, so the binding
+ silently drops standalone. Same boundp-shim pattern. Phase 2/3 fix.
+
+* Deferred classification
+
+- =elfeed-config= is read and understood (Layer 4, O/D/P, command-loaded; runtime
+ requires user-constants, system-lib, media-utils) but its header is not yet
+ annotated. Annotating triggers the PostToolUse byte-compile, and its tests
+ (=tests/test-elfeed-config-helpers.el=) only pass when elfeed-config loads as
+ interpreted source: the byte-compiled =cj/elfeed-process-entries= inlines the
+ =elfeed-entry-link= struct accessor, so the tests' function stubs are bypassed
+ and the inlined accessor type-checks a real =elfeed-entry=. The batch test
+ environment has no elfeed package on the load-path, so the tests cannot build
+ real structs either. Classifying elfeed-config needs that test rewritten first
+ (define a stand-in =elfeed-entry= struct, or make elfeed loadable in batch).
+ Tracked as a todo task.
* Pending classification
-The remaining 37 modules required by =init.el=, awaiting per-module inspection.
+The remaining 20 modules required by =init.el=, awaiting per-module inspection.
Each batch reads these against their source and moves them into [[*Classified
modules][Classified modules]] with a load-graph header. Suggested batch order
follows the spec: text/editing command modules, then UI, then programming, then
Org, then optional integrations.
-- [ ] ai-config
-- [ ] ai-vterm
-- [ ] browser-config
-- [ ] calendar-sync
-- [ ] calibredb-epub-config
-- [ ] chrono-tools
-- [ ] dirvish-config
-- [ ] dwim-shell-config
- [ ] elfeed-config
-- [ ] erc-config
-- [ ] eshell-config
-- [ ] eww-config
-- [ ] flyspell-and-abbrev
-- [ ] games-config
-- [ ] gloss-config
-- [ ] httpd-config
-- [ ] jumper
-- [ ] latex-config
- [ ] linear-config
- [ ] local-repository
- [ ] lorem-optimum