生命週期安全的驗證
觸發條件與邊界
在任務完成、審查交接、工作區清理或其他可能刪除或重新定位當前工作目錄的授權轉換之前使用。此技能不授權清理、生命週期轉換、狀態變更、程序終止或重試。請遵循平台實際的生命週期合約;並非每種轉換都會移除工作樹,且成功的轉換不一定需要停止工作進程。
轉換之前
- 建立確切身份:任務/記錄 ID、看板或命名空間、設定檔/帳戶、儲存庫與預期狀態。不要依賴工具在切換目錄後隱含的當前任務。使用平台支援的明確選擇器。
- 檢查清理語意,識別任務擁有的位置與持久位置。選擇轉換可以移除的每個工作區之外的一個現有穩定目錄。父路徑僅在它本身也倖存於清理時才安全;指向可丟棄工作區的符號連結不是持久位置。解析真實路徑。
- 先完成驗收檢查。透過平台支援的持久工件機制或其他使用者核准的持久位置,保留所需的報告、校驗和、提交與附件。讀回確切的工件身份與內容。註解中的路徑字串並不能保留它所命名的檔案。
- 在可丟棄目錄之外記錄一份精簡的轉換前收據:確切身份、預期轉換、證據位置、驗證指令以及任何未解決的限制。切勿為了保留證據而將未完成的驗收標記為已完成;應改用適當的授權檢查點/交接狀態。
- 規劃轉換後的驗證,使其不需要舊的檢出、其虛擬環境、相對檔案、依賴環境的看板發現或輔助腳本。在轉換之前解析所需的可執行檔與持久路徑。
轉換與精確讀回
- 執行一次已授權的轉換。擷取其收據,不要將成功視為所需持久狀態的證明。
- 使用執行工具的明確的穩定工作目錄參數啟動讀回。指令中的
cd可能在工具嘗試進入其記憶中已刪除的 cwd 時失敗而永遠無法執行。如果工具缺少工作目錄覆寫功能,請使用基於倖存位置的新獨立會話。不要為了修復失敗的讀回而重複生命週期變更。 - 使用支援的唯讀介面讀取確切的任務/記錄與轉換事件。驗證預期狀態、相關執行/事件身份以及持久工件內容。如果請求了移除本身,請分別驗證檔案系統的缺失與 Git 工作樹的取消註冊。不要假設目錄缺失就表示分支或附件已被移除。
- 如果平台轉換了請求的狀態(例如將其路由進行審查),請回報實際狀態。如果工作進程仍處於活動狀態,請單獨回報;未經授權不要停止它。
- 發生錯誤時,檢查 stderr 以及哪個階段失敗。一個回傳 126 並顯示
cd: ... No such file or directory的包裝器並不能證明目標可執行檔需要chmod。僅從穩定目錄重試唯讀驗證。如果無法讀取記錄,請回報轉換已確認但驗證不完整。
可丟棄的回歸測試裝置
該測試裝置會建立自己的臨時 Git 儲存庫與連結工作樹,將一份合成收據保存在同級的持久目錄中,僅移除該測試裝置的工作樹,然後證明從已刪除的 cwd 啟動會失敗,而從持久目錄啟動則成功。它還會檢查 Git 的工作樹清單與收據內容。它絕不會觸碰真實的任務、遠端、用戶工作區或平台 API。
從已安裝的套件目錄執行:
python -m unittest discover -s scripts -p 'test_*.py' -v
此測試僅驗證檔案系統/子程序/Git 行為,而非通用的平台清理保證。真實的完成語意與遠端工件讀回仍需平台特定的驗證。不要為了演示而對使用者的工作區執行移除指令。
來源與出處
獨立撰寫自反覆出現的已移除-cwd 驗證失敗案例;不包含任何私有日誌、路徑或任務識別碼。Python 的
子程序文件記錄了 cwd、回傳碼與子程序啟動失敗。
Git 工作樹手冊記錄了連結工作樹的建立、移除與列出。這些基本元件支援該測試裝置,而非推斷任何特定任務排程器的實作。