agentic_reality/engine/write/
stakes.rs1use crate::engine::write::WriteEngine;
4use crate::types::error::{RealityError, RealityResult};
5use crate::types::stakes::*;
6
7impl<'a> WriteEngine<'a> {
8 pub fn set_stakes_level(&mut self, stakes: StakesLevel) -> RealityResult<()> {
10 let awareness = self
11 .engine
12 .stakes_store
13 .consequences
14 .get_or_insert_with(|| ConsequenceAwareness {
15 stakes: StakesLevel::Minimal {
16 can_experiment: true,
17 },
18 consequence_map: vec![],
19 irreversible: vec![],
20 safety_margins: SafetyMargins {
21 overall: 1.0,
22 by_domain: Default::default(),
23 guardrails: vec![],
24 },
25 history: vec![],
26 });
27 awareness.stakes = stakes;
28 self.engine.mark_dirty();
29 Ok(())
30 }
31
32 pub fn add_consequence(&mut self, consequence: Consequence) -> RealityResult<()> {
34 let awareness = self
35 .engine
36 .stakes_store
37 .consequences
38 .as_mut()
39 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
40 awareness.consequence_map.push(consequence);
41 self.engine.mark_dirty();
42 Ok(())
43 }
44
45 pub fn remove_consequence(&mut self, effect: &str) -> RealityResult<()> {
47 let awareness = self
48 .engine
49 .stakes_store
50 .consequences
51 .as_mut()
52 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
53 awareness.consequence_map.retain(|c| c.effect != effect);
54 self.engine.mark_dirty();
55 Ok(())
56 }
57
58 pub fn add_irreversible_action(&mut self, action: IrreversibleAction) -> RealityResult<()> {
60 let awareness = self
61 .engine
62 .stakes_store
63 .consequences
64 .as_mut()
65 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
66 awareness.irreversible.push(action);
67 self.engine.mark_dirty();
68 Ok(())
69 }
70
71 pub fn update_safety_margins(&mut self, margins: SafetyMargins) -> RealityResult<()> {
73 let awareness = self
74 .engine
75 .stakes_store
76 .consequences
77 .as_mut()
78 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
79 awareness.safety_margins = margins;
80 self.engine.mark_dirty();
81 Ok(())
82 }
83
84 pub fn add_guardrail(&mut self, guardrail: Guardrail) -> RealityResult<()> {
86 let awareness = self
87 .engine
88 .stakes_store
89 .consequences
90 .as_mut()
91 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
92 awareness.safety_margins.guardrails.push(guardrail);
93 self.engine.mark_dirty();
94 Ok(())
95 }
96
97 pub fn remove_guardrail(&mut self, name: &str) -> RealityResult<()> {
99 let awareness = self
100 .engine
101 .stakes_store
102 .consequences
103 .as_mut()
104 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
105 awareness
106 .safety_margins
107 .guardrails
108 .retain(|g| g.name != name);
109 self.engine.mark_dirty();
110 Ok(())
111 }
112
113 pub fn update_risk_field(&mut self, risk_field: RiskFieldPerception) -> RealityResult<()> {
115 self.engine.stakes_store.risk_field = Some(risk_field);
116 self.engine.mark_dirty();
117 Ok(())
118 }
119
120 pub fn update_blast_radius(&mut self, blast: BlastRadiusAwareness) -> RealityResult<()> {
122 self.engine.stakes_store.blast_radius = Some(blast);
123 self.engine.mark_dirty();
124 Ok(())
125 }
126
127 pub fn record_consequence(&mut self, record: ConsequenceRecord) -> RealityResult<()> {
129 let awareness = self
130 .engine
131 .stakes_store
132 .consequences
133 .as_mut()
134 .ok_or_else(|| RealityError::NotInitialized("consequence awareness".into()))?;
135 awareness.history.push(record);
136 self.engine.mark_dirty();
137 Ok(())
138 }
139}