## Problem `core.hooksPath` 設成共用 checkout 的 `.githooks` **絕對路徑**。從另一個 git worktree 推送時,git 在 worktree 的根目錄執行 hook,但 hook 檔本身取自共用 checkout——而共用 checkout 的 `main` 可以落後被推送的程式碼很多個 commit。 結果:pre-push 用**舊版**的 `run-guards.sh` 檢查**新版**的程式碼。 ## 觸發過的實例(2026-09-29,#664 推送) - 共用 checkout 的 `main` 落後 `origin/main` 26 個 commit;兩邊的 `pre-push` 相同,但 `run-guards.sh` 差 95 行 - worktree 的程式碼已含 #629(`plugin/tests/rule-coverage.sh` 移植成 `akashic-guards rule-coverage` 後刪除) - pre-push 的 `swift build`、全套 `swift test` 都通過,到守衛階段失敗:`bash: plugin/tests/rule-coverage.sh: No such file or directory`,推送被拒 - 以 `git -c core.hooksPath=<worktree>/.githooks push` 改跑被推送程式碼自己的 hook 才通過 ## Impact 兩個方向都會發生,第二個比較糟: 1. **假失敗**(這次):舊 hook 呼叫已被刪除或改名的東西,推送被擋,花一輪全套測試(約 12 分鐘)才看到 2. **假通過**:被推送的程式碼新增了守衛(例如 #664 的 `network-confinement`),舊 hook 不知道它存在,就不會跑——gate 看起來綠,其實沒檢查新規則 ## Expected pre-push 檢查的是**被推送的那份程式碼自己的** hook 與守衛。 ## 可能的方向(未決,僅供 diagnose 參考) - `core.hooksPath` 改為相對路徑 `.githooks`(git 以各 worktree 的根目錄解析),或 - hook 內以 `git rev-parse --show-toplevel` 定位 `run-guards.sh`,而不是 `$(dirname "$0")` 另:#693 第 3 點處理的是同一個絕對路徑出現在公開文件裡的**隱私**面;本 issue 是它的**功能**面,兩者可以一起改,但判準不同。 Refs #664 --- ## Current Status **Phase**: verified(R2:HIGH 0、MEDIUM 0;兩則 LOW 是 CLAUDE.md 的措辭,在 #703 的修正輪一起改) **Last updated**: 2026-09-30 by idd-update ### Blocking - (無)待使用者 /idd-close ### Commits - `f7cf1677`(實作) - `354e2a2e`(R1 修正);tag `idd-697-verified`
Problem
core.hooksPath設成共用 checkout 的.githooks絕對路徑。從另一個 git worktree 推送時,git 在 worktree 的根目錄執行 hook,但 hook 檔本身取自共用 checkout——而共用 checkout 的main可以落後被推送的程式碼很多個 commit。結果:pre-push 用舊版的
run-guards.sh檢查新版的程式碼。觸發過的實例(2026-09-29,#664 推送)
main落後origin/main26 個 commit;兩邊的pre-push相同,但run-guards.sh差 95 行plugin/tests/rule-coverage.sh移植成akashic-guards rule-coverage後刪除)swift build、全套swift test都通過,到守衛階段失敗:bash: plugin/tests/rule-coverage.sh: No such file or directory,推送被拒git -c core.hooksPath=<worktree>/.githooks push改跑被推送程式碼自己的 hook 才通過Impact
兩個方向都會發生,第二個比較糟:
network-confinement),舊 hook 不知道它存在,就不會跑——gate 看起來綠,其實沒檢查新規則Expected
pre-push 檢查的是被推送的那份程式碼自己的 hook 與守衛。
可能的方向(未決,僅供 diagnose 參考)
core.hooksPath改為相對路徑.githooks(git 以各 worktree 的根目錄解析),或git rev-parse --show-toplevel定位run-guards.sh,而不是$(dirname "$0")另:#693 第 3 點處理的是同一個絕對路徑出現在公開文件裡的隱私面;本 issue 是它的功能面,兩者可以一起改,但判準不同。
Refs #664
Current Status
Phase: verified(R2:HIGH 0、MEDIUM 0;兩則 LOW 是 CLAUDE.md 的措辭,在 #703 的修正輪一起改)
Last updated: 2026-09-30 by idd-update
Blocking
Commits
f7cf1677(實作)354e2a2e(R1 修正);tagidd-697-verified