summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurenHao0426 <blackhao0426@gmail.com>2026-02-14 04:27:16 +0000
committerYurenHao0426 <blackhao0426@gmail.com>2026-02-14 04:27:16 +0000
commit45806ea907334d86c7f0729692d5d4826cf570f8 (patch)
tree5b1407802fee726ae2b58aa6a9dc3b3c7b76314e
parent731c1f1f3c6677b9e1332bd26f7d962a6c0dc630 (diff)
Fix stale closure bug in council/debate node title generation
The onComplete callbacks captured `nodes` from the closure at call time, which was stale by the time streaming finished. Use useFlowStore.getState() to read fresh state instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
-rw-r--r--frontend/src/components/Sidebar.tsx9
1 files changed, 6 insertions, 3 deletions
diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx
index 672da12..08f0988 100644
--- a/frontend/src/components/Sidebar.tsx
+++ b/frontend/src/components/Sidebar.tsx
@@ -566,8 +566,9 @@ const Sidebar: React.FC<SidebarProps> = ({ isOpen, onToggle, onInteract }) => {
onStreamBuffer: (text) => { setCouncilStreamBuffer(text); setStreamBuffer(text); },
onComplete: () => {
setCouncilStage('');
- // Fetch final response for title generation
- const currentNode = nodes.find(n => n.id === runningNodeId);
+ // Fetch final response for title generation (use fresh store state, not stale closure)
+ const freshNodes = useFlowStore.getState().nodes;
+ const currentNode = freshNodes.find(n => n.id === runningNodeId);
const finalResponse = currentNode?.data.response || '';
if (finalResponse) generateTitle(runningNodeId, runningPrompt, finalResponse);
},
@@ -696,7 +697,9 @@ const Sidebar: React.FC<SidebarProps> = ({ isOpen, onToggle, onInteract }) => {
onStreamBuffer: (text) => { setDebateStreamBuffer(text); setStreamBuffer(text); },
onComplete: () => {
setDebateStage('');
- const currentNode = nodes.find(n => n.id === runningNodeId);
+ // Fetch final response for title generation (use fresh store state, not stale closure)
+ const freshNodes = useFlowStore.getState().nodes;
+ const currentNode = freshNodes.find(n => n.id === runningNodeId);
const finalResponse = currentNode?.data.response || '';
if (finalResponse) generateTitle(runningNodeId, runningPrompt, finalResponse);
},