Spaces:
Sleeping
Sleeping
Commit
·
047ffbd
1
Parent(s):
69dde6d
docs: enhance Copilot instructions with modular spec structure and abstraction guidelines
Browse files- .github/copilot-instructions.md +59 -22
.github/copilot-instructions.md
CHANGED
|
@@ -1,41 +1,62 @@
|
|
| 1 |
# GitHub Copilot 指南(專案層級)
|
| 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
本文件為單人專案的 Copilot 開發指南。撰寫或修改程式碼時,務必遵循 `spec/spec.md` 的規格與不變條件。
|
| 4 |
|
| 5 |
## 關鍵文件
|
| 6 |
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
- **`spec/plan.md`**(短期):本次迭代的範圍、目標、驗收標準。臨時討論檔,每個 sprint 更新後可拋棄。
|
| 9 |
- **`change-log.md`**:記錄完成的變更摘要(高層描述,非逐行對應)。用於交付追蹤。
|
| 10 |
|
| 11 |
## 核心守則(3 點)
|
| 12 |
|
| 13 |
### 1. **規格優先** — 合約 + 不變條件
|
| 14 |
-
-
|
| 15 |
-
- 若需變更 CSV 結構、模型契約、或 API 形狀,**必須先更新 spec
|
| 16 |
- 當 Copilot 指南與 spec 有衝突時,以 spec 為準。
|
| 17 |
|
| 18 |
### 2. **失敗不中斷** — 降級 + 日誌
|
| 19 |
-
-
|
| 20 |
- 改用預設值、跳過該點、或降級處理,並記錄 WARNING/ERROR log(使用 loguru)。
|
| 21 |
-
- 參考 `spec/
|
| 22 |
|
| 23 |
### 3. **資料清晰** — I/O 契約
|
| 24 |
- 模型輸入/輸出形狀、CSV 必備欄位、檔案格式必須與 spec 保持一致。
|
| 25 |
-
- 若要改動資料結構(如新增 CSV 欄位),先同步更新
|
| 26 |
|
| 27 |
## 程式碼實踐
|
| 28 |
|
| 29 |
-
- 在涉及 spec 約定的邏輯處加入註解,簡述與 spec 的對齊(如 "spec #
|
| 30 |
-
-
|
| 31 |
-
-
|
| 32 |
|
| 33 |
## 提交前檢查
|
| 34 |
|
| 35 |
commit 前確認以下兩點:
|
| 36 |
|
| 37 |
-
1. 是否符合 `
|
| 38 |
-
2. 若變更了 CSV 結構或模型契約,spec
|
| 39 |
|
| 40 |
## 迭代與任務追蹤
|
| 41 |
|
|
@@ -43,36 +64,52 @@ commit 前確認以下兩點:
|
|
| 43 |
- 根據 plan.md 的內容,可在 `spec/task.md` 維護任務拆解(子任務應小而可驗收)。
|
| 44 |
- 迭代完成後,更新 `change-log.md` 記錄變更摘要。
|
| 45 |
- 舊的 `plan.md` 和 `task.md` 可拋棄,下次迭代時重新建立。
|
| 46 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
|
| 48 |
## Copilot Slash Commands(審核檢查點)
|
| 49 |
|
| 50 |
本專案提供以下指令協助「規格審核」與「迭代開發」的清晰分工:
|
| 51 |
|
| 52 |
### `/project.spec`(需求改變時用)
|
| 53 |
-
- **目的**:調整
|
| 54 |
- **流程**:
|
| 55 |
1. 討論新增或調整的規格項(需求、契約、不變條件)。
|
| 56 |
-
2.
|
| 57 |
-
3.
|
| 58 |
-
4.
|
|
|
|
| 59 |
|
| 60 |
### `/project.plan`(迭代開發時用)
|
| 61 |
- **目的**:根據 `spec/plan.md` 拆解本次迭代的任務,指導程式碼實作。
|
| 62 |
- **流程**:
|
| 63 |
-
1. 基於 plan.md
|
| 64 |
-
2.
|
| 65 |
-
3.
|
|
|
|
| 66 |
|
| 67 |
### 標準工作流
|
| 68 |
|
| 69 |
**當需求改變時:**
|
| 70 |
-
1. 執行 `/project.spec` 討論規格調整 +
|
| 71 |
-
2.
|
| 72 |
3. 根據清單建立 `spec/plan.md`(定義本次迭代範圍)。
|
| 73 |
|
| 74 |
**執行迭代時:**
|
| 75 |
-
4. 執行 `/project.plan` 根據 plan.md
|
| 76 |
5. 根據任務清單實作,完成後更新 `change-log.md`。
|
| 77 |
6. 迭代結束,舊的 plan.md 與 task.md 可拋棄。
|
| 78 |
|
|
|
|
| 1 |
# GitHub Copilot 指南(專案層級)
|
| 2 |
|
| 3 |
+
> **⚠️ 抽象化指南** — 本檔案及 `.github` 資料夾中的所有 prompt 相關文件應保持**完全抽象化**,移除所有原專案特定的技術細節與領域知識。
|
| 4 |
+
>
|
| 5 |
+
> 撰寫或修改本文件時:
|
| 6 |
+
> - ✅ 使用通用術語(如「資料欄位」、「輸入項目」、「資料點」)
|
| 7 |
+
> - ✅ 用「資料來源查詢失敗」、「外部服務超時」而非具體服務名稱
|
| 8 |
+
> - ✅ 用「輸入格式」、「資料格式」而非具體檔案或編碼格式
|
| 9 |
+
> - ❌ 不要提及任何特定領域(如地震、金融、醫療等)的詞彙
|
| 10 |
+
> - ❌ 不要參考原專案的具體資料檔案名、業務邏輯或專業術語
|
| 11 |
+
>
|
| 12 |
+
> **目標**:使本指南可直接應用於其他資料處理專案,無需修改具體內容。
|
| 13 |
+
|
| 14 |
本文件為單人專案的 Copilot 開發指南。撰寫或修改程式碼時,務必遵循 `spec/spec.md` 的規格與不變條件。
|
| 15 |
|
| 16 |
## 關鍵文件
|
| 17 |
|
| 18 |
+
### Spec 檔案結構(模塊化)
|
| 19 |
+
|
| 20 |
+
為了保持可讀性與管理 token 預算,規格已拆分為多個專業化文件:
|
| 21 |
+
|
| 22 |
+
- **`spec/00-overview.md`** — 專案概覽、核心目標、模組清單、不變條件速查表(**對話時優先傳讀此文件**)
|
| 23 |
+
- **`spec/01-data-contract.md`** — 資料結構、模型 I/O Shape、檔案格式、冷啟動流程(資料契約相關時查閱)
|
| 24 |
+
- **`spec/02-processing-rules.md`** — 批次策略、輸入項目上限、資料處理參數、資源限制(實作邏輯時查閱)
|
| 25 |
+
- **`spec/03-error-handling.md`** — 錯誤處理策略、日誌原則、常見場景、UI 訊息設計(除錯或新增錯誤處理時查閱)
|
| 26 |
+
- **`spec/04-extensions.md`** — 擴充空間、新資料來源、向後相容策略(功能擴展時查閱)
|
| 27 |
+
|
| 28 |
+
其他重要檔案:
|
| 29 |
- **`spec/plan.md`**(短期):本次迭代的範圍、目標、驗收標準。臨時討論檔,每個 sprint 更新後可拋棄。
|
| 30 |
- **`change-log.md`**:記錄完成的變更摘要(高層描述,非逐行對應)。用於交付追蹤。
|
| 31 |
|
| 32 |
## 核心守則(3 點)
|
| 33 |
|
| 34 |
### 1. **規格優先** — 合約 + 不變條件
|
| 35 |
+
- 新增或變更功能時,先檢查相應的規格文件(通常 `00-overview.md` 或 `01-data-contract.md`)中的不變條件與限制。
|
| 36 |
+
- 若需變更 CSV 結構、模型契約、或 API 形狀,**必須先更新 spec**(`01-data-contract.md` 或 `04-extensions.md`),並說明相容性影響。
|
| 37 |
- 當 Copilot 指南與 spec 有衝突時,以 spec 為準。
|
| 38 |
|
| 39 |
### 2. **失敗不中斷** — 降級 + 日誌
|
| 40 |
+
- 單點錯誤(缺失欄位、資料來源查詢失敗、檔案遺失等)**不應中止全流程**。
|
| 41 |
- 改用預設值、跳過該點、或降級處理,並記錄 WARNING/ERROR log(使用 loguru)。
|
| 42 |
+
- 參考 `spec/03-error-handling.md` 的具體策略與常見場景。
|
| 43 |
|
| 44 |
### 3. **資料清晰** — I/O 契約
|
| 45 |
- 模型輸入/輸出形狀、CSV 必備欄位、檔案格式必須與 spec 保持一致。
|
| 46 |
+
- 若要改動資料結構(如新增 CSV 欄位),先同步更新 `01-data-contract.md`,並在 `04-extensions.md` 記錄相容性計畫。
|
| 47 |
|
| 48 |
## 程式碼實踐
|
| 49 |
|
| 50 |
+
- 在涉及 spec 約定的邏輯處加入註解,簡述與 spec 的對齊(如 "spec #2:輸入項目上限" 或 "參考 02-processing-rules.md"),無需編號標籤。
|
| 51 |
+
- 優先保持向後相容;新增資料來源或輸入項時參考 `spec/04-extensions.md`。
|
| 52 |
+
- 避免將關鍵邏輯(如批次策略、資源查詢)分散於多處;若需重構,提供明確的入口函式或工廠(參考 `04-extensions.md` 工廠模式)。
|
| 53 |
|
| 54 |
## 提交前檢查
|
| 55 |
|
| 56 |
commit 前確認以下兩點:
|
| 57 |
|
| 58 |
+
1. 是否符合 spec 的輸入/輸出 shape 與不變條件(查閱 `01-data-contract.md` 或 `02-processing-rules.md`)?
|
| 59 |
+
2. 若變更了 CSV 結構或模型契約,spec 已同步更新(`01-data-contract.md` + `04-extensions.md`)?
|
| 60 |
|
| 61 |
## 迭代與任務追蹤
|
| 62 |
|
|
|
|
| 64 |
- 根據 plan.md 的內容,可在 `spec/task.md` 維護任務拆解(子任務應小而可驗收)。
|
| 65 |
- 迭代完成後,更新 `change-log.md` 記錄變更摘要。
|
| 66 |
- 舊的 `plan.md` 和 `task.md` 可拋棄,下次迭代時重新建立。
|
| 67 |
+
- **長期的規格變更和決策應同步回對應的 spec 模塊文件**(`00-overview.md` / `01-data-contract.md` / `02-processing-rules.md` / `03-error-handling.md` / `04-extensions.md`),形成累積的設計參考。
|
| 68 |
+
|
| 69 |
+
## 對話時的 Spec 查詢策略
|
| 70 |
+
|
| 71 |
+
**遇到不同類型的問題時,優先查閱對應的 spec 檔案**:
|
| 72 |
+
|
| 73 |
+
| 問題類型 | 查閱檔案 |
|
| 74 |
+
|--------|--------|
|
| 75 |
+
| 「這個欄位是必須的嗎?」「模型輸入是什麼形狀?」 | `01-data-contract.md` |
|
| 76 |
+
| 「怎麼處理缺失的資料?」「最多幾個輸入項?」 | `02-processing-rules.md` |
|
| 77 |
+
| 「資料來源查詢失敗怎麼辦?」「應該記哪種日誌?」 | `03-error-handling.md` |
|
| 78 |
+
| 「怎麼新增新資料來源?」「能不能擴展資料欄位?」 | `04-extensions.md` |
|
| 79 |
+
| 「核心不變條件有哪些?」 | `00-overview.md` |
|
| 80 |
+
|
| 81 |
+
**每次對話前,LLM 應根據用戶需求讀取相應的 spec 模塊**(而非整個 spec.md),節省 token 預算。
|
| 82 |
|
| 83 |
## Copilot Slash Commands(審核檢查點)
|
| 84 |
|
| 85 |
本專案提供以下指令協助「規格審核」與「迭代開發」的清晰分工:
|
| 86 |
|
| 87 |
### `/project.spec`(需求改變時用)
|
| 88 |
+
- **目的**:調整 spec 的大方向、契約或不變條件。與現有程式碼做比較,列出後續工作清單。
|
| 89 |
- **流程**:
|
| 90 |
1. 討論新增或調整的規格項(需求、契約、不變條件)。
|
| 91 |
+
2. 根據需求類型,讀取相應的 spec 模塊(`01-*` / `02-*` / `03-*` / `04-*`)。
|
| 92 |
+
3. LLM 掃描現有程式碼,列出符合、缺漏、或違反的地方。
|
| 93 |
+
4. 產出「需要做的工作清單」。
|
| 94 |
+
5. 確認後更新相應 spec 模塊,根據清單建立 `spec/plan.md` 作為後續執行的輸入。
|
| 95 |
|
| 96 |
### `/project.plan`(迭代開發時用)
|
| 97 |
- **目的**:根據 `spec/plan.md` 拆解本次迭代的任務,指導程式碼實作。
|
| 98 |
- **流程**:
|
| 99 |
+
1. 基於 plan.md 的目標,讀取對應的 spec 模塊(如「新增 CSV 欄位」→ `01-data-contract.md` + `04-extensions.md`)。
|
| 100 |
+
2. 產出編號任務清單與驗收標準。
|
| 101 |
+
3. 逐個實作任務,完成後更新 `change-log.md`。
|
| 102 |
+
4. 下次迭代時,舊 plan.md 可拋棄,根據新需求重新開始。
|
| 103 |
|
| 104 |
### 標準工作流
|
| 105 |
|
| 106 |
**當需求改變時:**
|
| 107 |
+
1. 執行 `/project.spec` 討論規格調整 + 程式碼比較 → 讀取相應 spec 模塊。
|
| 108 |
+
2. 確認工作清單後更新對應的 spec 模塊(`00-*` 到 `04-*` 之一)。
|
| 109 |
3. 根據清單建立 `spec/plan.md`(定義本次迭代範圍)。
|
| 110 |
|
| 111 |
**執行迭代時:**
|
| 112 |
+
4. 執行 `/project.plan` 根據 plan.md 拆解任務 → 讀取對應 spec 模塊。
|
| 113 |
5. 根據任務清單實作,完成後更新 `change-log.md`。
|
| 114 |
6. 迭代結束,舊的 plan.md 與 task.md 可拋棄。
|
| 115 |
|