fix(confidence-engine): preserve investigation activity across turns
ThreadContributionsBadge, PriorContributionsSummary, and SecondaryPreviousLearning all filtered contributions via c.targetNodeId === nodeId. Multi-turn follow-up Contributions carry a different immediate targetNodeId while the canonical origin remains on Findings (originatingTargetNodeId). Repaired: all contribution filters now match on EITHER c.targetNodeId === nodeId || c.originatingTargetNodeId === nodeId. handleDeconstructSubmit carries originatingTargetNodeId from focusedPresentationItemId as provenance for cold-return recovery.
This commit is contained in:
@@ -471,7 +471,9 @@ function EvidenceLimitCard({ summary }) {
|
||||
// ── Prior contribution summary (embedded within FocusedQuestionBody) ───
|
||||
|
||||
function PriorContributionsSummary({ nodeId, contributions }) {
|
||||
const threadContribs = contributions.filter((c) => c.targetNodeId === nodeId);
|
||||
const threadContribs = (contributions || []).filter(
|
||||
(c) => c.targetNodeId === nodeId || c.originatingTargetNodeId === nodeId,
|
||||
);
|
||||
if (!threadContribs.length) return null;
|
||||
|
||||
// Exclude the most recent contribution — it is already shown as the current result above.
|
||||
@@ -519,7 +521,9 @@ function PriorContributionsSummary({ nodeId, contributions }) {
|
||||
// ── Standalone previous learning block (for two-column secondary placement) ───
|
||||
|
||||
function SecondaryPreviousLearning({ nodeId, contributions }) {
|
||||
const threadContribs = contributions.filter((c) => c.targetNodeId === nodeId);
|
||||
const threadContribs = (contributions || []).filter(
|
||||
(c) => c.targetNodeId === nodeId || c.originatingTargetNodeId === nodeId,
|
||||
);
|
||||
if (!threadContribs.length) return null;
|
||||
|
||||
// Exclude the most recent contribution — it is already shown as the current result above.
|
||||
@@ -567,7 +571,9 @@ function SecondaryPreviousLearning({ nodeId, contributions }) {
|
||||
// ── Thread contributions badge (standalone — used outside focused body) ───
|
||||
|
||||
function ThreadContributionsBadge({ nodeId, contributions }) {
|
||||
const threadContribs = contributions.filter((c) => c.targetNodeId === nodeId);
|
||||
const threadContribs = (contributions || []).filter(
|
||||
(c) => c.targetNodeId === nodeId || c.originatingTargetNodeId === nodeId,
|
||||
);
|
||||
if (!threadContribs.length) return null;
|
||||
|
||||
// Show most recent contribution summary inline
|
||||
@@ -1401,7 +1407,7 @@ export default function ReasoningWorkspace({
|
||||
if (!target) return;
|
||||
|
||||
const priorContribs = (focusedContributions || []).filter(
|
||||
(c) => c.targetNodeId === target,
|
||||
(c) => c.targetNodeId === target || c.originatingTargetNodeId === target,
|
||||
);
|
||||
|
||||
setFocusedPresentationItemId(target);
|
||||
@@ -1511,6 +1517,7 @@ export default function ReasoningWorkspace({
|
||||
// Persist contribution to case-level owner (ScenarioForm)
|
||||
onFocusedContribution?.({
|
||||
targetNodeId,
|
||||
originatingTargetNodeId: focusedPresentationItemId,
|
||||
targetLabel: targetNode?.label || "",
|
||||
targetDescription: targetNode?.description || "",
|
||||
question: focused.question,
|
||||
|
||||
Reference in New Issue
Block a user