provider+cli+debug-repl: fix silent watchdog death from prelude make-time shadow

ober

b25e9fdfd7a75f9be180264ff356dc41d3c93dc4

diff --git a/src/jcode/core/debug-repl.ss b/src/jcode/core/debug-repl.ss
index 8a91291..fa9a5e6 100644
--- a/src/jcode/core/debug-repl.ss
+++ b/src/jcode/core/debug-repl.ss
@@ -18,7 +18,8 @@
         stop-jcode-repl!
         jcode-repl-port)
 
-(import :jcode/core/log)
+(import :jcode/core/log
+        :std/misc/thread)
 
 (def logger (make-logger "debug-repl"))
 
@@ -74,7 +75,7 @@
 (def O_NONBLOCK      (if *is-osx?* #x4 #x800))
 (def EINTR 4)
 (def EAGAIN          (if *is-osx?* 35 11))
-(def *retry-delay* (make-time 'time-duration 10000000 0))  ;; 10ms
+(def *retry-delay-secs* 0.010)  ;; 10ms; (sleep (make-time ...)) is broken because the prelude shadows make-time
 
 ;; ---- Helpers ----
 
@@ -198,11 +199,11 @@
            (fork-thread (lambda () (client-repl client-fd)))
            (loop))
           ((let ((e (get-errno))) (or (= e EINTR) (= e EAGAIN)))
-           (sleep *retry-delay*)
+           (thread-sleep! *retry-delay-secs*)
            (loop))
           (else
            (when *server-running*
-             (sleep *retry-delay*)
+             (thread-sleep! *retry-delay-secs*)
              (loop))))))))
 
 ;; ---- Public API ----
diff --git a/src/jcode/provider/provider.ss b/src/jcode/provider/provider.ss
index fffe4ad..ad28fc3 100644
--- a/src/jcode/provider/provider.ss
+++ b/src/jcode/provider/provider.ss
@@ -326,23 +326,30 @@
             (unless (vector-ref closed? 0)
               (vector-set! closed? 0 #t)
               (rustls-close conn)))
+          ;; Use thread-sleep!, not (sleep (make-time ...)) -- the prelude
+          ;; shadows make-time with a date-style constructor, so the latter
+          ;; raises in `sleep`. Guard the loop so any future regression
+          ;; can't silently kill the watchdog and let the stream hang.
           (fork-thread
             (lambda ()
-              (let loop ()
-                (sleep (make-time 'time-duration 0 5))
-                (cond
-                  ((vector-ref done? 0) (void))
-                  ((>= (- (time-second (current-time))
-                          (vector-ref last-activity 0))
-                       timeout-secs)
-                   (vector-set! timed-out? 0 #t)
-                   (when (tracing?)
-                     (log-trace logger "stream-timeout"
-                       `((url . ,(redact-url url))
-                         (idle-secs . ,(- (time-second (current-time))
-                                          (vector-ref last-activity 0))))))
-                   (close-once!))
-                  (else (loop))))))
+              (guard (e [#t (when (tracing?)
+                              (log-trace logger "watchdog-died"
+                                `((err . ,(err->string e)))))])
+                (let loop ()
+                  (thread-sleep! 5)
+                  (cond
+                    ((vector-ref done? 0) (void))
+                    ((>= (- (time-second (current-time))
+                            (vector-ref last-activity 0))
+                         timeout-secs)
+                     (vector-set! timed-out? 0 #t)
+                     (when (tracing?)
+                       (log-trace logger "stream-timeout"
+                         `((url . ,(redact-url url))
+                           (idle-secs . ,(- (time-second (current-time))
+                                            (vector-ref last-activity 0))))))
+                     (close-once!))
+                    (else (loop)))))))
           (dynamic-wind
             (lambda () (void))
             (lambda ()
diff --git a/src/jcode/ui/cli.ss b/src/jcode/ui/cli.ss
index 73fb52d..293577b 100644
--- a/src/jcode/ui/cli.ss
+++ b/src/jcode/ui/cli.ss
@@ -334,7 +334,9 @@ EXAMPLES:
                   (set-car! *stream-abort* #t))
                 (unless (car *stream-abort*) (loop)))
               (begin
-                (sleep (make-time 'time-duration 20000000 0))
+                ;; thread-sleep!; (sleep (make-time ...)) is broken
+                ;; because the prelude shadows make-time.
+                (thread-sleep! 0.020)
                 (loop)))))))))
 
 (def (interruptible-stream-cb token)