pub struct SessionMonitorDetailV1 {
pub todo_facts: Vec<TodoFactV1>,
pub tool_facts: Vec<ActivityFactV1>,
pub subagent_facts: Vec<ActivityFactV1>,
pub interaction_facts: Vec<InteractionFactV1>,
pub block_facts: Vec<BlockFactV1>,
pub process_facts: Vec<ActivityFactV1>,
pub file_facts: Vec<FileFactV1>,
}Fields§
§todo_facts: Vec<TodoFactV1>§tool_facts: Vec<ActivityFactV1>§subagent_facts: Vec<ActivityFactV1>§interaction_facts: Vec<InteractionFactV1>§block_facts: Vec<BlockFactV1>One fact per ObservationKindV1::ActionBlocked observation recorded
against this session. hatchery-harness-service::read::monitor_detail
derives these from the session’s own bounded timeline
(hatchery_observation_engine::SessionProjection::timeline), not
from a dedicated correlation-tracked list: a block has no
request/response pairing for that engine’s projection to track, only
a running blocked_count tally (see SessionMonitorV1::active_blocks).
Its own list rather than folded into interaction_facts:
interaction_facts is built strictly off SessionProjection:: interactions, which ActionBlocked never populates, so folding it
in would need widening that engine-side projection, out of this
field’s own scope. #[serde(default)] reads a monitor response
captured before this field existed as empty rather than failing to
deserialize – this type is never persisted, only built fresh per
read and sent over the operator/grant-bound wire.
process_facts: Vec<ActivityFactV1>§file_facts: Vec<FileFactV1>