impa 是做什麼的?
撰寫開發者或代理能夠執行且與程式碼一致的技術文件。目標是讓文件對讀者的任務來說正確、最新且完整、易於尋找、具有可用的範例、清晰直接,且長度不超過所需。
一個回合就是使用者要求的一項工作。每個回合結束時,系統會自動進行審查,無需要求。
步驟
1. 讀取專案
在寫任何東西之前,先讀取專案中已有的內容:
.impa/plan.md,如果專案有的話。- 文件:README、
docs/、網站原始碼與設定、變更日誌、貢獻指南以及指令檔。注意任何產生器,以及 CI 中的文件檢查。 - 讀者會碰到的程式碼:進入點、指令解析器、設定架構、環境變數、錯誤訊息、公開 API 以及清單。
釐清專案類型(函式庫、CLI、服務、終端使用者應用程式、內部工具)以及文件的讀者群,包括代理是否會閱讀。只在專案本身無法回答時才詢問使用者。
維持使用專案現有的文件工具。如果沒有任何工具,則使用純 Markdown 檔案。
2. 選擇文件類型
閱讀 reference/doc-types.md。從這個專案類型所需的列開始,僅在觸發條件成立時才加入觸發列,然後停止。一個頁面只做一件事。如果使用者要求一個頁面,就只寫那個頁面,不要增加其他頁面。
不要重新組織使用者沒有要求你重新組織的文件。
3. 維護計畫
在專案中撰寫或更新 .impa/plan.md。這是下一個回合會讀取的內容:
# 文件計畫
專案類型:CLI
讀者:使用 CLI 的開發者,以及在此儲存庫中工作的程式碼代理
文件工具:純 Markdown
範例驗證層級:第三級
## 頁面
| 頁面 | 類型 | 用途 | 讀者 |
| --- | --- | --- | --- |
| README.md | README | 說明這是什麼以及如何開始 | 剛接觸的人 |
## 內部風格
標題大小寫、任務標題形式、縮寫形式、使用「我們」、佔位符格式、`$` 提示。與專案現有的方式保持一致。
## 等待真人處理
## 經驗教訓
計畫包含頁面和選擇。將選擇的理由留在計畫之外,因為審查者會讀取它。
4. 依規則撰寫
如果專案已有文件,首先複製它們,如 review/round.md 中的「Before you edit」所述。該回合的差異來自那份複製。
首先閱讀 reference/principles.md,然後再讀取工作所需的內容。一個小編輯只會讀取它需要的部分。
| 閱讀 | 時機 |
|---|---|
| structure.md、wording.md、leave-out.md | 你寫的每個頁面 |
| examples.md | 任何包含程式碼的頁面 |
| accuracy.md | 在你驗證之前,以及當你設定產生的參考資料時 |
| agent-readers.md | 指令檔、技能、工具描述,以及代理會獲取的網站 |
audit.md 和 sources.md 不是用來寫作的:前者是供 impa audit 使用的建置清單,後者則存放引用來源。
這些規則旨在防範的陷阱:
- 答案優先。 一個頁面以一句話說明它的用途開頭。然後是常見案例,接著是邊緣案例。
- 簡潔意謂沒有浪費文字,而不是其他。 刪除前言、歷史和重複。保留預設值、限制、錯誤、先決條件和範例:
leave-out.md中的保留清單之所以存在,是因為刪除這些會傷害讀者。 - 可產生的就產生(A1)。 旗標、簽名、預設值和架構,如果能用工具從程式碼產生出來,就不應手動輸入。使用專案的產生器,或告訴使用者有一個產生器會很有幫助。
- 每個事實只有一個來源。 陳述一次並連結到它。
- 符合內部風格。 一致性優先。規則集的用詞選擇是給沒有內部風格的專案的預設值。
- Front matter: 如果文件工具允許,為 docs 資料夾中的頁面提供
type(T2)。絕不要對 README、變更日誌或指令檔新增 front matter:GitHub 會將其顯示為第一句話上方的一個表格,而工具會一次讀取整個檔案。 - 指令檔只包含代理無法從儲存庫中自行推斷的內容(G1)。 一個人在提交前必須編輯由代理產生的指令檔(G11),所以要告知使用者。
- 絕不虛構。 你找不到的事實,就是你不該寫的句子。不要留下存根,也不要留下空的標題或
TODO(T4)。如果一個頁面沒有某個值就無法運作,請使用明顯的佔位符,例如API_URL_TODO,並將其加入計畫中的「等待真人處理」。
5. 對照程式碼驗證
逐一對照頁面所描述的程式碼,檢查頁面上陳述的每一件事。在安全的條件下執行它,因為僅閱讀可能會遺漏執行時才會顯現的問題。
| 頁面陳述的內容 | 對照檢查的來源 |
|---|---|
| 指令、子指令或旗標 | 解析器的原始碼,以及實際的 --help |
| 路徑或檔案 | 目錄樹,除非頁面說明該檔案由讀者建立 |
| 預設值、限制、單位、順序、副作用 | 設定該值的程式碼行。不是說明文字、註解或舊文件 |
| 環境變數、設定鍵 | 程式碼讀取它的位置 |
| 錯誤訊息 | 原始碼中的確切字串 |
| 版本、支援的平台 | 清單或 CI 設定 |
| API 名稱、簽名、回傳值 | 定義 |
| 範例 | 編譯或執行它,直到達到專案的驗證層級(examples.md) |
| 安裝、快速入門、教學 | 從一個乾淨的狀態開始,在一個暫時的資料夾中,遵循每一個步驟 |
絕不執行任何會接觸到真實資料、真實金錢或共享系統的動作。說明你沒有執行哪些項目。
現有的文件不是證據,即使是你正在保留的部分。任何無法驗證的主張都應被移除或回報,絕不能基於信任而保留。
當文件與程式碼不一致時,程式碼本身可能才是錯誤。寫下程式碼實際的行為,告知使用者,並且不要更改程式碼,除非使用者要求。
6. 執行審計
impa audit --dir <project>
修正實際的問題。如果指令執行失敗,或二進位檔案沒有 audit 指令,告知使用者審計未能執行並繼續。一個乾淨的審計結果證明力有限:它只確認一個名稱存在,而不是圍繞它的句子是真實的。絕不偽造一個值來獲得乾淨的執行結果。
7. 審查該回合
無需要求,遵循 review/round.md。第一次審查涵蓋整個文件集,之後則審查差異及其影響的範圍。它會透過 impa review 在背景執行。
只有在使用者為此回合要求時才跳過,並回報已被跳過。在審查完成之前,不要聲稱文件已就緒。
不要閱讀 review/method.md 或 review/checklist.md。這些檔案只有審查者會載入。
8. 回報
告知使用者:
- 你撰寫或更改了什麼,以及你選擇了哪些文件類型。
- 你無法驗證或沒有執行的項目。
- 文件與程式碼不一致的地方,以及你如何處理。
- 審查結果:結論、發現了什麼、你修正了什麼、仍待解決的問題、誰可以採取行動以及成本。
如果結論是「在真人採取行動前無法發布」,請以此開頭。
除非使用者要求,否則不要提交、推送或發布。
9. 學習
當使用者糾正某件事,或一個回合顯示出這個專案的一個陷阱時,將其加入 .impa/plan.md 的「經驗教訓」。如果這裡的某條規則對所有專案來說都是錯誤的,請告知使用者:修正應歸屬於此技能,而非單一專案的計畫。