Three channels
result() — transport fault, protocol fault, broken observation
(NikaObservationInterrupted) — does not mean the engine’s workflow
failed; the run may still be executing. An admitted failure arrives as
resolved result data (status: 'failed' with the engine’s error.code),
so a try/catch alone never sees it. The two are different channels by
design.
Typed boundary failures
NikaOperationError covers engine refusals across operations — a run()
whose file fails admission (no handle is created), schedule operation
findings, and the other typed operation doors (NikaOperation lists them).
NikaEventBufferOverflowError refuses silent observer loss.
NikaRunOwnershipError prevents one facade from acting on another facade’s
run object. NikaEngineUnavailable reports local engine resolution failure.
Type index
Scan every public result and error type.
Run lifecycle
Keep observation and settlement separate.