Genesis Deslop 是做什麼的?
審查並簡化選定的變更,且不改變產品行為。Deslop 是明確的:切勿僅因實作完成就執行它。
在執行第一個 Genesis 操作之前,先解析其呼叫方式。請勿將 Genesis 操作或 genesis --version 當作可用性探測。
- 讀取儲存庫根目錄下的
package.json。僅當該清單的name為genesis-compiler,或其dependencies、devDependencies、optionalDependencies包含精確的genesis-compiler鍵時,才將 Genesis 視為專案鎖定。 - 對於專案鎖定的儲存庫,每次呼叫 Genesis CLI 操作時都要使用
npm exec --no -- genesis <arguments>。這樣執行時無需擷取其他套件。如果宣告的套件未安裝,則回報該專案的依賴項尚未準備就緒;不要回退到其他 Genesis 版本。 - 否則,不要嘗試
npm exec。執行command -v genesis(或當前 shell 等效的PATH查詢)。當它解析出一個可執行檔時,直接呼叫genesis <arguments>。 - 當兩個來源都不可用時,停止並回報 Genesis 不可用。切勿僅為了滿足工作流程指令而安裝或更新 Genesis。
成功解析呼叫是例行公事。不要敘述 Genesis 是專案鎖定還是在 PATH 上,也永遠不要將直接使用 PATH 描述為回退。僅在解析失敗或用戶明確詢問時,才提及呼叫方式的選取過程。
對於面向用戶的更新,請遵循配置好的協作方法,包括其技術深度和回應長度。回報具體的進度、發現或阻礙;不要宣布你正在遵循指導方針。
載入有效專案指令一次
Deslop 請求可能以完整的 Genesis 生成提示形式到達,也可能以例如在代理工作階段中的 Deslop 這類直接請求形式到達。
如果當前任務已包含 GENESIS CONTEXT 且其任務為 deslop,則直接繼續使用它。不要生成另一個提示。
否則,在解析 Git 範圍之前,使用上述的呼叫規則執行一次 Genesis prompt --task deslop 操作。對於一個單純的 Deslop 請求,不要傳遞任何請求參數。如果用戶指定了一個計數、提交或範圍,則將該確切請求作為一個安全引用的參數傳遞。將列印出的提示視為同一回合的指令;不要將其分派給另一個代理,也不要再次生成它。此步驟將所選堆疊的技術特定 Deslop 指南以及任何專案自訂內容,與下面可攜帶的合約組合在一起。
解析清理範圍
在編輯之前檢查 git status --short 以及已暫存和未暫存的差異。允許骯髒的工作目錄;不要求有先前的提交。保留現有的索引和不相關的工作。不要將暫存、隱藏、提交或丟棄變更作為必要條件或清理的一部分。
按如下方式解析用戶的範圍:
- 若未指定範圍,則僅選取你在當前任務中的自身變更,包括先前的幾輪。這可以包括已暫存和未暫存的編輯、新的未追蹤檔案以及已提交的任務變更。根據任務和編輯歷史識別所有權,然後根據當前原始碼和 Git 差異確認這些變更。整個骯髒的差異、最新的提交或 Git 作者身份均不能證明所有權。
- 保留用戶或其他代理所做的變更,包括同一檔案中的編輯。如果無法確定所有權,請詢問應清理哪些變更。如果當前任務沒有你自己的變更,則回報沒有什麼可清理的;不要默默地選擇最新的提交或他人的工作。
- 明確的提交、第一父項計數或範圍優先於預設值,無論這些變更的作者是誰。
- “最後一次提交”指的是
HEAD相對於其第一個父項。 - “最後 N 次提交”指的是從這些 N 次提交之前的第一個父項到
HEAD的淨剩餘變更。 - 一個具名的提交指的是該提交相對於其第一個父項。
- 一個明確的提交範圍正好是該範圍。
- 根提交使用 Git 的根差異形式,因為它沒有父項。
檢查已解析的變更和路徑,以及適用的提交身份。審查它們的差異、當前原始碼、直接呼叫點、相關測試以及受影響的程式和堆疊上下文。對於明確的提交範圍,不要用普通的 working-tree 差異來取代選定的提交差異。對當前原始碼套用清理,同時保留範圍外的編輯。如果無法安全地分離重疊的編輯,請詢問關於該重疊的情況,而不是僅僅因為儲存庫是骯髒的就加以阻擋。
套用清理合約
套用隨任務提供的工程方法。如果此技能被直接呼叫,請同時閱讀 genesis/engineering.md 以及相關的專案上下文。清理必須減少或保持複雜度,永遠不要引入未經批准的、所選設定檔或具體需求並不需要的機制。
查閱 .genesis/machine-city.json 或執行 Genesis index <name-or-path> 操作,以在引入或合併抽象化之前找到現有的公共和內部函數。在原始碼及其呼叫點確認每一個明顯的重複。
在所選變更的預期行為和範圍內,不要留下重複的輔助程式、不明確或難以推理的程式碼,以及違反程式碼庫中既定模式的程式碼。移除不必要的包裝器、廢棄的支架、平行的框架管道以及投機性的抽象。在一個清晰的模組足夠的情況下,合併所有權。不要為了追求小型檔案或間接層而最佳化;要為了簡潔明瞭、初級程式設計師也能理解的設計而最佳化。
清理不是第二次實作。所選的變更限制了清理可能發生的位置;共享一個檔案並不意味著將不相關的編輯納入範圍,或授權該檔案中的不同行為。Deslop 可以重新組織已經存在的行為;它不能完成、修正或擴展行為。如果審查中發現缺陷、遺漏的行為、合約不匹配或測試缺口,請將其回報為後續發現並保持不變,即使它在變更的路徑內或看起來與先前的實作有關。不要在 Deslop 期間實作該發現或更改測試以適應它。
套用所選堆疊提供的每一項技術特定的 Deslop 指令,並載入適用於框架和語言上下文的官方技術技能。堆疊指導方針豐富了此合約;它不能削弱保持行為不變的邊界、改變所選的範圍,或授權不相關的實作。
你可以編輯或刪除實作和測試檔案,前提是這是最明確的保持行為不變的清理方式。如果移動或重新命名所選的原始碼會使受影響的程式引用過時,則僅更新該引用或資訊性的實作地圖。不要為了合理化清理行為而改變藍圖或程式的公開合約。不要編輯 .genesis/、Git 元資料、依賴目錄、生成的建置輸出、保留的遷移歷史或外部資源。不要削弱測試、公開行為或資料保證。不要建立第二個架構或執行不相關的重寫。
將清理結果保留為普通的未提交工作,以供審查和後續的普通提交。永遠不要修改或重寫所選的提交。在有用時執行重點檢查。最終宣告的檢查仍可透過 Genesis 的 verify 操作使用。總結已解析的範圍和任何選定的提交身份、哪些東西變得簡化、更改了哪些檔案、實際執行了哪些檢查,以及未更改的後續發現。