A channel's declared delivery guarantee is enforced, or the program is flagged — never…
A typed channel declares HOW its events are delivered:
channel SessionHibernated {
message: SessionHibernated
qos: at_least_once # delivered ≥1×, redelivered until acked
persistence: persistent_axonstore # durable — survives the consumer being down
}
Before v2.31.0, that declaration was a lie of omission: the grammar
type-checked qos: at_least_once persistence: persistent_axonstore, but
the runtime delivered NONE of it — a flow's emit buffered in-process and
never reached a daemon's listen, which the supervisor silently dropped
(the v2.4.0 axon-W009 honesty boundary named the gap). A guarantee with
no backing is exactly what
no_unwitnessed_advantage
condemns.
The law. A channel's declared delivery semantics (
qos+persistence) are enforced by the runtime, or the program is honestly flagged. The language never declares a delivery it does not make. Anemit Channel(payload)actually delivers to alisten Channel; alistener on a channel nothing produces is flagged, not silently dead.
What "enforced" means (the Computing + Logic pillars)
- Durable — a
persistent_axonstorechannel'semitAPPENDS to a durable outbox (an append-only log + a processed cursor). The event stays redeliverable until acked, so a consumer that was DOWN when the event was emitted picks the backlog up when it returns. (The crash-durable per-tenant Postgres outbox is the enterprise sink; the open standard is the abstraction + the in-memory reference.) - At-least-once — a delivered body that fails is RETRIED up to a bounded
ceiling, then DEAD-LETTERED (recorded, never silently lost, never an
infinite-redelivery storm — delivery stays TOTAL). An
at_most_oncechannel is best-effort by DECLARATION (one attempt, dropped on failure) — honest because the program asked for it. - Fan-out honored —
broadcastdelivers to EVERY listener; every other qos is single-consumer (one listener fires). The qos catalog MEANS what it says on the delivery path. - Replayable — every
emit(Chan-Output) and every delivery (Chan-Input) records aReplayToken(effectemit:/deliver:<channel>, the deterministicaxon.builtin.channel.v1slug) in the v1.4.0 audit chain. Channel delivery is mechanical → it replays bit-for-bit.
What "flagged, not silently dead" means (the Philosophy pillar)
A delivery the runtime CANNOT make is surfaced, never hidden:
- A
daemonlistener on a channel nothing emits to can never fire (it waits for an event no producer raises — the Kivi brief #39 defect). The compiler says so (axon-W009, the v2.4.0 diagnostic reworked: it fires precisely when the channel has no producer, and is SILENT when a producer exists, because v2.31.0 delivers that), and the deploy gate proves it independently (the PCCChannelDeliverySoundnessrefutes a consumed channel with no producer). - This is the same posture as
axon://logic/dispatch_vs_cognition'saxon-W004and the v2.4.0 boundary: the compiler never lets a program rely on a guarantee the runtime does not back.
Relation to the other laws
- The delivery analog of
effects_are_linear(a budgeted effect is a kept linear contract) andopen_data_is_total(a declared shape is a checkable expectation, never an enforced lie): each generalises the honesty pillar to a new surface — effects, open data, and now message delivery. - Carries
no_unwitnessed_advantageinto the transport: a delivery guarantee with no backing is presented as what it is (flagged), never overstated. The outbox row + the ack + the ReplayToken are the machine-checkable witness that the event was delivered.
The honest test: if a channel declares at_least_once /
persistent_axonstore, the runtime makes that delivery — durably,
retried, replayable — or the compiler + the deploy gate tell you exactly
why it cannot (no producer). A declared delivery is a kept promise, or it
is a flagged defect; it is never a silent lie.