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
//! Body schema: the Reachy Mini body — perception in, action out — and the
//! deliberate sensory/touch captures it keeps in the pile.
//!
//! Renamed from `senses` (2026-06-16): the faculty is both afferent
//! (perception: look/listen/pose/feel) and efferent (action: gesture/move),
//! the whole embodied loop a vision-language-action model closes. "Body" is
//! the honest name for that loop.
//!
//! Only DELIBERATE captures land here — "I choose to remember this". The
//! continuous perception stream (live camera/mic/encoders) stays ephemeral
//! and is never minted into facts (periphery principle): there is no
//! continuous-capture command, so the ephemerality is structural.
//!
//! Each capture entity carries the raw payload (for vision: a PNG frame; for
//! touch: no payload, the signature lives in `pose`), the modality, optional
//! geometry, an optional deliberate note ("why I kept this"), and the
//! proprioceptive context at capture time (JSON state / touch signature) so a
//! future VLA model can ground the moment in the body state that produced it.
use id_hex;
use ;
use ;
use *;
/// Stable extrinsic scope for deliberate body captures and intents.
///
/// Minted with `trible genid` on 2026-08-07:
/// `7CF255AAA8D79CA997F991183611C6A5`.
pub const DEFAULT_SCOPE_ID: Id = id_hex!;
/// Tag for a deliberate capture (a frame, an audio clip, or a felt touch).
pub const KIND_CAPTURE: Id = id_hex!;
// Speech moved OUT of `body` into the dedicated `voice` faculty (2026-06-30):
// speaking is its own organ. Utterances now live on the pile's `voice` branch
// (see `schemas::voice`). The body is the physical Reachy loop only.
/// Tag for an INTENT — a reasoned instruction (the perceive-then-reason model output): gemma's
/// perceive+reason output, the language the VLA is conditioned on. Unlike the
/// raw perception stream (ephemeral, periphery principle), intent is DELIBERATE
/// and kept — it fires only on salience (a handful a minute, never per-frame),
/// so the log is sparse and worth keeping: an auditable, replayable
/// train of thought. The VLA reads the LATEST intent by canonical
/// `metadata::created_at`, then intrinsic event ID for equal-time ties. There
/// is no shared mutable state; selection over the immutable event set is
/// deterministic and monotonic in storage.
pub const KIND_INTENT: Id = id_hex!;