pub enum EventKind {
DecisionMade {
symbol: String,
source: Source,
},
TradeClosed {
symbol: String,
outcome: Outcome,
pnl_r: f64,
conviction: Option<u8>,
},
BreakStarted {
planned_ms: Option<u64>,
},
BreakEnded,
Idle {
since_ms: u64,
},
Resumed,
VerdictShown,
VerdictOverridden,
SessionStarted,
SessionEnded,
Conviction {
trade_id: String,
rating: u8,
},
}Expand description
The event kinds the classifier understands.
New variants added here force every match arm in classifier.rs
to decide how the event affects the vector — the compiler becomes
the reviewer.
Variants§
DecisionMade
Operator took an action that could open or modify a position.
TradeClosed
A position closed. loss_reaction_ms is filled when the prior
event was also a close on the same symbol.
BreakStarted
Operator hit /break (or a similar risk-reducing rest).
BreakEnded
Break ended (timer, keypress, or session resume).
Idle
Operator has been idle for more than the sleep-proxy threshold.
Resumed
Operator returned from idle.
VerdictShown
Plan-mode verdict shown to the operator (count of how many they’ve seen drives the override-rate denominator).
VerdictOverridden
Plan-mode verdict was explicitly rejected by the operator.
SessionStarted
Session began (launch or resume).
SessionEnded
Session ended.
Conviction
Operator-supplied conviction rating for a past trade
(/rate <trade_id> <1..=10>). The classifier does not
attribute the rating back onto the original TradeClosed
variant because the two events are separated by human
latency — merging them would force the classifier to
carry a mutable trade index. Keeping Conviction as its
own event lets the downstream consumer (operator-state
engine POST, future calibration overlay) join on
trade_id without the classifier needing to know how.
rating is a u8 in 1..=10 — the parser enforces the
range before pushing. trade_id is the engine’s opaque
trade identifier, never parsed CLI-side.