diff --git a/distribution-opensuse.cabal b/distribution-opensuse.cabal
--- a/distribution-opensuse.cabal
+++ b/distribution-opensuse.cabal
@@ -1,5 +1,5 @@
 name:               distribution-opensuse
-version:            1.1.1
+version:            1.1.2
 synopsis:           Types, functions, and tools to manipulate the openSUSE distribution
 description:        This library is a loose collection of types, functions, and tools that
                     users and developers of the
@@ -8,7 +8,8 @@
 license-file:       LICENSE
 author:             Peter Simons
 maintainer:         simons@cryp.to
-tested-with:        GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3
+tested-with:        GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7
+                  , GHC == 9.0.2, GHC == 9.2.1
 category:           Distribution
 homepage:           https://github.com/peti/distribution-opensuse/
 bug-reports:        https://github.com/peti/distribution-opensuse/issues
@@ -55,17 +56,12 @@
                     , time
                     , turtle
   default-language:   Haskell2010
-  default-extensions: MonadFailDesugaring
-  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                      -Wredundant-constraints
 
 executable guess-changelog
   main-is:            guess-changelog.hs
   build-depends:      base, containers, distribution-opensuse, text, turtle
   default-language:   Haskell2010
-  default-extensions: MonadFailDesugaring
-  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                      -Wredundant-constraints -threaded
+  ghc-options:        -threaded
 
 test-suite test-strip-space
   type:               exitcode-stdio-1.0
@@ -73,6 +69,4 @@
   hs-source-dirs:     tests
   build-depends:      base, distribution-opensuse
   default-language:   Haskell2010
-  default-extensions: MonadFailDesugaring
-  ghc-options:        -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates
-                      -Wredundant-constraints -threaded
+  ghc-options:        -threaded
diff --git a/src/OpenSuse/GuessChangeLog.hs b/src/OpenSuse/GuessChangeLog.hs
--- a/src/OpenSuse/GuessChangeLog.hs
+++ b/src/OpenSuse/GuessChangeLog.hs
@@ -112,6 +112,13 @@
 unDiff (Both txt _) = txt
 unDiff (Second txt) = txt
 
+-- |
+--
+-- TODO:
+--
+-- * Don't match @guess-changelog.hs@. We should probably avoid a couple of
+--   suffixes that we know to be associated with code rather than text.
+
 findChangeLogFiles :: FilePath -> Shell FilePath
 findChangeLogFiles dirPath =
   onFiles (grepText changelogFilePattern) (filename <$> ls dirPath)
diff --git a/src/OpenSuse/Types/Issue.hs b/src/OpenSuse/Types/Issue.hs
--- a/src/OpenSuse/Types/Issue.hs
+++ b/src/OpenSuse/Types/Issue.hs
@@ -9,9 +9,8 @@
 import OpenSuse.Prelude
 
 import Data.Aeson
-import Data.List
+import Data.List ( isSuffixOf )
 import Data.Text ( unpack )
-import GHC.Generics ( Generic )
 import Text.Read
 
 data Issue = Bsc Natural
@@ -32,8 +31,9 @@
 showIssue (Bsc n) = "bsc#" ++ show n
 
 parseCve :: String -> Issue
-parseCve cve = Cve (safeRead "cve-year" y) (safeRead "cve-number" n)
-  where (y,'-':n) = break (=='-') cve
+parseCve cve = case break (=='-') cve of
+                 (y,'-':n) -> Cve (safeRead "cve-year" y) (safeRead "cve-number" n)
+                 _         -> error ("malformed CVE: " ++ show cve)
 
 parseBsc :: String -> Issue     -- TODO: https://gitlab.suse.de/l3ms/smelt/issues/184
 parseBsc bsc = Bsc (safeRead "bsc number" (stripFixmeSuffix bsc))
