Communitygithub.com

系統差異

製作一段短片,展示變更對系統(其元件、流程、狀態與故障模式)的影響,取代傳統的行級差異。適用於系統差異檢視,或用戶想透過影片或動畫了解拉取請求、分支或提交範圍的影響。

系統差異 是什麼?

System Diff 是一項 AI 助手技能,專為 Claude Code 等開發者工具設計,用於將程式碼差異轉換為視覺化的系統變更影片。傳統的逐行 diff 只顯示文字更動,而 System Diff 則以「元件視圖」或「狀態圖」模型,呈現系統的執行時期變更:哪些元件、流程、狀態、事實與故障模式被新增、移除或修改。用戶可針對拉取請求、分支或提交範圍執行此技能,它會自動分析差異內容,建立結構化的規格檔案,並透過基於 Node.js 的指令稿生成影片。這項工具特別適合需要向團隊或審查者清晰溝通複雜架構變更的開發者,讓審查重點從「改了幾行」轉移到「對系統的影響」。它支援完整的驗證流程,確保每個宣稱都有對應的 diff 行號作為證據,並提供聯繫表與影格檢查以確保影片正確性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/technotopicus/system-diff/tree/HEAD/skills/system-diff

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

系統差異 是做什麼的?

系統差異展示了變更對執行中系統的影響:新增、移除或修改的元件與流程、事物現在可以經歷的狀態、改變的事實,以及新的故障方式。行級差異是證據;系統差異是審查者需要的故事。

你將變更建模為規格,指令稿則將規格渲染成影片,包含多個節拍:標題、每個圖表的前後對比、故障、結束。以下,<script> 是此技能資料夾中 scripts/system-diff.mjs 的絕對路徑。

1. 檢查設定

執行 node <script> doctor。如果機器設定完成,它會以 Ready. 結束。

若以其他訊息結束,或找不到 node,請停止並要求用戶執行 /setup-system-diff,此指令會安裝此技能所需的一切。

2. 收集變更

變更指一個拉取請求、一個分支或一個提交範圍。未指定時,採用目前分支相對於其基礎分支:若有拉取請求,則取該請求的基礎分支;否則取儲存庫的預設分支。當兩者都不明確時,詢問用戶。

請在變更的頭部所在的檢出目錄中工作,因為步驟 4 會根據磁碟上的檔案檢查你的證據。

  • 讀取完整的差異(gh pr diff <number> 或 git diff <base>...<head>),以及拉取請求的描述(若有的話),或提交訊息(若無拉取請求)。
  • 對於每個觸及呼叫、查詢、排程、配置值、綱要(schema)或權限的程式碼區塊,在基礎版本和頭部版本中讀取足夠的周圍程式碼,以了解執行時期誰呼叫誰。

完成時,你應該能夠針對基礎版本和頭部版本說明:哪些程式在執行、每個程式與誰溝通、儲存了什麼,以及當其依賴的每個項目當機時會發生什麼。

3. 建模系統變更

將變更列為宣稱(claims),每個宣稱附帶顯示該變更的 path:line。這些宣稱將成為步驟 4 中的規格,並在步驟 6 中呈現給用戶。

  • 元件:執行或儲存資料的事物,例如服務、工作、佇列、表格或外部 API。包含觀看者理解流程所需而未改變的元件。
  • 流程:一個元件呼叫、讀取或寫入另一個元件。
  • 狀態與轉換:一個事物經歷的階段,例如訂單、工作、工作階段或連線,以及將其從一個階段移到下一個階段的事件。
  • 事實:系統中具有前後值的一個屬性,例如配置值、限制、綱要、誰可以執行什麼,或某操作耗時多久。
  • 故障模式:最重要的新故障方式。通常是新元件或新依賴項目停止運作;也可能是現有元件故障的成本更高,或事物卡在某個狀態。說明接下來會發生什麼:每個其他元件做什麼,或事物最終卡在哪裡。

每個宣稱必須引用顯示它的行號。沒有行號可引用的宣稱即為猜測,應排除在影片之外。

某些變更不會改變系統:重構、格式化、測試、註解、僅程式碼內部可見的重新命名。對於這類變更,告知用戶該變更沒有系統差異,並說明其變更類型,然後在不產生影片的情況下結束。重新命名系統執行時可見的事物(如路由、表格、佇列或配置金鑰)則屬於系統變更。

宣稱決定影片繪製哪種圖表:

  • 元件視圖,當接線(wiring)變更時:新增或移除元件或流程,或流程傳遞不同的內容。
  • 狀態圖,當生命週期變更時:狀態新增或移除某個值,出現重試或取消步驟,或事件現在導向其他地方。
  • 接線和生命週期不變但值改變的情況(例如更長的逾時),視為事實,顯示在提供上下文的圖表下方。
  • 兩者皆繪製,當兩者都變更,且每個圖表能展示另一個圖表無法顯示的資訊時。每個圖表增加兩個節拍,因此一個圖表能完整說明的變更只需一個圖表。

完成時,差異中的每個區塊都應被宣稱覆蓋,或歸類為不改變系統的部分,並且你已選定要繪製的圖表。

4. 撰寫規格

將宣稱轉換為規格,遵循 SPEC.md 中的說明,該文件定義了所有欄位、佈局規則以及如何撰寫標題與旁白。將規格儲存為儲存庫外部的暫存資料夾中的 system-diff.json。

執行 node <script> check <spec> --repo <repository root>。

完成時,它應僅輸出 The spec is valid.,且無任何警告。check 指令會確認每個引用的行號確實存在;但該行是否真的顯示該宣稱則由你自行確認。

5. 建置並檢查樣張

執行 node <script> build <spec> --repo <repository root> --out <scratch folder>。它會輸出影片路徑、警告、聯繫表(一張包含每個節拍一個影格的圖片)以及一個 stills 資料夾,其中包含相同影格的全尺寸圖片。

閱讀聯繫表以了解整體畫面,並檢視各影格以檢查小字:

  • 每個標籤、數值和標題都完整且可讀;
  • 每條流程線都清晰繞過不相連的方塊和標籤;
  • 每個「之前」影格只顯示變更前存在的內容,而每個「之後」影格顯示變更新增的所有內容;
  • 狀態圖的起點位於事物起始的狀態上;
  • 故障影格標記正確的元件或狀態,且每個註解位於其描述對象的底部邊緣;
  • 每個標題說明其影格顯示的內容。

修正規格並重新建置,直到建置輸出 No warnings. 且樣張通過所有檢查。多數影格問題可透過縮短文字或將方塊移到另一個儲存格來解決。若仍有問題,請在交接時特別說明。

6. 交接

提供用戶影片路徑、一句話說明影片內容、帶有證據的宣稱,以及你遺漏或不確定的部分。將影片發布到任何地方是用戶的決定。

相關技能