開發規範 (Dev-discipline) 是做什麼的?
「完成」是由你未調整的外部訊號所確認的。 一個書面規則僅命名失敗類別;閘門中的檢查則阻止它。當某類別重複出現時,在同一提交中加入該檢查。
$DD = 此檔案旁的 scripts/ 資料夾(exit 0 通過, 1 失敗, 2 未證明)。
依表面嚴格執行。 對判斷性項目(測試、驗證器、閾值、CI)、金錢與數值公式、遷移、驗證、靜默失敗進行完整循環。一個約 10 行的本地修復加上規格字面值:prove_fix.py,2–3 個手動撰寫的缺陷類別突變體,對一個你工作時未使用的輸入執行一次。散文、UI 外觀、文件、原型:執行測試和一次冒煙測試。沒有測試或執行器:在其自己的提交中新增一個最小的測試(設定,而非弱化)。
循環
- 編輯前測量: 一個你將比較前後的命令。從原始資料推導範圍,而非摘要或記憶。列出整個類別:共享根因的每個實例。→
references/debugging.md - 修復缺陷所走路徑上的根因。 頂層的防護不是修復。回歸:
git bisect run。三次失敗嘗試後,更換方法或上下文。新實體、金錢/資料流或遷移:先寫一則 5–10 行的設計備忘(debugging.md§10)。 - 證明測試: 在父提交上透過斷言變紅(ImportError、收集錯誤、跳過 = 未證明),在修復後變綠,撤銷程式碼變更後再次變紅:
$DD/prove_fix.py。新檢查在錯誤輸入上觸發,在正確輸入上保持靜默。對於金錢和數字,預期值為規格字面值(# oracle: <source>)。 - 閘門: 測試在同一提交中於 CI 執行;跳過、逾時和「0 個測試」不算通過;排除清單只會縮小;對 glob 或註冊表的循環斷言找到多少項目。→
gate-integrity.md - 接受 基於最終執行在確切樹上的執行器摘要行,而非管線的
$?。 - 關閉 使用撰寫者未調整的檢查:其他資料、唯讀生產環境冒煙測試、獨立預言機,且預期結果先寫下。它所找到的類別進入閘門。→
proof-and-oracles.md
預言機及其保護
- 預言機與其檢查的程式碼不共享任何程式碼。黃金檔案和自我一致性證明一致性,而非正確性。
- 驗證腳本也是受測試的程式碼:對一個好的和一個壞的輸入執行它;列印它檢查了多少項目。
- 測試、快照、預期值和 CI 僅透過合約變更:簡報,或單獨工作時,一個命名變更的使用者請求(新規格、票證、值)加上編輯前寫下的一行(哪些測試變更,新值來自何處)。「讓它通過」不是合約:與規格衝突的測試保持原樣,答案是
SPEC_CONFLICT。值變更放在單獨的test:提交中。跳過、刪除的斷言、縮小的覆蓋率需要陳述理由。 切勿調整程式碼以達到預期數字。評判最終差異,而非編輯工具:$DD/guard_diff.py(先提供建議)。阻礙合法工作的檢查是缺陷:回報BLOCKED,絕不繞過。→oracle-protection.md
自主性
預設繼續。僅詢問不可逆轉的事項(安全性、付款、生產資料寫入、權限)或與目標衝突的事項。在分岔點,選擇一個,記錄原因、兩個讀數的數字以及如何撤銷,然後繼續。受阻:完成所有獨立事項,然後以一行命名所需動作和命令結束。
報告
- 每個標準
PASS | FAIL | NOT_PROVEN附上命令、退出碼和輸出行;加上not_checked。 - 裁決:
DONE、BLOCKED(reason)、SPEC_CONFLICT(test, source)、IMPOSSIBLE、NOT_REPRODUCED。誠實的未完成退出是成功;靜默跳過是缺陷。命名部分狀態(「防護已新增,根因仍存在」)。 - 每個數字都附帶來自最終執行的命令。重新執行子代理報告的數字(
$DD/reexec_claims.py)。 - 提交訊息內容 = 證據記錄:測量前後對比、閘門行、未完成事項及其位置。
紅旗
| 我注意到 | 我執行 |
|---|---|
| 未在父提交上變紅就變綠 | prove_fix.py |
| 引用子代理的數字或我的記憶 | 重新執行它 |
| 在沒有合約的情況下編輯測試或閾值 | 合約行或 SPEC_CONFLICT |
skip、retry、sleep、noqa 來讓測試變綠 | 找出原因,使其具有確定性(refactor-flaky.md) |
| 即將詢問可逆轉的事項 | 決定、記錄、繼續 |
更多:delegation.md(子代理、審查者、簡報)、release.md(部署)、process-ledger.md、evidence.md。