Skip to main content

sim/runtime/glasses/proofs/
review.rs

1use sim_codec_bridge::{
2    BridgeBook, BridgeFramePayload, BridgeHeader, BridgePacket, BridgePart, BridgeProvenance,
3    stamp_packet_cid, warrant_for_packet,
4};
5use sim_kernel::{Error, Expr, Result, Symbol};
6use sim_lib_intent::{Origin, intent_kind_of};
7use sim_lib_scene::GlanceCard;
8use sim_lib_view::SurfaceCaps;
9use sim_lib_view_bridge::{
10    BridgeGlassesReviewInput, halo_warrant_glance_pager, warrant_review_intent_from_glasses_input,
11};
12use sim_lib_view_device::DeviceSurfaceCapsExt;
13use sim_value::build::{self, entry, qsym};
14
15/// Result of the modeled Halo BRIDGE warrant-review proof.
16#[derive(Clone, Debug, PartialEq, Eq)]
17pub struct ReviewInSpaceProof {
18    /// Whether the pending packet becomes a budget-bypassing Halo pager.
19    pub warrant_pager: bool,
20    /// Whether a modeled Halo double tap emits `intent/approve`.
21    pub approved: bool,
22    /// Whether the approval remains bound to the stamped packet id.
23    pub packet_bound: bool,
24}
25
26impl ReviewInSpaceProof {
27    /// Encodes the proof as expression data for cookbook recipes.
28    pub fn to_expr(&self) -> Expr {
29        build::map(vec![
30            ("kind", build::qsym("glasses/sdk", "review-in-space-proof")),
31            ("warrant-pager", Expr::Bool(self.warrant_pager)),
32            ("approved", Expr::Bool(self.approved)),
33            ("packet-bound", Expr::Bool(self.packet_bound)),
34        ])
35    }
36}
37
38/// Projects a pending BRIDGE packet and approves it with a modeled Halo double tap.
39pub fn prove_review_in_space() -> Result<ReviewInSpaceProof> {
40    let packet = packet_with_warrant()?;
41    let profile = SurfaceCaps::from_preset("glasses-hud", "sdk.review")
42        .ok_or_else(|| Error::HostError("Halo surface preset missing".to_owned()))?
43        .device_profile();
44    let pager = halo_warrant_glance_pager(&packet, &profile)?;
45    let card = GlanceCard::from_scene(&pager)?;
46    let approval = warrant_review_intent_from_glasses_input(
47        &packet,
48        BridgeGlassesReviewInput::HaloDoubleTap,
49        Origin::human(9),
50    )?;
51    let packet_cid = packet.header.cid.as_deref().unwrap_or_default();
52
53    Ok(ReviewInSpaceProof {
54        warrant_pager: card.bypass_budget,
55        approved: intent_kind_of(&approval).is_some_and(|kind| kind.name.as_ref() == "approve"),
56        packet_bound: sim_lib_intent::field(&approval, "packet-cid")
57            == Some(&Expr::String(packet_cid.to_owned())),
58    })
59}
60
61fn packet_with_warrant() -> Result<BridgePacket> {
62    let mut packet = BridgePacket {
63        header: BridgeHeader {
64            cid: None,
65            move_kind: Symbol::new("reply"),
66            from: "model:drafter".to_owned(),
67            to: vec!["human:reviewer".to_owned()],
68            role: Symbol::new("implementer"),
69            parents: vec!["core/sha256-bridge-v1:root".to_owned()],
70            task: Symbol::new("T1"),
71            output: Symbol::new("O1"),
72            ceiling: Vec::new(),
73            context: Vec::new(),
74            provenance: BridgeProvenance::default(),
75        },
76        body: vec![
77            BridgePart {
78                id: Symbol::new("T1"),
79                kind: Symbol::qualified("bridge", "Frame"),
80                payload: BridgeFramePayload::new(Symbol::qualified("bridge", "answer")).to_expr(),
81            },
82            BridgePart {
83                id: Symbol::new("O1"),
84                kind: Symbol::qualified("bridge", "Return"),
85                payload: Expr::Map(vec![
86                    entry("codec", qsym("codec", "bridge")),
87                    entry("shape", qsym("core", "Map")),
88                ]),
89            },
90        ],
91        warrant: None,
92    };
93    packet.warrant = Some(warrant_for_packet(&BridgeBook::standard(), &packet)?);
94    stamp_packet_cid(&packet)
95}