一筆一檔的理由跟重啟閘門那組檔案一樣:並行寫入不互相覆寫。 五支 CLI 加上排程那一輪有可能同時動待辦簿。整本存成一個檔案的話,兩邊各讀一次整檔、各改自己那一筆、各寫回整檔,後寫的那一次就把前一次整本蓋掉,而且沒有任何訊號。同一個 id 被同時寫也不會寫出半份:先寫暫存檔再搬過去,搬在同一個檔案系統上是原子操作;暫存檔名以點號開頭,列表跳過點號開頭的檔案。
id 取完整雜湊的前八碼,刻意不跟 wiki 頁名的四十碼一致。 頁名不准截短是因為撞了就是兩台機器的紀錄互相覆寫且看不出來。這裡的 id 是本機檔名,人要念它、打進指令、看它印在狀態表與提醒文字裡——四十碼沒有人讀得完也打不對,人就會改用「第三筆」這種說法指定要關哪一筆,那才是真正會關錯的地方。前八碼是同一個雜湊的前綴、不是另一套算法,拿建立時間與標題重算就驗得回來。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
摘要
變更內容
tools/tasks.shtools/due.shtools/patrol.shreferences/behaviors.md存放:一筆一檔,純文字 key=value
id被同時寫也不會寫出半份:先寫暫存檔再搬過去,搬在同一個檔案系統上是原子操作;暫存檔名以點號開頭,列表跳過點號開頭的檔案。id取完整雜湊的前八碼,刻意不跟 wiki 頁名的四十碼一致。 頁名不准截短是因為撞了就是兩台機器的紀錄互相覆寫且看不出來。這裡的id是本機檔名,人要念它、打進指令、看它印在狀態表與提醒文字裡——四十碼沒有人讀得完也打不對,人就會改用「第三筆」這種說法指定要關哪一筆,那才是真正會關錯的地方。前八碼是同一個雜湊的前綴、不是另一套算法,拿建立時間與標題重算就驗得回來。判定:另開一支,界線做成單向
補了規格四個洞
id是它算出來的,不存就再也算不回同一個id、驗不出檔名對不對、前綴碰撞時也接不下去。補上之後一筆是十四個鍵。解了一個規格衝突
規格同時要求「同一件事不重複觸發」與「失敗照重試,不自動暫停」,而兩件事寫在同一個欄位上。不重複觸發的判準是「事件發生時間比上次執行晚」,但失敗也會寫上次執行,於是失敗過的事件型待辦再也等不到同一次事件,也就永遠不重試。
改用連續失敗次數當第三個判準把兩者分開:狀態還是待辦而次數大於零,代表上一次執行失敗,一律算到期,不再比事件也不看排定點。完成會把次數歸零,所以成功那一次不會被誤判成要重試。
這是這一批唯一改了判定語意的地方,值得覆核。
兩項刻意未接線,而且吵出來
兩者的處置都是印一行未接線、列進要人接手那一節,明說「這一筆現在判不出到期,不是還沒發生」。不接線與靜靜當成沒發生是兩件事,差別就在有沒有那一行。
狀態轉移表寫死在腳本裡
測試結果
--dry-run不推進快照、巡檢一輪整合。||沒跑到)。改用true並把理由寫進註解。lint-scripts.sh、check-behaviors.sh、ste100-lint.sh都回結束碼 0。無 BOM。case的否定字集被認成議題編號。改寫成grep -qE並在註解說明,不是關掉 hook 過關。這一批的邊界
登錄時的補問流程、逾期與失敗的處理行為、提醒怎麼送到前景、wiki 雙向同步,四項都不在這一批。但欄位都已經留在檔案裡,接的時候不必改存放格式。哪些欄位現在只存放不判定,檔頭有一段逐項寫明。
前置 Push Request
助理待辦簿的存放格式與讀寫工具,六個子命令與明確的狀態轉移表to 助理待辦簿:存放格式、讀寫工具、事件偵測與到期判定