WhyGraph: Pick<
    Graph,
    "commitMetadataDerived"
    | "commitLog"
    | "read"
    | "explain",
>

Capability slice handed to whyUpdated / whyNotUpdated.

The explainers register a Graph.commitMetadataDerived whose compute reads the engine's Graph.commitLog and the node's Graph.explain derivation. read is consumed only inside the compute callback through get(...), but it is also accepted on the surface so call sites can pass a full Graph without casting.

commit, input, derived, hydrate, snapshot, exportModel, subscribeCommits, the per-node subscribe, and the time-travel readers are intentionally unreachable — a lineage explainer that can mutate the engine ceases to be inspection and becomes a parallel writer, breaking the §11 "engine is its own observer" commitment.