Skip to main content

mem_types/
lifecycle.rs

1//! Lifecycle and governance types: MemoryRecord, AuditEvent (for update/forget and audit).
2
3use serde::{Deserialize, Serialize};
4
5/// State of a memory record in its lifecycle.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum MemoryState {
9    #[default]
10    Active,
11    Archived,
12    Tombstone,
13}
14
15/// Full record for lifecycle (versioning, state, audit). Can be derived from MemoryNode.metadata.
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct MemoryRecord {
18    pub id: String,
19    pub namespace: String,
20    #[serde(default)]
21    pub version: u32,
22    #[serde(default)]
23    pub state: MemoryState,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub source: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub evidence: Option<String>,
28    pub created_at: String,
29    pub updated_at: String,
30}
31
32/// Kind of auditable event.
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
34#[serde(rename_all = "lowercase")]
35pub enum AuditEventKind {
36    Add,
37    Update,
38    Forget,
39    Search,
40}
41
42/// One audit event (for governance and debugging).
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct AuditEvent {
45    pub event_id: String,
46    pub kind: AuditEventKind,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub memory_id: Option<String>,
49    pub user_id: String,
50    pub cube_id: String,
51    pub timestamp: String,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub input_summary: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub outcome: Option<String>,
56}
57
58/// Options for listing audit events (filter + pagination).
59#[derive(Debug, Clone, Default)]
60pub struct AuditListOptions {
61    pub user_id: Option<String>,
62    pub cube_id: Option<String>,
63    /// ISO8601 timestamp; return events with timestamp >= since.
64    pub since: Option<String>,
65    pub limit: Option<u32>,
66    pub offset: Option<u32>,
67}