5909c2a43a
實撞(2026-09-02,做這張票的路上):KBDB 兩支工具都回 Connection closed,
照 history-first-guard.sh 印出來的那行 `touch /tmp/.kbdb-down` 打完再送同一個編輯,
**被一模一樣地擋第二次,訊息一字不差**。
根因(打出來的,不是推的):
$ touch /tmp/.kbdb-down
$ t=$(cat /tmp/.kbdb-down); echo "[$t]" → []
$ echo $((now - t)) → 1788318047 ≥ 3600
touch 造的是空檔,而那支閘讀的是**檔案內容**當時戳
⇒ 空字串被當成 0 ⇒「距今 17 億秒」⇒ 永遠不新鮮 ⇒ 恆擋。
⇒ 那行逃生門是印出來好看的,**沒有人照著打過一次**。
跟本票 comment 6071(scripts/ticket 沒有 handback 這個動詞)、
inkstone/ISEP#125(worktree 閘的逃生門原文照打 rc=2)是同一句話。
改法:內容不是數字就改用檔案的 mtime——touch 做的正是更新 mtime,
所以訊息那一行從此真的走得通;kbdb-asked-stamp.sh 寫數字的舊格式照樣相容。
路徑加 KBDB_STAMP_DIR 覆寫,只為了讓測試不去動這台機器真正的戳記
(清掉別的 session 的戳記=把閘弄成隨機的)。
沒有把閘弄鬆:過期的戳記照樣不算數(測試第 ⑦ 條守這件事),
文件/新檔/測試檔本來就不擋的三條也各有一格守著。
驗(hooks/tests/history-first-guard.test.sh,10 條,全離線):
修好後 10/10
修好前(路徑隔離) 9/10 —— ④「擋人的換成歷史警察了嗎」紅
⚠️ 第 ③ 條兩版都綠(它只驗離開碼,而過了第 0 道還有歷史警察會擋)
真正分辨得出新舊的是 ④,檔頭寫了怎麼重現這個對照。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
22 lines
1.2 KiB
Bash
Executable File
22 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# kbdb-asked-stamp.sh — PostToolUse:記下「這個 session 真的問過 KBDB 了」。
|
|
#
|
|
# 🔴 存在理由(leo 2026-08-08 當場點破兩件事):
|
|
# ①「你自己寫了 hook,結果一次次改都沒產生用途,問題太大」
|
|
# ②「KBDB 可以看到所有庫,成本最低,要求先查⋯⋯KBDB 的知識庫就是要建來取代你的記憶的」
|
|
#
|
|
# 原本的 history-first-guard 印了「補一次 kbdb_search 語意搜尋」,但那是**純文字建議**:
|
|
# 它唯一驗的是「你有沒有把同一個編輯再送一次」,不驗有沒有真的去查
|
|
# ⇒ 我 08-08 當天直接跳過,還要 leo 來提醒。
|
|
#
|
|
# 這支不擋任何東西,只留一枚時戳;判斷交給 history-first-guard 讀。
|
|
# 對齊 leo 的母原則:**環境邊界取代邏輯判斷**——順序做進機制,不靠我每次記得。
|
|
#
|
|
# 成本效益序(leo 2026-08-08 定):
|
|
# KBDB(一次看所有庫,最便宜)→ 該 repo 的 wiki/tasks → git log -S → 讀源碼(最貴,
|
|
# 只看得到「現在長怎樣」,看不到「為什麼變成這樣」)
|
|
set -eu
|
|
# 路徑跟 history-first-guard.sh 用同一個覆寫變數,否則測試會兩邊指到不同地方
|
|
date +%s > "${KBDB_STAMP_DIR:-/tmp}/.kbdb-asked"
|
|
exit 0
|