跳到內容

Anchor 執行

檢查只在它跑過的程式碼沒變時才成立,而且 anchor 不只一道指令。所以 book 記錄每次執行看到的 tree,而不是相信時鐘。

tree、仍成立的檢查,以及採用的執行

每次 anchor 執行都記下它執行所在 repo 的工作狀態 tree:開頭的 cd 會改變所在位置,採用的 worker 執行保留 worker 的 worktree。只要那個 tree 沒變、之後也沒有指向那個 repo 的修改,這次檢查就仍成立。在別的 repo 寫檔、或 worker 在自己的 worktree 裡修改,不影響它;透過 shell 指令改了程式碼,它就失效。

父 session 的 git merge、cherry-pick、pull 成功時,或收到子代理結果時,子代理的執行可以成為父 loop 自己的 verify(adopted)。條件是父 session 的工作狀態 tree 正好等於子代理最近一次同一 anchor 執行的 tree(忽略開頭切到 repo 根目錄的 cd),且那次通過。fast-forward 合入 worker 分支、或子代理直接在父 checkout 裡工作,都不必再跑一次。合到已前進的 base、父 session 有子代理沒看過的改動或 repo、或子代理跑測試時有沒 commit 的檔案,則要自己跑。

執行檢查點與 observe 檢查點

anchor 是一個執行檢查點,加上 observe 檢查點,寫在 kind 或 todo metadata。每一項 observe 檢查點都要在最後一次併入之後,以 verify 加 checkpoint 編號結案。純文字的 anchor 不會被當成指令引用。