pub struct RuleDef {
pub name: String,
pub src_label: String,
pub dst_label: String,
pub predicate: Predicate,
pub edge_type: String,
pub weight_prop: Option<String>,
pub max_edges: Option<u64>,
pub approximate: bool,
pub via_label: Option<String>,
pub via_edge: Option<String>,
pub via_dir: Option<Direction>,
}Fields§
§name: String§src_label: String§dst_label: String§predicate: Predicate§edge_type: String§weight_prop: Option<String>§max_edges: Option<u64>Per-rule provenance cap. None uses the engine default (1_000_000).
APPENDED field. bincode is positional, so this breaks decode of
CreateRule WAL records and snapshot rule_defs written before this
field existed. Pre-alpha no-migration ruling: accepted; no decoder
compat. #[serde(default)] cannot help — bincode does not skip
missing positional fields.
approximate: boolOpt-in IVF-Flat approximate candidate selection.
false (default) → exact ScanAll path; semantics and derived edges
are byte-identical to pre-T4 behaviour for all existing rules.
true → VectorClusters candidate path: k-means partitions the dst
(and src) side at backfill/rebuild time; only members of the P nearest
clusters are evaluated. Recall ≥ 0.90 quiesced, ≥ 0.85 on any
crash-recovery state — not exact. Only valid when the predicate is
VectorSimilar-rooted (VectorSimilar itself, or All whose first
element is VectorSimilar); validate() rejects other combinations.
APPENDED field — same pre-alpha no-migration ruling as max_edges:
WAL/snapshot records written before this field break positional bincode
decode. Accepted for pre-1.0 builds; no decoder compat.
via_label: Option<String>Optional intermediate hop. When set, src matches via_label via
via_edge, then the existing predicate is evaluated between
via node and dst (not src and dst). Derived edge is still
src → dst with edge_type.
via_label and via_edge must both be Some or both None;
validate() rejects a half-set combination. via_dir defaults to
Out when the via fields are set (src → via); supply Some(In) to
reverse the hop (src ← via). Semantics: for each src, expand
via_edge one hop in via_dir to via-nodes carrying via_label;
run predicate between via and dst; fire src → dst if any via
satisfies; score = max over via; top-k still per src.
APPENDED field — same pre-alpha no-migration ruling as max_edges
and approximate: WAL/snapshot records written before this field
break positional bincode decode. Accepted for pre-1.0 builds; no
decoder compat. #[serde(default)] covers JSON only.
via_edge: Option<String>See via_label.
APPENDED field — same pre-alpha no-migration ruling as via_label.
via_dir: Option<Direction>Direction to traverse via_edge from src. None treated as Out
(src → via) at evaluation time. See via_label.
APPENDED field — same pre-alpha no-migration ruling as via_label.