Files
confidence-engine/lib/graph/reopen-resolved-unknown.js

39 lines
1.3 KiB
JavaScript

/**
* Deterministically reopen a resolved unknown node in a SituationGraph.
*
* Transition: removes the node's ID from resolvedNodeIds and establishes
* node.status "unknown".
* from resolvedNodeIds. This reverses canonical resolution so the question
* reappears among Open Questions for further investigation.
*
* Idempotent — if the target is not an unknown marked resolved in graph state, returns the
* original graph unchanged (no mutation). Does NOT create nodes, delete edges,
* or touch contributions/findings/historical evidence.
*/
export function reopenResolvedUnknown(situationGraph, nodeId) {
if (!situationGraph || !nodeId) return situationGraph;
const nodeIndex = situationGraph.nodes.findIndex((n) => n.id === nodeId);
if (nodeIndex === -1) return situationGraph;
const node = situationGraph.nodes[nodeIndex];
if (node.kind !== "unknown" || !situationGraph.resolvedNodeIds?.includes(nodeId)) {
return situationGraph;
}
const newNode = { ...node, status: "unknown" };
const newNodes = [...situationGraph.nodes];
newNodes[nodeIndex] = newNode;
const newResolvedNodeIds = [
...(situationGraph.resolvedNodeIds || []),
].filter((id) => id !== nodeId);
return {
...situationGraph,
nodes: newNodes,
resolvedNodeIds: newResolvedNodeIds,
};
}