aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-08-26 12:21:29 -0600
committerCraig Jennings <c@cjennings.net>2026-08-26 12:21:29 -0600
commit0afff24b6e0e80bc5b83ab233ada822caef728a6 (patch)
tree0ee4611865738add12e6873dcda4c89a918fcbb6
parent9b102d6fb23074bebc626bfe4e61c677c006ae37 (diff)
downloaddotemacs-0afff24b6e0e80bc5b83ab233ada822caef728a6.tar.gz
dotemacs-0afff24b6e0e80bc5b83ab233ada822caef728a6.zip
fix(init): declare malyon and 2048-game so a fresh machine installs them
a8571eff moved games-config behind with-eval-after-load 'malyon and deleted the two use-package forms, which were the only thing that ever installed malyon and 2048-game. The old elpa directories masked that until the 2026-08-13 reinstall rebuilt elpa from declarations and both packages came up absent. I declared them in init.el's entertainment section with :defer t and :commands, so use-package-always-ensure installs them while the module stays command-loaded. They live in init.el rather than games-config because that module only loads once malyon has, so it can't be what installs malyon. The new test checks that init.el declares both packages in forms use-package would install, and rejects :ensure nil and :load-path forms.
-rw-r--r--init.el7
-rw-r--r--tests/test-init-defer-games.el31
2 files changed, 37 insertions, 1 deletions
diff --git a/init.el b/init.el
index 1feb45dd..beb073ba 100644
--- a/init.el
+++ b/init.el
@@ -160,7 +160,12 @@
(require 'music-config)
;; games-config: deferred (load-graph Phase 4). malyon / 2048-game autoload
;; their own commands via package.el; games-config only supplies malyon's config,
-;; so load it when malyon loads rather than requiring it at startup.
+;; so load it when malyon loads rather than requiring it at startup. The two
+;; use-package forms exist so `use-package-always-ensure' installs the packages
+;; on a fresh machine: nothing else declares them, and a8571eff's removal left
+;; both absent after the 2026-08-13 reinstall. :defer t keeps them unloaded.
+(use-package malyon :defer t :commands (malyon))
+(use-package 2048-game :defer t :commands (2048-game))
(with-eval-after-load 'malyon (require 'games-config))
(require 'takuzu-config) ;; Takuzu (Binairo) puzzle on M-x takuzu; package in ~/code/takuzu
diff --git a/tests/test-init-defer-games.el b/tests/test-init-defer-games.el
index f3ec94de..4f349908 100644
--- a/tests/test-init-defer-games.el
+++ b/tests/test-init-defer-games.el
@@ -42,5 +42,36 @@ load failed to define malyon."
(should (featurep 'games-config))
(should (equal malyon-stories-directory "/tmp/games-defer-test/text.games/"))))
+(defun test-init-defer-games--declaration-installs-p (init package)
+ "Return non-nil when INIT (init.el's text) declares PACKAGE in an installing form.
+A `use-package' form that carries `:ensure nil' or `:load-path' does not
+install (use-package suppresses `use-package-always-ensure' for both), so
+the check rejects those rather than accepting any form that names the package."
+ (and (string-match (format "^(use-package %s\\b\\([^\n]*\\))[ \t]*$"
+ (regexp-quote package))
+ init)
+ (let ((args (match-string 1 init)))
+ (not (string-match-p ":ensure nil\\|:load-path" args)))))
+
+(ert-deftest test-init-defer-games-init-declares-both-packages ()
+ "Normal: init.el declares malyon and 2048-game in forms that install them.
+`use-package-always-ensure' is the installer for these two. a8571eff dropped
+the declarations along with the eager require, and both packages silently
+vanished on the next rebuild while every other test still passed."
+ (let ((init (with-temp-buffer
+ (insert-file-contents (expand-file-name "init.el" default-directory))
+ (buffer-string))))
+ (should (test-init-defer-games--declaration-installs-p init "malyon"))
+ (should (test-init-defer-games--declaration-installs-p init "2048-game"))))
+
+(ert-deftest test-init-defer-games-declaration-check-rejects-non-installing-forms ()
+ "Boundary: the declaration check refuses forms use-package would not install."
+ (should-not (test-init-defer-games--declaration-installs-p
+ "(use-package malyon :ensure nil :defer t)\n" "malyon"))
+ (should-not (test-init-defer-games--declaration-installs-p
+ "(use-package malyon :load-path \"~/x\" :defer t)\n" "malyon"))
+ (should (test-init-defer-games--declaration-installs-p
+ "(use-package malyon :defer t :commands (malyon))\n" "malyon")))
+
(provide 'test-init-defer-games)
;;; test-init-defer-games.el ends here