Community寫作與編輯github.com

Devolutions/IronRDP

寫作或擴展一份符合性測試套件,僅根據 CONTRACT*.md 和已發布的來源,由從未見過實作的作者撰寫,並在實作建立期間保持唯讀。當合約有或將有多個實作,或錯誤的預期值對實作者不可見時(例如密碼學、編解碼器和線路協定),請使用此技能。

IronRDP 是什麼?

這個技能定義了一個「盲測套件」工作流程,用於從合約文件而非實作中衍生出獨立的測試套件。主要目的是確保測試套件不會被任何單一實作所偏誤,從而在多個實作之間提供真正的獨立驗證。作者僅能接觸合約檔案、其公開介面(合約 crate 或模組的型別和文件)以及已發布的來源(如規格文件、供應商提供的測試向量、網路封包擷取),不能接觸任何實作,包括先前的實作或用於產生合約的 pull request。預期值必須來自已發布的來源、合約本身陳述的屬性,或由合約或引用的標準所固定的推導方法,絕對不能來自僅能由合約實作進行的計算。這項技能在密碼學、編解碼器和線路協定等領域特別有用,因為在這些領域中,錯誤的預期值對實作者來說可能不易察覺。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Devolutions/IronRDP/tree/HEAD/.agents/skills/blind-testsuite

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

盲測套件

此套件是從合約中衍生出的獨立證據,而非符合性的定義;因此,測試失敗表示實作或測試有誤,而非合約有誤。 test-writer 決定每個測試的形式,而 test-oracle-reviewer 則決定什麼構成獨立值;此技能即是圍繞它們的隔離機制。

作者所見

合約檔案、其所依據的介面(合約 crate 或模組、其型別與文件),以及已發布的來源:規格文件、供應商提供的向量、網路封包擷取。 不包含實作、先前的實作,或用於產生合約的 pull request,因為這些都承載著對合約的解讀,而套件只會確認這種解讀而非加以測試。 當實作存在時,作者是在一個不含該實作的 commit 上建立的新工作目錄;一份禁止閱讀清單輔助此機制,但無法取代它,因為看過實作的上下文無法抹去記憶。

預期值

來自測試中引用的已發布來源、合約陳述的屬性,或由合約或引用的標準固定的推導方法,其結果記錄在向量旁,以便審查者可以重新推導;絕非來自僅能由合約實作進行的計算,因為檢查這樣的值等同於重新實作合約。 一個推導出的向量必須考慮到變更所觸及的所有耦合欄位 - 長度、校驗和、簽名 - 否則其結果就不符合推導所聲稱的內容。 當不存在已發布的答案時,跨實作比較輸出;差異檢查從不單獨存在,因為兩者共有的錯誤會使它通過。 手工編寫的負面輸入僅在目標維度上與獨立有效的控制項不同,因此測試只會因其所指稱的原因而失敗;一條指稱被拒絕輸入的規則會獲得一個這樣的輸入,因為只透過接受來測試的規則,接受一切輸入也能滿足。 供應商來源記錄了來源、版本和校驗和,整體採用或在其自身章節邊界處截取,且從不編輯,因為經過編輯或裁剪的向量會失去使其成為預言機的來源證明。 在套件旁保留一份覆蓋率記錄:哪個測試檢查哪一條款、哪些條款僅透過審查驗證,以及故意不檢查的邊界,這樣沉默就不會被誤認為覆蓋。

審查與合併

審查者執行 test-reviewer,並從兩個方向檢查合約與覆蓋率記錄:每條條款都有測試或記錄的缺口,每個測試都引用其條款。 在實作之前撰寫套件;一旦有實作通過測試,就將其合併,這樣在測試綁定所有後續實作之前,就會發現沒有符合規格的實作能通過的測試。

實作期間唯讀

實作的 pull request 從不編輯套件或合約。 看似錯誤的測試,或沒有測試的條款,會連同向量或條款、預期值和觀測值,以及引用的來源一起上報。 修正會導向擁有該套件的 pull request — 若該 pull request 處於開啟狀態則透過其負責人,若已合併則建立一個新的 — 由具有相同輸入的新作者執行,該作者接收決策而非實作的輸出,以保持套件為盲測。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能