fix(collector): 機器寫進筆記庫的檔案一律帶前綴,不再跟使用者的頁面撞名(arcrun-rag#60)

leo 2026-08-12:「我的 Logseq 又被覆蓋⋯⋯**不只是加上 journal,可能所有的檔案都加一個前後綴,比如「wiki」**。」

不是資料被蓋掉,是機器產出用了跟他一樣的命名空間(status.md、日期檔那些)
⇒ 他打開資料夾分不出哪些是自己的。**心理上的覆蓋跟實際覆蓋一樣糟。**
This commit is contained in:
2026-08-12 14:54:59 +08:00
parent 37a02061dd
commit 5a140faf1f
14 changed files with 1305 additions and 45 deletions
+12 -7
View File
@@ -26,10 +26,11 @@ func TestExtractWithWorkersAI_VaultRedirectsAndDoesNotClobber(t *testing.T) {
t.Fatal(err)
}
// 隱藏卡片目錄裡先放一份既有內容,驗證不會被無聲蓋掉。
// 檔名帶 arcrun- 前綴=第二輪之後卡片真正的名字(machinemark.go)。
cardDir := filepath.Join(root, ".arcrun-rag", "wiki", "cards")
mustMkdir(t, cardDir)
preexisting := "# note\n既有內容"
if err := os.WriteFile(filepath.Join(cardDir, "note.md"), []byte(preexisting), 0o644); err != nil {
if err := os.WriteFile(filepath.Join(cardDir, "arcrun-note.md"), []byte(preexisting), 0o644); err != nil {
t.Fatal(err)
}
@@ -48,8 +49,8 @@ func TestExtractWithWorkersAI_VaultRedirectsAndDoesNotClobber(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if len(cards) != 1 || cards[0] != ".arcrun-rag/wiki/cards/note.md" {
t.Fatalf("vault 目標的卡片路徑不對:%v", cards)
if len(cards) != 1 || cards[0] != ".arcrun-rag/wiki/cards/arcrun-note.md" {
t.Fatalf("vault 目標的卡片路徑不對:%vwant [.arcrun-rag/wiki/cards/arcrun-note.md]", cards)
}
// pages/.obsidian 之外沒有新增任何非隱藏 .mdObsidian 不掃描 .arcrun-rag/)。
@@ -65,7 +66,7 @@ func TestExtractWithWorkersAI_VaultRedirectsAndDoesNotClobber(t *testing.T) {
}
var foundBackup bool
for _, e := range entries {
if strings.HasPrefix(e.Name(), "note.md.bak-") {
if strings.HasPrefix(e.Name(), "arcrun-note.md.bak-") {
foundBackup = true
}
}
@@ -74,7 +75,11 @@ func TestExtractWithWorkersAI_VaultRedirectsAndDoesNotClobber(t *testing.T) {
}
}
// 非 vault既有行為不變(回歸)——卡片仍落 system-dev/wiki/cards/。
// 非 vault:卡片仍落 system-dev/wiki/cards/(目錄不變),但檔名同樣帶標記
//
// 🔴 第二輪刻意讓「vault 與非 vault 用同一條命名規則」:紅線是「前綴只准一種、
// 不要一部分加一部分不加」。若只在 vault 加前綴,一般資料夾的使用者照樣分不出
// 哪些檔是機器寫的——而 system-dev/wiki/cards/ 在他的檔案總管裡是**看得見**的。
func TestExtractWithWorkersAI_NonVaultUnchanged(t *testing.T) {
root := t.TempDir()
srcRel := "note.md"
@@ -93,7 +98,7 @@ func TestExtractWithWorkersAI_NonVaultUnchanged(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if len(cards) != 1 || cards[0] != "system-dev/wiki/cards/note.md" {
t.Fatalf("非 vault 行為變了%vwant [system-dev/wiki/cards/note.md]", cards)
if len(cards) != 1 || cards[0] != "system-dev/wiki/cards/arcrun-note.md" {
t.Fatalf("非 vault 卡片路徑不對%vwant [system-dev/wiki/cards/arcrun-note.md]", cards)
}
}