# TransitionRecord
*Requires feature `journal`.*
A record of one processed event. Captures the before/after modes and emitted
commands so a system can be audited or replayed deterministically.
## Fields
- `step: usize` — sequential step index (0-based)
- `from: M` — mode before processing the event
- `to: M` — mode after applying the decision
- `event: E` — the processed event
- `commands: Vec<C>` — commands emitted, in order
- `timestamp: SystemTime` — wall-clock time when recorded
## Construction
```rust
use ready_active_safe::journal::TransitionRecord;
let record = TransitionRecord::new(
0,
"ready",
"active",
"start",
vec!["initialize"],
);
assert_eq!(record.step, 0);
assert_eq!(record.from, "ready");
assert_eq!(record.to, "active");
assert_eq!(record.event, "start");
assert_eq!(record.commands, vec!["initialize"]);
```
## Used by `InMemoryJournal`
```rust
use ready_active_safe::journal::{InMemoryJournal, TransitionRecord};
let mut journal: InMemoryJournal<&str, &str, &str> = InMemoryJournal::new();
journal.record_step(&"ready", &"active", &"start", &["init"]);
assert_eq!(journal.len(), 1);
let record = &journal.records()[0];
assert_eq!(record.from, "ready");
assert_eq!(record.to, "active");
```
## See Also
- [`InMemoryJournal`](in_memory_journal.md) — stores and queries records
- [`ReplayError`](replay_error.md) — errors when replay diverges from records