   (list (cons "^[^\n]\\{10,\\}$"
               "Subject is too short (<10) and should be more descriptive")
 
-        (cons "^\\(\\(revert\\|bump\\)!?: \\|[^\n]\\{,80\\}\\)$"
-              "Subject too long; <=72 is ideal, 80 is max")
+        (cons "^\\(\\(revert\\|bump\\)!?: \\|[^\n]\\{,72\\}\\)$"
+              "Subject too long; <=50 is ideal, 72 is max")
 
         (cons (concat
                "^\\("

              "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 ()
                (when (looking-at "[^ :!(]+![(:]")

        (cons (lambda ()
                (re-search-forward "^\\(\\(Fix\\|Clos\\|Revert\\)ed\\|Reference[sd]\\|Refs\\): "
                                   nil t))
              "Use present tense & imperative mood for references, and without a colon")

        (cons (lambda ()
                (catch 'found
                  (while (re-search-forward "^\\(?:Fix\\|Close\\|Revert\\|Ref\\) \\([^\n]+\\)$"
                                            nil t)
                    (let ((ref (match-string 1)))
                      (or (string-match "^\\(https?://.+\\|[^/]+/[^/]+\\)?\\(#[0-9]+\\|@[a-z0-9]+\\)" ref)
                          (string-match "^https?://" ref)
                          (and (string-match "^[a-z0-9]\\{12\\}$" ref)
                               (= (car (doom-call-process "git" "show" ref))
                                  0))
                          (throw 'found t))))))
              "Invalid footer reference (should be an issue, PR, URL, or commit)")

        ;; TODO Check that bump/revert SUBJECT list: 1) valid modules and 2)
        ;;      modules whose files are actually being touched.
