Skip to content

[Bug] consolidateDuplicates 發生自我合併 - mergedFrom 指向自己的 ID #25

@tryweb

Description

@tryweb

lancedb-opencode-pro 0.2.5 去重功能 Bug 報告

Bug 描述

問題

consolidateDuplicates 函式在執行合併時,發生「自我合併」的情況 — 一筆記錄的 mergedFrom 欄位指向自己的 ID。

發生環境

  • Plugin 版本: 0.2.5
  • 發生時間: 2026-03-21(較舊記錄)
  • 觸發條件: 執行 memory_consolidate

證據

受影響的記錄

欄位
ID ebb542a9-dfd2-4d77-aab8-cbecbe2e8998
mergedFrom ebb542a9-dfd2-4d77-aab8-cbecbe2e8998(自己)
Timestamp 2026-03-21T10:09:37.958Z
Scope project:38d897a773acf779

程式碼位置

// store.ts 第 349-366 行
const older = a.row.timestamp <= b.row.timestamp ? a.row : b.row;
const newer = a.row.timestamp <= b.row.timestamp ? b.row : a.row;
// ...
const updatedNewerMeta = { ...newerMeta, mergedFrom: older.id };
// 問題:當 a 和 b 是同一筆記錄時,older.id === newer.id

影響範圍

項目 說明
資料完整性 自我參考的 metadata 標記錯誤
功能影響 低 — 不影響搜尋和召回
統計準確性 consolidatedCount 會把這筆計為成功合併(虛假計數)
發生頻率 罕見 — 目前只發現 1 筆

建議修復

consolidateDuplicates 函式中增加 ID 檢查:

// store.ts 約第 349 行
const older = a.row.timestamp <= b.row.timestamp ? a.row : b.row;
const newer = a.row.timestamp <= b.row.timestamp ? b.row : a.row;

// 新增:跳過自我合併
if (older.id === newer.id) {
  continue;
}

或在第 361 行寫入前驗證:

// 在更新 newer 之前
if (older.id === newer.id) {
  continue;
}

額外觀察

相似問題

這種類型的問題(迴圈中同一筆資料被重複處理)在 consolidateDuplicates 的雙重迴圈結構中都有可能發生。

測試建議

  1. 單筆資料的邊界情況測試
  2. 連續兩次幾乎相同時間戳記的資料
  3. 確保 mergedFrom 永遠不會等於自己的 ID

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions