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
//! Lifecycle router skeleton: pre-dispatch validation and adapter resolution.
//!
//! Lifeloop owns lifecycle event routing as a neutral mechanism. Clients
//! own product behavior: a client receives the routed event via a
//! callback and decides what (if anything) to deliver. The router is the
//! seam that turns a `CallbackRequest` plus the adapter manifest registry
//! into a typed [`RoutingPlan`] that downstream stages — capability
//! negotiation, callback invocation, receipt emission, failure mapping —
//! consume without re-validating wire-level invariants.
//!
//! # Boundary (issue #7, skeleton slice)
//!
//! This module owns:
//! * pre-dispatch validation of [`crate::CallbackRequest`] envelopes
//! (schema version, non-empty identifiers, frame-context invariants,
//! payload-ref structure);
//! * adapter manifest resolution by both `adapter_id` *and*
//! `adapter_version` (the two are distinguished failure classes —
//! wrong id is not the same as wrong version of a known id);
//! * synthesis of a typed [`RoutingPlan`] that names the resolved
//! adapter and preserves opaque `PayloadRef`s for downstream stages;
//! * the trait *seams* through which later issues plug in negotiation,
//! callback invocation, receipt emission, and failure mapping.
//!
//! This module does **not** own:
//! * capability negotiation (future router issue) — see
//! [`NegotiationStrategy`];
//! * callback invocation against renderers (issue #3 will wire a
//! protocol renderer into [`CallbackInvoker`]) — see
//! [`CallbackInvoker`];
//! * receipt persistence/emission (future router issue) — see
//! [`ReceiptEmitter`];
//! * failure-class mapping for receipt synthesis (future router
//! issue) — see [`FailureMapper`];
//! * payload body inspection. The router treats
//! [`crate::PayloadRef`] and [`crate::PayloadEnvelope`] bodies as opaque: it does
//! not parse, transform, or pattern-match on payload contents.
//!
//! # Client compatibility
//!
//! This module has none. It is provider-neutral by construction. Any
//! historic host-adapter flow that fused lifecycle routing with
//! client product semantics is replaced by Lifeloop routing plus
//! client callbacks — every client (including the first one) becomes
//! a consumer of these seams, not a peer of the router.
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;