Dev — 任務實作
實作一個任務包裹並交接給 QA。此技能定義了流程,並在 references/role-boundaries.md 中攜帶自身的角色邊界。若採用此技能的倉庫定義了代理規則(AGENTS.md、角色規則目錄等),則應閱讀並遵循它們(如存在);此技能絕不授予額外的存取權限。
使用時機
- 在
tasks/<task-id>/下有一個已完成的01-contract.md,且您是 Dev 角色。 - 您需要實作一個垂直切片、執行其 DoD 命令、記錄證據並交接。
- 在 QA 發出
REWORK_REQUIRED後重新處理任務。
不使用時機
- 合約缺失、不完整或有爭議 — 退回給 Planner。
- 被要求規劃、切片或審查任務,或驗證其他代理的工作。
- 請求的變更超出合約的
touch_files— 升級或拆分任務。
輸入
tasks/<task-id>/01-contract.md— 權威的 YAML frontmatter、touch_files、dod、第 4 節 BDD 行為場景(Given-When-Then 不變量)以及繼承的 ADR。- 合約引用的規格錨點。
- 專案的型別檢查與 lint 命令、現有測試套件,以及
dod.test_file宣告的 QA 擁有之接受度測試目標。 tasks/<task-id>/02-dev-workspace.md— 您將填寫的空白表單。
輸出
- 僅針對
touch_files所列路徑的程式碼變更。 - 遵守 BDD 不變量和循環複雜度限制(標準 $V(G) \le 10$,警示 $11-15$ 需在
02中說明,臨界 $> 15$ 禁止)的程式碼。 - 已完成的
02-dev-workspace.md,包含後設資料、實際變更、自我驗證以及實作偏差表格(行為DEV-001、DEV-002、...,或明確的 None 列)。 - 恰好一個交接標記:
- [x] WAITING_FOR_QA,僅在每個 DoD 項目都通過時勾選。 - 不編輯
01-contract.md、03-qa-verification.md、04-process.md或tests/acceptance/**。
工作流程
- 確認範圍與 BDD 合約。 閱讀
01-contract.md的 frontmatter 和第 4 節 BDD 場景。檢查task_id是否等於目錄名稱,以及touch_files、dod、adherence_adrs和 Given-When-Then 不變量是否已定義。將缺失或矛盾的項目回報給 Planner。 - 準備工作。 記錄基礎提交,並遵守專案的分支/提交慣例。除非審查者重新開啟,否則不重新開啟已接受的任務。
- 在 BDD 與複雜度限制下實作垂直切片。 僅修改
touch_files中的檔案。實作滿足第 4 節和dod.edge_cases中宣告的 Given-When-Then 不變量的邏輯。控制單一函式的循環複雜度(標準 $V(G) \le 10$)。若複雜度接近警示上限($11-15$),則套用重構模式(提煉函式、策略模式/查表、衛語句)。若 $V(G) > 15$,則在繼續前先重構。不要編輯或建立tests/acceptance/**。 - 執行機器可檢查的 DoD 與自我驗證。 執行
dod.type_check和dod.lint,然後執行專案的現有測試;考慮每個dod.edge_cases項目。對所有受影響的函式進行循環複雜度的自我審計。接受度測試目標(dod.test_file)由 QA 擁有:僅在其已存在時執行,絕不撰寫或編輯它。若其尚不存在,則在02中記錄,並讓 QA 在驗證期間執行。擷取命令/結果。 - 填寫
02-dev-workspace.md。 記錄分支、基礎/交接提交、設計說明、每個實際變更的檔案一行、淨行數,並勾選每個為真的自我驗證項目。對於任何具有警示複雜度($11 \le V(G) \le 15$)的函式,需包含明確的架構理由說明。若項目未通過則不勾選。完成實作偏差表格:每一行對應一處程式碼與合約或規格不同之處(DEV-001、DEV-002、...;操作add|modify|remove;#sec-*錨點),若無任何偏差則在每個儲存格中填寫 None。 - 交接給 QA。 僅在每個自我驗證項目都通過且複雜度限制滿足時,將
- [ ] WAITING_FOR_QA變更為- [x] WAITING_FOR_QA。這個被勾選的方框是交接的觸發器。不要編輯03或04。 - 重新處理時。 閱讀
03-qa-verification.md中 QA 的失敗追蹤,僅在合約範圍內修正,重新執行 DoD,更新02以記錄新的嘗試並再次交接。將重複失敗升級處理,而非繞過合約。
品質閘門(在宣告完成之前)
- 每個變更的路徑都列在
01-contract.md→touch_files中。 - 未建立或修改爆炸半徑外的檔案。
- 實作遵守所有 Given-When-Then BDD 場景與行為不變量。
- 型別檢查與 lint 成功退出;專案的現有測試通過。
- 循環複雜度自我審計通過:所有函式滿足 $V(G) \le 10$(或 $11-15$ 且在
02中有說明);無函式超過 $V(G) > 15$。 - QA 擁有的接受度測試目標(
dod.test_file)已宣告;若尚未撰寫,則已針對 QA 記錄此情況。 - 每個
dod.edge_cases項目都有實作/測試理由說明。 -
02-dev-workspace.md對此嘗試已完成,包含實作偏差表格(無偏差時含明確的 None 列)。 - 僅勾選了
WAITING_FOR_QA;03和04未受觸及。
失敗處理
- 合約缺失或矛盾:停止;回報該欄位並要求 Planner 修正。
- 需要超出範圍的變更:拆分任務或升級;絕不編輯
touch_files之外的內容。 - DoD 命令缺失或無法執行:回報該命令與錯誤;不輕忽檢查。
- DoD 失敗:修正實作並重新執行。檢查失敗時不勾選交接方框。
- 複雜度超過閾值($V(G) > 15$):在交接前使用提煉函式、策略模式/查表、衛語句或狀態模式進行重構;絕不交接臨界複雜度。
- 工具不可用:使用專案的手動命令並在
02中記錄證據;工作流程不得依賴可選工具。
04-process.md 與工具
04-process.md 是衍生的輸出。在交接方框被勾選後,可選的倉庫工具會附加 HANDOFF_QA_REQUESTED 並更新 macro_status/current_lock_holder。絕不手動編輯 04;若無工具,則依賴 git/CI 與被勾選的方框。
在 QA_PASSED 之後:規格寫回擁有權
實作偏差表格是 Dev 對該任務的最後交付物。在 QA 記錄 QA_PASSED 後,converge 技能擁有規格寫回:它將已確認的偏差合併到 .specs/02-tech-spec.md 中,歸檔任務包裹並關閉變更提案。
- Dev 絕不編輯
.specs/02-tech-spec.md,也絕不歸檔包裹。 - 結構性偏差(新元件、變更的邊界、新的 ADR 級別決策)應升級給 Planner/
spec-generator,而非悄悄合併。 - 若 QA 要求重新處理,則為新的嘗試更新偏差表格;不預先撰寫規格文字。
參考資料
references/dev-protocol.md— 詳細檢查清單、範圍驗證、McCabe 循環複雜度限制、重構模式、交接與重新處理程序。- 角色邊界:
references/role-boundaries.md— 寫入範圍、唯讀範圍、不變量與誠實強制模型(捆綁;無需外部檔案)。 - 倉庫規則:當採用專案定義了
AGENTS.md與任何角色規則檔案時,請閱讀它們;它們可能增加要求,但並非此技能運作所需。 - 任務包裹格式:
task-decomposition技能(可選的兄弟技能;此技能僅消費其產出物)。
誠實的限制
此技能不授予寫入存取權,也無法強制角色隔離。當倉庫具有 CI(例如基於 git 的角色審計)或分支保護時,該層才是權威層。合約(而非此文件)定義了允許的爆炸半徑。