internal/index/sqlite.go
@@ -156,9 +156,15 @@ for rows.Next() { var st FileStat var hash sql.NullString if err := rows.Scan(&st.Path, &st.Size, &st.Mtime, &hash); err != nil { var size, mtime sql.NullInt64 // 旧库迁移到 v2 后,老行的 size/mtime/content_hash 为 NULL(ALTER ADD COLUMN 不带值)。 // 用 Null 类型容忍 NULL:指纹缺失的行在对账时 size/mtime 必然不等,会走 // sha256 二次确认并重新写入指纹,实现自愈,不会误判为"未变更"。 if err := rows.Scan(&st.Path, &size, &mtime, &hash); err != nil { return nil, err } st.Size = size.Int64 st.Mtime = mtime.Int64 st.ContentHash = hash.String m[st.Path] = st }