diff --git a/core-telemetry.cabal b/core-telemetry.cabal
--- a/core-telemetry.cabal
+++ b/core-telemetry.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           core-telemetry
-version:        0.2.3.5
+version:        0.2.3.7
 synopsis:       Advanced telemetry
 description:    This is part of a library to help build command-line programs, both tools and
                 longer-running daemons.
diff --git a/lib/Core/Telemetry/Honeycomb.hs b/lib/Core/Telemetry/Honeycomb.hs
--- a/lib/Core/Telemetry/Honeycomb.hs
+++ b/lib/Core/Telemetry/Honeycomb.hs
@@ -182,7 +182,9 @@
             Just value -> insertKeyValue "trace.span_id" (JsonString (unSpan value)) meta1
 
         meta3 = case parent of
-            Nothing -> meta2
+            Nothing -> case trace of
+                Nothing -> meta2
+                Just _ -> insertKeyValue "meta.span_type" (JsonString "root") meta2
             Just value -> insertKeyValue "trace.parent_id" (JsonString (unSpan value)) meta2
 
         meta4 = case trace of
diff --git a/lib/Core/Telemetry/Observability.hs b/lib/Core/Telemetry/Observability.hs
--- a/lib/Core/Telemetry/Observability.hs
+++ b/lib/Core/Telemetry/Observability.hs
@@ -437,12 +437,14 @@
             internal ("Leave " <> label)
 
         -- extract the Datum as it stands after running the action, finalize
-        -- with its duration, and send it
+        -- with its duration, and send it. Note that we don't use the original
+        -- start time as it may have been overwritten.
         finish <- getCurrentTimeNanoseconds
         datum2 <- readMVar v2
+        let start2 = spanTimeFrom datum2
         let datum2' =
                 datum2
-                    { durationFrom = Just (unTime finish - unTime start)
+                    { durationFrom = Just (unTime finish - unTime start2)
                     }
 
         let tel = telemetryChannelFrom context
