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
//! # pointlock-provider-devicerail
//!
//! The DeviceRail implementation of the Pointlock provider SPI
//! (design doc 04 §9; spine §4). The provider is a capability declaration
//! plus faithful execution — it never folds, translates, improvises,
//! retries, or degrades (04 §1):
//!
//! - [`DeviceRailProvider`]: static [`devicerail_manifest`] + the atomic
//! `openSession` sequence (spawn → `system.hello` → `devices.list` →
//! `device.select` → `device.connect` → `device.capabilities` →
//! attestation → `session.start`, 04 §9.3) with lockfile-digest
//! attestation (04 §9.2).
//! - [`DeviceRailSession`]: the ten `ProviderSession` methods over one
//! exclusively-owned `devicerail-client` connection.
//! - [`lock_via_spawn`] / [`make_lockfile`]: the `pointlock lock` freeze
//! path (CLI wiring follows).
//!
//! Wire names follow spine A.8 verbatim; DTO transcription is
//! field-by-field (`convert`); error normalization implements the 04 §6 /
//! §9.6 tables (`error_map`).
//!
//! ## Documented divergences and gaps (honesty over fabrication)
//!
//! - `fetchEvidence` is a typed unsupported error: DeviceRail asset URIs
//! (`devicerail://assets/sha256/<digest>`) have no byte channel on the
//! control plane and `devicerail-client` exposes no fetch API.
//! - `PlatformKind` has no `mock` counterpart; the mock platform maps
//! provisionally to `linux` on both the lock and attestation paths (see
//! `convert::platform_kind_from_wire`).
//! - Client-side backpressure errors surface directly as `transport_lost`
//! (04 §9.6 envisions provider-internal queueing; M1 has none).
//! - The spawn exit protocol's SIGTERM step is collapsed into the client's
//! kill path (stdin EOF → grace → kill).
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use DeviceRailSession;