ADR-019: 驗證結論與進度一致性:證據失效的分級處置
ADR 編號: 019 狀態: 已採納 (Accepted) 提案日期: 2026-10-02 決策日期: 2026-10-03 最後修訂: 2026-10-03 決策者: 團隊 peer review:設計方向三輪通過;P0 成果六輪、P1 四輪、P2 三輪、P3 四輪通過 範圍:
/uat-script來源比對、/uat驗收帳本、/progress與/work的證據閘門、/domain-model遷移、方法論機制升級的相容責任 關係: 部分修訂 ADR-016(見「對 ADR-016 的修訂」)
摘要
ADR-016 讓「指南是否正確」與「先前通過是否成立」分開判定,大幅減少誤報;但偵測結果仍直接決定處置:一旦判為 stale,就必須重生指南、重新人工驗收,/work 上其後各步一併失效。遷移、搬檔、證據格式升級、樣式調整這類不改變驗收命題的變更,因此照樣讓證據失效、讓進度停擺。
本提案把機制分成兩層:偵測(什麼變了)與處置(所以要做什麼)。處置採非對稱的舉證責任:自動化驗證除非證明不需要,否則重跑;人工驗收除非證明需要,否則不重驗。通過紀錄依驗收命題延續,不依指南文字或證據格式。進度與待補驗事項分開記錄;AI 可以建議回退,但回退必須經人類複核,分歧在驗證層解決。
審閱結論
2026-10-02 經三輪 peer review 通過設計方向。第 1 輪 5 條意見(4 major、1 minor;原 blocking 經討論撤回改為 minor)、第 2 輪 5 條意見(1 major、1 minor、3 question)皆已修訂處置,無不採納項目;各輪修訂內容見「變更歷史」。待決點 Q1–Q6 的裁決見「審閱裁決」節。
通過範圍僅限本 ADR 與文件站索引。 本次通過不解鎖任何規則、skill 或工具的修改,也不解鎖 /methodology publish:P0–P3 各階段實作須另行送審;ADR 狀態維持 Proposed,全部階段通過後才改為 Accepted。審閱時未跑 Docusaurus 完整建置、未獨立重跑下游證據盤點;背景中的 florae-g1 數據為作者於 2026-10-02 以方法論 91db2361 唯讀盤點的結果。
採納(2026-10-03):P0–P3 成果審閱全部通過,狀態改為 Accepted;P0–P3 一併 /methodology publish。設計方向在實作中的修訂分別記於「P0 實作裁決」至「P3 實作裁決」。
背景
觸發案例與實測盤點
2026-10-02 準備遷移下游 florae-g1 的 Domain Model(specs/domain-model/ → design/domain-model/,ADR-018 P0)。遷移只改 65 個檔的引用路徑並搬移一個檔案,不改任何需求,原先估計會讓 28 份已驗收的 P.UAT 指南失效。
以現行 verifier 對 florae-g1 全部 46 份 UAT 結果唯讀執行 verify-result(遷移前、方法論 91db2361)後發現:遷移之前就只有 1 份能通過驗證。阻擋證據的不是遷移,而是同類的既有問題。
| 現況 | 數量 | 原因 |
|---|---|---|
| 通過驗證 | 1 | schema 6 帳本(US-502) |
| 工具不支援 | 7 | 來源 schema 2(3 份)、schema 4(4 份);verifier 只讀 schema 5/6。其中 5 份為通過、2 份已撤銷 |
| schema 5 整檔 stale | 33 | 幾乎全部同時列出 design language、package.json、lock 檔、E2E spec 變更 |
| schema 6 review-needed | 4 | 框架版本、翻譯、design language 等脈絡來源 |
| schema 6 stale | 1 | 宣告的脈絡來源變更或消失 |
以結果狀態分:
| 結果狀態 | 數量 | 說明 |
|---|---|---|
| 通過且未撤銷(舊 schema) | 20 | 只因工具限制或整檔指紋被擋;result schema 1/3/5 |
| 已撤銷 | 16 | 13 份為介面調整(例如 9 份同為「Detail page alignment」、商品 Finder 列高、共用操作列);2 份為需求變更(結算方式);1 份為重生指南 |
| 未完成 | 4 | 尚未驗收 |
| schema 6 帳本 | 6 | 含上述 1 份通過驗證 |
撤銷的 16 份中,只有 2 份來自需求變更;其餘 13 份是介面調整,提出者在變更當下都已實際操作,E2E 也已通過(例如「29 項 E2E 通過,新版人工體驗待確認」)。
同類問題
| 誤判來源 | 位置 | 觸發情境 |
|---|---|---|
| 片段身分綁定路徑 | source_fragments.py compare_fragments:鍵為 (kind, path, selector),removed 一律 stale | 遷移、搬檔、改名 |
| 整檔指紋 | schema 5 current_source_manifest | 任何位元改變(含修錯字、格式化、依賴升級) |
| verifier 支援範圍 | SUPPORTED_SOURCE_SCHEMA_VERSIONS 只含 5/6 | schema 2/4 的通過紀錄無法讀取 |
| verifier 自身升級 | evidence.py MIN_GENERATOR_VERSIONS 與 legacy stale | 方法論提高最低 generator 版本,全 fleet 指南一起失效 |
| 證據格式升級 | schema 5 結果不帶入 schema 6 帳本(ADR-016「相容與遷移」) | 每次升 schema 整批重驗 |
| 結果綁定指南文字 | ADR-016 D4:結果綁定場景區塊與共用前言摘要 | 重排段落、改寫說明、更新路徑都讓通過失效 |
| 介面調整一律撤銷 | invalidate-result 的使用慣例 | 提出者已操作確認的樣式調整仍要求重新人工驗收 |
後四項是方法論自身的限制或演進,成本卻轉嫁給使用者的驗收證據。
真正的成本在處置,不在偵測
| 偵測結果 | 現行處置 | 判斷空間 |
|---|---|---|
| stale | 硬性阻擋:重生指南、重新驗收;/uat 明文「不得以人工判斷略過」;/work 該步與其後各步失效 | 無 |
| review-needed | 真人逐場景 keep/reverify/stale | 有,但只限脈絡來源 |
| 進度回退 | /progress --rollback 依原因(規格變更/缺陷/誤判)處置證據 | 有,但由人主動發起 |
偵測再精準,只要「stale ⇒ 重做並連鎖失效」不變,誤判一次就要付全額成本。
回退分歧發生在驗證層
AI 建議回退、人類不同意時,雙方爭的不是進度本身,而是「這次驗證還算不算通過」。若只在進度層讓人覆寫,就會出現「進度說通過、證據說 stale」的不一致:下一次 /progress、/work merge 或推進 ✅ 時,閘門會再次擋下,同一個爭議反覆出現。
決策
D1:偵測與處置分層
| 層 | 回答 | 負責 | 產出 |
|---|---|---|---|
| 偵測 | 什麼變了 | 工具(機械、可重現) | 變更清單:每筆片段的變更類別(D2)與受影響的驗收命題 |
| 處置 | 所以要做什麼 | AI 依 D3 判定;人工驗收與回退由人確認 | 帳本中的處置紀錄 |
偵測結果不再直接等於處置。ADR-016 的三態(fresh/review-needed/stale)保留為偵測結果的摘要,但「stale ⇒ 必須重生並重新驗收」改由 D3 取代。
重生指南與重新驗收分開判斷:指南需要重生是文件問題;先前通過是否成立是產品問題。重生指南不構成重新驗收的理由,通過紀錄依 D6 延續。
D2:偵測區分四種變更類別
| 類別 | 定義 | 範例 |
|---|---|---|
| 等價 | 能機械證明命題未變 | 檔案搬移且內容摘要相同;只有經登記的引用改寫;證據格式升級且內容可對應 |
| 脈絡 | 脈絡來源改變(ADR-016 D2) | 框架版本、design language、E2E spec 本體、翻譯 |
| 語意 | 該場景驗收命題的依據改變 | US 被引用段落、UAT-only SBE、Coverage 分類 |
| 來源待修復 | 宣告的來源找不到,或新舊來源的對應尚未釐清 | 錨點改名、檔案搬移但未留紀錄、檔案刪除 |
等價的證明方式:
- 內容身分:片段以內容摘要為主身分、路徑為輔。舊路徑消失、新路徑出現且摘要相同,視為改名。
- 等價轉換紀錄:執行機械轉換的工具(如
/domain-model遷移、未來的格式化或升級工具)在轉換當下寫一份紀錄,逐檔記下轉換前後的摘要、轉換類型與路徑對照,並由工具核對差異完全落在宣告的轉換內。verifier 遇到「儲存摘要 = 轉換前摘要、目前摘要 = 轉換後摘要」時視為等價,可以串接多份紀錄。紀錄隨轉換 commit 保存,只能由工具產生。
等價只能由機械證明成立,不能由 AI 判讀成立。 等價證明不成立時,依實際差異分類,不一律列為待修復:
| 情況 | 類別 |
|---|---|
| 來源仍存在,差異落在場景宣告的語意來源(驗收要求確實改變) | 語意 |
| 來源仍存在,差異只落在脈絡來源 | 脈絡 |
| 來源找不到,或新舊來源的對應尚未釐清 | 來源待修復 |
「沒有等價證明」本身不代表驗收失效;對應未知期間保留既有結論(D3)。
D3:非對稱的舉證責任
兩種驗證的差別在舉證責任的方向:
| 驗證 | 策略 | 預設 | 推翻預設須證明 |
|---|---|---|---|
| 自動化(E2E、UI 合約) | 保守 | 重跑 | 證明不需要重跑 |
| 人工(UAT) | 積極 | 不重驗 | 證明需要重驗 |
| 處置 | 成本 | 誰決定 |
|---|---|---|
| 保留並留紀錄 | 0 | 工具或 AI(等價、脈絡變更、未證明需要重驗) |
| 重跑自動化驗證 | 低 | AI 自行執行(未證明不需要時) |
| 修正指南或來源對應 | 低 | AI 執行;不涉及重新驗收 |
| 局部人工驗證 | 中 | 有具體依據時 AI 提議、真人確認,只驗實際改變的命題 |
| 階段回退 | 高 | AI 只能建議,真人複核(D4) |
自動化驗證:除非證明不需要重跑,否則重跑。 可以不重跑的證明只有兩種:
- 變更全部屬於 D2 的等價類別;
- 變更全部落在該 E2E 不讀取的來源之外,且依賴範圍由工具機械判定(例如只改了文件站頁面)。
無法證明時一律重跑,AI 不詢問,也不以「看起來無關」略過。重跑失敗即代表真實問題,進入 D4。
人工驗收:除非證明需要重驗,否則不重驗。 UAT 只驗 E2E 證明不了的命題,重點在介面外觀與操作體驗;提出介面變更的人在變更當下就已考量並實際操作過。足以證明需要人工驗證的依據只有:
- 驗收命題的依據改變(D2 的語意類別):只驗證實際改變的命題。
- 相關自動化驗證失敗後經修正:產品行為在該處確實改變過。
- 已公告、且確認影響本應用驗收命題的契約變更:例如框架 CHANGELOG 或升級指引公告的元件行為變更、API 契約或錯誤契約變更。AI 依公告內容核對本應用實際使用範圍、受影響的驗收命題與能否自動化;能自動化者交給自動化驗證,只有具體受影響、且無法自動驗證的部分才提議人工驗證。
- 真人明示要求,並留下理由。
「可能受影響」不構成依據。框架版本改變本身、一般性的「可能有未預期的 bug」,都不是人工重驗的理由。不符合上列依據的變更,場景保留:工具寫入保留紀錄,載明變更清單、差異摘要與判定理由,供事後追溯,不阻擋驗收與進度。
此原則同樣適用於 API 消費者旅程(S.UAT):依據來自 API Spec、錯誤契約或已公告的契約變更,而不是 server 實作有變動。
來源待修復:宣告的來源找不到時,先修復對應(補等價轉換紀錄、更新宣告)或查明原因。尚未修復、原因未明期間,保留既有驗收結論,並標示「來源待修復」。查明後依實際影響判定:等價或脈絡則保留;語意改變則只對改變的命題依上列第 1 項處理。不能僅因缺乏等價轉換紀錄就要求人工重驗。
D4:進度由驗證結論推導,回退須經人類複核
- 一致性不變量:已越過的每個階段,其驗證結論只能是「有效」或「待補驗」(D5),不能是「已失效且未處置」。進度不能被單獨覆寫;要改變進度,必須先改變驗證結論。
- AI 不自行回退:AI 判斷驗證結論已不成立(自動化驗證失敗、人工驗證未通過、需求改變)時,只能建議回退,附上變更清單、受影響命題與理由,由真人複核。
- 分歧在驗證層解決:人類不同意回退時,以驗證層的紀錄表達,例如在帳本記下「保留」及理由,或重跑自動化驗證取得通過結果;進度隨之維持。不允許「進度維持、證據仍失效」的狀態存在。
- 回退原因沿用既有模型:回退只由需求改變、實作缺陷或驗收誤判觸發(ADR-016 D7)。證據維護事件(遷移、搬檔、格式化、來源待修復、證據格式或 generator 升級)與已由提出者操作確認的介面調整本身不構成回退理由。
D5:目前階段與待補驗事項分開記錄
| 項目 | 定義 |
|---|---|
| 目前階段(effectiveStage) | 已取得驗證結論的最遠階段。前面某階段出現待補驗事項時,目前階段不後退 |
| 待補驗事項 | 某階段中需要補驗證的命題清單,每筆記下階段、場景或命題、原因與依據(D3) |
| 來源待修復事項 | D3 的來源待修復清單 |
| 下一步資格 | 不依賴待補驗命題的後續開發與驗證可以繼續;依賴者等待。依賴由 AI 依該步驗證所涵蓋的命題判定,真人可改判 |
| 整合閘門 | submit、merge 與推進 ✅ 等待待補驗事項與來源待修復事項全部完成 |
| 正式進度呈現 | Sprint、/work status、/next 同時顯示目前階段與未完成事項,例如「S.E2E(P.UAT 待補驗 2 項)」 |
例:P.UAT 有 2 個場景待補驗、S.E2E 證據仍有效時,目前階段維持 S.E2E;不依賴這 2 個命題的 server 開發與 S.UAT 可以繼續;補驗通過即清除,不需重走後續步驟。補驗未通過時才依 D4 建議回退。
後續步驟只在它自己的證據所依賴的來源改變時失效,不因前一步出現待補驗事項而連鎖失效。
D6:通過紀錄依驗收命題延續,機制升級自帶相容責任
通過紀錄綁定驗收命題,不綁定指南文字。 指南中的每個場景明列其驗收命題,以及每個命題的依據(US 錨點、SBE、契約)。通過紀錄綁定命題與依據的摘要:
- 重排段落、改善說明、更新路徑、調整前言等文字差異,本身不構成重驗理由。
- AI 重生指南時,新增或變動的驗收命題必須有需求或契約依據;沒有依據的差異視為生成錯誤,修正指南,不轉嫁為人工重驗。
- 有依據的命題變更,只驗證實際改變的命題;其餘命題的通過延續。
證據格式(schema)或 generator 升級是方法論自己的演進,不得以「舊證據失效」作為預設遷移方式:
- 任何仍存在於 fleet 的舊 schema(含 schema 2、4、result schema 1、3),都須提供相容處理。verifier 目前不支援的版本,是工具限制,不是要求重驗的理由。
- 能從舊指南與結果辨認驗收命題與通過結果者,建立對應、轉換格式並保留通過,記下轉換依據。
- 資料不足者,列明缺少哪些項目,先從舊指南、結果、sidecar 與 Git 歷史補足;仍無法補足的命題,才依 D3 判斷是否需要人工驗證,並向人說明缺項。
- 提高
MIN_GENERATOR_VERSIONS前,須先提供上述相容處理;舊版產物改走「待升級」:可繼續驗證,於下次重生時轉換。 - 舊指南轉換為驗收命題時,能機械確定對應者(場景 ID 一致、命題與依據可直接對應)自動處理並記下依據;有歧義者(場景合併或拆分、依據對不上、一個場景含多種解讀)才列出請真人確認。
- 已撤銷的結果不自動恢復。真人可以逐份檢視撤銷原因,以帳本紀錄「撤回撤銷」並留下理由與依據;這是新的決定,紀錄撤回者、時間與理由,不刪除原撤銷紀錄。撤回只適用於撤銷原因不構成 D3 人工依據的情況(例如已由提出者操作確認的介面調整);原因是需求變更、實作缺陷或驗收誤判者,仍須以新的 UAT 驗收取代。
對 ADR-016 的修訂
| ADR-016 條目 | 修訂 |
|---|---|
| D1「stale:重生指南,受影響場景重驗」 | 重生指南與重新驗收分開判斷;重驗只依 D3 的依據,只驗實際改變的命題 |
| D4「結果綁定場景區塊、共用前言摘要」 | 改綁定驗收命題與其依據(D6);文字差異不使通過失效 |
| D5「保留只能由真人做出」、review-needed 阻擋 | 脈絡變更改為保留並留紀錄(D3);真人可隨時要求重驗 |
| P1 裁決「宣告來源消失一律 stale」 | 改為「來源待修復」:先以 D2 對應或查明原因,期間保留結論(D3) |
D7「撤銷紀錄永久有效,只能以新的 /uat 驗收取代」 | 撤銷仍不因摘要吻合而自動恢復;但允許真人以帳本紀錄「撤回撤銷」,限撤銷原因不構成 D3 人工依據者(D6) |
「相容與遷移」不提供 migrate、schema 5 結果不帶入 | 改為 D6 的相容責任:所有仍存在的舊 schema 依命題轉換並保留通過;資料不足者列明缺項 |
/work 失效連鎖(progression.md) | 改依 D5:目前階段不後退,待補驗事項阻擋整合閘門 |
ADR-016 的其餘決策(三層來源、逐場景帳本、撤銷不因摘要吻合而自動恢復、回退原因的分類)不變。
考量的方案
| 方案 | 內容 | 不採用或保留的理由 |
|---|---|---|
| A. 只補遷移對照 | 為 /domain-model 遷移加路徑對照,verifier 還原後比對 | 只解決一種情境;實測顯示遷移前證據已大量被擋 |
| B. 只提高偵測精準度 | 內容身分+等價證明,處置不變 | 減少誤判,但真實的局部變更仍觸發整份重生與連鎖失效 |
| C. 允許人類直接覆寫進度 | 人不同意回退時,直接保留階段 | 造成進度與證據不一致,閘門在下一個節點再次阻擋 |
| D. 對自動與人工採同一策略 | 一律保守或一律積極 | 一律保守:人工重驗成本最高;一律積極:自動化可低成本確認的問題被放過 |
| E. 以最長連續有效前綴計算目前階段 | 前一步待補驗時,目前階段退回該步 | 讓不相關的後續成果一起停擺,重現連鎖回退 |
| F. 只相容 verifier 支援的 schema | schema 2/4 要求重驗 | 以工具限制縮小保留目標,成本轉嫁給使用者 |
| G. 偵測/處置分層+非對稱舉證+命題延續+階段與待補驗分開(本案) | 見 D1–D6 | 採用 |
影響範圍
| 類別 | 項目 |
|---|---|
| 工具 | uat/scripts/source_fragments.py(內容身分、等價轉換紀錄、來源待修復)、evidence.py(舊 schema 相容轉換、命題綁定、處置判定)、scenario_ledger.py(命題綁定、保留紀錄、待補驗、撤回撤銷)及其測試 |
| Skills | uat-script/SKILL.md(場景明列驗收命題與依據、重生時命題差異須有依據)、uat/SKILL.md(舉證責任、契約變更核對、移除「不得以人工判斷略過」的一律規定)、progress/SKILL.md(回退建議與人類複核、待補驗呈現)、domain-model/SKILL.md(遷移產生等價轉換紀錄)、e2e/SKILL.md(保守重跑)、next/SKILL.md(呈現待補驗事項) |
/work | work/references/progression.md、integration-revalidation.md(D5) |
| Rules | m-change-management.md(處置分級、證據維護事件不構成回退)、m-work.md(目前階段與待補驗)、m-methodology.md |
| 發布 | 同屬 methodology 命名空間,同批 /methodology publish |
分階段實施
| 階段 | 內容 | 驗收案例 |
|---|---|---|
| P0 | D2:內容身分、等價轉換紀錄、來源待修復;/domain-model 遷移產生紀錄 | florae-g1 遷移後,schema 6 指南不因搬檔而 stale |
| P1 | D6:命題綁定;所有仍存在的舊 schema 相容轉換 | 依 florae-g1 實際盤點:20 份未撤銷的通過紀錄逐份判定可轉換、需補資料或缺項,並列出結果;不在盤點前保證全部可帶入 |
| P2 | D3:舉證責任、契約變更核對、保留紀錄、自動化保守重跑 | 框架升級時:E2E 除非工具證明其讀取的來源未變,否則一律重跑;人工驗證只對公告且確認影響本應用、無法自動驗證的命題提議,其餘人工場景保留且不阻擋 |
| P3 | D4、D5:階段與待補驗分開、回退建議與人類複核、/work 不連鎖;rules 對齊;fleet publish | P.UAT 待補驗時目前階段維持、整合閘門等待補驗;人類不同意回退時帳本與進度一致 |
驗收條件
- 只改引用路徑、搬移檔案的遷移,不讓任何通過紀錄失效,也不需人工重驗。
- 等價轉換紀錄中有任何差異超出宣告的轉換時,該檔不成立等價,改依實際差異分為語意、脈絡或來源待修復;只有來源找不到或對應未釐清才列待修復,期間保留既有結論。
- 指南重排、改寫說明、更新路徑不使通過失效;重生指南出現無依據的新命題時,修正指南而不要求重驗。
- schema 2、4、5 的通過紀錄依命題轉換保留;資料不足者列明缺項,不因版本過舊被要求重驗。
- 未能證明 E2E 不需重跑時,AI 一律重跑,不詢問也不略過。
- 人工驗證只在 D3 的四種依據成立時提議,且只驗實際改變的命題;框架版本改變本身不構成依據。
- AI 不會自行回退進度;人類不同意回退時,帳本留有對應紀錄,進度與證據一致,後續閘門不再因同一變更阻擋。
- 遷移、格式化、來源待修復、證據格式升級、已操作確認的介面調整不會被列為回退原因。
- 前一階段有待補驗事項或來源待修復事項時,目前階段不後退,不依賴的後續工作可繼續;submit、merge、✅ 等待這些事項完成。
- 舊指南轉換時,能機械確定對應的命題自動轉換,只有歧義者請真人確認。
- 已撤銷結果不會自動恢復;真人撤回撤銷時,帳本保留原撤銷與撤回紀錄,需求變更、實作缺陷或驗收誤判造成的撤銷不能撤回。
審閱裁決
第 3 輪審閱者明示確認以下裁決(Q2、Q4、Q6 由作者裁決後經審閱者確認;Q1、Q3、Q5 採作者建議):
| 編號 | 問題 | 裁決 |
|---|---|---|
| Q1 | 等價轉換紀錄放在哪裡 | docs 模組 docs/testing/uat-results/equivalence/,與差異快照同層、隨 Git 追蹤 |
| Q2 | 「來源待修復」是否阻擋整合閘門 | 阻擋 submit、merge、✅,但不撤銷結論、不後退階段;避免來源實際被刪除(需求移除)卻未查明就整合。已反映於 D5 整合閘門 |
| Q3 | 保留紀錄的粒度 | 每次變更一筆,逐場景列出差異摘要與判定理由 |
| Q4 | 驗收命題的宣告形式與舊指南轉換的確認 | 沿 ADR-016 P1 的 HTML 註解,每個場景宣告命題 ID 與依據;舊指南可機械確定對應者自動處理,有歧義者才請真人確認;邊界見 D6 |
| Q5 | 接受推翻 ADR-016 D5 嗎 | 接受:脈絡變更保留並留紀錄,真人隨時可要求重驗 |
| Q6 | 已撤銷的結果如何處理 | 允許真人以帳本紀錄「撤回撤銷」,明列為修訂 ADR-016 D7;不自動恢復,限撤銷原因不構成 D3 人工依據者。本裁決不授權恢復任何既有結果,實際撤回須逐份由真人執行 |
P0 實作裁決
P0(D2 偵測:內容身分、等價轉換紀錄、來源待修復)於 2026-10-02 經六輪 peer review 通過(共 11 條:2 blocking、9 major,皆修正,無不採納);Q1–Q4 採作者建議,Q4 依審閱修正。權威操作說明見 uat/SKILL.md Step 2.2 與 domain-model/SKILL.md 遷移步驟 4。
| 裁決 | 內容 | 理由 |
|---|---|---|
| 紀錄不能自證 | 每個檔案條目記錄轉換前後的 Git blob;載入時核對 base commit 中轉換前路徑的實際 blob,並核對轉換完成狀態(引入紀錄的 commit,未 commit 時為工作樹)中轉換後路徑的 blob;搬移的舊路徑在該狀態須已不存在。改寫由實際內容重新推導,必須與宣告一致 | 審閱以虛構搬移、假摘要、真實 blob 搭配虛構目的地等方式,讓命題變更通過驗證 |
| 只接受改指實際搬移檔案的引用 | 依引用方解析的相對路徑須是搬移檔案的舊→新位置;其他寫法須是同一搬移檔案舊/新路徑的同長度後綴;查詢字串與錨點不可改 | 只憑搬移目錄的子字串替換,會接受外部端點與其他命名空間的改寫 |
| 以完整引用為單位 | 切分只在空白與定界符處斷開,?/# 後綴延伸到空白;另以「以空白分隔的整個單字」為第二道防線:含 // 即視為 URL、整段不參與;被改寫的 token 須位於單字邊界或引用包圍符號內;路徑含非 ASCII 不算 | 依字元類別切 token 時,中文、括號、方括號會把查詢字串或外部 URL 切成看似本地的片段 |
| 驗證不做反向替換 | 目前片段須與轉換後 blob 依同一規則重算的片段完全相同,才以轉換前 blob 重算的片段為上一個狀態;轉換後再修改即停止追溯 | 對目前內容反向替換,會把轉換後才出現的同名字串一起還原,掩蓋後續變更 |
| 對應整組處理、目標唯一 | 多個舊片段對應同一目前片段,或目標與其他舊片段同鍵時,皆不換算;sidecar 與帳本綁定共用同一邏輯 | 逐筆換算時,後一筆會覆蓋前一筆,命題差異消失 |
| 部分無法證明不影響其餘 | 紀錄產生時反覆推導至穩定:搬移檔本身無法證明時,指向它的改寫一併列 unexplained,其餘照常記錄 | 無法證明等價不是錯誤,不應使整筆紀錄失敗 |
pending-repair 暫判 stale(Q1) | P0 只做分類;待修復期間保留結論屬 D3,於 P2 實作 | 偵測與處置分階段 |
| 內容身分不需紀錄(Q2) | 同類、同選擇器、只換路徑且摘要相同即視為搬移;多個候選時不對應 | 內容未變即無命題差異 |
| 紀錄不清理(Q3) | 比照差異快照永久保留,依檔名時間串接 | 舊驗收證據可能仍依賴早期紀錄 |
| 自家文件站的絕對 URL 不視為等價 | 含網域的引用(如產品文件站 https://…/specs/…)一律列 unexplained | 無法可靠區分自家站與外部站;florae-g1 實測僅 1 檔受影響,且屬 P1 範圍 |
實測:florae-g1 副本模擬 Domain Model 遷移,57 檔記錄、1 檔 unexplained;唯一 verified 的 schema 6 指南(US-502)在紀錄 commit 前後皆維持 verified,其餘 schema 6 指南的變更清單與遷移前相同。
P1 實作裁決
P1(D6:依驗收命題延續通過、舊版結果轉換)於 2026-10-03 經四輪 peer review 通過(共 6 條 major,皆修正,無不採納);待決點 Q1–Q4 採作者建議。權威操作說明見 uat-script/SKILL.md「驗收命題」節與 uat/SKILL.md Step 2.4。
| 裁決 | 內容 | 理由 |
|---|---|---|
| 命題以標記段落辨識 | 場景區塊中 **✅ 驗收**: 開頭的段落即命題;舊指南另認 ✅ 開頭的粗體標籤與「人工判準」「人工判斷」。比對只看標籤後的內文;步驟、說明文字不算命題。其他寫法的場景退回區塊比對,轉換時列為「無法辨認命題」交人處理(Q2) | 命題是真人判斷的對象;標記可機械辨識,不靠 AI 猜測 |
| 驗證單位維持場景 | 帳本綁定新增命題摘要;有命題時只比對命題與語意來源,區塊與前言只供紀錄 | 「只驗改變的命題」屬 D3 處置,留給 P2 |
| 依 generator 版本切換規則(Q4) | 6.1.0 起要求每個場景至少一個命題,測試資料段落逐標題拆成 seed-part;6.0.0 的 schema 6 指南維持原判定 | 不因表示法改變而使既有證據全部失效 |
| 測試資料段落只新增子段落不算改變 | 新增的子段落不屬於任何既有片段;既有內容被修改或刪除仍算改變(Q3:florae-g1 有 7 份因既有列被改寫而無法轉換,留給 P2)。不適用 US 段落 | 共用的測試資料段落常被其他 US 補充;US 新增驗收標準屬需求變更 |
| 新建帳本時自動轉換(Q1) | initialize-result 遇到舊版 passed 結果先轉換,逐場景回報;convert-result --plan 可預覽 | 先前以空帳本覆蓋,舊通過紀錄無聲消失 |
| 可證明才帶入 | 命題與驗收當時相同、適用的語意來源可證明未變(含 P0 等價紀錄)才帶入;脈絡來源改變依 D3 保留並記於轉換紀錄 | 人工積極、但不放過語意改變 |
| 驗收當時的來源依 sha 取回 | 依舊 sidecar 的 SHA-256 取回(工作樹 → 快照區 → Git 歷史),路徑依等價紀錄的舊路徑、唯一角色、相同內容對應;sidecar 未記錄者,只有在記錄通過結果的 commit 與已記錄檔案全部吻合時才採用該 commit;sidecar 取不回時不核對 commit,逐場景列為取不回 | 審閱重現:只用目前路徑查詢會讓純更名無法轉換;空清單曾被當成已核對 |
| 轉換可以繼續 | 舊結果原文與驗收當時取回的內容存進快照區,帳本 convertedFrom.legacyResult 保留完整舊結果,兩者隨帳本 commit;修正指南或補齊證據後,convert-result 只轉換尚無紀錄的場景 | 審閱重現:部分轉換後舊結果被覆蓋,未 commit 時無法復原 |
| 續轉不恢復撤銷 | 帳本中已撤銷(個別或全部)且尚無新紀錄的場景不轉換 | 審閱重現:續轉追加的通過晚於撤銷,等同自動恢復 |
| SBE 只對應目錄、保留場景 ID | 驗收當時與目前的 SBE 各在單一目錄時,以原檔名寫到目前目錄再比對;不依內容或檔名跨檔配對 | 審閱重現:依內容配對把場景更名誤判為純搬移;檔名即場景 ID,更名屬 SBE 集合改變 |
實測:florae-g1 盤點 20 份未撤銷通過,驗收當時的指南 20/20 取回、命題 20/20 相同,來源 716/717 取回。US-107 於副本補 schema 6 宣告、以 6.1.0 stamp 後自動轉換並 verified;之後新增測試資料子段落仍 verified,修改既有測試資料列或引用的 US 段落則 stale。
P2 實作裁決
P2(D3:變更後的分級處置、契約變更核對、E2E 保守重跑)於 2026-10-03 經三輪 peer review 通過(共 4 條 major,皆修正,無不採納);待決點 Q1–Q4 採作者建議。權威操作說明見 uat/SKILL.md Step 2.2a「變更後處置」與 e2e/SKILL.md 重跑判定。
| 裁決 | 內容 | 理由 |
|---|---|---|
| 脈絡變更由工具保留 | retain-context 寫入保留紀錄(每次變更一筆,逐場景列出來源、差異行數與理由),判定時與 ADR-016 的複核同樣更新脈絡基準;真人可以 request-reverify 要求重驗 | 依 D3 與審閱裁決 Q3、Q5:脈絡變更不構成人工依據 |
| 語意依據改變、命題未變:AI 提議、真人確認 | disposition-status 列出依據的前後內容與 diff(舊內容查快照區,再依同一規則從 Git 歷史重算並核對摘要);record-disposition 須附 --by,並以 token 綁定呈現的差異與帳本序號。保留或重驗都以確認當下的依據為新基準,之後的新變更另行判定;舊內容取不回時不能保留 | 舉證責任在「需要重驗」一方,但保留須有真人看過實際差異 |
| 來源待修復保留結論(Q1) | 指南狀態 pending-repair,不判 stale;verify-result 回 verified 並列出清單;依賴缺失來源的場景不能記錄新通過,含已從目前來源集合消失(整檔刪除)的依據;待修復只計入最新紀錄為通過的場景;可經處置解除。submit、merge、✅ 的工具阻擋屬 P3,期間由 /uat、/progress 文件規定 | 審閱重現:整檔刪除時片段從集合消失,只檢查「目前宣告但找不到」會漏掉 |
| 重驗範圍合併 | 同一場景的所有理由(重驗要求、處置或複核決定、命題改變、語意變更、撤銷、上次未通過)合併判定:命題序號取聯集,任一項須整場景重驗即不列序號;依合併範圍驗完並記錄通過,即履行全部理由 | 審閱重現:只回報第一筆要求,依回報範圍驗完後其他要求被新通過抵銷 |
| 命題依原文對應 | 重驗要求與處置記下指定命題的原文,判定時對應到目前序號;任一條找不到即整場景重驗 | 審閱重現:指南插入命題後,舊序號指向別的命題,原命題漏驗 |
| 續轉不抵銷重驗要求 | 舊結果續轉時,有未履行重驗要求的場景與撤銷同樣不轉換 | 審閱重現:續轉追加的通過晚於要求,等同自動抵銷 |
| 人工重驗依據限三類 | request-reverify 的依據為 automation-fixed(由 /e2e 提議)、contract-change(由 /upgrade-appfuse-* 的契約變更核對提議)、human-request;可指定命題 | D3 依據 2–4;依據 1(語意改變)走處置 |
| 撤回撤銷 | withdraw-revocation 另記撤回、保留原撤銷,限 rollback/other 類別,可撤回部分場景 | 審閱裁決 Q6 |
| 確認者身分靠流程保證(Q2) | 工具無法證明 --by 是真人,比照 ADR-016 複核留痕 | 工具層無可靠身分來源 |
| E2E 重跑範圍偏保守(Q3) | e2e-scope 比對 base 以來的 Git 差異與未追蹤檔:目標模組讀取;web 目標另含所有 server 與 web-host 模組;docs 類模組、範圍外的已知應用模組與 .claude/ 視為不讀取;工作區根層、未登記或未知型別的模組一律視為讀取 | 「無法證明不讀取即重跑」;多重跑的成本低於漏跑 |
| 取代 ADR-016 D6 的部分重驗預設(Q4) | uat-ui-dependency 受影響時不再預設建議部分重驗,改為脈絡保留、真人可要求重驗 | 依 D3 與審閱裁決 Q5 |
| 錨點改名不自動判定等價 | 改走處置流程 | 段落內容含標題列,改名後摘要必定不同,「同類同檔同摘要」規則實際不會成立;標題文字也可能帶有意義 |
| 轉換新增「待處置」 | 命題相同、取回內容齊全、只有語意依據自驗收後改變的場景,照驗收當時的依據記下通過(awaitingDisposition),場景為 needs-uat,經處置確認後才有效 | 沒有通過紀錄就無從處置;P1 的 7 份因既有測試資料列被改寫而無法轉換者由此接續 |
實測:florae-g1 副本 US-019 補 schema 6 宣告並以 6.1.0 stamp 後,轉換列為待處置;兩筆依據變更(測試資料「員工帳號」段落、US「Dashboard 外殼」段落)的舊內容皆從 Git 取回並顯示 diff,模擬真人確認保留後 verified。模擬框架升級:review-needed → retain-context → verified。e2e-scope:只改 docs 時判定不需重跑,改目標模組 package.json 則需重跑。
P3 實作裁決
P3(D4:進度由驗證結論推導、回退須人類複核;D5:目前階段與待補驗事項分開記錄)於 2026-10-03 經四輪 peer review 通過(共 3 條 major,皆修正,無不採納);待決點 Q1–Q4 採作者建議。權威操作說明見 progress/SKILL.md(總覽、回退、✅ 整合閘門)、uat/SKILL.md Step 2.1 補驗模式與 work/references/progression.md 第 5 點。
| 裁決 | 內容 | 理由 |
|---|---|---|
| 待補驗由驗證推導,不另存 | evidence.py stage-status --us --through {stage} 依 US 軌道列出已越過的 UAT 階段,逐階段分類為有效、待補驗(附場景、原因、命題序號,最新紀錄未通過者標失敗)、指南 stale/review-needed、未驗證,並列來源待修復;--require-clear 非 clear 時 exit 2。Sprint 只記目前階段;/progress 總覽、/next、/work status 讀取時呈現 | 另存清單會與帳本分歧,又成為可任意改寫的宣稱 |
| 主線 E2E 不由工具推導(Q1) | 不新增 E2E 帳本:/work 分支以 progress.md 的來源紀錄判定;主線由 /e2e 與 e2e-scope 在推進與整合時保守重跑 | 依 D3,E2E 未證明不需要即重跑,重跑成本低於另建帳本 |
| 舊版或缺少的 UAT 證據視為未完成(Q2) | ✅ 閘門與 stage-status 將缺結果、不支援的舊 schema 列為 unverified | ✅ 須有可驗證的證據;舊版依 D6 轉換後即可通過 |
| ✅ 閘門由工具強制 | progress/scripts/update.py 推進 UAT 階段只驗該階段(帶來源待修復仍可推進);推進 ✅ 驗該軌全部 UAT,任一未 verified 或帶來源待修復即拒絕,所有階段的 inventory 納入 inventoryHash | 依審閱裁決 Q2:來源待修復不撤銷結論、不後退階段,但阻擋整合 |
| 指南狀態不遮蔽場景結論 | 指南 stale/review-needed 時保留指南狀態,同時回傳場景結論與待修復來源 | 審閱重現:只回報指南狀態,漏掉同時存在的失敗與 2 個待修復來源 |
| 以 stamp 當時的原文判定 | 指南文字改動、尚未重新 stamp 時,依 sidecar 的 guideSha256 取回原文(工作樹 → 快照區 → Git 歷史),場景內容與場景清單皆取自同一份已核對摘要的原文 | 審閱重現:hash 不符提前返回漏報失敗;取回原文後仍用修改後的場景清單,刪除場景標記即漏報 |
| 無法判定時明示未知 | 原文取不回、或目前指南/sidecar 無法載入時,只列帳本可確認的結論(最新紀錄未通過、有效撤銷、未履行的重驗要求),並標「待修復未知」;沒有帳本的階段不標未知 | 不以 0 表示已無待修復;閘門仍阻擋 |
/work 不連鎖 | 每步依自己的證據分類為有效、待補驗、來源待修復、失敗、已失效;effectiveStage 為紀錄鏈中未失效的最後一步。補驗以帶 reverifies 的紀錄追加,不重走後續步驟;submit 以 stage-status --require-clear 核對;整合重驗的 progressSteps 只在每步都有效時開始 | D5:前段補驗不使後續停擺,整合閘門等待清空 |
| 回退只建議,不同意在驗證層處理 | 驗證失敗時 Agent 附變更清單、受影響命題與理由建議回退;/progress --rollback 確認選項為確認/不同意回退/取消,不同意時以修正後重跑、處置紀錄或撤回撤銷讓結論回到有效。不新增「回退建議」紀錄類型;證據維護事件與已由提出者操作確認的介面調整不構成回退理由 | D4;既有驗證層紀錄已足以表達人類的不同意 |
| 下一步資格不由工具判定 | 後續工作是否依賴待補驗命題,由 Agent 依該步驗證涵蓋的命題判定並說明理由,真人可改判 | 依賴關係無法由來源機械推導 |
| 既有測試失敗另案(Q3) | migrate-agent-config 既有 11 項失敗(test_uat_evidence 7 項、test_workflow_contracts 4 項,多為寫死的舊 SKILL 版號)於乾淨基線重現相同,不在 P3 處理,記為 FU-124 | 非本階段引入 |
| 發布順序(Q4) | P3 通過後本 ADR 改為 Accepted,P0–P3 一併 /methodology publish | 四階段互相依賴,分批發布會讓下游處於半套狀態 |
實測:florae-g1 副本 US-502 stage-status --through ✅:P.UAT verified,S.UAT、I.UAT 無證據列為 unverified,整體 pending,✅ 被擋;US-107 --through S.E2E:P.UAT 為 guide-stale(design language 變更)。試跑後副本工作樹無任何寫入。
既有通過承接的補充
本節與工具修正於 2026-10-03 經兩輪 peer review 通過,補充 D3 的真人補驗改判與 D6 的舊命題綁定相容責任。
D3:真人改判補驗要求
命題未變、真人確認既有驗收已涵蓋差異時,允許撤回先前的補驗要求。這是 D3「語意依據改變、命題未變者真人可保留」的改判,不沿用 Q6 的撤回撤銷授權。
- 可撤回
review中指定場景的reverify決定,以及human-request重驗要求。必須明列原紀錄 sequence、場景、理由與確認者;追加撤回紀錄,保留原處置與原驗收。 - 不可撤回
automation-fixed或contract-change:前者已有自動化證明原實作不符,後者已有公告且影響本應用命題的契約變更,仍須依 D3 完成驗證。 - 撤回只解除指定要求,沿用原處置確認的來源基準。新的語意/命題差異、其他重驗要求、失敗及撤銷仍各自判定,不新增通過,也不撤回
stale決定或缺陷撤銷。
D6:舊 schema 6 的命題綁定相容
舊紀錄未綁命題時,以目前場景區塊的 SHA-256 完全等於原通過紀錄的區塊摘要,證明可補上目前 writer 會產生的命題綁定。追加升級事件,保留原紀錄與語意/脈絡來源基準;之後依 D6 以命題延續,區塊及前言只供紀錄,其文字差異不再單獨構成重驗理由。
| 工具 | 條件與作用 |
|---|---|
withdraw-reverify | 真人明確改判指定 review reverify 或 human-request;只解除指定補驗要求 |
upgrade-bindings | 指南 fresh、最新結果 passed、可抽取命題且區塊摘要相同時補綁;最新結果未通過者略過並列於 skipped,保留待驗;已通過場景的區塊無法證明時整批拒收、不寫入 |
維持 result schema 6。舊讀者忽略新事件會保守顯示 pending/needs-uat;升 schema 反而使舊讀者拒讀整份帳本。正式下行須先發布框架工具,再以同一應用 commit 提交帳本、指南、sidecar 與來源快照,避免新帳本先於對應工具抵達其他 clone。
同 US 的 docs 脈絡路徑證明(UAT 6.16.0)
本組實作於 2026-10-23 通過審閱並結案(revision r2-93adc40be8b21f55);不代表已 fleet 發布。
context source-correspondence schema 3 沿原管線補同 US 的 docs us-rest:保存並重驗 source/copy inventories、指南/US Git 原件、historical guide,以及 publication 原件。 引用段落的錨點與場景適用範圍須完全相同且可取回,以原生餘文投影核對 before/after 摘要; 不以整份 US 代替 us-rest,不讓同檔 semantic 片段取得能力。
exact beforeDigest 與完整 surface 邊界保持,D2/D3 及人工舉證責任不變。 framework 有效摘要等於目前內容時省略 scoped binding,沿原內容身分;不改 alias 判定, 歷史多摘要/basis sequence 能力另案。來源對應本身不是等價、人工接受或階段推進, 後續正常 stamp/retain-context、公開 gate 與 retention 仍各自驗證。 新增原件共用既有固定上限;整組實作審閱與正式 fleet 發布分開,不自動下行。
隔離演練發現並經使用者確認納入的實作修正:context 基準保留接受時/完整處置綁定的合法換算; 未換算 key 先摺疊既有保留,再換算最終摘要,避免初始舊摘要殘留假 pending。 實作審閱另發現全數延後換算會使既有 scoped binding 退化,因此保留原有合法換算順序; 舊 key 的後續不同摘要仍須通過 exact beforeDigest,不沿用既有 grant,新路徑合法保留更新已換算基準。 semantic 流程、其他場景、未處置摘要、撤銷與補驗要求仍適用原閘門;不增授任何 grant 或人工接受。
宣告與有效脈絡基準、原件回復(UAT 6.17.0,2026-10-23)
本節記錄 UAT 6.17.0 的實作契約(2026-10-23);正式 fleet 發布另依發布流程。 既有 schema 2/3 的能力與 exact beforeDigest 保持,schema 4 沿同一 correspondence owner/loader 增加精確 UI、翻譯來源、未引用 seed-file 與 docs extra/reference,以及事件身分限定的有效 context 基準證明。
source/copy/publication 與歷史角色保存 inventory、指南、共同及專案 registry 的存在或缺席、 完整宣告來源原件;共享原生擷取器重算 kind/tier/selector/scenarios。 proposition 仍是 semantic;seed 有引用段落時不得降為整檔 context,JSON 翻譯的 key 宣告也不得冒充非 JSON 檔案。 us-rest 沿用既有非空引用集合、同 US 與 docs 複製關係約束。
不同於 before sidecar 的有效 context 摘要,須從發布前原帳本快照及原事件摺疊推導: 場景、key、digest、sequence、事件類型與事件原文 SHA 皆一致,且以可達 Git parent 鏈及同 commit 原生宣告重現摘要。 consumer 重驗帳本的 exact prefix;只有評估該場景、該形成基準事件時才可換算路徑並保留原摘要。 被後續處置取代的基準、其他場景/key/摘要、一般 alias/sidecar/semantic 查詢都不取得此能力。 正常 stamp/retain-context 與全部原生出口照常執行,不新增通過、人工接受、撤銷或進度事件。
來源搬移仍為 prepared 時拒絕原件回復,保留其精確前綴與恢復能力。
restore-evidence-snapshots 另只補原生已引用 exact-SHA 的歷史原件:請求限 owner/JSON pointer,
由原帳本及來源 SHA 圖推導引用,不收任意本文、路徑或摘要。
原生 snapshot、所選指南/sidecar、可達的保存指南、固定 copy Git 與來源 Git 歷史依序定位,
每個原件及投影皆須完全吻合;plan/write 使用原生鎖、完整輸入 CAS 與固定資源上限。
先保存易變 native 輸入及 owner/ledger 前綴,再保存 proof、不可變物件與原件,
最後追加 source-evidence-restoration 維護收據,接受與來源綁定保持原樣。
原件已存在時零寫入且不要求外部來源;中斷後沿同一 native proof SHA 重新計畫,
只按固定 OID 補讀尚缺的不可變物件。retention 重驗收據與 proof 並保留完整依據;
未收據 proof 列保存根且明示 incomplete,未知 reader 保全並回報 unsupported。
詳細欄位與交易契約由 UAT 的 context-source-correspondence、evidence-restoration references 及 docs-retention §12 承接。
原接受區塊與 sidecar 保存(UAT 6.18.0,2026-10-23)
原接受區塊的命題取回
預設 upgrade-bindings 仍要求目前區塊與原接受摘要相同。另以明示的
--from-accepted-snapshots 模式處理宣告/敘述維護後的舊綁定:原件必須是原帳本
binding.block 指定的原生 exact-SHA 快照,受既有大小限制,不掃任意文件或從目前指南補造。
先以唯讀計畫展示原事件/區塊/命題與目前命題,真人確認對應後,才以同一 token 與明示真人 by 追加補綁。
確認者 by 可採具名帳號,或可追溯到實際真人答覆的角色識別。角色識別須連同日期、處置版次及持久確認紀錄使用;該紀錄列出完整確認問題、原答覆、適用 surface/場景與原生事件或 token。單獨「使用者」不足以追溯;AI 不得冒填姓名或以自己的判斷代替真人確認。工具保存此識別字串,不宣稱已驗證個人身分;既有事件不因補足說明而改寫。此識別形式同樣適用 D3 review 的 reviewer。
舊的明確 **人工驗收** 段落只在此模式列為 legacy-bold-acceptance,須由人確認;
一般敘述、fence 內文字與混合標籤不能被自動升為命題。這不新增全域 parser alias。
計畫 token 綁完整 surface、sidecar、整本帳本、原事件/區塊、目前命題與 runtime;任何變動須重新展示計畫。
新事件仍為 binding-upgrade,acceptedBlock 指向原件,補綁的是歷史命題,原 passed、原事件及語意/脈絡基準保持。
此流程不宣稱目前命題通過。命題改變、語意依據改變、缺件、撤銷及重驗要求仍由既有 verifier 各自處理; 對原命題對應的確認與 D3 的 semantic keep/局部重驗確認分開記錄,可在一份具體處置表合併展示。 缺少原件時維持明示缺件,不以今天的新通過填作舊原件。retention 沿原 acceptedBlock 邊保存 exact 原件, 並保留原生回復收據;不因補綁就宣稱全池歷史閉包完整。
指紋 sidecar 替換前的保存
帳本的既有 sourceFingerprintSha256 可能指向尚未提交的指南中間版本。正常 stamp 在替換 sidecar 前保存其完整原 bytes,以原生 exact-SHA 快照取回;內容相同時不增加快照,同名檔內容不同則拒絕替換,不覆寫損壞證據。
保存沿用現有來源快照角色及 retention 邊,不新增帳本事件、人工通過或 schema。只回復歷史接受與片段而遺漏本輪新指紋原件,仍是本輪保存缺口;不能歸類成既有歷史欠帳。
相關文檔
- ADR-016: UAT 證據來源分層與變更後複核
- ADR-018: 以 server 實作為錨點反向建立 Domain Model 與 API Spec
.claude/rules/m-change-management.md、.claude/rules/m-work.md.claude/skills/uat-script/SKILL.md、.claude/skills/uat/SKILL.md、.claude/skills/progress/SKILL.md
變更歷史
| 日期 | 內容 |
|---|---|
| 2026-10-03 | 既有通過承接補充與工具修正經兩輪 peer review 通過:D3 補驗要求的真人改判與 D6 舊 schema 6 命題綁定;保留原驗收與來源基準,維持 result schema 6 |
| 2026-10-03 | P3 實作經四輪 peer review 通過:新增「P3 實作裁決」節;狀態改為 Accepted |
| 2026-10-03 | P2 實作經三輪 peer review 通過:新增「P2 實作裁決」節;狀態仍為 Proposed,未發布 |
| 2026-10-03 | P1 實作經四輪 peer review 通過:新增「P1 實作裁決」節;狀態仍為 Proposed,未發布 |
| 2026-10-02 | P0 實作經六輪 peer review 通過:新增「P0 實作裁決」節;狀態仍為 Proposed,未發布 |
| 2026-10-02 | 第 3 輪審閱通過設計方向;Q1–Q6 定案(「待決點」改為「審閱裁決」);狀態維持 Proposed,實作 P0–P3 另行送審 |
| 2026-10-02 | 第 2 輪審閱修訂:等價證明失敗後依實際差異分為語意/脈絡/來源待修復;P2 驗收案例分述 E2E 重跑與人工提議條件;Q2(阻擋整合閘門)、Q4(有歧義才請人確認)、Q6(允許撤回撤銷並修訂 ADR-016 D7)經作者裁決 |
| 2026-10-02 | 第 1 輪審閱修訂:補 florae-g1 實測盤點(遷移前 46 份僅 1 份通過驗證);D3 加入「已公告且影響本應用命題的契約變更」依據,框架版本改變本身不構成依據,並適用 S.UAT;D2/D3 改「宣告失效」為「來源待修復」,期間保留結論,重生指南與重新驗收分開;D5 改為目前階段與待補驗事項分開記錄;D6 改為依驗收命題延續通過,並承擔所有舊 schema(含 2、4)的相容責任;新增方案 E、F 與待決點 Q2、Q4、Q6 |
| 2026-10-02 | D3 改以舉證責任表述:E2E 未證明不需要即重跑;人工未證明需要即不重驗;脈絡變更改為自動保留(新增 Q5) |
| 2026-10-02 | 初稿:由 FU-123(遷移使 UAT 證據失效)擴大為證據失效的偵測與分級處置;納入非對稱策略與進度一致性 |