ADR-023:文檔位置與特性 Registry
狀態:已接受 (Accepted);P0–P3 設計及實作均已逐期通過審閱 接受日期:2026-10-21 提案日期:2026-10-15 審閱:20261015-docs-registry,第 3 輪通過(受審 revision r3-959a7210380ab603);9 條 major(R1-01~R1-06、R2-01~R2-03)均 done,無 open 或 declined;close 結論落點經使用者確認 方向審閱範圍(2026-10-15 歷史):本 ADR 的方向與 registry/audit 原型。本次不修改任何 rule 或 skill;「影響範圍」所列修訂依實作分期另行送審,現行規則在對應分期通過前維持原狀。D2、D6、D7 的功能驗證屬 P1,本結論不代表已實作 實作接受範圍:P0 registry、P1 交換與網站、P2-1~P2-6 解析/skills/證據保留、P3 共用寫入判定/Claude adapter/安裝器及接線;P3 最終受審 revision
r2-38282cca1103fcfa(ada@leandev.io)。接受不代表已下行、資料欠帳已修復或 hook 已啟用。 範圍:專案 docs 模組的文件位置、文件特性、導覽呈現、git 保存與保留規則;存取文檔的確定性入口;與人類溝通文件的存放位置
問題
文件內容由各 skill、AI 和人類決定,這不是 docs 模組能控制的,也不應該控制。 但文件放在哪、怎麼被找到、保存多久、要不要進 git、誰能寫目前沒有單一的定義:
- 位置分散在各 skill。 方法論 skill 與 rule 中有 70 多種路徑寫法,舊路徑遷移也是各自處理(domain-model 單檔/多檔、BR 換目錄、逐字稿有四個根目錄)。skill 會隨方法論演進而修改,位置規範無法從個別 skill 控制。
- 正文與證據混放。 給人讀的正文和給機器驗證的證據都放在
docs/下,Docusaurus 不渲染非 md 檔,網站看不到證據,正文樹又被證據塞滿。 - 與人類溝通的文件散落在 docs 模組外。 審閱簡報與證據在
.claude/peer-review/,Sprint 交付紀錄在.claude/work/,報表樣張在 workspaceoutput/,AI 的草稿在/tmp。人類只能靠 AI 提供的路徑或展示副本閱讀,/work甚至沒有網站入口。 - 暫時文件沒有收尾。 審閱結案只刪除簡報與展示副本,證據的生命週期沒有定義而持續累積。
- 專案之間設定漂移。 gitignore、docs-host 排除清單由各專案手寫,已出現應排除卻已提交、應排除卻未排除的情況。
2026-10-15 以原型對三個專案(開發型 florae-g1、報表型 nbsos、參考實作 appfuse-webapp-v1)對照的結果見附錄 B。
決策
D1:與人類溝通的文件一律放在 docs 模組
skill 與 AI 產生的、需要人類閱讀或確認的文件,一律放在已定位的 docs 模組,而且必須能從網站導覽讀到,不能只提供連結。
不得放在 .claude/、.codex/、/tmp 或 workspace 其他目錄。
- 只給 AI 讀的 context(例如
.claude/docs/module-inventory.md)不受此限。 - 審閱簡報、Sprint 交付紀錄、報表樣張等交換文件改放
{docsRoot}/docs/exchanges/{kind}/{id}/,原件本身就在 docs 模組,不再需要「工作樹原件+網站展示副本」的雙份結構。 - 這條取代
m-peer-review.md「簡報不進 git、不進docs/」與m-skill-execution.md展示副本的相關規定。完整清單見影響範圍。
D2:git 是唯一的共享儲存,保留規則依用途決定
- 不另設外部儲存或 LFS,團隊透過 git 共享全部文件。
- 修訂(2026-10-20,P2-6 設計通過):Git 為一般團隊文件的預設共享儲存;已有來源契約明示不能提交的原件/證據包,保留 ADR-020 的原定 controlledRoot/evidence-location 窄例外。Git 保存來源版次、路徑基準、相對檔案清單、完整 SHA-256、取回說明及確認附件,不存憑證,也不自動搬移/下載原件或引入 LFS。本站仍須提供本輪完整固定副本與對照,不新增讀者/存取控制/部署批准關卡或第二網站;不可取得的來源明示 unavailable,不把 ignored 預覽當唯一原件。見證據保留 §6、§11。
- 暫時文件也提交:審閱期間提交,結案時把結論落到持久位置,再從目前版本移除,歷史保留。
- 修訂(2026-10-16,P1 實作審閱中使用者決定):
/peer-review的審閱報告不提交。審閱簡報、證據與發布/確認紀錄放在 docs 模組交換目錄但 gitignored,只在共享工作樹與審閱預覽中,結案刪除;持久的只有結論落點。下方「審閱提交契約」的提交範圍與 stage 守衛因此不適用於審閱交換,審閱基線固定、基線後提交分類與推送祖先守衛照常。交付交換(/work)與其他暫時文件不受影響。
- 修訂(2026-10-16,P1 實作審閱中使用者決定):
- 控制 repo 增長的方法是進 git 前依用途篩選(
retention),而不是事後刪除。從目前版本刪檔只會讓工作目錄與網站變乾淨,不會縮小 repo。- P2-6 保留判定:retention 是提交範圍的參考,完整歷史 UAT 快照與 report run 引用仍保留。blocked/未知舊資料或 index 分歧時,按原生契約及原授權精確保存/交付本次有效帳本、引用 run 與必要快照,揭露 RT 問題;不新增 commit/進度/交付閘門,不豁免原 verifier/人工接受/work 閘門,不自動刪除或 stage。工具實作已通過 P2-6 審閱;細節見證據保留 §8、§12。
- 不改寫歷史(
filter-repo),以免需要 force-push 和全員重新 clone。是否一次性清理歷史,由人另行決定。 - 成員可以用
git clone --filter=blob:none降低 clone 量,不影響共享。
審閱提交契約(暫時交換文件提交後,「通過才解鎖成果」的閘門仍須成立):
- 提交範圍:審閱提交只能包含該次交換的目錄(例如
{docsRoot}/docs/exchanges/reviews/{briefId}/),逐檔以精確路徑 stage;提交前git diff --cached --name-only必須全部落在該目錄內,否則中止。被審成果(程式碼、規格、方法論)不得夾帶,仍依m-peer-review.md不變量二在通過後才提交。Sprint 交付紀錄沿m-work.md既有的 delivery commit 契約(只改本工作 request)。 - 審閱基線固定不動:交換文件在建立時記錄審閱基線
{reviewBase},整個審閱期間不更新。成果範圍=從{reviewBase}到目前工作樹的完整差異(包含{reviewBase}之後的提交),排除交換目錄。因此審閱提交讓 HEAD 前進不影響成果範圍,成果被意外提交後也仍完整列入審閱。 - 基線之後的提交逐一分類:
{reviewBase}之後、交換目錄以外的每個提交都必須記錄在交換文件並分類:- 本成果的提交(例如意外提交):留在成果範圍內,照常審閱;通過前不得推送到共享分支。
- 外部提交(他人合併等):只觸及成果範圍以外的檔案時,該等檔案從範圍排除並列出清單,重新發布(D6);觸及成果範圍內的檔案時停止,由人決定重新起審或拆分成果,不能靠移動基線讓差異消失。
- 有任何提交仍未分類時,
status報告範圍未確定,不得通過或結案。
- 驗證要求:P1 須以測試證明:stage 守衛拒絕交換目錄外的檔案;連續審閱提交後成果範圍不變;成果意外提交後仍完整列入範圍;外部提交不重疊時正確排除並列出、重疊時停止;有未分類提交時
status報告範圍未確定。
D3:Registry 定義位置與特性,路徑決定類型
- 每種文件類型在 registry 宣告位置與特性(Schema)。檔案的類型由路徑決定,不靠 frontmatter,pdf、json、xml 也能一致處理;frontmatter 只保留
version等狀態欄位。 - 共用層隨
docs-sitebundle 發布,與站台骨架同一個發布單位、一起 audit。 - 專案層放在 docs 模組(比照
site.project.ts)。專案層只能新增類型或對共用類型追加舊路徑,不能改寫共用類型的特性,避免 fleet 內同一類型的行為不一致。合併規則:- 各層的
defaults只套用到該層自己宣告的類型;專案層的預設值不影響共用類型。 - 專案層宣告與共用類型同 id 的類型一律拒絕。
- 追加舊路徑只能透過
extendCommon: [{id, legacy}],除id、legacy外的欄位一律拒絕。
- 各層的
- 索引頁繼承所屬類型:
README.md、index.md、_category_.json等索引/分類檔以inherit: container宣告,保存與發布限制(lifecycle、retention、distribution、close、scope、downstream、git)一律取所在目錄的類型,只保留自己的呈現方式;沒有所屬類型時才用索引類型自己的值。避免審閱證據或報表 run 目錄裡的 README 被當成持久、可部署的一般頁面。 - 交換目錄必須有容器類型:每種 temporary 交換(例如
{docsRoot}/docs/exchanges/reviews/{id}/)都要宣告一個涵蓋整個目錄(.../{id}/**)的容器類型,與交換本身同樣是 temporary。目錄根部的索引頁、分類設定以及沒有被更精確類型命中的檔案都歸屬這個容器,保存與發布限制不會因為檔名是索引或尚未分類而消失(lint R11)。 - gitignore 條目、docs-host 排除清單、scaffold 排除清單、導覽分類、
llms.txt都由 registry 產生,不再分散手寫。
D4:以確定性程式作為存取入口,只管結構不代理內容
- 入口是一支程式(暫名
docs.py),不是 skill。skill 是給 AI 讀的指令,無法保證被呼叫、也無法保證結果一致;做法比照既有的br_trace.py、evidence.py、docs-site/update.py、/progressnative 腳本。 - 入口只負責結構:
resolve(類型+id 解析成路徑,含舊位置)、create、register(導覽與llms.txt)、publish(呈現給人確認)、close(收尾)、audit。 - 內容照常用 Read/Edit 寫在解析出的路徑,保留
m-peer-review.md寫前重讀、最小 Edit、欄位所有權等紀律。 - 修訂(2026-10-16,P2-1 設計審閱通過):不設
create。內容由 skill 以 Write/Edit 撰寫,create剩下的「確認不存在、算出安全路徑」與resolve回傳新路徑時相同。resolve的「含舊位置」由 registry 的查詢樣式(locate)實現:在該類型所有既有檔案(含舊佈局)中以識別參數(key)判定同一份文件,多個候選或無法解析的檔案即拒絕;找不到才產生新路徑,回傳前另做執行期驗證。register只維護llms.txt的受管區塊,permalink 取自站台的路由紀錄。規範見 文件解析與索引規格。 - 三層防線:事前由 skill/rule 規定先
resolve;寫入當下以 PreToolUse hook 拒絕寫到 registry 未登記的 docs 模組位置;事後由audit抓人類與 hook 管不到的寫入。- P3 設計澄清(2026-10-20,第 2 輪設計審閱通過):寫前攔截限已安裝的 Claude Code Write/Edit 與 registry 掃描根;NotebookEdit、shell/MCP、外部編輯器及
.codex///tmp等根外語意義務不宣稱已機械覆蓋。唯一分類的 legacy 仍可維護,不強制搬檔。workspace 先對應實體根,根以上的祖先別名可接受,根以下 symlink 仍拒絕。既有未登記檔與 audit waiver 不構成寫入例外;獨立安裝器先列完整影響,清單非空不寫設定,不能把 methodology publish 視為已啟用。完整契約見文件寫入守衛 §4~§8/§12;第 2 輪已核對四項修訂,受審 revisionr2-a2b1504b61f97ef6,完整結論見該規格 §13。P3 工具尚未實作或啟用,ADR 維持 Proposed。
- P3 設計澄清(2026-10-20,第 2 輪設計審閱通過):寫前攔截限已安裝的 Claude Code Write/Edit 與 registry 掃描根;NotebookEdit、shell/MCP、外部編輯器及
D5:方法論未定義的類型與清除原則
- 提供通用類型
other。專案遇到方法論未定義的文件時,在專案層以base: other宣告,必須寫用途(purpose);audit 會把它列為框架擴充建議,由專案向框架提出。 - 目前已存在但方法論沒有產出者契約的類型,依同一方式處理:共用者列為
proposed,專案特有者列為專案擴充。 - 文件是否清除依用途決定,不依有沒有類型決定。 清除由
retention與close表達。
D6:呈現版本與確認綁定
取消「工作樹原件+展示副本」後,原件在 docs 模組直接呈現;確認仍必須綁定到明確的版本:
- revision:
publish每次呈現產生 revision,由三部分雜湊而成:受確認內容、本輪成果清冊(路徑+SHA-256)、呈現環境識別(docs-sitebundle 雜湊、站台設定檔雜湊、Docusaurus 版本)。 - 雜湊邊界:受確認內容=交換原件的實質內容,不含確認與發布本身的紀錄:
- 確認紀錄(審閱結論、人工確認)寫在交換目錄的獨立確認檔,每筆寫明所確認的 revision;確認檔不在雜湊範圍內。
- 原件中鏡像確認狀態的欄位(標頭狀態、審閱紀錄的結論欄)與記錄 revision/入口的展示欄,同樣排除在雜湊外。
- 其他內容(動機、範圍、意見與處置、預檢等)都在雜湊範圍內;審閱者新增意見屬實質變更,會產生新 revision。
- 因此寫入確認不會讓所確認的 revision 失效;實質內容、成果或呈現環境改變則一定產生新 revision。
- 發布紀錄:
publish在交換目錄寫入發布紀錄(revision、輪次、來源路徑與雜湊、成果清冊、呈現環境識別、頁面 URL),頁面本身顯示 revision、輪次與來源雜湊。 - 核對證據:
publish取回實際送出的頁面,確認顯示的 revision 與發布紀錄相同,並逐一取回附件比對 SHA-256;只拿到 HTTP 200 或舊 build 不算完成。 - 確認綁定:審閱結論與人工確認紀錄必須寫明 revision。受確認內容、成果或呈現環境任何一項改變都產生新 revision 並更新入口,先前的確認不沿用,需要重新確認。
- 驗證要求:P1 須以測試證明:寫入確認紀錄及其鏡像欄位後 revision 不變;修改任一實質段落、成果檔或呈現環境識別後 revision 改變;確認檔中引用舊 revision 的確認不被當成目前版本的確認。
status(唯讀)比對目前計算的 revision 與記錄值,不一致時報告「需重新發布」,不在唯讀模式重建。- 寫前重讀、最小 Edit、欄位所有權等編輯紀律不變。
D7:preview-only 在標準建置的編譯前排除
原件搬進 docs/ 後會被 Docusaurus 編譯成頁面、側欄、搜尋索引與 JS chunk,只靠 host 的 copyDocsBuild 路徑排除不夠:
- 標準建置在編譯前排除
distribution=preview-only的來源:由 registry 推導 docs plugin 的exclude樣式,並同步排除其導覽、搜尋索引、sitemap 與llms.txt項目;對應的靜態檔也不輸出。 - 只有審閱預覽(
start:docs-only,DOCS_SITE_REVIEW=1)納入 preview-only 來源。 - 驗收:標準建置後掃描全部產物(HTML、JS chunk、搜尋索引、sitemap、
llms.txt),不得出現任何 preview-only 來源的路徑或識別。此為 P1 遷移條件。
Schema
欄位
| 欄位 | 值 | 預設 | 說明 |
|---|---|---|---|
id、title | — | 必填 | 類型識別 |
category | source/spec/design/verification/tracking/guide/reference/exchange/site/other | 必填 | 領域分類,決定導覽分類 |
role | document(給人讀)/data(結構化事實來源)/evidence(給機器驗證)/exchange(AI 與人交換)/projection(由他處產生)/config(站台設定) | 必填 | 決定存放層與呈現方式 |
paths | glob,錨點 {docsRoot}/{workspace}/{module} | 必填 | 權威位置 |
legacy | glob | [] | 舊位置;resolve 會找到,audit 會報出 |
priority | 整數 | 0 | 同一檔案符合多個類型時決勝(例如 README 判為索引頁) |
lifecycle | persistent/temporary/regenerable/personal/scratch | 必填 | 決定 git 與收尾 |
close | {trigger, owner} | — | temporary 必填 |
derivedFrom | {source, generator} | — | regenerable/derived 必填 |
retention | all/referenced/referenced+latest/with-source/remove-at-close/regenerate/local-only | all | 依用途的保留規則;決定哪些檔案進 git、何時從目前版本移除 |
authority | source/derived | source | — |
writer | {mode: open|single|field-owned|generator, by: [...]} | 必填 | 寫入權 |
change | versioned/append-only/regenerate/free | free | 變更管制;versioned 依 m-doc-version、m-change-management |
scope | team/branch/personal | team | 共享範圍 |
presentation | page/asset-index/confirm-entry/hidden | 必填 | 網站呈現;除 hidden 外都必須能從導覽讀到 |
distribution | site(隨站台部署)/preview-only(只在審閱預覽出現;標準建置於編譯前排除,見 D7)/workspace(不進網站) | site | 取代現行只靠 DOCS_SITE_REVIEW 與 copyDocsBuild 的排除 |
downstream | exclude/reference/neutral | 依 category | scaffold 下行行為 |
git + gitReason | tracked/ignored | 由 lifecycle 推導 | 只在例外時填寫,且必須寫理由 |
belongsTo | us/epic/rpt/sprint/brief/work/style… | — | 專題視角,例如某份 RPT 的全部文件 |
base + purpose | other + 用途說明 | — | 專案擴充類型 |
inherit | container | — | 索引/分類檔繼承所在目錄類型的保存與發布限制(D3) |
status | established(方法論已定義)/proposed(本提案)/extension(專案擴充,建議框架納入)/deprecated | established | — |
git 推導:persistent、temporary 推導為 tracked;regenerable、personal、scratch 推導為 ignored。
推導規則(registry lint)
| 規則 | 內容 |
|---|---|
| R1 | temporary 必須宣告 close、retention=remove-at-close,且不可隨標準站台部署 |
| R2 | regenerable 或 derived 必須宣告 derivedFrom,writer 必須是 generator |
| R3 | personal 必須 scope=personal、presentation=hidden |
| R4 | evidence 的 change 只能是 append-only 或 regenerate,且必須明示 retention |
| R5 | exchange 不可是 regenerable |
| R6 | 需求來源必須 downstream=exclude |
| R7 | presentation 不是 hidden 的類型,位置必須在 docs 模組內(D1) |
| R8 | 覆寫 git 推導值時必須寫 gitReason |
| R9 | base: other 必須寫 purpose |
| R10 | inherit 只允許 container,且必須設 priority 才能先於所屬類型命中 |
| R11 | temporary 類型必須有一個同為 temporary、涵蓋整個交換目錄(.../{id}/**)的容器類型 |
合併規則違反(專案層同 id 類型、extendCommon 夾帶 legacy 以外欄位)在載入時直接拒絕,不列為 lint 警告。
對照檢查(audit)
| 檢查 | 判定 |
|---|---|
| 未登記 | 掃描範圍內的檔案沒有對應類型 |
| 多重比對 | 同一檔案以相同分數符合兩個類型 |
| git 不符 | 實際狀態與推導或覆寫值不同 |
| page 無法渲染 | 宣告為頁面的事實來源類型中混有非 md 檔 |
| 網站不可達 | 應呈現卻不在站台索引範圍(css、js、字型等相依資源不計) |
| 證據在正文樹 | evidence 放在 {docsRoot}/docs/ 下且沒有索引頁 |
| 暫時文件孤兒 | 審閱證據或展示副本找不到對應簡報 |
| 舊位置 | 檔案命中 legacy |
| 索引繼承 | 索引/分類檔依所屬類型判定 git 與保存限制,並列出繼承來源 |
影響範圍
本提案通過後須同步修訂(由本變更一起送審,各項實作依分期):
| 對象 | 修訂 |
|---|---|
m-peer-review.md、/peer-review | 簡報與證據改放 {docsRoot}/docs/exchanges/reviews/{briefId}/,審閱期間提交、結案移除(2026-10-16 修訂為不提交、結案刪除,見 D2);取消工作樹原件+展示副本的雙份結構;「不進 git、不進 docs/」不變量改寫;加入審閱提交範圍與基線契約(D2)、呈現版本與確認綁定(D6) |
m-skill-execution.md | 「專案文檔的人類瀏覽與確認入口」的暫時展示副本段改為原件直接呈現;明列 D1;確認綁定 revision,內容或呈現環境改變後重新確認(D6) |
m-work.md、/work | 交付紀錄改放 {docsRoot}/docs/exchanges/work/{workId}/;delivery commit 只改本工作 request 的契約維持 |
m-docs-site.md、/docs-site(含 bundle 的 docs-site.cjs) | 共用 registry 進 bundle;exchanges 分類與證據索引頁;目前只索引 static/reviews、static/reports 的入口規則改由 registry 推導;audit 納入 registry 檢查;gitignore 與 host 排除由 registry 產生;preview-only 於標準建置編譯前排除及產物掃描(D7) |
團隊指南 project-documentation.md | 「Peer review 原件留在共享工作樹、網站提供展示副本」段落改寫為 D1 |
m-methodology.md | 索引登錄 registry 規則與入口程式 |
/report、ADR-020 | workspace output/ 只放未給人看的中間產物;ADR-020「原樣張放受控儲存」需與 D2「git 為唯一共享空間」對齊 |
/uat、/report 證據 | 宣告 retention,只提交被引用與最新的 run |
/handoff | P2-5 設計已決:維持 personal/workspace/hidden/local-only 的個人便條紙,不移入 docs 模組;見其他類型遷移 §6.3 |
| 各產出文件的 skill | 路徑段落改為引用 registry 類型;逐步遷移,不一次改寫 |
.claude/settings.json | P3 新增 PreToolUse hook |
實作分期
| 分期 | 內容 | 解鎖條件 |
|---|---|---|
| P0 | 共用 registry+專案層、docs.py audit(唯讀);三專案跑 audit 定基線 | 本 ADR 通過 |
| P1 | 交換文件移入 docs 模組(peer-review、work);現有孤兒依用途處理;publish/close 與 revision(D6);審閱提交守衛(D2);preview-only 編譯前排除(D7) | P0 通過,且首次提交任何交換文件或證據前必須具備:依用途篩選(只提交被引用與最新的 run/附件,其餘留在本機)、被引用證據的保留檢查、close 前的結論落點檢查;D2 守衛與基線分類測試通過;D6 雜湊邊界測試通過;標準建置產物掃描不含 preview-only |
| P2 | resolve/register(不設 create,見 D4 修訂);skill 改版時逐一改用 registry 類型;retention 的自動判定與全面套用(P1 已有首次提交前的篩選檢查) | P1 通過 |
| P3 | PreToolUse hook 阻擋未登記位置的寫入 | registry 穩定、P2 主要 skill 完成遷移 |
待決
- 已決(P2-5,2026-10-19):
handoff.md維持 personal/workspace/hidden/local-only,不移入團隊 docs;見其他類型遷移 §6.3。 - 已決(P2-6 設計,2026-10-20):Git 共享為預設;既有來源契約明示不能提交之原件/證據包採 D2 窄例外,Git 保存 locator/摘要/確認,同一內部文檔站提供完整對照;見證據保留 §6。
- 已決(P1/P2-6 設計):交換證據放
static/exchanges/{kind}/{id}/evidence/;UAT 快照、report 帳本/runs 維持原位,不為清除正文樹提示而搬移。原生路徑/指紋及已有逐檔瀏覽/展示副本契約不改;見證據保留 §1、§3。 - 各
proposed/extension類型的最終歸屬(附錄 A、附錄 B)。 - 專案層 registry 的檔名與位置。
考量的方案
| 方案 | 取捨 |
|---|---|
| 維持各 skill 自行定義位置 | skill 隨方法論演進而改,位置無法控制;未採用 |
| 以一支「存取文檔的 skill」作為入口 | 無法保證被呼叫、結果不確定,巢狀載入成本高;改用確定性程式(D4) |
| 入口代理全部讀寫(含內容) | 失去最小 Edit 與欄位所有權,入口會隨內容規則一直改;改為只管結構 |
| 外部儲存或 LFS 存放大型證據 | 團隊只以 git 共享;未採用(D2) |
| 定期從 git 刪舊檔縮小 repo | 歷史仍保留,repo 不會變小;改為進 git 前依用途篩選 |
| 改寫歷史縮小 repo | 需要 force-push 與全員重新 clone;不納入常規流程 |
| 工作樹原件+網站展示副本(現行) | 兩份內容需同步、易遺留孤兒、/work 沒有入口;改為原件直接放在 docs 模組(D1) |
| frontmatter 宣告類型 | 非 md 檔沒有 frontmatter;改為路徑決定類型 |
| preview-only 只靠 host 路徑排除(現行) | 原件搬進 docs/ 後仍會被編譯進頁面、索引與 JS;改為編譯前排除(D7) |
| 專案層可覆寫共用類型 | fleet 內同一類型行為會分歧;改為分層隔離、只允許追加舊路徑(D3) |
附錄 A:共用層類型草案
已由正式工具取代:P0 起共用層 registry 為
docs-sitebundle 的docs-registry.json,唯讀入口為docs.py,規範見 文檔 Registry 規格。以下原型保留作為本 ADR 的審閱證據,不再更新。
registry 原型與 audit 原型:
registry.common.json、
audit.py(唯讀,用法見檔頭)、
test_audit.py(索引繼承與分層合併的契約測試)。
section-index、category-config 宣告 inherit: container,下表列的是沒有所屬類型時的值。
| 類型 | 名稱 | category | role | lifecycle | retention | writer | presentation | 狀態 |
|---|---|---|---|---|---|---|---|---|
section-index | 分類索引頁 | site | document | persistent | all | open | page | established |
category-config | Docusaurus 分類設定 | site | config | persistent | all | open | hidden | established |
site-asset | 站台圖檔 | site | config | persistent | all | open | hidden | established |
site-source | 站台原始碼與設定 | site | config | persistent | all | open(/docs-site) | hidden | established |
design-reference | 設計參考頁 | design | document | persistent | all | open | asset-index | proposed |
br | 業務需求 BR | source | document | persistent | all | open(/br) | page | established |
requirements-transcript | 需求訪談/會議逐字稿 | source | document | persistent | all | open(/transcribe) | page | established |
requirements-research | 需求研究資料 | source | document | persistent | all | open | page | established |
meeting-transcript | 設計/其他會議逐字稿 | design | document | persistent | all | open(/transcribe) | page | established |
roadmap | Roadmap | spec | document | persistent | all | open(/roadmap) | page | established |
feature-list | Feature List | spec | document | persistent | all | single(/feature-list、/progress) | page | established |
epic | Epic | spec | document | persistent | all | open(/epic) | page | established |
us | User Story | spec | document | persistent | all | open(/us) | page | established |
sbe | SBE 場景 | spec | document | persistent | all | open(/sbe) | page | established |
checklist | 需求品質檢核/評估摘要 | spec | document | persistent | all | open(/checklist、/assess) | page | established |
analysis-report | 一致性分析報告 | spec | document | persistent | all | single(/analyze) | page | established |
development-plan | 開發計畫 | spec | document | persistent | all | open | page | proposed |
report-spec | 報表規格 RPT | spec | document | persistent | all | open(/report) | page | established |
domain-model | 領域模型 | design | document | persistent | all | open(/domain-model) | page | established |
data-model | 資料模型 | design | document | persistent | all | open | page | established |
api-spec | API Spec | design | document | persistent | all | open(/api-spec) | page | established |
decision-record | ADR | design | document | persistent | all | open | page | established |
persona | Persona | design | document | persistent | all | open(/persona) | page | established |
system-context | 系統脈絡 | design | document | persistent | all | open(/system-context) | page | established |
roles-and-accounts | 角色與帳號設計 | design | document | persistent | all | open | page | proposed |
design-example | 設計範例 | design | document | persistent | all | open | page | established |
report-style | 報表樣式定義 | design | document | persistent | all | open(/report) | page | established |
report-style-data | 報表樣式結構化資料 | design | data | persistent | all | open(/report) | hidden | established |
report-layout | 報表採用樣板 | design | document | persistent | all | open(/report) | asset-index | established |
uat-guide | UAT 驗收指南 | verification | document | persistent | all | single(/uat-script) | page | established |
uat-guide-sources | UAT 指南來源 sidecar | verification | evidence | persistent | with-source | generator(/uat-script) | hidden | established |
uat-result | UAT 驗收結果 | verification | evidence | persistent | all | single(/uat) | asset-index | established |
uat-snapshot | UAT 來源快照 | verification | evidence | persistent | referenced | generator(/uat) | hidden | established |
uat-equivalence | UAT 等價處置紀錄 | verification | evidence | persistent | all | generator(/uat) | hidden | established |
test-result | 測試結果報告 | verification | document | persistent | all | open | page | established |
test-data-seed | 測試資料 seed 說明 | verification | document | persistent | all | open | page | established |
sim-plan | 模擬計畫 | verification | document | persistent | all | open(/sim-plan) | page | established |
report-evidence | 報表驗證證據 | verification | evidence | persistent | referenced+latest | generator(/report) | asset-index | established |
report-preview | 報表樣張預覽 | verification | projection | regenerable | regenerate | generator(/report) | confirm-entry | established |
report-restoration | 原樣張還原對照 | verification | projection | regenerable | regenerate | generator(/report) | confirm-entry | established |
sprint | Sprint 文檔 | tracking | document | persistent | all | single(/sprint、/progress) | page | established |
progress-index | 進度總覽 | tracking | document | persistent | all | single(/progress) | page | established |
follow-ups | Follow-up backlog | tracking | document | persistent | all | single(/follow-up) | page | established |
work-log | 工作日誌 | tracking | document | persistent | all | open | page | proposed |
guide | 開發指引 | guide | document | persistent | all | open | page | established |
operations | 維運手冊 | guide | document | persistent | all | open | page | established |
rfc | 框架 RFC | guide | document | persistent | all | open(/rfc) | page | established |
openapi-pages | OpenAPI 參考頁 | reference | projection | regenerable | regenerate | generator(sync-static.js) | page | established |
openapi-spec | OpenAPI YAML | reference | projection | regenerable | regenerate | generator(sync-static.js) | hidden | established |
javadoc | Server Javadoc | reference | projection | regenerable | regenerate | generator(sync-static.js) | asset-index | established |
llms-index | AI 站內索引 | reference | projection | persistent | all | open | hidden | proposed |
module-inventory | 模組清單 | reference | projection | persistent | all | generator(/scaffold-project、/scaffold-module) | hidden | established |
peer-review-exchange | 審閱交換目錄 | exchange | exchange | temporary | remove-at-close | field-owned(/peer-review) | page | proposed |
peer-review-brief | 審閱簡報 | exchange | exchange | temporary | remove-at-close | field-owned(/peer-review) | page | proposed |
peer-review-evidence | 審閱證據 | exchange | evidence | temporary | remove-at-close | generator(/peer-review) | asset-index | proposed |
review-display | 審閱展示副本 | exchange | projection | regenerable | regenerate | generator(/peer-review) | confirm-entry | deprecated |
work-request | Sprint 工作交付請求 | exchange | exchange | persistent | all | single(/work) | page | proposed |
work-progress | 工作分支進度 | tracking | document | persistent | all | single(/work) | page | proposed |
work-evidence | 工作整合證據 | exchange | evidence | persistent | referenced | generator(/work) | asset-index | proposed |
handoff | 交接便條紙 | exchange | exchange | personal | local-only | single(/handoff) | hidden | established |
report-scratch | 報表本機暫存輸出 | verification | projection | scratch | local-only | generator(/report) | hidden | established |
module-doc | 模組內說明文件 | guide | document | persistent | all | open | hidden | proposed |
feature-changelog | Feature Changelog | tracking | document | persistent | all | open(/release-app) | hidden | established |
other | 其他(通用) | other | document | persistent | all | open | page | established |
附錄 B:三專案對照(2026-10-15)
以附錄 A 的 registry 加上各專案擴充層,由 audit 原型唯讀掃描。掃描範圍:docs 模組全部(排除 node_modules、build、.docusaurus)、workspace 的 .claude/{peer-review,work,docs,handoff.md} 與 output/、各模組的 docs/ 與 FEATURE_CHANGELOG.md。
覆蓋率
| 專案 | 型態 | 掃描檔數 | 命中類型 | 未登記 |
|---|---|---|---|---|
| florae-g1 | 方法論開發 | 3,751 | 44 | 3 檔(無產出者的 *.audit.json 2 個、討論稿 1 份) |
| nbsos | 報表開發 | 6,676 | 30 | 12 檔(US 目錄內的 UC 文件、-old 檔、pdf;設計文件 1 份) |
| appfuse-webapp-v1 | 參考實作 | 9,786 | 47 | 6 檔(審閱目錄根部的 log 3 個,另 3 檔同 florae) |
這組特性能描述三個專案的現況;未登記的檔案都是真正的例外。
加入索引繼承後重跑,三個專案的違規與欠帳不變;索引頁全部找到所屬類型(例如 nbsos 訪談目錄的 _category_.json 繼承需求逐字稿)。參考實作多出的檔案只來自本次審閱自身的簡報與證據。
違規與欠帳
| # | 問題 | florae-g1 | nbsos | 參考實作 |
|---|---|---|---|---|
| 1 | 暫時證據沒有收尾(孤兒) | — | 6 目錄/50 MB | 26 目錄/153 MB |
| 2 | 可重建檔案已提交 | — | 原樣張還原副本 100 檔 | — |
| 3 | 證據在正文樹 | UAT 證據 2,100 檔/29 MB | 報表證據 4,052 檔/221 MB | UAT 證據 2,068 檔/28 MB |
| 4 | 與人類溝通的文件在 docs 模組外(D1) | 交付紀錄 27 檔 | 審閱證據 185 檔 | 審閱證據 4,129 檔 |
| 5 | 網站不可達 | UAT 結果 54 | 報表證據 4,039、PDF 樣張 24 | UAT 結果 52、設計語言證據 43 |
| 6 | 方法論沒有產出者契約的類型 | 6 類 | 6 類 | 9 類 |
第 4 項在 D2 下應提交,但其中孤兒(第 1 項)應先依用途處置,不是直接提交。
git 實際佔用(nbsos)
| 項目 | 數值 |
|---|---|
| repo 壓縮後總大小 | 151 MB |
| 報表證據目前追蹤的檔案 | 4,642 個;內容不重複者 2,326 個,壓縮後 93 MB |
| 歷史中的報表證據 | 94 MB,幾乎等於目前版本 |
| 報表 run | 20 份 RPT、218 次 run、共 144 MB;只保留最新 run 為 27 MB |
git 會對相同內容去重,因此檔案數遠大於實際佔用。增長來自持續提交新 run,referenced+latest 保留規則的效果介於 27 MB 與 144 MB 之間,取決於被驗收引用的 run 數量。
方法論沒有產出者契約的類型
| 類型 | 出現在 | 處理 |
|---|---|---|
設計參考頁(static/design-reference) | 三個專案 | proposed:找出來源後決定 |
| 開發計畫、角色與帳號設計、工作日誌 | florae-g1、參考實作 | proposed:補產出者或歸入 guide |
模組內說明文件(host、server 的 docs/) | 三個專案 | proposed:依 D1 判斷是否屬於與人類溝通的文件 |
| 既有系統實作規格、報表來源摘要、PDF 樣張、報表樣式資產 | nbsos | extension:報表類可能應升到共用層 |
| 設計語言對齊證據、參考實作稽核證據、UAT 證據來源對應、測試靜態證據 | 參考實作(florae-g1 有測試靜態證據) | extension:需定義用途與保留規則 |
P0 正式工具基線(2026-10-15)
P0 以 docs.py audit 依規格 §10 重跑三專案(唯讀;下游以 --registry-common/--registry-project 覆寫,未寫入任何下游檔案)。每個專案兩組:只用共用層,以及共用層加上本附錄當時專案擴充改寫成 schema 1 的草稿。
| 專案 | 組別 | 檔數 | 命中類型 | 未登記 | 應追蹤卻忽略 | 應忽略卻追蹤 | 孤兒交換 | 證據在正文樹 | 不可達 | 不在 docs 模組 |
|---|---|---|---|---|---|---|---|---|---|---|
| florae-g1 | 共用層 | 3,751 | 44 | 4 | 0 | 0 | 0 | 2,100 | 57 | 27 |
| florae-g1 | +專案草稿 | 3,751 | 45 | 3 | 0 | 0 | 0 | 2,100 | 58 | 27 |
| nbsos | 共用層 | 6,676 | 27 | 69 | 196 | 100 | 6 | 4,069 | 4,583 | 185 |
| nbsos | +專案草稿 | 6,676 | 31 | 12 | 196 | 100 | 6 | 4,081 | 4,607 | 185 |
| 參考實作 | 共用層 | 9,841 | 45 | 58 | 4,183 | 0 | 20 | 2,067 | 55 | 4,183 |
| 參考實作 | +專案草稿 | 9,841 | 49 | 6 | 4,183 | 0 | 20 | 2,068 | 106 | 4,183 |
參考實作的檔數與審閱證據數含當時進行中的 P0 實作審閱證據,結案後即刪除。
歸因:
- 兩組之間的差異全部來自專案擴充(輸入差異),與工具判定無關:例如 nbsos 的未登記 69 → 12。
- 與原型在同一份檔案上的差異只有刻意的規則改變:
- 新增
agent-local-settings(個人設定,ignored),三專案各少一筆誤報; - 新代碼「不在 docs 模組」(D1)把相依資源也算進去,並涵蓋 page 類型;
- md/mdx 不計入不可達(會渲染成頁面);
- 孤兒以
(kind, id)分組:參考實作 26 個舊證據目錄=20 個審閱。
- 新增
- 本附錄前述的違規與欠帳在正式工具中全部重現。
原型限制
- 網站可達性依
docs-site.cjs現行索引規則靜態判斷,沒有啟動站台逐頁核對。 - 孤兒以「目錄名稱去掉
-evidence/-reviewer/-rN後綴=簡報 id」推測;報表專案的展示副本目錄不以簡報 id 命名,可能誤判。 - 沒有檢查 scaffold 排除清單、frontmatter 一致性與
llms.txt覆蓋率;retention只估算,未實作判定。 - 測試只涵蓋索引繼承(含交換目錄根部)、分層合併與 R11;D2 的提交守衛、D6 的 revision 與 D7 的建置排除屬 P1 實作,原型未涵蓋。
變更歷史
| 日期 | 變更 |
|---|---|
| 2026-10-15 | 草案:D1–D5、schema、推導規則與三專案對照 |
| 2026-10-15 | 第 1 輪審閱(6 條 major)處置:D3 補分層合併規則與索引繼承;D2 補審閱提交契約;新增 D6 呈現版本與確認綁定、D7 preview-only 編譯前排除;P1 補首次提交前的篩選與結論落點條件;原型補索引繼承、分層隔離與契約測試 |
| 2026-10-15 | 第 2 輪審閱(3 條 major)處置:D3 補交換目錄容器類型與 lint R11;D2 改為審閱基線固定、基線後提交逐一分類;D6 定義確認紀錄與受確認內容的雜湊邊界;P1 驗證條件同步;原型補容器類型與 3 個測試 |
| 2026-10-15 | 第 3 輪審閱通過(revision r3-959a7210380ab603);狀態維持 Proposed,P0–P3 實作與待決點記入 follow-up |
| 2026-10-15 | P0 設計通過審閱(20261015-docs-registry-p0,第 3 輪,revision r3-11470bae46a0d5bd),操作規範見 文檔 Registry 規格;實作待進行 |
| 2026-10-15 | P0 實作:共用層 registry 進 docs-site bundle 並投影到參考實作 app-docs;docs.py(lint/classify/audit)與 38 個測試;附錄 A 原型註明已由正式工具取代;三專案基線待 P0 實作審閱 |
| 2026-10-15 | P0 實作通過審閱(20261015-docs-registry-p0-impl,第 3 輪,revision r3-4d58c60ef77aecc0;5 條意見均處置);附錄 B 新增 P0 正式工具基線;狀態維持 Proposed,P1–P3 待進行 |
| 2026-10-15 | P1 設計通過審閱(20261015-docs-exchanges-p1,第 3 輪,revision r3-6940c07d011ead6f;6 條 major 均處置),操作規範見 交換文件規格;待決 3 的交換證據部分已決(證據放 static/exchanges/,正文放 docs/exchanges/);狀態維持 Proposed,P1 實作待進行 |
| 2026-10-16 | P1 實作:docs.py 新增 evidence/publish/status/close;registry 新增 peer-review-static、review-record、work-receipt、work-exchange,證據移到 static 樹;docs-site bundle 加入 preview-only 編譯前排除、建置後 finalize、交換頁附件索引與審閱預覽狀態檔;/peer-review 2.0.0、/work、/docs-site 與相關 rules 改寫;規格頁 §15 記錄實作中確認的三處修訂;送審中 |
| 2026-10-16 | P1 實作第 1 輪審閱:6 條意見(5 major、1 minor)處置;使用者決定審閱報告不提交,D2 加修訂:審閱交換 gitignored、結案刪除,publish/close 不再提交;刪除參考實作 20 個舊審閱孤兒(使用者確認),參考實作 docs.py audit --fail-on error 通過 |
| 2026-10-16 | P1 實作通過審閱(20261016-docs-exchanges-p1-impl,第 4 輪,revision r4-3b0c6db130f8a561;9 條意見均處置:R1-01~R1-06、R2-01、R2-02、R3-01);狀態維持 Proposed,下游 publish/apply 與 P2–P3 待進行 |
| 2026-10-16 | P2 分六階段(P2-1 工具 → P2-2 規格類 → P2-3 設計類 → P2-4 驗證類 → P2-5 其他 → P2-6 保留),全部通過後才一次 /methodology publish。P2-1 設計通過審閱(20261016-docs-resolve-p2-1,第 4 輪,revision r4-cfb48816b403fb1f;8 條意見均處置:R1-01~R1-06、R2-01、R3-01),規範見 文件解析與索引規格;D4 修訂為不設 create;狀態維持 Proposed,P2-1 實作待進行 |
| 2026-10-16 | P2-1 實作:docs.py 新增 resolve、register,registry 欄位 template/locate/params/key/example 與 lint R12,audit 新增 DR-UNPARSED-LOCATION/DR-INDEX-STALE/DR-INDEX-UNVERIFIED;bundle 新增 docs-site-routes 外掛(路由紀錄);registry 新增四個缺口類型(73 類);修正 P1 去數字前綴的日期與版號例外;/docs-site 1.4.0;規格頁 §10 記錄實作中確認的修訂;參考實作 llms.txt 首次導入受管區塊,經使用者決定一併刪除移植時遺留的 150 條死連結 |
| 2026-10-16 | P2-1 實作通過審閱(20261016-docs-resolve-p2-1-impl,第 3 輪,revision r3-1b702f80d5efef53;4 條意見均處置:R1-01 路由紀錄的設定雜湊綁定設定求值時點、R1-02 含空白的 permalink、R1-03 參數 regex 的完整比對、R2-01 已刪除含空白網址的回報);新增實際站台回歸測試 test_routes_site.py;狀態維持 Proposed,P2-2~P2-6 與 P3 待進行 |
| 2026-10-16 | P2-2 設計通過審閱(20261016-docs-resolve-p2-2,第 2 輪,revision r2-5e84d64ae316bd91;3 條意見均處置),規範見 規格類遷移:七個規格類型加範本、從 checklist 拆出 assess-summary、resolve --list 與 DR-DUPLICATE-KEY、skill 讀取來源與建立成果分開且保留現行查無處置;範本已以 fleet 9 個 workspace 的實際檔案驗證;狀態維持 Proposed,P2-2 實作待進行 |
| 2026-10-17 | P2-2 實作通過審閱(20261016-docs-resolve-p2-2-impl,第 3 輪,revision r3-68c366ec3bd9f80d;6 條意見均處置:R1-01~R1-04、R2-01、R2-02):七個規格類型加範本並拆出 assess-summary(74 類);resolve --list、classify 回傳 params、audit DR-DUPLICATE-KEY;共用契約 /docs-site 的 references/doc-locations.md;8 個規格類 skill 改用 resolve/register;規格頁 §9 記錄 10 項實作修訂;審閱中發現證據附件與簡報宣稱不符(R1-04),/peer-review 2.1.0 補上證據須記錄實際命令與輸出並逐一核對;狀態維持 Proposed,P2-3~P2-6 與 P3 待進行 |
| 2026-10-17 | P2-3 設計通過審閱(20261017-docs-resolve-p2-3,第 2 輪,revision r2-ed0145d21ad1c955;2 條意見均處置),規範見 設計類遷移:domain-model、api-spec、persona、system-context 加範本,domain-model 拆出多檔的 domain-model-part,新增 api-spec-draft 承接 .generated.md 草稿,範本已以 fleet 9 個 workspace 的實際檔案驗證;審閱修訂:/persona 區分檔案 ID 與顯示名稱(不符 ID 格式的名稱不傳給 resolve,改以 frontmatter 比對)(R1-01)、/domain-model 遷移除 register 重建區塊外,定向清理區塊外指向舊模型路由的手寫條目並納入完成條件(R1-02);狀態維持 Proposed,P2-3 實作待進行 |
| 2026-10-19 | P2-3 實作通過審閱(20261017-docs-resolve-p2-3-impl,第 2 輪,revision r2-e0da1ddeec030484;2 條 minor 均處置):registry 76 類,4 個設計類 skill 改用 resolve/register,參考實作投影完成;35 項走查與設計類測試通過。R1-01 將讀取方位置字樣更新明列至文件解析與索引規格 §1 的 P2-5 範圍;R1-02 將缺少概覽時的讀取略過、產出時建立及來源揭露落回 /domain-model 與設計類遷移規格 §7。狀態維持 Proposed,P2-4~P2-6 與 P3 待進行;P2 全部通過後才統一 publish。 |
| 2026-10-19 | P2-4 設計通過審閱(20261019-docs-resolve-p2-4,第 2 輪,受審 revision r2-d42627c241c93b4e;1 條 major、3 條 minor 均處置),規範見驗證類遷移:九類範本、兩種規劃備註分類、完整 stem 作 UAT 物理 key、原生唯讀 resolve-route;R1-01 明訂操作 context 以 workspace/docs/registry 雜湊隔離、每類型列舉一次、寫入失效與效能驗收;R1-02 明訂 project.json 完整登記 key、新建專用 --module-key 與孤兒資料等拒絕出口;R1-03 明訂 RPT 按數值比對、保留既有 raw ID、新建至少三位及數值取號;R1-04 確認畸形指南會阻擋全域列舉與整合閘門,依 audit 的 DR-UNPARSED-LOCATION 修復,不改成場景失敗或回退進度。動態 run/snapshot/bundle 與 report helper 保留原生契約,retention 及 ADR-020/D2 儲存衝突留待 P2-6。狀態維持 Proposed,P2-4 實作、P2-5~P2-6 與 P3 待進行;P2 全部通過後才統一 publish。 |
| 2026-10-19 | P2-4 實作通過審閱(第 2 輪,受審 revision r2-1c498ed422a45d74;3 條 minor 均處置),落點見驗證類遷移 §8:registry 78 類,五個 skill、原生 UAT 位置橋接與唯讀 resolve-route、參考實作投影及 adapter 完成;最終程式碼完整 UAT 回歸 346 項、report 34 項與 docs-only 建置通過。R1-01 的單筆 resolve 子程序成本由 FU-144 承接,規格記錄現況;R1-02 統一最終完整回歸證據,R1-03 將共用文字集中至 doc-locations.md。既有 server Javadoc 編譯失敗由 FU-143 承接,歷史證據、人工接受及動態附件契約不變。狀態維持 Proposed,P2-5~P2-6 與 P3 待進行;P2 全部通過後才統一 publish。 |
| 2026-10-19 | P2-5 設計通過第 2 輪審閱(受審 revision r2-ab16fccf66eeb394;1 條 major、2 條 minor 均處置),規範與結論見其他類型遷移 §10。採用九個 writer/BR 與 progress 原生接線、四用途來源 Markdown、持久 RFC 提交稿、簡報 static 及 Storybook/框架 multi-instance 邊界。R1-01 明訂 source/target 基線的動態進度保護集與 m-work/work/progression 同批實作;R1-02 接受簡報兩類 site,含草稿版次及全部成員,揭露容量影響並要求 bytes 驗證;R1-03 明訂整 repo 可達 Git 歷史的保守取號與不可靠上界處置。handoff 維持 personal/workspace/hidden/local-only,對應待決已解。狀態維持 Proposed,正式 registry 仍為 78 類,P2-5 實作、P2-6 與 P3 待進行;P2 全部通過後才統一 publish。 |
| 2026-10-20 | P2-5 實作已完成、待實作審閱,接線及驗證見其他類型遷移 §11:registry 88 類/12 種範本,BR model/trace 與 progress updater 共用位置橋接;WORKTREE/INDEX/target+merge-base 共享進度保護、九個 writers 與 readers、參考實作投影與 adapters 已接線。最終 UAT 346 項、BR 66 項、progress 17+4 項、work 守衛 14 項及 registry/站台 fixture 通過;簡報兩版 10 檔 bytes/HTTP 核對及九 workspace 108 次唯讀列舉通過。legacyLayer 區分 common 舊域與 project locate,精確 singleton priority 20 避免被根目錄 section-index 遮蔽。保留原批准、歷史資料及 Storybook 權威;本列不是實作通過結論。狀態維持 Proposed,P2-6/P3 與 FU-144 未處理,P2 全部通過後才統一 publish。 |
| 2026-10-20 | P2-5 實作通過第 2 輪審閱(受審 revision r2-6e4865a564799b15,審閱者 ada@leandev.io;兩項 minor 均處置),結論見其他類型遷移 §11。R1-01:merge 從可信 target checkout 執行,匯入 resolver 前核對 protected.py 與非 test_ docs-site Python 工具檔集合/bytes 等同 target Git blobs,完成前重驗;全套 work 回歸 17 項通過。R1-02:簡報版次只在同一 (kind, packageId) 內取數值最大值加一,空集合 v1。registry 88 類與原生接線維持;第 1 輪 BR/progress/UAT/docs-site 來源未變,保留原回歸。狀態維持 Proposed,下一步 P2-6 設計與審閱;P2 全部通過後才統一 publish,本輪未 commit、下行或部署。 |
| 2026-10-20 | P2-6 設計提案完成、待審閱,見證據保留:UAT 完整歷史快照閉包、report 整 run/歷史接受/latest、唯讀 retention 查詢與提交前參考接線(不新增交付閘門;blocked 保留本次有效成果的精確保存/交付出口);提議既有不能提交原件/證據包採 D2 窄例外並新增 report-source。此為提案,D2 現行決策、registry 88 類及既有資料不變,尚未實作、清理或下行。 |
| 2026-10-20 | P2-6 設計通過第 2 輪審閱(受審 revision r2-87cfce29bd2c9c8c,審閱者 ada@leandev.io;1 項 major、1 項 minor 均處置),結論見證據保留 §11。採完整歷史快照/run 閉包、唯讀不刪除、證據原位與 D2 窄例外、report-source 分類;R1-01 明訂 retention 為提交參考及 blocked 的本次成果交付出口,R1-02 更正 methodology 標的與分期解鎖。D2 與 ADR-020 保存說明已補齊;registry 仍 88 類,89 類候選及原生功能/鎖/驗收待實作。狀態維持 Proposed,實作另送審、P2 全通過後才下行,本輪未清理、commit 或部署。 |
2026-10-20:P2-6 實作第 2 輪審閱通過
P2-6 實作已通過第 2 輪審閱(受審 revision r2-19ace3c868307bfa,審閱者 ada@leandev.io),完整結論見證據保留 §12。唯讀 retention/原生匯出、協作鎖、audit 及提交參考接線完成,canonical/參考實作為 89 類。R1-01 限縮 JSON 根啟發式並保留跨型別 pin 的保守出口;R1-02 依原生路由回取歷史 sidecar 並攜帶 originalPath 遞迴展開;R1-03 統一讀寫鎖排序。R2-01 的舊帳本 resultPath 資料欠帳另由 FU-145 承接,本輪不修資料。
P2-1~P2-6 設計與實作均已通過,P2 下行仍待另行授權及正式發布流程;P3 尚待完成,ADR 維持 Proposed。既有證據原位與接受指紋保留;blocked 不新增交付閘門,保留本次有效成果精確交付出口。FU-126/FU-134、FU-143/FU-144/FU-145 獨立追蹤,本輪不清理或部署。
2026-10-20:P3 設計第 2 輪審閱通過
P3 設計已通過第 2 輪審閱(受審 revision r2-a2b1504b61f97ef6,審閱者 ada@leandev.io),完整契約及結論見文件寫入守衛 §4~§8/§13。R1-01 定義實體 workspace 與祖先別名界線;R1-02 定義既有未登記檔/waiver 的完整盤點及安裝前對帳;R1-03 明列 NotebookEdit 未覆蓋並禁止 defer;R1-04 保存三項裁決並同步 Registry §5/§6 與 D4。
設計通過不代表 hook 已實作或啟用。參考實作 57 份既有未登記檔原位保留,須完成用途/位置對帳才可安裝;現行 audit waiver 與原生接受不改。後續依規格實作共用判定、adapter/安裝器及 G1~G8 驗收,再另送實作審閱。P3 尚未完成,ADR 維持 Proposed;方法論下行與部署另依原流程,不在本次設計結案執行。
2026-10-20:P3 實作送審
共用 check-write、Claude Write/Edit adapter、獨立安裝器及 G1~G8 驗證已接線,詳見文件寫入守衛 §14。原生演練揭露兩項修訂:bootstrap 必須先驗證 adapter stdout 再交平台;從模組啟動時明示 --settings 載入 workspace 片段。這些修訂與效能、設定競爭窗口及實測覆蓋一併交實作審閱,不由作者自行視為通過。57 份既有未登記檔仍使安裝器拒絕,settings/原生帳本未改;ADR 維持 Proposed,未啟用、下行或部署。
2026-10-21:P3 實作第 2 輪審閱通過,ADR Accepted
P3 實作通過第 2 輪審閱(受審 revision r2-38282cca1103fcfa,審閱者 ada@leandev.io);R1-01~R1-05 五條 minor 均經重現確認,無 open 或 declined,無 blocking/major。完整結論見文件寫入守衛 §16。定案採用 common check-write、Write/Edit 否決 adapter、驗證輸出的 bootstrap、獨立設定安裝、legacy 相容與完整未登記檔前置;模組明示 --settings、always-on 規則、WG-LOCKED/輸入診斷及 scaffold 設定責任均已補齊。接受已揭露 TOCTOU,沒有 OS CAS 或全工具覆蓋承諾。
P0–P3 逐期設計/實作全部通過,ADR 由 Proposed 改 Accepted。參考實作 57 份未登記檔仍原位保留,安裝器拒絕且不動 settings;52 份原生帳本與人工接受保留,FU-142 的對帳/正式下行/逐站安裝及 FU-145 的舊路徑修復仍待完成。Accepted 不等於已啟用或 fleet 已完成;本次未提交推送、下行或部署。