pub struct ExpandResponse {
pub reached: Vec<NodeId>,
pub degrees: Vec<u32>,
pub edges: Vec<EdgeRef>,
pub truncated: Option<TruncationReason>,
pub served_by: HopBackend,
}Fields§
§reached: Vec<NodeId>§degrees: Vec<u32>Each reached node’s degree in the authorized subgraph, index-aligned
with reached. Empty unless the request asked for it.
The engine is the only party that can say: a reached node is an
internal id and an EdgeRef names its endpoints by producer key, so
nothing above this port can join the two without another read. Every
edge counted has passed the caller’s scope, so this is the degree
inside the authorized subgraph and never a global one the caller
cannot see (Authorization Model: “degree ordering, budgets and
truncation are computed on authorized rows only”). It is what lets a
neighborhood projection keep the structural core when a hub exceeds
the node budget (fr-neighborhood-projection).
A count is a lower bound when the hop reports EdgeScanCap: the scan
stopped at the budget, so a node may have edges it did not see. The
ranking is then approximate — which the truncation reason says.
edges: Vec<EdgeRef>§truncated: Option<TruncationReason>Never silent.
served_by: HopBackendWhich backend produced this answer.
Found while building the prototype. The pattern backend declines by falling back, and the decline was recorded only in a log line. A log line is not something a test can assert on, so the suite could not tell a pattern hop that ran from one that failed and was silently served by the two-query hop instead – which is exactly what happened, for every traversal, when the pattern lost its anchor. Reporting the backend on the response is what makes “the pattern actually served this” an assertion rather than an assumption.