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
107
108
//! Experimental features ("Nova" playground).
//!
//! This module hosts experimental features whose APIs are not yet stable.
//! Modules are organized into category subfolders, each gated by its own
//! feature flag so users can opt into a slice of experimentation rather than
//! the whole blob.
//!
//! # The "Nova" Philosophy ๐
//!
//! "Nova" is AletheiaDB's R&D playground โ radical ideas like semantic physics,
//! narrative generation, and counterfactual graph analysis live here while we
//! validate them.
//!
//! **These features are:**
//! - ๐งช **Experimental**: APIs may change or break without warning.
//! - ๐ **Innovative**: Cutting-edge features for AI/LLM integration.
//! - ๐ฉ **Opt-in**: You must explicitly enable them.
//!
//! Once a category proves itself, it graduates to a top-level stable feature
//! (see `crate::semantic_search` for the first graduation).
//!
//! # Enabling Nova
//!
//! Flip the umbrella flag to enable every category:
//!
//! ```toml
//! [dependencies]
//! aletheiadb = { version = "0.1", features = ["nova"] }
//! ```
//!
//! Or pick a single category:
//!
//! ```toml
//! [dependencies]
//! aletheiadb = { version = "0.1", features = ["semantic-temporal"] }
//! ```
//!
//! > โ ๏ธ **Breaking change in 0.1:** the `nova` umbrella no longer enables the
//! > graduated semantic-search cohort. Add `"semantic-search"` alongside `"nova"`
//! > if you want every former-nova module compiled.
//!
//! # Categories
//!
//! | Flag | What it gates | Modules |
//! |------|---------------|---------|
//! | `reasoning` (`semantic-reasoning`) | Prediction, synthesis, counterfactuals | prophet, dreamer, omen, oracle, hindsight, muse, luna, metaphor, synergy, chimera, alchemy |
//! | `temporal` (`semantic-temporal`) | Bi-temporal + semantic | sherlock, chronos, echo, kairos, temporal_narrative, temporal_diff, aura, mnemosyne, ariadne |
//! | `diagnostics` (`semantic-diagnostics`) | Anomaly, validation, health | dissonance, sentinel, fossil, tremor, polygraph, wormhole, ripple, entanglement, thermos, paradox |
//! | `characterization` (`semantic-characterization`) | Describe concepts + export | archetype, prism, gravity, sybil, synapse, kaleidoscope, papyrus, graph_context, wildfire |
//!
//! For convenience, every submodule is re-exported at this module's path โ
//! existing code using `aletheiadb::experimental::sherlock::Sherlock` keeps
//! working as long as the corresponding category flag is enabled.
//!
//! # Example: Detecting Suspicious Patterns with Sherlock
//!
//! ```rust,no_run
//! # #[cfg(feature = "semantic-temporal")]
//! use aletheiadb::AletheiaDB;
//! # #[cfg(feature = "semantic-temporal")]
//! use aletheiadb::experimental::sherlock::{Sherlock, Mystery, Clue};
//! # #[cfg(feature = "semantic-temporal")]
//! use aletheiadb::core::property::PropertyValue;
//! # #[cfg(feature = "semantic-temporal")]
//! use std::time::Duration;
//!
//! # #[cfg(feature = "semantic-temporal")]
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
//! let db = AletheiaDB::new()?;
//! # let node_id = db.create_node("User", Default::default())?;
//!
//! let mystery = Mystery::new(Duration::from_secs(1))
//! .add_clue(Clue::PropertyState {
//! key: "status".to_string(),
//! value: Some(PropertyValue::from("LoggedIn")),
//! })
//! .add_clue(Clue::PropertyState {
//! key: "action".to_string(),
//! value: Some(PropertyValue::from("DeleteFile")),
//! });
//!
//! let sherlock = Sherlock::new(&db);
//! let _detections = sherlock.investigate(node_id, &mystery)?;
//! # Ok(())
//! # }
//! # #[cfg(not(feature = "semantic-temporal"))]
//! # fn main() {}
//! ```
pub use *;
pub use *;
pub use *;
pub use *;