 (s/def ::stream (s/and strm/sink?
                        strm/source?))
 
-(s/def ::state-wrapper (s/keys :req [::specs/state-atom]
-                               :opt [::stream]))
+(s/def ::unstarted-state-wrapper (s/keys :req [::specs/state-atom]))
+(s/def ::state-wrapper (s/merge ::unstarted-state-wrapper
+                                (s/keys :req [::stream])))
 
 (s/def ::source-tags #{::child-> ::parent->})
 (s/def ::input (s/tuple ::source-tags bytes?))

    (let [{{:keys [::specs/->child-buffer]} ::specs/incoming
           :keys [::specs/message-loop-name]
           :as state} @state-atom
          pre-log (utils/pre-log message-loop-name)]
      (log/info pre-log
                "Top of parent->")
      (when-not state
        (log/warn pre-log
                  "nil state. Things went sideways recently"))
      ;; It seems very wrong to do this here. But I really need
      ;; it to happen as fast as possible, because it tends to

                                       (nil? watch-to-child))
                                0
                                next-based-on-earliest-block-time)
        _ (log/debug prelog
                     (cl-format nil
                                "After [pretending to] adjusting for closed/ignored child watcher: ~:d"
                                based-on-closed-child))
        ;; Lines 302-305
        actual-next (max based-on-closed-child recent)
