diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for tasty-sugar
 
+## 2.2.3.2 -- 2025-12-15
+
+ * Widen tasty-hedgehog constraints to allow earlier v1.3.
+ * Internally replace uses of head to assure completeness.
+
 ## 2.2.3.1 -- 2025-11-01
 
  * Bump constraints for parallel to allow 3.4.* [from Vekhir].
diff --git a/src/Test/Tasty/Sugar.hs b/src/Test/Tasty/Sugar.hs
--- a/src/Test/Tasty/Sugar.hs
+++ b/src/Test/Tasty/Sugar.hs
@@ -385,13 +385,14 @@
             let pVal = lookup name . expParamsMatch
                 expSrt = L.sortBy (compare `on` pVal) exp
                 expGrps = L.groupBy ((==) `on` pVal) expSrt
-                f es =
+                f es@(eh:_) =
                   let gn = fromMaybe (name <> " not specified")
                            $ (getParamVal =<<
-                              (lookup name $ expParamsMatch $ head es)
+                              (lookup name $ expParamsMatch eh)
                              )
                   in mkGroup gn <$> mkParams sweet es ps
-            in sequence $ f <$> expGrps
+                f [] = mkGroup (name <> " not specified") <$> mkParams sweet [] ps
+            in sequence (f <$> expGrps)
           Just vs -> let f v = mkGroup (name <> "=" <> v)
                                <$> mkParams sweet (subExp v) ps
                          subExp v = expMatching name v exp
diff --git a/src/internal/Test/Tasty/Sugar/Candidates.hs b/src/internal/Test/Tasty/Sugar/Candidates.hs
--- a/src/internal/Test/Tasty/Sugar/Candidates.hs
+++ b/src/internal/Test/Tasty/Sugar/Candidates.hs
@@ -105,13 +105,17 @@
                            $ DL.findIndices (`elem` (separators cube)) fName
                       let vs = i + 1
                       let ve = vs + vl
+                      let chkStart = do guard $ v `elem` subPath
+                                        return ((fst p, Explicit v), (0, 0))
                       if and [ ve + 1 < fl  -- v fits in fName[i..]
                              , v == DL.take vl (DL.drop vs fName)
-                             , head (DL.drop ve fName) `elem` (separators cube)
                              ]
-                         then return ((fst p, Explicit v), (toEnum vs, ve))
-                        else do guard $ v `elem` subPath
-                                return ((fst p, Explicit v), (0, 0))
+                         then case DL.drop ve fName of
+                                (fnc:_) -> if fnc `elem` (separators cube)
+                                           then return ((fst p, Explicit v), (toEnum vs, ve))
+                                           else chkStart
+                                [] -> chkStart
+                         else chkStart
       -- pmatchArbitrary will find a parameter with an unspecified value and
       -- assigned otherwise unmatched portions of the filename to that parameter.
       pmatchArbitrary =
@@ -142,9 +146,11 @@
       pAll = pmatches <> pmatchArbitrary
       dropSeps i =
         let lst = last $ DL.group $ DL.take (fromEnum i) fName
-        in if isSep $ head lst
-           then i - (toEnum (length lst) - 1)
-           else i
+        in case lst of
+             (lh:_) -> if isSep lh
+                       then i - (toEnum (length lst) - 1)
+                       else i
+             _ -> i
       mtchIdx = dropSeps
                 $ minimum
                 $ toEnum fle
@@ -217,7 +223,9 @@
                      -> CandidateFile -> Bool
 candidateMatchSuffix seps sfx rootf cf =
   let f = candidateFile cf
-      sfxsep = not (null sfx) && head sfx `elem` seps
+      sfxsep = case sfx of
+                 (sfxHead:_) -> sfxHead `elem` seps
+                 _ -> False
   in if null sfx
      then f == DL.takeWhile (not . (`elem` seps)) f
      else and [ length f >= (length (candidateFile rootf) + length sfx)
diff --git a/src/internal/Test/Tasty/Sugar/ExpectCheck.hs b/src/internal/Test/Tasty/Sugar/ExpectCheck.hs
--- a/src/internal/Test/Tasty/Sugar/ExpectCheck.hs
+++ b/src/internal/Test/Tasty/Sugar/ExpectCheck.hs
@@ -236,7 +236,7 @@
                . L.sortBy (compare `on` (length . expectedFile))
                -- Discard all but the best ParamMatch
               . L.reverse
-               . head
+               . (concat . take 1) -- safe version of head
                -- Group by equal ParamMatch (may be multiple files)
                . L.groupBy ((==) `on` expParamsMatch)
                -- Order this group by best ParamsMatch (Explicit) to worst
diff --git a/src/internal/Test/Tasty/Sugar/Ranged.hs b/src/internal/Test/Tasty/Sugar/Ranged.hs
--- a/src/internal/Test/Tasty/Sugar/Ranged.hs
+++ b/src/internal/Test/Tasty/Sugar/Ranged.hs
@@ -218,7 +218,9 @@
                                 -- don't match e and should therefore just be
                                 -- passed through.  Note that due to adjustExp
                                 -- this should usually be a null list.
-                              yv = getVal $ head yes
+                              yv = case yes of
+                                     (yh:_) -> getVal yh
+                                     [] -> error "yes nullity is checked before getting yv"
                           in case () of
                                _ | null yes -> e:bests
                                _ | ev == yv -> e:bests
diff --git a/src/internal/Test/Tasty/Sugar/Report.hs b/src/internal/Test/Tasty/Sugar/Report.hs
--- a/src/internal/Test/Tasty/Sugar/Report.hs
+++ b/src/internal/Test/Tasty/Sugar/Report.hs
@@ -48,11 +48,11 @@
 sweetsTextTable :: [CUBE] -> [Sweets] -> Text
 sweetsTextTable [] _ = "No CUBE provided for report"
 sweetsTextTable _ [] = "No Sweets provided for report"
-sweetsTextTable c s =
+sweetsTextTable (c:_) s =
   let cfg = defaultRenderConfig
             { rowGroup = "base"
                          : "rootFile"
-                         : (fromString . fst <$> take 1 (validParams $ head c))
+                         : (fromString . fst <$> take 1 (validParams c))
             , rowRepeat = False
             }
   in render cfg $ sweetsKVITable s
diff --git a/tasty-sugar.cabal b/tasty-sugar.cabal
--- a/tasty-sugar.cabal
+++ b/tasty-sugar.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.0
 
 name:                tasty-sugar
-version:             2.2.3.1
+version:             2.2.3.2
 synopsis:            Tests defined by Search Using Golden Answer References
 description:
   .
@@ -177,7 +177,7 @@
                , prettyprinter
                , raw-strings-qq >= 1.1 && < 1.2
                , tasty
-               , tasty-hedgehog >= 1.4 && < 1.5
+               , tasty-hedgehog >= 1.3 && < 1.5
                , tasty-hunit >= 0.10 && < 0.11
                , tasty-sugar
                , text
