主張合併審查
主張累積的速度比頁面整理的速度還快。knowledge_remember 在沒有名稱與唯一頁面完全相符時,會儲存不帶主題頁面的主張;而排程維護的 knowledge_relink 只會連結其來源頁面為實體頁面或其文字中命名了唯一頁面的主張。已連結的主張也會堆積:中心頁面會收集狀態快照、重複項以及應歸屬於更具體主題的主張。此審查針對所選範圍執行一個程序。請依此順序進行:選擇範圍、連結,然後處理重複項、被取代的主張和快照系列,最後處理頁面正文。
1. 選擇範圍並列舉
針對預期範圍呼叫 knowledge_status,並針對當前指紋呼叫 knowledge_ontology。然後精確列舉一個起始集合:
- 未連結的殘留(預設,也是書記員執行的唯一範圍)。先以非
dryRun模式執行knowledge_relink,以便它能連結的所有記住的主張都被連結。然後使用knowledge_relink搭配dryRun: true、include: "all"和limit: 10列出殘留主張,並跟隨nextCursor:每個當前既無連結頁面也無來源頁面的主張,無論是由哪個工具儲存。每次呼叫最多報告每個結果 10 個範例,因此限制為 10 會返回它檢查過的每個主張。 - 單一頁面,針對中心頁面或超過其大小預算的頁面。使用
knowledge_connections搭配id、direction: "claims"、view: "full"和includeCards: true列出其當前主張,並使用相同的篩選器跟隨nextOffset。當snapshot變更時重新開始。對於中心頁面,先從卡片進行分組,然後一次處理一個群組;不要預先完整讀取所有主張。 - 一個主題,可選地自某日期起。 當主題有頁面時,使用
knowledge_timeline搭配entity、timeField: "recorded_at"和since列出其主張,並跟隨nextOffset。同時使用knowledge_grep搭配kind: "claim"、該主題的獨特名稱(PR 編號、提交 SHA、功能名稱)以及相同的since/timeField,搜尋歸檔在其他地方或未連結的主張。僅保留實際上關於該主題的主張。
在報告中說明範圍。使用 knowledge_record 搭配 metadataView: "full" 讀取您將變更的每個主張。其 subject_hint(如果存在)是儲存者自己對該主張主題的描述,也是判斷其主旨的最強線索。在選擇頁面之前,先按主張的內容(一個功能、PR、提交、決策討論、人員或偏好)進行分組。大多數主張只在與其相鄰的主張一起時才有意義:關於單一 PR 的一系列狀態快照通常以一個結果主張結束。
2. 選擇主題頁面
對於每個群組,使用 knowledge_grep 和 knowledge_lookup 尋找候選頁面,並讀取其 State。忽略已撤回的頁面和測試裝置頁面。
- 主要主題是主張所斷言內容的對象;在
entities中首先列出。僅當主張也對該實體有所說明時(例如做出決定的人或配置其產品的公司),才添加次要主題。簡略提及不算是主題。通常兩到三個主題就足夠了。 - 主要主題是該主張所要歸屬的最具體的頁面:關於一個 PR 的主張應歸屬於該 PR 的頁面,而不僅僅是該 PR 所屬的專案。僅當主張對更廣泛的頁面有所說明(例如專案層級的決策、政策或發布)時,該更廣泛的頁面才保留為主題。
- 人員陳述的偏好或決定應歸屬於該人員的頁面。不要將一個人的偏好變成專案或公司政策。
- 身份匹配應基於證據,而非相似名稱。當主張中命名了可能對應現有頁面的內容(例如可能是不同服務的產品名稱)時,請從證據(如配置、URL 或頁面本身的別名)進行確認。如果不確定,則將主張留在原處並在報告中說明。
使用 knowledge_annotate 搭配 entities 進行連結,傳遞完整清單(它會取代現有清單)以及主張當前的修訂版和哈希值。斷言語、證據和生命週期保持不變。在取代主張之前先連結它:被取代的主張無法重新連結。
3. 建立缺失的頁面並重新連結到它們
將每個主張連結到最近的現有頁面可能會將真正的主題埋在廣泛的頁面中。在以下情況下建立頁面:
- 一個離散的主題(功能、專案、工具或重要的 PR)大約有五個或更多的主張,或者有自己的設計、證明和結果歷史;或者
- 主張中提及的人員或組織是作者、所有者或決策者,沒有頁面,並且有身份證據(例如
gh pr view顯示的 PR 作者)。
不要為單一提及或由有日期的主張涵蓋的一次性修復建立頁面。使用 knowledge_save_page 搭配本體 type、別名以及身份證明的 source。人員頁面使用 identity.status: partial,除非身份已完全確定。編寫一個簡短的 State 並引用這些主張;其 Timeline 從這些主張派生。從其父頁面連結新頁面。
然後重新連結群組的主張,包括步驟 4 將取代的快照。新頁面成為每個主張的主要主題。僅對於對廣泛頁面有說明的那些主張(根據步驟 2 的規則),保留主張最初歸檔所在的廣泛頁面(通常是此審查起始的中心頁面);從其餘主張中刪除它。保留其他仍然符合條件的現有次要主題。低於閾值時,將主張留在其當前頁面上。
4. 淘汰重複項、被取代的主張和快照系列
- 重複: 兩個主張對相同事件斷言相同的事實、決定或偏好。保留具有所有者認可召回的主張,否則保留較早的主張,否則保留引用更完整的主張。使用
knowledge_annotate搭配addEvidence複製存活者缺乏的任何證據,然後使用knowledge_withdraw搭配引用存活者 ID 的理由撤銷另一個。 - 被取代: 較晚的主張明確糾正較早的主張(例如助手糾正自己的報告)或解決了較早的主張留下的問題。使用
knowledge_supersede讓後者取代前者,並附上說明取代了什麼的理由。不要在此使用knowledge_correct:它會發布取代項的新副本,從而產生另一個重複項。 - 快照系列: 關於單一特定項目(同一個 PR、提交或決策討論:CI 在某個 head 上紅色、請求審查、CI 綠色)的多個狀態快照,後跟關於同一個項目的結果主張(已合併、已關閉、已還原、已發布、已決定、已放棄)。在一個
knowledge_supersede呼叫中(最多 25 個主張)讓結果取代系列中的每個快照。所有以下條件必須從主張本身的文字和日期成立:- 每個快照和結果都命名同一個特定項目,而不僅僅是同一個專案;
- 結果的日期在其取代的每個快照之後,並說明一個最終狀態,而非另一個中間狀態;
- 結果和快照共享一個主題頁面(先連結它們,步驟 3);該工具會拒絕沒有共同頁面的主張。 日期在結果之後的快照,或關於不同 head 或不同項目的快照,則保留。
- 兩者皆非: 沒有後續結果取代的不同時刻的快照(CI 紅色,然後 CI 綠色,尚未合併)是歷史,不是錯誤。保留它們。矛盾本身不足以證明撤銷或取代是正當的。不確定時,保留兩者並報告該對。
knowledge_supersede 保留每個被取代的主張的文字、證據、來源和歷史,在其上記錄 superseded_by 和理由,並保持取代主張不變。預設讀取會停止顯示被取代的主張;歷史讀取(historical: true、lifecycle: "all")和 knowledge_history 仍然會顯示。如果取代錯誤,請再次呼叫它,並帶上 undo: true、相同的 by 主張以及來自其收據 items 的圍欄。
5. 更新頁面正文
連結使主張可從其頁面訪問;它不會改變頁面所說的內容。僅在主張改變頁面的持久狀態時才編輯頁面:一個決定、一個偏好、一個已落地或已發布的變更、一個新能力、一個已解決的開放問題,或後續主張顯示為錯誤的頁面文字。
- 將一系列進度快照折疊成其結果。快照(CI 運行、開放 PR、本地提交)最多只是帶有日期的事件主張,永遠不是 State。
- 在將其作為當前狀態寫入之前,請即時檢查可變狀態(例如使用
gh pr view檢查合併狀態),並說明檢查時間。合併不等於部署,部署也不等於證明特定 Gateway 正在執行該程式碼。 - 當設計或決定頁面與後來的決定矛盾時,在原始文字旁邊添加帶有日期的修正,而不是改寫它。將已回答的開放問題標記為已解決並保留原始問題。
- 使用
[[claim-id|label]]連結引用每個添加的句子,連結到主張。 - 頁面正文有大小預算(頁面預算)。
state: "rejected"的編輯不會儲存任何內容,但已連結的主張已經包含了事實。使用knowledge_extract_section將一個章節移到其主題的頁面(根據步驟 3 在必要時建立頁面),重新讀取,然後重試。永遠不要為了騰出空間而縮短其他正文。提取會使目標頁面成為該章節引用之主張的第一個主題,並保留它們現有的主題,包括您從中提取的頁面。對每個此類主張應用步驟 2,並在主張對來源頁面沒有說明時,使用knowledge_annotate搭配entities刪除來源頁面。
對章節編輯使用 knowledge_edit_body。從一次全新的完整讀取中計算 UTF-16 偏移量,並在每次編輯前重新讀取修訂版和哈希值:其他會話會並發編輯繁忙的頁面。偏好插入文字而非取代。僅當整個 State 部分都已過時時才取代它,並保留它已有的主張連結。
6. 驗證並報告
對每個已連結的主張使用 knowledge_verify 搭配 expectedEntities,並對每個新頁面或已編輯頁面使用 expectedLinks。再次列舉範圍:在您工作期間可能已有新的主張到達。以相同方式處理它們或報告它們。
報告範圍、檢查過的主張數量、已連結和已重新連結的主張、已建立的頁面、已取代的主張(附帶每個系列的主導主張)、已撤回的主張(附帶每個的存活主張)、已編輯的頁面,以及您考慮過但未更改的主張(附帶每個的理由)。在無人值守運行時,永遠不要要求做出決定,也永遠不要猜測:留下不確定的身份、不確定的重複項、結果不確定的快照系列,以及您僅因猜測才會建立的頁面,並在報告中列出它們供人員處理。
書記員運行
知識合併 書記員在其提示中定義的排程上,以無人值守方式對未連結的殘留主張運行此審查。其提示會檢查存取權限並設定其自動化;本節僅說明一次運行的操作。
- 對未連結的殘留執行步驟 1。當殘留為空時,報告檢查了零個主張並繼續執行下方的書面 Timeline。
- 否則執行步驟 2 到 6,並在停止前再次檢查殘留,因為運行期間保存的主張屬於同一個待處理佇列。
- 然後淘汰最多 10 個書面的
## Timeline章節,從最大的開始(淘汰書面 Timeline)。使用knowledge_grep搜尋Timeline並確認頁面正文中的標題。計算已淘汰的章節數量和仍帶有 Timeline 的頁面數量。 - 不要提問。給出步驟 6 的報告;結尾狀態行計算檢查過、已連結、已取代、已撤回和遺留的主張,然後計算已淘汰和遺留的 Timeline。