#lang imperative-syndicate/test-implementation
;; An error signalled during setup of a new actor's root facet must
;; cause previous actions to be discarded, but must also cause any
;; initial-assertions, including specifically linkage assertions from
;; during/spawn, to be briefly visible.

(test-case
    [(assertion-struct request (id))
     (assertion-struct response (value))

     (spawn (during/spawn (request $id)
              (printf "starting request handler\n")
              (assert (response 'the-answer)) ;; must not be visible
              (printf "asserted response, shouldn't be visible\n")
              (error 'aieee "oh no")
              (printf "NOTREACHED\n")))

     (spawn (stop-when (asserted (observe (request _)))
              (printf "service listening\n")
              (react
               (assert (request 101))
               (stop-when (retracted (observe (request _)))
                 (printf "whole service vanished\n"))
               (stop-when (retracted (observe (request 101)))
                 (printf "specific instance vanished\n"))
               (stop-when (asserted (response $v))
                 (printf "response ~v\n" v)))))]
  (expected-output (list "service listening"
                         "starting request handler"
                         "asserted response, shouldn't be visible"
                         "specific instance vanished")))
