--- name: prevent-repeat-failures description: 將驗收受阻、事故或反覆修正轉成需求到驗收的預防、攔截與驗證機制;查證根因、沿用現有關卡、實作授權內的防線並以反例驗證。適用全流程預防、階段復盤、事故回顧與防止重犯,不替代單卡修 bug 或進度查詢。 --- ## ⚠ 執行環境落差(OpenAI Plugin(ChatGPT 網頁/行動版+Codex)) 這個 plugin 會同時被有 repo 的 Codex 與沒有 repo 的 ChatGPT 網頁/行動版載入。**先確認你手上有沒有下列能力**;沒有的部分照著做但不要宣稱已完成,改成輸出給人執行的指令,並在交付時明列哪幾項未查證: - **hooks**(harness 自動觸發的攔截式 gate):plugin 內沒有附 hooks。發 PR 前的閘門必須由 agent 主動逐項執行並貼出輸出,不得宣稱機器已攔截。 共用原則:查不到的事實標「未查證」,不要用推測補齊;需要授權的動作只做到預覽。 --- # 從失敗建立防線 依 [AI 檢核與人工審核共用流程](../../docs/ai-human-review-workflow.md) 執行。輸出是有來源的原因整理,以及「錯誤 → 防線 → 如何證明有效」的對照;以現有需求/開發/驗收流程為接點,不另外建立一套交付狀態。 日常任務每個階段都依 [全交付路徑關卡](references/lifecycle-gates.md)做風險判斷、交接與短復盤;事故只決定調查深度,不決定是否預防。需要跨階段改善或整體復盤時執行本 skill;小改動可在原有交接紀錄簡記,不另啟完整事故調查。 ## 先確定這次做到哪裡 - 整理/提案:查證、分類、找現有機制,交付具體方案;不自行開卡、改 skill 或啟用 hook。 - 實作:使用者已要求新增/修改機制或 skill 時,完成授權內的檔案、適用驗證和自審,不為已授權的本機工作重問。commit/push/PR/部署/狀態變更仍依既有授權,不因回顧而取得額外權限。 - 技術事實由 agent 查 code、Issue、PR 與記錄;不要求需求者填 repo、SHA 或根因。無 checkout/執行工具時,產出可審閱方案,將執行與攔截能力標未驗證。 ## 1. 保存事故與決策證據 先定義時間窗與樣本範圍,不把抽樣寫成全專案統計。從使用者提供的卡、任務紀錄與相關來源開始;只讀相關會話,不掃其他專案私密歷史。 每件分開記:來源連結/時間、原預期、當時實際結果、當時受影響步驟、後續處理與目前缺口。保留原 AC,不自行補造需求。 至少分清: - 產品行為違反 AC 的 FAIL。 - 帳號/資料/規格/工具不足的 BLOCKED。 - 尚未做交接、沒有移卡等流程缺口。 - 新增要求、一般等待 PM,以及正常操作消耗資料的預期終態。 同一件BLOCKED可能同時缺資料、尺寸與證據交付能力;逐項列出恢復證據,任一必要項未確認就不能說全部阻擋已排除。目前可用不代表當時未受阻,補資料或工程重播也不等於正式 PM PASS。原始資料唯讀;憑證、私人回答與原始會話不進公開文件。 ## 2. 歸因,先查已有防線 同一機制在不同事件重複失守時歸成一類,列出證據,不能只因文字相似就合併。兩次以上證據可標重複類;單次有明確風險也可提預防,但不虛報頻次或一律要求等第二次才處理。 對每類查當前 canonical、已合併 PR、真正執行的命令/版本及入口,區分: | 現況 | 採取的變更 | |---|---| | 沒有規則/行為未定義 | 先補需求或產品決策,再選防線 | | 已有規則,執行漏掉 | 修觸發位置、任務路由或接入點,不再抄一條同義規則 | | 已有工具,跑了舊版/錯誤帳號/錯環境 | 修執行來源及情境核對;保留失敗版本與實際呼叫證據 | | 工具有漏洞或只警告、未攔住 | 用真反例修該工具或接入;確認阻止的是哪個動作 | | 已有效覆蓋/一次性偶發且無合理收益 | 沿用或不採用,寫出理由 | 不要從 dirty/過時的共享 root 推論遠端沒有規則;讀已確認 revision 或用隔離 worktree,保留其他 session 的修改。 ## 3. 在最早有效的關卡處理 讀 [全交付路徑關卡](references/lifecycle-gates.md),只挑與此錯誤有因果關係的階段;不要求每張卡跑全部關卡。 每個方案都回答三件事: 1. **預防**:在需求、設計或資料準備時,如何讓錯誤較難發生? 2. **攔截**:哪個工具或明確人工審核,在什麼條件下拒絕哪個後續動作?只有文件、報告或警告時,不稱為 blocking gate。 3. **驗證**:什麼觀察可證明防線有效,且正常情況仍可通過? 依序評估架構/單一來源、型別與資料模型、lint/CI/執行前檢查、行為 regression,最後才用文件處理需要判斷的部分。選最高且合理的一層,不為每次失敗加全域 hook;分層搭配須各自有用途。 使用 [防線紀錄表](references/control-record.md) 連結「事故證據、最早關卡、機制、接入點、驗證和狀態」。可放任務目錄或既有追蹤文件,格式以能查證為準,不必另建資料庫或強制所有任務交新 JSON。 ## 4. 完成授權內的變更與驗證 - 優先修現有 owner/validator/gate;canonical 在 `plugin/skills`,平台產物用 `pnpm plugin:build` 生成,不手改產物或 plugin cache。 - 機械防線已有事故時,先用真實過往錯誤重現拒絕,再確認修後可通過;需求/設計尚無事故時,以明標的合成反例及正常對照驗證風險,不稱歷史重現或真實client證據。加合理正常案例防誤攔;反例應觸及所要阻止的行為,不只測字串/檔名存在。機械化不合理時附原因及人工判準/失敗例子。 - 檢查器回非零不等於流程被攔:還要證明實際呼叫端不會繼續發布/移卡/部署等目標動作。未授權外部操作時,以隔離 dry-run/攔截替身證明呼叫端停止,真實服務接入仍標待驗。 - 固定受驗版本、情境、命令、結果與證據位置;同一檢查可在本機及 CI 執行。模板/合成控制/人工標註不能當真實產品或 client 行為證據。 - 自動 hook/CI/required check 分別核對;本機通過不代表已啟用、已發布或服務端保護。未經授權不調保護政策或啟用共享 hook。 - 一次性/破壞性資料使用獨立資料或已驗證的重建方式,先做不消耗資料的觀察。正式 PM 已提交的答案不自動重設;consumed 可是預期結果,不能一律判產品 FAIL。沿用 verify-deploy/test-acceptance 的資料與身分邊界,不要求工程使用者代登入 PM 專用帳號。 修改 skill 的觸發、決策、授權、交接或證據判準時,依 [Skill 行為驗證](references/skill-validation.md) 執行:結構檢查之外,用自然任務、隱藏 rubric、隔離 session 與匿名獨立評審,從實際操作紀錄和產物核對行為。比較新舊版時固定其他條件並保留全部嘗試;小樣本只算 smoke。純排版修正可只做結構檢查並說明。沒有完整trace或獨立評審時標限制,不宣稱已驗證行為改善。 ## 5. 交付、復盤與回流 每次階段交接短復盤;驗收 PASS/FAIL/BLOCKED 後及任務結束前,對照原預期、實際結果、防線有效與漏檢處、已確認原因和不確定項。正常通過也做,沒有值得保留的改善則記查核範圍與理由。驗收結論與資料處理仍由 test-acceptance 決定,不能為復盤加測未批准 AC。 交付原因整理、防線紀錄、已完成變更、實跑證據及剩餘缺口。逐項標 **提案/已實作/已驗證/已接入/已啟用** 中實際成立的事實,不把這些狀態當可互相替代的單一路徑。人工判斷項明記人工,不寫成自動阻擋。 每項未完改善必須有負責流程/owner、追蹤位置與回查時機;用原有 issue/草稿承接,cleanup 前移出會刪除的任務目錄。已授權的本機改善完成後重驗;未授權發布或跨範圍工作留具體草稿,不把「提出」當成「已解決」。下一次同類任務進入前查此紀錄,以反例、正常對照及實際接入證據回查,完成後更新狀態;失效規則去重或退休。 已有規則但再次漏過時,查這次真正執行了什麼,回到第2步修接入或能力,不持續增加文字。規則被架構消除後移除重複提醒;更動前檢查引用。一次性的事件留在報告,不擴成通用要求。 本 skill 只負責改善防線;原產品的修復、部署、驗收及卡片位置,仍由原流程依各自證據決定。學習紀錄不能讓未驗收的卡變 Done。