Skip to main content

khive_gate/
operation.rs

1//! Reviewed caller-requested effects for the built-in write restriction.
2//!
3//! Read permits existing incidental audit/cache/maintenance effects; it is not
4//! a storage-level read-only right. See `docs/api/operation-access.md`.
5
6/// Revision of the reviewed classification contract, included in policy identity.
7/// Bump whenever a classification or the allowed-read contract changes.
8pub const OPERATION_CLASSIFIER_VERSION: &str = "domain-effects-v13";
9
10/// Strongest caller-requested effect of a reviewed operation.
11#[derive(Clone, Copy, Debug, PartialEq, Eq)]
12pub enum OperationAccess {
13    /// Retrieval or calculation with existing incidental effects.
14    Read,
15    /// Domain mutation, control change, explicit maintenance, or external effect.
16    Write,
17}
18
19/// Exact reviewed names, including internal handlers and runtime pseudo-verbs.
20/// Sorted for lookup; unknown names must remain distinguishable from Write so
21/// the production registry census fails when a new handler needs review.
22pub const CLASSIFIED_OPERATIONS: &[(&str, OperationAccess)] = &[
23    ("agent.kill", OperationAccess::Write),
24    ("agent.observe", OperationAccess::Read),
25    ("agent.resume", OperationAccess::Write),
26    ("agent.spawn", OperationAccess::Write),
27    ("agent.suspend", OperationAccess::Write),
28    ("authorize", OperationAccess::Write),
29    ("authorize.visible", OperationAccess::Read),
30    ("blob.abort", OperationAccess::Write),
31    ("blob.begin", OperationAccess::Write),
32    ("blob.commit", OperationAccess::Write),
33    ("blob.export", OperationAccess::Write),
34    ("blob.get", OperationAccess::Read),
35    ("blob.import", OperationAccess::Write),
36    ("blob.put", OperationAccess::Write),
37    ("blob.put_part", OperationAccess::Write),
38    ("blob.stat", OperationAccess::Read),
39    ("brain.activate", OperationAccess::Write),
40    ("brain.archive", OperationAccess::Write),
41    ("brain.auto_feedback", OperationAccess::Write),
42    ("brain.bind", OperationAccess::Write),
43    ("brain.bindings", OperationAccess::Read),
44    ("brain.config", OperationAccess::Read),
45    ("brain.create_profile", OperationAccess::Write),
46    ("brain.deactivate", OperationAccess::Write),
47    ("brain.emit", OperationAccess::Write),
48    ("brain.event_counts", OperationAccess::Read),
49    ("brain.event_page", OperationAccess::Read),
50    ("brain.events", OperationAccess::Read),
51    ("brain.feedback", OperationAccess::Write),
52    ("brain.mark_turn", OperationAccess::Write),
53    ("brain.profile", OperationAccess::Read),
54    ("brain.profiles", OperationAccess::Read),
55    ("brain.record_serve", OperationAccess::Write),
56    ("brain.register_adapter", OperationAccess::Write),
57    ("brain.reset", OperationAccess::Write),
58    ("brain.resolve", OperationAccess::Read),
59    ("brain.state", OperationAccess::Read),
60    ("brain.unbind", OperationAccess::Write),
61    ("code.ingest", OperationAccess::Write),
62    ("comm.cleanup_expired_quarantine", OperationAccess::Write),
63    ("comm.cursor_commit", OperationAccess::Write),
64    ("comm.cursor_get", OperationAccess::Read),
65    ("comm.delivered", OperationAccess::Read),
66    ("comm.health", OperationAccess::Read),
67    ("comm.heartbeat", OperationAccess::Write),
68    ("comm.inbox", OperationAccess::Read),
69    ("comm.ingest", OperationAccess::Write),
70    ("comm.mark_read", OperationAccess::Write),
71    ("comm.probe", OperationAccess::Read),
72    ("comm.read", OperationAccess::Write),
73    ("comm.reply", OperationAccess::Write),
74    ("comm.send", OperationAccess::Write),
75    ("comm.suppression_add", OperationAccess::Write),
76    ("comm.suppression_list", OperationAccess::Read),
77    ("comm.suppression_remove", OperationAccess::Write),
78    ("comm.thread", OperationAccess::Read),
79    ("comm.transport_status", OperationAccess::Read),
80    ("comm.unread", OperationAccess::Read),
81    ("context", OperationAccess::Read),
82    ("count", OperationAccess::Read),
83    ("create", OperationAccess::Write),
84    ("db_diagnostics", OperationAccess::Read),
85    ("delete", OperationAccess::Write),
86    ("exec.events", OperationAccess::Read),
87    ("exec.identity", OperationAccess::Read),
88    ("exec.receipt", OperationAccess::Read),
89    ("exec.run", OperationAccess::Write),
90    ("exec.runs", OperationAccess::Read),
91    ("exec.tree", OperationAccess::Write),
92    ("exec.tree_diff", OperationAccess::Read),
93    ("exec.tree_get", OperationAccess::Read),
94    ("exec.tree_put", OperationAccess::Write),
95    ("get", OperationAccess::Read),
96    ("git.branch", OperationAccess::Write),
97    ("git.checkout", OperationAccess::Write),
98    ("git.commit", OperationAccess::Write),
99    ("git.diff", OperationAccess::Write),
100    ("git.digest", OperationAccess::Write),
101    ("git.gates", OperationAccess::Read),
102    ("git.ingest_cursor", OperationAccess::Read),
103    ("git.init", OperationAccess::Write),
104    ("git.log", OperationAccess::Read),
105    ("git.pr_merge", OperationAccess::Write),
106    ("git.pr_open", OperationAccess::Write),
107    ("git.pr_review", OperationAccess::Write),
108    ("git.push", OperationAccess::Write),
109    ("git.receipts", OperationAccess::Read),
110    ("git.reconcile", OperationAccess::Write),
111    ("git.status", OperationAccess::Read),
112    ("git.update_ref", OperationAccess::Write),
113    ("gtd.assign", OperationAccess::Write),
114    ("gtd.census", OperationAccess::Read),
115    ("gtd.complete", OperationAccess::Write),
116    ("gtd.next", OperationAccess::Read),
117    ("gtd.repair", OperationAccess::Write),
118    ("gtd.tasks", OperationAccess::Read),
119    ("gtd.transition", OperationAccess::Write),
120    ("knowledge.adjudicate", OperationAccess::Write),
121    ("knowledge.challenge", OperationAccess::Write),
122    ("knowledge.cite", OperationAccess::Write),
123    ("knowledge.compose", OperationAccess::Read),
124    ("knowledge.delete_atoms", OperationAccess::Write),
125    ("knowledge.edit", OperationAccess::Write),
126    ("knowledge.eval_retrieval", OperationAccess::Write),
127    ("knowledge.export", OperationAccess::Read),
128    ("knowledge.feedback", OperationAccess::Write),
129    ("knowledge.fold", OperationAccess::Read),
130    ("knowledge.get", OperationAccess::Read),
131    ("knowledge.import", OperationAccess::Write),
132    ("knowledge.index", OperationAccess::Write),
133    ("knowledge.learn", OperationAccess::Write),
134    ("knowledge.list", OperationAccess::Read),
135    ("knowledge.search", OperationAccess::Read),
136    ("knowledge.stats", OperationAccess::Read),
137    ("knowledge.suggest", OperationAccess::Read),
138    ("knowledge.topic", OperationAccess::Read),
139    ("knowledge.upsert_atoms", OperationAccess::Write),
140    ("knowledge.upsert_domains", OperationAccess::Write),
141    ("link", OperationAccess::Write),
142    ("list", OperationAccess::Read),
143    ("memory.feedback", OperationAccess::Write),
144    ("memory.prune", OperationAccess::Write),
145    ("memory.recall", OperationAccess::Read),
146    ("memory.recall_candidates", OperationAccess::Read),
147    ("memory.recall_embed", OperationAccess::Read),
148    ("memory.recall_fuse", OperationAccess::Read),
149    ("memory.recall_rerank", OperationAccess::Read),
150    ("memory.recall_score", OperationAccess::Read),
151    ("memory.remember", OperationAccess::Write),
152    ("memory.vacuum", OperationAccess::Write),
153    ("merge", OperationAccess::Write),
154    ("moodboard.ingest", OperationAccess::Write),
155    ("moodboard.judge", OperationAccess::Write),
156    ("moodboard.model", OperationAccess::Read),
157    ("moodboard.preference", OperationAccess::Read),
158    ("moodboard.search", OperationAccess::Read),
159    ("moodboard.serve", OperationAccess::Write),
160    ("moodboard.train_preference", OperationAccess::Write),
161    ("neighbors", OperationAccess::Read),
162    ("propose", OperationAccess::Write),
163    ("query", OperationAccess::Read),
164    ("resolve", OperationAccess::Read),
165    ("restore", OperationAccess::Write),
166    ("review", OperationAccess::Write),
167    ("scan", OperationAccess::Read),
168    ("schedule.agenda", OperationAccess::Read),
169    ("schedule.cancel", OperationAccess::Write),
170    ("schedule.remind", OperationAccess::Write),
171    ("schedule.schedule", OperationAccess::Write),
172    ("search", OperationAccess::Read),
173    ("session.export", OperationAccess::Read),
174    ("session.list", OperationAccess::Read),
175    ("session.resume", OperationAccess::Read),
176    ("session.search", OperationAccess::Read),
177    ("session.stats", OperationAccess::Read),
178    ("session.store", OperationAccess::Write),
179    ("session.vacuum", OperationAccess::Write),
180    ("stats", OperationAccess::Read),
181    ("stream.append", OperationAccess::Write),
182    ("stream.batch", OperationAccess::Write),
183    ("stream.read", OperationAccess::Read),
184    ("stream.stat", OperationAccess::Read),
185    ("telemetry.channels", OperationAccess::Read),
186    ("telemetry.counts", OperationAccess::Read),
187    ("telemetry.emit", OperationAccess::Write),
188    ("telemetry.read", OperationAccess::Read),
189    ("tool.check", OperationAccess::Read),
190    ("tool.deny", OperationAccess::Write),
191    ("tool.describe", OperationAccess::Read),
192    ("tool.grant", OperationAccess::Write),
193    ("tool.ingest", OperationAccess::Write),
194    ("tool.list", OperationAccess::Read),
195    ("tool.policies", OperationAccess::Read),
196    ("tool.policy", OperationAccess::Write),
197    ("tool.policy_delete", OperationAccess::Write),
198    ("tool.register", OperationAccess::Write),
199    ("tool.request", OperationAccess::Write),
200    ("tool.requests", OperationAccess::Read),
201    ("tool.revoke", OperationAccess::Write),
202    ("tool.suggest", OperationAccess::Read),
203    ("traverse", OperationAccess::Read),
204    ("update", OperationAccess::Write),
205    ("verbs", OperationAccess::Read),
206    ("web.extract", OperationAccess::Write),
207    ("web.fetch", OperationAccess::Write),
208    ("web.ingest", OperationAccess::Write),
209    ("web.refresh", OperationAccess::Write),
210    ("web.search", OperationAccess::Write),
211    ("whoami", OperationAccess::Read),
212    ("withdraw", OperationAccess::Write),
213];
214
215/// Classify an exact registered or pseudo-verb name. No prefix/category inference.
216/// A restricting gate must deny `None`, just as it denies explicit Write.
217pub fn classify_operation(verb: &str) -> Option<OperationAccess> {
218    CLASSIFIED_OPERATIONS
219        .binary_search_by_key(&verb, |(name, _)| *name)
220        .ok()
221        .map(|index| CLASSIFIED_OPERATIONS[index].1)
222}