                                    nil t))
               "Use present tense/imperative voice for footer references, without a colon")
 
-        ;; TODO Check that bump/revert SUMMARY list: 1) valid modules and 2)
+        ;; TODO Check that bump/revert SUBJECT list: 1) valid modules and 2)
         ;;      modules whose files are actually being touched.
 
         ;; TODO Ensure your diff corraborates your SCOPE

;;; Git hooks

(defvar doom-cli-commit-rules
  (list (cons "^[^\n]\\{10,\\}\n"
              "Commit summary is too short (<10) and should be more descriptive")

        (cons "^\\(revert!?:[^\n]\\{,72\\}\\|[^\n]\\{,80\\}\\)\n"
              "Commit summary too long; <=72 is ideal, 80 is max")

        (cons (concat
               "^\\("


        (cons (lambda ()
                (looking-at "^\\(bump\\|revert\\|release\\|merge\\|module\\)!?([^)]+):"))
              "This type's scope goes after the colon, not before")

        (cons (lambda ()
                (when (looking-at "[^ :!(]+!?(\\([^)]+\\)): ")
                  (not
                   (cl-loop with scopes =
                            (cl-loop for path
                                     in (cdr (doom-module-load-path (list doom-modules-dir)))
                                     for (_category . module)
                                     = (doom-module-from-path path)
                                     collect (symbol-name module))
                            with scopes-re =
                            (string-join (cons (concat "^" (regexp-opt scopes) "$")
                                               '("^&" "^cli$"))
                                         "\\|")
                            for scope in (split-string (match-string 1) ",")
                            if (string-match scopes-re scope)
                            return t))))
              "Invalid scope")

        (cons (lambda ()
