From 0de201e042bbb3d98d8290f133bc6e44ac7a0c96 Mon Sep 17 00:00:00 2001 From: Nelson Pires Date: Mon, 9 Feb 2026 11:52:41 -0300 Subject: [PATCH] Fix: Resolve Comment Draft Collisions by Using Full File Path (#370) * fix(FilesView): use file path for drafts labeling Use file path for draft labels instead of file name for precise grouping Filter and associate drafts by file path to ensure correct per-file draft retrieval Improve handling of files with identical names across directories * fix(PierreDiffViewer): use fileName as label for drafts Use fileName as the draft label when editing or adding diffs Fallback to 'unknown' if fileName is missing for draft labels Align draft filtering to the provided fileName rather than basename * refactor(ui): remove unused fileLabel computation --- packages/ui/src/components/views/FilesView.tsx | 4 ++-- packages/ui/src/components/views/PierreDiffViewer.tsx | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/ui/src/components/views/FilesView.tsx b/packages/ui/src/components/views/FilesView.tsx index 14437ad9..aef44a7a 100644 --- a/packages/ui/src/components/views/FilesView.tsx +++ b/packages/ui/src/components/views/FilesView.tsx @@ -750,7 +750,7 @@ export const FilesView: React.FC = () => { addDraft({ sessionKey, source: 'file', - fileLabel: selectedFile.name, + fileLabel: selectedFile.path, startLine: finalRange.start, endLine: finalRange.end, code, @@ -1765,7 +1765,7 @@ export const FilesView: React.FC = () => { const sessionDrafts = allDrafts[sessionKey] ?? []; // Filter drafts for current file const fileDrafts = sessionDrafts.filter( - (d) => d.source === 'file' && d.fileLabel === selectedFile.name + (d) => d.source === 'file' && d.fileLabel === selectedFile.path ); const widgets: BlockWidgetDef[] = []; diff --git a/packages/ui/src/components/views/PierreDiffViewer.tsx b/packages/ui/src/components/views/PierreDiffViewer.tsx index 96549301..ceada607 100644 --- a/packages/ui/src/components/views/PierreDiffViewer.tsx +++ b/packages/ui/src/components/views/PierreDiffViewer.tsx @@ -264,7 +264,6 @@ export const PierreDiffViewer: React.FC = ({ return; } - const fileLabel = fileName ? fileName.split('/').pop() || 'unknown' : 'unknown'; // Pierre selection range: { start, end, side } // Store needs { startLine, endLine, side: 'original'|'modified' } // Pierre side: 'additions' (right) | 'deletions' (left) @@ -275,7 +274,7 @@ export const PierreDiffViewer: React.FC = ({ if (editingDraftId) { updateDraft(sessionKey, editingDraftId, { - fileLabel, + fileLabel: fileName || 'unknown', startLine: targetRange.start, endLine: targetRange.end, side: storeSide, @@ -287,7 +286,7 @@ export const PierreDiffViewer: React.FC = ({ addDraft({ sessionKey, source: 'diff', - fileLabel, + fileLabel: fileName || 'unknown', startLine: targetRange.start, endLine: targetRange.end, side: storeSide, @@ -436,7 +435,7 @@ export const PierreDiffViewer: React.FC = ({ const sessionDrafts = allDrafts[sessionKey] ?? []; // Match file label logic - use basename - const fileLabel = fileName ? fileName.split('/').pop() || 'unknown' : 'unknown'; + const fileLabel = fileName || 'unknown'; const fileDrafts = sessionDrafts.filter((d) => d.source === 'diff' && d.fileLabel === fileLabel); const anns: DiffLineAnnotation[] = [];