/// Engram Projection Layer — schema-as-a-view over the activation surface. /// /// # The Core Insight /// /// Engram has no schema. A node has: embedding (semantic identity), content /// (arbitrary bytes), metadata via tier/type, and salience. Schema is a /// *projection* — a view imposed on the activation surface at query time. /// /// The same Engram graph can surface as relational rows, JSON documents, /// wide-column families, or key-value pairs depending on how you project it. /// Migrations are free because there is nothing to migrate — you just update /// the projection. /// /// # How It Works /// /// 1. Register a `ProjectionSchema` that describes which nodes are in scope /// and how to map their fields. /// 2. At query time, run spreading activation (or use an existing result set). /// 3. Apply the projection to map `ActivatedNode`s into the projected view. /// /// The projection is purely a read-time transform. It never modifies the graph. pub mod engine; pub mod error; pub mod registry; pub mod schema; pub use engine::ProjectionEngine; pub use error::ProjectionError; pub use registry::ProjectionRegistry; pub use schema::{ FieldMapping, FieldSource, NodeFilter, ProjectedRow, ProjectionResult, ProjectionSchema, ProjectionType, };