 M src/runner.js
--- diff HEAD ---
diff --git a/src/runner.js b/src/runner.js
index 22067749..29997987 100755
--- a/src/runner.js
+++ b/src/runner.js
@@ -5068,6 +5068,11 @@ function wrapMonitorWithSoftOvertime(monitor, detail) {
         cancel(overtimeTimer);
         overtimeTimer = null;
       }
+      // Event-loop pressure can defer the scheduled overtime callback until after
+      // the subprocess already exited; journal once on close if the ceiling was crossed.
+      if (!overtimeFired && clock() - startedAt >= hardCeilingMs) {
+        fireOvertime();
+      }
       return monitor.close();
     },
   };
