feat(confidence-engine): support not-relevant findings

This commit is contained in:
2026-08-27 12:08:11 +01:00
parent bf6c4241a5
commit 5c926154cd
3 changed files with 247 additions and 1 deletions
+24 -1
View File
@@ -169,6 +169,7 @@ function FocusedQuestionBody({
setFollowUpQuestion,
focusedContributions,
currentFindings,
onUpdateFindingDisposition,
}) {
const hasContent = focused?.question?.trim() || formulationStep === "active" || processingStep === "active" || focused?.error;
const hasResult = Boolean(focused?.result);
@@ -202,7 +203,22 @@ function FocusedQuestionBody({
{/* Prior accumulated learning (prior turns, current turn excluded — shown above) */}
<PriorContributionsSummary nodeId={nodeId} contributions={focusedContributions || []} />
<div><h3 className="mb-1 text-[11px] font-semibold tracking-widest uppercase text-gray-500">What this tells us</h3><ul className="list-disc pl-5 space-y-1">{(currentFindings?.length ? currentFindings : (focused.result.observations || [])).map((item, i) => (<li key={i} className="text-sm leading-relaxed text-gray-700">{currentFindings?.length ? item.proposition : item}</li>))}</ul></div>
<div><h3 className="mb-1 text-[11px] font-semibold tracking-widest uppercase text-gray-500">What this tells us</h3><ul className="list-disc pl-5 space-y-2">{(currentFindings?.length ? currentFindings : (focused.result.observations || [])).map((item, i) => {
const isFinding = typeof item === "object" && item !== null && "id" in item;
const disposition = isFinding ? item.userDisposition : null;
return (
<li key={i} className="text-sm leading-relaxed text-gray-700 flex items-start gap-2">
<span className="flex-1">{currentFindings?.length ? item.proposition : item}</span>
{isFinding && onUpdateFindingDisposition && (
disposition === "not_relevant" ? (
<button onClick={(e) => { e.stopPropagation(); onUpdateFindingDisposition(item.id, null); }} className="mt-[2px] text-[10px] font-medium text-teal-600 underline shrink-0 hover:text-teal-700" title="Restore to understanding">restore</button>
) : (
<button onClick={(e) => { e.stopPropagation(); onUpdateFindingDisposition(item.id, "not_relevant"); }} className="mt-[2px] text-[10px] font-medium text-gray-400 underline shrink-0 hover:text-red-500" title="Remove from understanding">not relevant</button>
)
)}
</li>
);
})}</ul></div>
<div><h3 className="mb-1 text-[11px] font-semibold tracking-widest uppercase text-gray-500">Still unclear</h3><ul className="list-disc pl-5 space-y-1">{(focused.result.uncertainties || []).map((u, i) => (<li key={i} className="text-sm leading-relaxed text-gray-700">{u}</li>))}</ul></div>
<div><h3 className="mb-1 text-[11px] font-semibold tracking-widest uppercase text-gray-500">Questions this raises</h3>
{(focused.result.possibleFollowUpQuestions || []).length > 0 ? (
@@ -1024,6 +1040,7 @@ function FocusedInvestigationWorkspace({
hasCompletedInvestigation,
focusedContributions,
currentFindings,
onUpdateFindingDisposition,
}) {
const hasResult = Boolean(focused?.result);
@@ -1052,6 +1069,7 @@ function FocusedInvestigationWorkspace({
setFollowUpQuestion={setFollowUpQuestion}
focusedContributions={hasResult ? [] : (focusedContributions || [])}
currentFindings={currentFindings || []}
onUpdateFindingDisposition={onUpdateFindingDisposition}
/>
</div>
@@ -1072,6 +1090,7 @@ function OpenQuestionsPanel({
startFocused, handleDeconstructSubmit, retryFormulation, setSelectedPresentationItemId,
setFocusedPresentationItemId, setFocusedAnswer, focusedAnswer, setDoneForNowIds,
setFollowUpQuestion, focusedContributions, focusedInvestigations, setIsFocusedWorkspaceOpen,
onUpdateFindingDisposition,
}) {
const openNodes = (graph?.nodes || []).filter(
(n) => n.kind === "unknown" && n.status !== "resolved" && !doneForNowIds.includes(n.id),
@@ -1149,6 +1168,7 @@ function OpenQuestionsPanel({
setDoneForNowIds={setDoneForNowIds}
setFollowUpQuestion={setFollowUpQuestion}
focusedContributions={focusedContributions}
onUpdateFindingDisposition={onUpdateFindingDisposition}
/>
{/* Thread contributions for this node */}
@@ -1191,6 +1211,7 @@ export default function ReasoningWorkspace({
focusedContributions,
onFocusedContribution,
findings,
onUpdateFindingDisposition,
}) {
const [investigationHistory, setInvestigationHistory] = useState([]);
const turnCounter = useRef(0);
@@ -1794,6 +1815,7 @@ export default function ReasoningWorkspace({
setFollowUpQuestion={setFollowUpQuestion}
focusedContributions={focusedContributions}
currentFindings={currentFindings || []}
onUpdateFindingDisposition={onUpdateFindingDisposition}
/>
);
})()}
@@ -2043,6 +2065,7 @@ export default function ReasoningWorkspace({
}}
focusedContributions={focusedContributions}
currentFindings={currentFindings || []}
onUpdateFindingDisposition={onUpdateFindingDisposition}
/>
{/* Workspace navigation — hidden during formulation/loading states */}
{formulationStep !== "active" && (