1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//! Conversation patterns over the liminal participant substrate —
//! request-response and subscription (F-3a), pub/sub and the workflow
//! facade (F-3b): the four patterns this crate maps onto conversations
//! so components interact through conversations rather than direct
//! function calls.
//!
//! # What is here
//!
//! - [`ConversationHandle`] — the transport-agnostic entry (design D4): no
//! signature names a transport, and the embedded transport arrives later
//! behind these same types.
//! - **Request-response** (`frame:conv-request@v1`): typed request with a
//! caller-supplied deadline riding the push-side wall; closed outcome set
//! ([`RequestOutcome`]); late and duplicate replies have defined, observable
//! fates on the typed anomaly surface ([`Anomaly`]).
//! - **Subscription** (`frame:conv-subscription@v1`): typed events in the
//! substrate's proven delivery order ([`SubscriptionItem`] documents the
//! strength: ordered, contiguous, sender-excluded, membership-forward).
//! - The caller-owned resume boundary ([`ResumeStore`], [`JoinGrant`]):
//! restore-then-reattach resume replaying the unacked window from the
//! committed cursor (F-0c §R4, proven).
//! - **Pub/sub** (`frame:conv-pubsub@v1`): caller-minted
//! [`PublicationId`], substrate-only fan-out, O(1) sequence dedup,
//! typed [`PublicationItem`] stream with membership news and the typed
//! gap contract (F-3b R1; the A4-superseded honest contract is in the
//! module docs).
//! - **The workflow pattern** ([`workflow`]) — one durable conversation
//! as a typed facade over exactly one aion workflow/run lineage (F-3b
//! R2): explicit-key open with the honest weaker idempotency contract,
//! reconstruction from held identity, reopen of terminal reopenable
//! runs, typed contributions, and event-driven observation with the
//! exhaustive progress/terminal projection.
//!
//! # What is deliberately NOT here (seams named)
//!
//! - **The embedded transport** — a later optimization behind the SAME
//! handle types (design D4); its absence is stated, not implied away.
//! - **A schema-as-data registry** — v1's schema IS the typed Rust message
//! and validation IS serde at both ends (F-3a R1's pinned ruling).
//!
//! # Honest gates carried from the substrate characterization
//!
//! Characterized at published liminal 0.3.0 (`docs/briefs/F-0c-FINDINGS.md`)
//! and RE-CHARACTERIZED at published liminal 0.3.1 — the early-car
//! republish, whose 0.3.0→0.3.1 delta is a haematite 0.6.1 repin plus a
//! dropped always-None config field — by re-running this crate's entire
//! battery, including every live-server suite, green against the =0.3.1
//! pin (2026-07-21, chore/liminal-031-consume). Every gate below held
//! unchanged at 0.3.1:
//!
//! - **Peer death surfaces typed, before the deadline (ASK-4 discharged at
//! liminal 0.3.2).** Responder death mid-request is delivered, not waited
//! out: the caller observes [`RequestOutcome::ResponderFailed`] ahead of
//! the deadline wall, and the subscription stream carries the death
//! exactly once as [`SubscriptionItem::PeerFailed`] — one death, one
//! delivery per surface (proven at the socket,
//! `tests/pattern_crash_resume.rs`). The 0.3.0/0.3.1 truth this bullet
//! originally recorded — silence, no live producer for the typed
//! mapping — was superseded when the upstream death-delivery unit landed;
//! the deadline remains the wall only when nothing is there to die.
//! - **The receive quantum is hardcoded upstream (upstream ASK-2).** The
//! substrate's 5-second IO quantum is not caller-settable and an elapsed
//! quantum is distinguishable from a dead socket only by error text; this
//! crate isolates that seam in one place, treats elapse as a benign
//! re-arm, and every wait parameter it exposes is a pure wait quantum —
//! an elapsed wait returns `Ok(None)`-shaped quiet, never a protocol
//! outcome.
//! - **No backpressure vocabulary exists on the participant surface.** A
//! slow consumer surfaces nothing to anyone (F-0c §R5); this crate adds
//! no parallel vocabulary and will inherit the substrate's typed
//! Accept/Defer/Reject home when the upstream wiring lands (F-3a R5).
pub
pub
pub
pub use ;
pub use ;
pub use BusAttachment;
pub use Envelope;
pub use ;
pub use ConversationHandle;
pub use ;
pub use ;
pub use ResumeStore;