Proposition Store Template
Portable boundary that lets domain code program against a PropositionStore and reach for the optional vector and graph capabilities without first knowing whether the backing store honours them.
The contract is graceful degradation: when the wrapped store does not implement a capability, the matching method returns an empty, typed result — it never throws. When the store does implement the capability, the call delegates straight through to the store's real behaviour.
Capability presence is queryable up front via supportsVector and supportsGraph, so callers can branch on availability rather than inspecting an empty result and guessing why it was empty.
Properties
Whether the wrapped store honestly backs abstraction-hierarchy traversal. A plain structural check, unlike supportsVector: graph traversal has no optional collaborator that can be absent at wiring time, so implementing GraphTraversalCapable is the whole story. If a graph store ever gains a dependency it can be wired without (as vector has its embedder), give it the same behavioural supportsGraph hook the vector path uses.
Whether the wrapped store can actually run vector similarity search right now. This is behavioural, not just structural: a store that implements VectorSearchCapable but was wired without an embedder reports false here (and returns empty from findSimilar), so a caller never sees true paired with silently-empty results.
Functions
Propositions that were abstracted from the given proposition, if the store backs graph traversal, otherwise an empty list.
Clusters of similar propositions if the store backs vector search, otherwise an empty list.
Vector similarity search if the store backs it, otherwise an empty list.
Source propositions a given proposition was abstracted from, if the store backs graph traversal, otherwise an empty list.