Expand description
§VERA — Verified Effect-Rule Architecture
Generic infrastructure for effect-verified game loops.
VERA’s core idea: pure rule functions return effect enums, a mechanical apply function mutates state, and a trace records everything that happened for verification.
This crate provides the generic types. Your game crate defines the concrete
Effect and Presentation enums and uses these types parameterized over them.
§Example
use vera_effects::{Trace, TraceEntry, TraceSource, RuleOutput};
// Your game defines concrete effect types
#[derive(Debug, Clone, PartialEq)]
enum Effect {
Heal { amount: i32 },
SpendAp { amount: i32 },
}
#[derive(Debug, Clone)]
enum Presentation {
LogMessage(String),
}
// Rule functions return RuleOutput<Effect, Presentation>
fn rule_heal(amount: i32) -> RuleOutput<Effect, Presentation> {
RuleOutput {
effects: vec![Effect::Heal { amount }],
presentation: vec![Presentation::LogMessage(format!("+{} HP", amount))],
}
}
// Trace records what happened
let mut trace = Trace::<Effect>::default();
trace.enabled = true;
let output = rule_heal(25);
for effect in &output.effects {
trace.record(effect, TraceSource::Rule { name: "rule_heal" }, 1);
}
assert!(trace.contains(&Effect::Heal { amount: 25 }));Structs§
- Rule
Output - The output of a rule function: game effects to apply + presentation effects.
- Trace
- Ordered record of all effects. Only populated when
enabledis true. Ephemeral — not serialized, not saved. - Trace
Entry - A single entry in the trace log.
Enums§
- Trace
Source - Where an effect came from.