Files
arcrun-collector/verify-60.sh
T
Leo 5a140faf1f fix(collector): 機器寫進筆記庫的檔案一律帶前綴,不再跟使用者的頁面撞名(arcrun-rag#60)
leo 2026-08-12:「我的 Logseq 又被覆蓋⋯⋯**不只是加上 journal,可能所有的檔案都加一個前後綴,比如「wiki」**。」

不是資料被蓋掉,是機器產出用了跟他一樣的命名空間(status.md、日期檔那些)
⇒ 他打開資料夾分不出哪些是自己的。**心理上的覆蓋跟實際覆蓋一樣糟。**
2026-08-12 14:57:32 +08:00

123 lines
5.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# verify-60.sh — arcrun-rag#60 第二輪的五項驗收,一次跑完並把實測輸出印出來。
#
# 用法(在 repo 任何位置都可以):
# bash collector/verify-60.sh 2>&1 | tee /tmp/verify-60.log
#
# 這支腳本不碰網路、不碰任何真實資料夾——fixture 全建在自己的暫存目錄裡,
# 跑完就刪。它印出的東西就是要貼進 issue #60 的證據。
#
# ⚠️ collector/ 自己是一個獨立的 Go modulemodule arcrun-rag/collector),
# 所有 go 指令都必須在 collector/ 裡面跑,不是在 repo 根目錄。
set -uo pipefail
cd "$(dirname "$0")" || exit 1 # ← collector/module 根)
FAIL=0
hr() { printf '\n══════════════════════════════════════════════════════════════\n%s\n══════════════════════════════════════════════════════════════\n' "$1"; }
hr "① 格式與編譯"
if [ -n "$(gofmt -l .)" ]; then
echo "⚠️ 下列檔案未照 gofmt 格式化,跑一次 gofmt -w ."; gofmt -l .
else
echo "gofmt:乾淨"
fi
go vet ./... || FAIL=1
go build ./... || { echo "❌ 編譯失敗"; exit 1; }
echo "編譯:通過"
hr "② 既有 Go 測試全綠(驗收條件⑤)"
go test ./... || FAIL=1
hr "③ 足跡測試:真的有既有日誌檔的 vault,跑之前/跑之後的完整檔案清單(驗收條件①②④)"
go test . -run 'Footprint' -v || FAIL=1
hr "④ 舊產物收拾:在一個「已經被舊版 daemon 弄髒」的真 vault 上實跑(驗收條件③)"
VAULT="$(mktemp -d)"
trap 'rm -rf "$VAULT"' EXIT
# ── 使用者自己的東西 ────────────────────────────────────────────
mkdir -p "$VAULT/logseq" "$VAULT/pages" "$VAULT/journals"
echo '{:default-home {:page "contents"}}' > "$VAULT/logseq/config.edn"
echo '- 我自己的目錄頁' > "$VAULT/pages/contents.md"
echo '- 我自己寫的讀書筆記' > "$VAULT/pages/讀書筆記.md"
echo '- 我自己寫的日記' > "$VAULT/journals/2026_08_10.md"
echo '- 昨天的日記' > "$VAULT/journals/2026_08_11.md"
# ── 舊版 daemon 已經弄進去的產物(leo 實際看到的那批)─────────────
mkdir -p "$VAULT/system-dev/wiki/cards" "$VAULT/.arcrun-rag/wiki/cards" "$VAULT/scripts"
echo '# status' > "$VAULT/system-dev/wiki/status.md"
echo '# mistakes' > "$VAULT/system-dev/wiki/mistakes.md"
echo '#!/bin/sh' > "$VAULT/scripts/sdd-active-check.sh"
echo '# 2026_08_10' > "$VAULT/.arcrun-rag/wiki/cards/2026_08_10.md"
echo '# 舊卡' > "$VAULT/.arcrun-rag/wiki/cards/2026_08_10.md.bak-1723459200000000000"
echo '# 會議記錄' > "$VAULT/system-dev/wiki/cards/會議記錄.md"
# 使用者檔案的內容指紋,最後要逐一比對「一個都沒被動到」
BEFORE_HASH="$(find "$VAULT/pages" "$VAULT/journals" "$VAULT/logseq" -type f -exec shasum {} \; | sed "s|$VAULT/||" | sort)"
echo "── 收拾之前的完整檔案清單 ──"
LIST_BEFORE="$(cd "$VAULT" && find . -type f | sort)"
echo "$LIST_BEFORE"
echo
echo "── collector tidy(預設只看不動)──"
go run ./cmd/collector tidy --folder "$VAULT" || FAIL=1
echo
echo "── 確認 dry-run 真的什麼都沒動 ──"
LIST_AFTER_DRYRUN="$(cd "$VAULT" && find . -type f | sort)"
if [ "$LIST_BEFORE" = "$LIST_AFTER_DRYRUN" ]; then
echo "✅ dry-run 後檔案清單與之前逐字相同"
else
echo "❌ dry-run 竟然動了東西:"; diff <(echo "$LIST_BEFORE") <(echo "$LIST_AFTER_DRYRUN"); FAIL=1
fi
echo
echo "── collector tidy --apply(真的動手)──"
go run ./cmd/collector tidy --folder "$VAULT" --apply || FAIL=1
echo
echo "── 收拾之後的完整檔案清單 ──"
(cd "$VAULT" && find . -type f | sort)
echo
echo "── 檢查一:使用者原本的檔案,一個都沒被動到 ──"
AFTER_HASH="$(find "$VAULT/pages" "$VAULT/journals" "$VAULT/logseq" -type f -exec shasum {} \; | sed "s|$VAULT/||" | sort)"
if [ "$BEFORE_HASH" = "$AFTER_HASH" ]; then
echo "✅ 使用者的 5 個檔案內容與路徑完全未變"
else
echo "❌ 使用者的檔案被動過:"; diff <(echo "$BEFORE_HASH") <(echo "$AFTER_HASH"); FAIL=1
fi
echo
echo "── 檢查二:機器產物一律帶 arcrun- 前綴,且沒有任何一個與使用者頁面同名 ──"
STRAY=0
while IFS= read -r f; do
base="$(basename "$f")"
case "$base" in arcrun-*) ;; *) echo " ❌ 沒帶前綴:$f"; STRAY=1;; esac
done < <(cd "$VAULT" && find ./.arcrun-rag/wiki/cards ./system-dev/wiki/cards -type f 2>/dev/null)
[ "$STRAY" -eq 0 ] && echo "✅ 卡片產物區全部帶前綴" || FAIL=1
echo
echo "── 檢查三:template 殘留被搬走而不是被刪掉(東西還在) ──"
for f in system-dev/wiki/status.md system-dev/wiki/mistakes.md scripts/sdd-active-check.sh; do
if [ -f "$VAULT/.arcrun-rag/legacy-template/$f" ]; then
echo " ✅ $f → .arcrun-rag/legacy-template/$f(內容還在)"
else
echo " ❌ $f 不見了"; FAIL=1
fi
done
echo
echo "── 檢查四:冪等(再跑一次不該有任何動作) ──"
go run ./cmd/collector tidy --folder "$VAULT" --apply || FAIL=1
hr "結果"
if [ "$FAIL" -eq 0 ]; then
echo "✅ 全部通過"
else
echo "❌ 有項目未通過,往上找 ❌"
fi
exit "$FAIL"