1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// SPDX-License-Identifier: Apache-2.0 OR MIT
//! Audit-log op tags.
use serde::{Deserialize, Serialize};
/// Audit-log op tag. New variants land non-breakingly thanks to `#[non_exhaustive]`.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum AuditOp {
/// `Memory::append`.
Append,
/// `Memory::delete`.
Delete,
/// `Memory::delete_partition`.
DeletePartition,
/// `Memory::add_link`.
LinkAdd,
/// `Memory::remove_link`.
LinkRemove,
/// Reserved for Plan 3.
IndexCheckpoint,
/// `Memory::attach_summary` — Plan 9 first-class summary entity attached.
SummaryAttach,
/// `Memory::delete_summary` — Plan 9 summary tombstoned.
SummaryDelete,
/// `Memory::set_attribute` (or `AppendOpts::with_attribute`) — Plan 11
/// typed memory metadata assigned.
AttributeSet,
/// `Memory::clear_attribute` — Plan 11 typed memory metadata removed.
AttributeClear,
/// `Memory::snapshot` — Plan 12 point-in-time freeze recorded.
Snapshot,
/// `Memory::delete_snapshot` — Plan 12 snapshot row removed (manifest
/// blob reaped by `gc()` only).
SnapshotDelete,
/// `Memory::restore` — Plan 12 hard rollback to a snapshot.
Restore,
/// `Memory::regenerate_embeddings` — Plan 12 atomic shard swap on
/// embedder change.
RegenerateEmbeddings,
/// `Memory::migrate_scheme` — Plan 12 partition scheme evolution
/// (memories + indices moved).
MigrateScheme,
/// `Memory::gc` — Plan 12 orphan-blob retention sweep.
Gc,
/// `Memory::set_validity` — Plan 15 bi-temporal validity update.
ValiditySet,
/// Plan 16: `Memory::summary_set_attribute` — typed attribute on a
/// summary row was upserted.
SummaryAttributeSet,
/// Plan 16: `Memory::summary_clear_attribute` — typed attribute on a
/// summary row was removed.
SummaryAttributeClear,
/// Plan 16: `Memory::link/unlink` — generalized node↔node link
/// added or removed.
NodeLinkAdd,
/// Plan 16: `Memory::unlink` — generalized node↔node link removed.
NodeLinkRemove,
/// Plan 16: `Memory::evolve` — single-transaction batch update of
/// the memory catalog. The audit row's detail JSON carries the
/// serialised [`crate::evolve::EvolutionOps`].
Evolve,
}
impl AuditOp {
/// String tag persisted in `audit_log.op`.
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
AuditOp::Append => "append",
AuditOp::Delete => "delete",
AuditOp::DeletePartition => "delete_partition",
AuditOp::LinkAdd => "link_add",
AuditOp::LinkRemove => "link_remove",
AuditOp::IndexCheckpoint => "index_checkpoint",
AuditOp::SummaryAttach => "summary_attach",
AuditOp::SummaryDelete => "summary_delete",
AuditOp::AttributeSet => "attribute_set",
AuditOp::AttributeClear => "attribute_clear",
AuditOp::Snapshot => "snapshot",
AuditOp::SnapshotDelete => "snapshot_delete",
AuditOp::Restore => "restore",
AuditOp::RegenerateEmbeddings => "regenerate_embeddings",
AuditOp::MigrateScheme => "migrate_scheme",
AuditOp::Gc => "gc",
AuditOp::ValiditySet => "validity_set",
AuditOp::SummaryAttributeSet => "summary_attribute_set",
AuditOp::SummaryAttributeClear => "summary_attribute_clear",
AuditOp::NodeLinkAdd => "node_link_add",
AuditOp::NodeLinkRemove => "node_link_remove",
AuditOp::Evolve => "evolve",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tags_are_lowercase_snake() {
assert_eq!(AuditOp::Append.as_str(), "append");
assert_eq!(AuditOp::DeletePartition.as_str(), "delete_partition");
}
}