開源前準備
針對即將公開的儲存庫進行的發布前檢查。腳本負責執行機械性檢查;你則負責閱讀專案、判斷腳本無法處理的事項、撰寫報告,然後僅根據使用者的選擇進行補填。
執行順序很重要,因為有一個錯誤是無法挽回的:一旦儲存庫公開,其歷史中的所有內容都已被看到。洩漏的憑證和個人資料優先處理;樣板檔案則最後處理。
1. 掃描
從儲存庫根目錄執行附帶的掃描器(需要 Node 20 或更新版本,無依賴項,唯讀):
node <skill-dir>/scripts/scan.mjs <repo-dir>
它會輸出 JSON:summary 按層級統計失敗的發現項目,每個發現項目包含 id、level(block、warn、info)、status(pass、fail、skip)和 evidence。如果使用者同意跳過非常龐大的歷史紀錄,請加上 --no-history,並說明已跳過。如果已安裝 gitleaks,也請執行 gitleaks git <repo-dir> --redact --no-banner 並合併其發現結果;它能識別更多種類的 token 格式。
掃描器的機密規則基於模式,因此預期會有誤判(如測試用 fixture、文件範例),且不要假設它能捕捉到所有情況。在報告每個命中結果之前,請親自檢查。可以透過 oss-prep: allow 註解將某行程式碼標記為有意為之。
2. 閱讀與判斷
閱讀 references/checklist.md 以瞭解每個檢查項目的含義、如何區分真實問題與雜訊,以及只有你能執行的檢查。簡而言之,除了腳本的發現結果之外,還需注意:
- 歷史紀錄與檔案所揭露的資訊。 打開每個機密命中結果和歷史中的敏感檔案(
git show <commit>:<path>)。尋找真實姓名、電子郵件、電話號碼、地址、客戶或財務資料、內部主機名稱,以及文件或 fixture 中帶有私人資料的螢幕截圖。 - 授權條款的一致性。 LICENSE 檔案內容、
package.json、SKILL.md 的 frontmatter、README 以及任何個別檔案的標頭應彼此一致。注意綑綁的第三方程式碼、字型或圖片,並確認其授權條款是否允許重新散佈。 - 為陌生人準備的 README。 從搜尋結果而來的人應該能夠瞭解這是什麼、看到它的樣子(螢幕截圖或 Demo 連結)、安裝並執行它,以及找到授權條款,而無需具備任何內部背景知識。
- 僅適用於作者的事物。 硬編碼的本機路徑、專案需要但未說明的
.env值、假設在作者機器上執行的腳本。
3. 報告
以使用者的語言撰寫報告,格式如下:
# 開源就緒狀態:<repo>
**結論:** <就緒 / 解決阻塞項目後就緒 / 尚未就緒>,一句話說明原因。
## 阻塞性問題(公開前必須修復)
- ❌ <標題>: <發現了什麼,附上 file:line 或 commit> → <修復方式>
## 建議修復
- ⚠️ ...
## 額外建議
- 💡 ...
## 已到位
- ✅ <每行一項,分組列出>
## 需要在 GitHub 上處理
<使用者自行修改的設定,附上確切的 gh 命令或設定路徑>
將最嚴重的項目放在最前面。請具體說明:例如「src/config.ts:12 有一個 OpenAI 金鑰,也存在於 commit a1b2c3d 中」,而不是只說「發現機密」。說明你未檢查的項目(例如沒有 gh、歷史紀錄已跳過、二進位檔)。
然後詢問使用者要填補哪些項目。將明顯的集合提供為預設值(例如「所有缺失的檔案」),並逐一列出每個選項,以便使用者選擇。
4. 填補使用者選擇的項目
將 assets/templates/ 中的範本作為起點,並根據此專案進行調整;請先閱讀 references/fixing.md。簡而言之:
- 只寫入檔案,永不發布。 僅在工作目錄中建立或編輯檔案。除非使用者明確要求,否則不要提交、推送、變更儲存庫的可見性或設定,或建立發行版本。
- 符合專案特性。 使用專案實際的指令、Node 版本、套件管理器、授權條款和聯絡方式;以 README 所使用的語言撰寫(如果 README 是雙語的,則使用兩種語言)。省略不適用的章節,而不是放置佔位符。
- 切勿為使用者選擇授權條款。 如果沒有授權條款,請用一兩句話說明常見的選擇(MIT、Apache-2.0、GPL-3.0、AGPL-3.0、雙重授權),然後詢問使用者。請完全複製官方的授權條款文字;不要根據記憶進行改寫或重新打字。
- 歷史紀錄中的機密無法透過刪除檔案來修復。 憑證必須先撤銷和更換;這是使用者在雲端服務商控制檯中的工作。重寫歷史(
git filter-repo)或發布一個全新的儲存庫是使用者的決定;請解釋兩種選項,並在沒有得到明確同意之前,不要執行任何一項。 - GitHub 設定屬於使用者。 從參考文件中提供確切的
gh命令或設定路徑;僅在使用者要求時才執行它們。
最後,重新執行掃描器,並顯示哪些發現結果發生變化,以及還有哪些事項留待使用者處理。