# ^response:stream[]: the headers go with the first part, the result of @main is not sent @main[][before;error;failed] not sent # the first field of the response is not a header: see the failed start below $response:x-table[^table::create{a}] $response:x-test[sent with the first part] $before[$response:started] # $response:started can not be assigned ^try{ $response:started[stream] }{ $exception.handled(true) $error[$exception.comment] } # a part is checked before the headers are sent ^try{ ^response:stream(true) }{ $exception.handled(true) $response:x-bool[$exception.comment] } ^try{ ^response:stream[^file::stat[464.html]] }{ $exception.handled(true) $response:x-stat[$exception.comment] } # the headers are prepared before the state is set: a failure is an ordinary error, nothing is sent ^try{ ^response:stream[never sent] }{ $exception.handled(true) $failed[$exception.comment, started: [$response:started]] } $response:x-table[ok] ^response:stream[1. string, untainted: ^taint[] ] not sent either ^response:stream[^file::create[text;part.txt;2. file ]] $response:x-late[too late, not sent] ^response:stream[3. number and void: |] ^response:stream(3) ^response:stream[$void] ^response:stream[| ] ^check{^response:stream[$.a[1]]} ^check{^response:stream[^table::create{a}]} ^check{^response:stream{code}} ^response:stream[5. state, before the first part: [$before], assignment: $error, failed start: $failed, now: [$response:started] ] ^response:stream[6. the last part ] @check[code] ^try{$code}{ $exception.handled(true) ^response:stream[4. $exception.comment^#0A] } @postprocess[body] ^response:stream[not sent: @postprocess is not called]