@loviusc/sa-spec 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,779 @@
1
+ # 個人系統分析 AI 工作台 / System Analysis AI Workspace
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@loviusc/sa-spec.svg)](https://www.npmjs.com/package/@loviusc/sa-spec)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ > A lightweight system analysis documentation workspace CLI that turns ideas into verifiable, auditable, and conflict-checked specifications for AI-driven development.
7
+ > 輕量級系統分析文件工作台,用固定流程把需求想法整理成可確認、可歸檔、可檢查的規格文件。
8
+
9
+ <p align="center">
10
+ <b>🌐 Languages:</b>
11
+ <a href="./README.en.md"><b>English</b></a> |
12
+ <a href="./README.zh-TW.md"><b>繁體中文</b></a> |
13
+ <a href="./README.zh-CN.md"><b>简体中文</b></a> |
14
+ <a href="./README.ja.md"><b>日本語</b></a> |
15
+ <a href="./README.ko.md"><b>한국어</b></a>
16
+ </p>
17
+
18
+ ---
19
+
20
+ ### Quick Start (English)
21
+
22
+ ```bash
23
+ # Global installation via npm
24
+ npm install -g @loviusc/sa-spec
25
+
26
+ # Initialize project with English specification rules
27
+ sa-spec init --full --lang en
28
+
29
+ # Create a feature draft branch
30
+ sa-spec new --name cart-checkout --branch
31
+ ```
32
+
33
+ **Core AI Workflow in VS Code:**
34
+ `spec:init (sci)` $\to$ `spec:propose (scp)` $\to$ `spec:analyze (sca)` $\to$ `spec:commit (scc)`
35
+
36
+ 👉 **Read full English documentation: [README.en.md](./README.en.md)**
37
+
38
+ ---
39
+
40
+ `sa-spec` 是一個輕量的系統分析文件工作台,用固定流程把需求想法整理成可確認、可歸檔、可檢查的文件。
41
+
42
+ AI 工作流只使用四個指令,並支援簡寫別名(兩者等價):
43
+
44
+ | 標準指令 | 簡寫 | 說明 |
45
+ |---|---|---|
46
+ | `spec:init` | `sci` | 初始化專案與規則 |
47
+ | `spec:propose` | `scp` | 提出需求並整理摘要 |
48
+ | `spec:analyze` | `sca` | 衝突檢查與規格起草 |
49
+ | `spec:commit` | `scc` | 確認歸檔並建立 Git commit |
50
+
51
+ 每個需求歸檔後固定包含:
52
+
53
+ ```text
54
+ project/
55
+ REQ-001-login/
56
+ srs.md
57
+ uml/
58
+ main.puml
59
+ openapi.yaml
60
+ db-schema.md
61
+ handoff.md
62
+ history.md
63
+ ```
64
+
65
+ ## 設計理念
66
+
67
+ `sa-spec` 的定位不是單純的 AI 文件產生器,而是 AI 開發前的系統分析工作台。
68
+
69
+ 它的核心價值,是在 OpenSpec、Codex、Claude、Gemini 等 AI 開發工具開始實作之前,先把需求、限制、衝突、權限、資料、API、DB 與驗收條件釐清,讓後續開發有明確邊界。
70
+
71
+ 從資深系統分析師的角度看,最重要的是 `spec:analyze` 會強制進行影響評估,特別檢查新需求是否改變既有角色、權限或資料存取規則。這些區域通常是系統迭代中最高風險的地方,一旦被新需求無意間覆寫,可能造成資安漏洞、資料外洩或業務邏輯崩壞。
72
+
73
+ `sa-spec` 透過 `propose -> analyze -> commit` 的狀態機,避免 AI 為了產出完整答案而自行補上未確認的欄位、狀態、流程或商業規則。若發現衝突,AI 必須停止產出文件,只列出衝突與待釐清問題,等使用者確認後才能繼續。
74
+
75
+ 每個需求都固定產出 SRS、UML、OpenAPI、DB Schema、handoff 與 history,讓需求從業務邏輯、流程狀態、系統介面、資料結構到開發交接都有跡可循。`handoff.md` 則作為 OpenSpec 或其他 AI 開發工具的入口文件,讓 AI 先讀已確認的限制與驗收條件,再開始開發。
76
+
77
+ 換句話說:
78
+
79
+ ```text
80
+ sa-spec 先把需求說清楚,OpenSpec 再把需求做出來。
81
+ ```
82
+
83
+ ## 安裝前準備
84
+
85
+ 請先安裝:
86
+
87
+ - Node.js 18 或以上版本。
88
+ - npm。
89
+ - Git。
90
+
91
+ 確認版本:
92
+
93
+ ```bash
94
+ node --version
95
+ npm --version
96
+ git --version
97
+ ```
98
+
99
+ ## macOS 安裝
100
+
101
+ 使用 npm 安裝:
102
+
103
+ ```bash
104
+ npm install -g @loviusc/sa-spec
105
+ ```
106
+
107
+ 使用 Git 下載專案:
108
+
109
+ ```bash
110
+ git clone https://github.com/lovius215/ai_spec.git
111
+ cd ai_spec
112
+ npm install
113
+ npm link
114
+ ```
115
+
116
+ 確認 CLI 可用:
117
+
118
+ ```bash
119
+ sa-spec help
120
+ ```
121
+
122
+ 若 `sa-spec` 找不到,請確認 npm global 路徑是否在 `PATH`:
123
+
124
+ ```bash
125
+ npm prefix -g
126
+ ```
127
+
128
+ macOS 常見執行檔路徑會是該目錄底下的 `bin` 資料夾。
129
+
130
+ ## Linux 安裝
131
+
132
+ 使用 npm 安裝:
133
+
134
+ ```bash
135
+ npm install -g @loviusc/sa-spec
136
+ ```
137
+
138
+ 使用 Git 下載專案:
139
+
140
+ ```bash
141
+ git clone https://github.com/lovius215/ai_spec.git
142
+ cd ai_spec
143
+ npm install
144
+ npm link
145
+ ```
146
+
147
+ 確認 CLI 可用:
148
+
149
+ ```bash
150
+ sa-spec help
151
+ ```
152
+
153
+ 若遇到權限問題,建議調整 npm global prefix,不建議直接使用 `sudo npm link`:
154
+
155
+ ```bash
156
+ mkdir -p ~/.npm-global
157
+ npm config set prefix ~/.npm-global
158
+ ```
159
+
160
+ 再把以下內容加入 shell 設定檔,例如 `~/.bashrc` 或 `~/.zshrc`:
161
+
162
+ ```bash
163
+ export PATH="$HOME/.npm-global/bin:$PATH"
164
+ ```
165
+
166
+ 重新載入 shell 後再執行:
167
+
168
+ ```bash
169
+ npm link
170
+ sa-spec help
171
+ ```
172
+
173
+ ## Windows 安裝
174
+
175
+ 請使用 PowerShell。
176
+
177
+ 使用 Git 下載專案:
178
+
179
+ ```powershell
180
+ npm install -g @loviusc/sa-spec
181
+ ```
182
+
183
+ 或使用 Git 下載專案:
184
+
185
+ ```powershell
186
+ git clone https://github.com/lovius215/ai_spec.git
187
+ cd ai_spec
188
+ npm install
189
+ npm link
190
+ ```
191
+
192
+ 確認 CLI 可用:
193
+
194
+ ```powershell
195
+ sa-spec help
196
+ ```
197
+
198
+ 若 PowerShell 找不到 `sa-spec`,請確認 npm global 路徑是否在 `Path` 環境變數:
199
+
200
+ ```powershell
201
+ npm prefix -g
202
+ ```
203
+
204
+ 常見路徑類似:
205
+
206
+ ```text
207
+ C:\Users\你的使用者名稱\AppData\Roaming\npm
208
+ ```
209
+
210
+ 把該路徑加入 Windows 的使用者環境變數 `Path` 後,重新開啟 PowerShell,再執行:
211
+
212
+ ```powershell
213
+ sa-spec help
214
+ ```
215
+
216
+ ## 專案初始化
217
+
218
+ 在你要管理需求文件的資料夾執行:
219
+
220
+ ```bash
221
+ sa-spec init
222
+ ```
223
+
224
+ 這會建立最小文件骨架:
225
+
226
+ ```text
227
+ AGENTS.md
228
+ readme.md
229
+ skills/
230
+ system-analysis/
231
+ SKILL.md
232
+ project/
233
+ index.md
234
+ system-spec.md
235
+ ```
236
+
237
+ 若想同時建立完整規則文件:
238
+
239
+ ```bash
240
+ sa-spec init --full
241
+ ```
242
+
243
+ `spec:init` 規則會檢查 Git 狀態;若目前資料夾還不是 Git repository,會自動執行 `git init`。
244
+
245
+ ### `init` 與 `init --full` 差異
246
+
247
+ | 指令 | 會建立什麼 | 適合情境 |
248
+ |---|---|---|
249
+ | `sa-spec init` | 最小文件骨架:`AGENTS.md`、`readme.md`、`skills/system-analysis/SKILL.md`、`project/index.md`、`project/system-spec.md`。 | 想快速開始整理需求,先保持規則簡單。 |
250
+ | `sa-spec init --full` | 最小文件骨架,加上 `rules/` 內的 SRS、審核、UML、DB Table、估算、檔案格式等補充規則。 | 想讓 AI 產出的文件格式更一致,或團隊需要比較完整的檢查依據。 |
251
+
252
+ `rules/` 是補充規則,不是強制流程。即使使用 `sa-spec init --full` 建立完整規則,用戶也可以先不使用或之後自行刪除 `rules/`;基本流程仍會依 `AGENTS.md` 與 `skills/system-analysis/SKILL.md` 運作。
253
+
254
+ 簡單範例:
255
+
256
+ ```bash
257
+ mkdir my-spec
258
+ cd my-spec
259
+ sa-spec init
260
+ sa-spec check
261
+ ```
262
+
263
+ 若後來發現需要更完整的審核與文件規則,可以在同一個資料夾補上:
264
+
265
+ ```bash
266
+ sa-spec init --full
267
+ ```
268
+
269
+ 既有檔案不會被覆蓋;已存在的檔案會顯示為 `SKIPPED`,缺少的規則檔才會被建立。
270
+
271
+ ## CLI 指令
272
+
273
+ | 指令 | 用途 |
274
+ |---|---|
275
+ | `sa-spec init [--full] [--lang zh-TW|en|zh-CN|ja|ko]` | 建立文件骨架與規則文件(支援 5 種語言,預設 `zh-TW`)。 |
276
+ | `sa-spec new [--id REQ-001] --name login [--branch]` | 建立需求資料夾與空白文件模板(未帶 `--id` 時啟用多人草稿模式,可選 `--branch` 自動建立並切換至 `feat/<name>` 分支)。 |
277
+ | `sa-spec finalize --name login` | 將草稿需求定號歸檔為最新序號(自動計算最新號碼、重命名目錄、批次置換 `{{REQ_ID}}` 並重建索引)。 |
278
+ | `sa-spec reindex` | 掃描 `project/REQ-*` 目錄,依序號重新生成乾淨無衝突的 `project/index.md`。 |
279
+ | `sa-spec check` | 檢查基本文件是否存在。 |
280
+ | `sa-spec status` | 顯示系統規格與需求索引狀態。 |
281
+ | `sa-spec doctor` | 檢查必要檔案是否存在。 |
282
+ | `sa-spec upgrade [--dry-run]` | 將既有專案升級為最新版本:同步最新 AGENTS 與規則文件,並將既有需求中的 `uml.puml` 自動遷移為 `uml/main.puml`。 |
283
+
284
+ `sa-spec new` 是快速建空白模板的輔助工具。正式需求流程仍建議使用 `spec:init`、`spec:propose`、`spec:analyze`、`spec:commit`。
285
+
286
+ ## CLI 與 VS Code 用法
287
+
288
+ `sa-spec ...` 是 CLI 指令,要在終端機執行,例如 macOS/Linux 的 Terminal、Windows 的 PowerShell,或 VS Code 內建 Terminal。
289
+
290
+ `spec:...` 是 AI 工作流程指令,要輸入在 VS Code 的 AI 對話側邊欄,例如 Codex、Claude Code、Gemini CLI,或其他已載入本專案規則的 AI 對話工具。
291
+
292
+ ### 建議安裝的 VS Code 套件
293
+
294
+ 至少需要安裝一個能和專案檔案協作的 AI 對話套件。不同使用者可以依自己的帳號與模型選擇其中一種:
295
+
296
+ | 類型 | 套件或工具 | 是否必要 | 用途 |
297
+ |---|---|---|---|
298
+ | AI 對話 | OpenAI Codex / ChatGPT 類型的 VS Code AI 套件 | 擇一 | 在側邊欄輸入 `spec:init`、`spec:propose`、`spec:analyze`、`spec:commit`。 |
299
+ | AI 對話 | Claude Code 類型的 VS Code AI 套件或 CLI 整合 | 擇一 | 用 Claude 讀取工作區規則並協作產出需求文件。 |
300
+ | AI 對話 | Gemini 類型的 VS Code AI 套件或 CLI 整合 | 擇一 | 用 Gemini 讀取工作區規則並協作產出需求文件。 |
301
+ | Markdown | Markdown 預覽或 Markdown All in One 類型套件 | 選用 | 預覽 `srs.md`、`history.md`、`system-spec.md`。 |
302
+ | UML | PlantUML 類型套件 | 選用 | 預覽需求內的 `uml/*.puml`。 |
303
+ | YAML | YAML 類型套件 | 選用 | 編輯與檢查 `openapi.yaml`。 |
304
+ | Git | GitLens 類型套件 | 選用 | 查看需求文件修改歷程。 |
305
+
306
+ 最小可用組合:
307
+
308
+ ```text
309
+ VS Code
310
+ + 一個 AI 對話套件
311
+ + VS Code 內建 Terminal
312
+ + Git
313
+ + sa-spec CLI
314
+ ```
315
+
316
+ Markdown、PlantUML、YAML、GitLens 這類套件可以提升閱讀與檢查體驗,但不是執行 `sa-spec` 或 `spec:*` 流程的必要條件。
317
+
318
+ | 類型 | 指令範例 | 使用位置 | 用途 |
319
+ |---|---|---|---|
320
+ | CLI | `sa-spec init --full` | 終端機或 VS Code Terminal | 建立文件骨架與規則檔。 |
321
+ | CLI | `sa-spec check` | 終端機或 VS Code Terminal | 檢查必要文件是否存在。 |
322
+ | CLI | `sa-spec status` | 終端機或 VS Code Terminal | 查看系統規格與需求索引狀態。 |
323
+ | AI 工作流程 | `spec:init` / `sci` | VS Code AI 對話側邊欄 | 載入規則並確認工作區狀態。 |
324
+ | AI 工作流程 | `spec:propose` / `scp` | VS Code AI 對話側邊欄 | 整理使用者提出的需求。 |
325
+ | AI 工作流程 | `spec:analyze` / `sca` | VS Code AI 對話側邊欄 | 檢查衝突並產出待確認草稿。 |
326
+ | AI 工作流程 | `spec:commit` / `scc` | VS Code AI 對話側邊欄 | 歸檔已確認版本並建立本機 Git commit。 |
327
+
328
+ 建議操作順序:
329
+
330
+ ```bash
331
+ mkdir my-spec
332
+ cd my-spec
333
+ sa-spec init --full
334
+ code .
335
+ ```
336
+
337
+ 接著在 VS Code 的 AI 對話側邊欄輸入:
338
+
339
+ ```text
340
+ spec:init # 或簡寫 sci
341
+ spec:propose # 或簡寫 scp
342
+ spec:analyze # 或簡寫 sca
343
+ spec:commit # 或簡寫 scc
344
+ ```
345
+
346
+ 如果你有安裝 prompts 或 slash commands,可以用對應的快捷指令;沒有安裝也可以直接手動輸入上面的文字指令。
347
+
348
+ ## AI 工作流程
349
+
350
+ | 指令 | 簡寫 | 用途 |
351
+ |---|---|---|
352
+ | `spec:init` | `sci` | 初始化並載入 `AGENTS.md`、`skills/system-analysis/SKILL.md` 與必要規則。 |
353
+ | `spec:propose` | `scp` | 使用者提出需求後,整理需求摘要、目標、初步流程與待確認事項。 |
354
+ | `spec:analyze` | `sca` | 檢查是否與既有需求衝突;無衝突才產出 SRS、UML、OpenAPI、DB Schema 草稿。 |
355
+ | `spec:commit` | `scc` | 使用者確認無衝突版本後,將版本歸檔到 `project/`,並建立本機 Git commit。 |
356
+
357
+ 狀態機:
358
+
359
+ ```text
360
+ init (sci) -> propose (scp) -> analyze (sca)
361
+
362
+ analyze 無衝突 -> 產出待確認版本 -> commit (scc)
363
+ analyze 有衝突 -> 釐清問題 -> analyze (sca)
364
+
365
+ commit (scc) -> 歸檔 -> 本機 Git commit
366
+ ```
367
+
368
+ `spec:analyze` 若發現衝突,只會列出衝突與待釐清問題,不會修改任何需求文件,也不會產出最終文件。釐清後應再次執行 `spec:analyze`,重新檢查並產出草稿。
369
+
370
+ `handoff.md` 是給 OpenSpec 或其他 AI 開發工具的開發交接摘要。它會從已確認的 SRS、UML、OpenAPI、DB Schema 與限制整理出「要開發什麼」、「不要開發什麼」、「已確認規則」、「API 契約」、「DB 變更」、「驗收條件」與「開發限制」。它只能整理已確認內容,不得新增未確認的開發假設。
371
+
372
+ 交給 OpenSpec 或其他 AI 開發工具時,應指定它先閱讀 `handoff.md`,並以 `handoff.md` 作為開發入口與限制摘要;其他規格文件作為詳細來源。可使用以下提示:
373
+
374
+ ```text
375
+ 請先閱讀 project/REQ-001-pomodoro-timer/handoff.md。
376
+ 以 handoff.md 作為本次開發入口與限制摘要。
377
+ 如需完整需求細節,再查閱同資料夾內的 srs.md、uml/、openapi.yaml、db-schema.md 與 history.md。
378
+ 不得自行新增 handoff.md 未確認的角色、權限、流程、狀態、API 或 DB 欄位。
379
+ 若發現 handoff.md 與既有程式或規格衝突,請停止開發並回報。
380
+ ```
381
+
382
+ `spec:commit` 完成歸檔後會自動建立本機 Git commit。commit message 會以需求編號與需求名稱為主,並加上簡短需求說明:
383
+
384
+ ```text
385
+ docs(REQ-001): 番茄時鐘 - 新增專注與休息計時需求
386
+ ```
387
+
388
+ 只有在使用者明確要求推送 remote,或專案設定啟用 auto-push 時,才會執行 `git push`。如果 push 失敗,只回報認證或網路問題,不會回滾已完成的文件歸檔與本機 commit。
389
+
390
+ ## 多人協作解決方案(Git-Flow 與延遲綁定 ID)
391
+
392
+ 在單人開發時,循序流水號(`REQ-001`、`REQ-002`)簡單直覺;但在多人平行協作時,容易引發兩大痛點:
393
+ 1. **序號競爭撞車**:Alice 與 Bob 同時在各自的分支開發,雙方本機都取了 `REQ-003`,合併回主幹時發生目錄重名衝突。
394
+ 2. **中心化檔案衝突**:每次歸檔都要修改 `project/index.md`,導致頻繁的 Git merge conflict。
395
+
396
+ `sa-spec v0.2.0` 引進 **「Feature Branch 隔離 + 延遲綁定序號(Late-Binding ID)」** 完整解決方案:
397
+
398
+ ```mermaid
399
+ flowchart TD
400
+ A["開新需求: scp 或 sa-spec new --branch"] --> B["建立並切換至 feat/cart 分支<br/>以 project/cart/ 建立草稿目錄"]
401
+ B --> C["AI 分析與起草: sca<br/>內部使用 {{REQ_ID}} 佔位<br/>自動同步 master 規格防護"]
402
+ C --> D{"使用者確認通過<br/>執行 scc 或 finalize"}
403
+ D --> E["自動查詢主分支最新序號 N"]
404
+ E --> F["自動定號為 project/REQ-N+1-cart/<br/>批次置換 {{REQ_ID}} 並建立 commit"]
405
+ F --> G["自動合併至 master 主分支<br/>動態重新生成 project/index.md"]
406
+ G --> H["完成閉環:零衝突、序號永遠連續!"]
407
+ ```
408
+
409
+ ### 多人協作四步流程
410
+
411
+ #### 1. 提出需求(草稿與分支隔離)
412
+ 開需求時**不搶序號**,直接以語意名稱建立分支與草稿目錄。支援兩種方式:
413
+
414
+ * **方式 A(純 AI 自動化,最推薦)**:在 AI 側邊欄直接輸入:
415
+ ```text
416
+ scp 購物車結帳需求
417
+ ```
418
+ AI 收到後,會**自動在背景執行 `git checkout -b feat/cart-checkout` 建立並切換分支**,並在 `project/cart-checkout/` 建立草稿目錄!
419
+ * **方式 B(CLI 終端指令)**:
420
+ ```bash
421
+ sa-spec new --name cart-checkout --branch
422
+ ```
423
+ * **特點**:目錄名稱為 `project/cart-checkout/`,內部所有檔案皆使用 `{{REQ_ID}}` 佔位符。多人同時提出需求互不干擾、零衝突。即使需求中途放棄,直接刪除分支即可,絕不留下幽靈跳號。
424
+
425
+ #### 2. 分析與衝突檢查(規格基線同步)
426
+ 在分支上執行 `spec:analyze`(或 `sca`)前,工具會確認已取得 `master`(或 `origin/master`)的最新規格,確保是以全專案最新基準進行影響評估,避免因分支落後而漏檢權限、API 或資料表衝突。
427
+
428
+ #### 3. 確認歸檔與延遲定號(自動領號 + 自動合併回主分支)
429
+ 當需求規格經使用者確認無誤,準備歸檔時:
430
+
431
+ * **方式 A(純 AI 自動化,最推薦)**:在 AI 側邊欄直接輸入:
432
+ ```text
433
+ scc
434
+ ```
435
+ AI 收到後會自動完成全自動 Git-Flow 閉環作業:
436
+ 1. **自動向主分支查詢並取得新號**:查詢 master/main 目前最大序號(例如最大是 `REQ-005`,自動領取最新號 `REQ-006`),避免號碼競爭。
437
+ 2. **自動定名更名**:使用 `git mv` 將目錄重命名為 `project/REQ-006-cart-checkout`,並將目錄內所有檔案的 `{{REQ_ID}}` 批次置換為 `REQ-006`。
438
+ 3. **自動建立本機提交**:在 feature 分支自動建立 commit `docs(REQ-006): cart-checkout - 規格確認歸檔`。
439
+ 4. **自動合併至主分支**:自動切換至主分支(`git checkout master`),將 feature 分支自動合併回主分支(`git merge feat/cart-checkout`),並重新生成主分支的 `project/index.md`,保證主分支規格最新且永遠不衝突!
440
+ * **方式 B(CLI 終端指令)**:
441
+ ```bash
442
+ sa-spec finalize --name cart-checkout
443
+ ```
444
+ CLI 同樣會自動查詢主分支最新序號定號、置換佔位符、完成提交並自動合併回 master!若想保留在當前分支手動處理,可加上 `--no-merge` 參數。
445
+
446
+ #### 4. 消除索引合併衝突(`sa-spec reindex`)
447
+ `project/index.md` 改為由目錄動態生成的「衍生清單」,不再依賴脆弱的手動 append:
448
+
449
+ ```bash
450
+ sa-spec reindex
451
+ ```
452
+ * 任何時候若有 PR 合併產生 index 衝突,只要執行 `sa-spec reindex`,即可依序號重新排序生成乾淨的總表,無需人工手動解 conflict。
453
+
454
+ ## 語言與國際化支援(i18n)
455
+
456
+ `sa-spec` 支援 5 種主要語言的系統分析規格產出與規範手冊:
457
+
458
+ | 語系代碼 | 語言名稱 | 內文與風格規範 | 專有名詞處理準則 |
459
+ |---|---|---|---|
460
+ | `zh-TW` | **繁體中文**(預設) | 台灣技術常用語(如:伺服器、支援、專案) | 強制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
461
+ | `en` | **English** | 100% 標準技術英文,不可出現中/日/韓文字符 | 原生技術英文 |
462
+ | `zh-CN` | **简体中文** | 大陸技術常用語(如:服务器、支持、项目) | 強制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
463
+ | `ja` | **日本語** | 日語技術文體(です/ます 或 である),外來詞尊重 Katakana 慣例 | 強制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
464
+ | `ko` | **한국어** | 韓語專業技術文體與規範敬語 | 強制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
465
+
466
+ ### 語言管理核心原則
467
+
468
+ 1. **初始化強制鎖定(Init-Time Lock)**:
469
+ * 語言由初始化階段決定,不可模稜兩可。
470
+ * **CLI 指令**:可直接指定語系參數,例如 `sa-spec init --lang en`。
471
+ * **AI 工作流**:在對話中輸入 `spec:init`(或 `sci`)時,若未指定語言,**AI 必須主動列出 5 種語言選單詢問使用者**,選定後寫入 `project/system-spec.md` 作為全專案唯一的真理之源(Single Source of Truth)。
472
+ 2. **全專案語言單一純粹(Single-Language Purity)**:
473
+ * 選定語言後,全專案的所有產出(`srs.md`、`openapi.yaml`、`db-schema.md`、`handoff.md`、`history.md` 與 `rules/`)必須 100% 統一使用該語言,禁止在同一專案內出現語言混雜。
474
+ 3. **專有名詞保留原生英文(Technical Terms Exception)**:
475
+ * 在非英語系模式(繁中、簡中、日文、韓文)下,業界公認標準之技術術語、協定、資料格式與元件名稱(例如:`REST API`、`Webhook`、`JWT`、`OAuth 2.0`、`Payload`、`Idempotency Key`、`Redis`、`UUID` 等),**一律強制維持原生英文**,嚴禁生硬直譯。
476
+ 4. **升級保護(Upgrade Inheritance)**:
477
+ * 執行 `sa-spec upgrade` 時,系統會**自動偵測並繼承現有專案語言**(讀取 `project/system-spec.md`),不會詢問或變更既有專案語言,確保升級零干擾。
478
+
479
+ ## 完整範例:番茄時鐘
480
+
481
+ 以下示範從空資料夾開始,建立一個「番茄時鐘」需求。
482
+
483
+ ### 1. 建立工作資料夾
484
+
485
+ ```bash
486
+ mkdir pomodoro-spec
487
+ cd pomodoro-spec
488
+ sa-spec init --full
489
+ ```
490
+
491
+ 確認狀態:
492
+
493
+ ```bash
494
+ sa-spec check
495
+ sa-spec status
496
+ ```
497
+
498
+ 預期會看到 `AGENTS.md`、`skills/system-analysis/SKILL.md`、`project/index.md`、`project/system-spec.md` 都存在。
499
+
500
+ ### 2. 啟動 AI 流程
501
+
502
+ 在支援此專案規則的 AI 對話中輸入:
503
+
504
+ ```text
505
+ spec:init
506
+ ```
507
+
508
+ AI 會讀取規則、確認 `project/` 結構,並回報 Git 狀態。
509
+
510
+ ### 3. 提出需求
511
+
512
+ 輸入:
513
+
514
+ ```text
515
+ spec:propose
516
+
517
+ 我想做一個番茄時鐘,使用者可以設定專注 25 分鐘、休息 5 分鐘。
518
+ 可以開始、暫停、繼續、重設計時。
519
+ 時間結束時要通知使用者。
520
+ 先不用登入,也不用同步到雲端。
521
+ ```
522
+
523
+ AI 應先整理,而不是直接歸檔:
524
+
525
+ ```text
526
+ 需求摘要:
527
+ - 建立番茄時鐘功能,支援專注與休息計時。
528
+
529
+ 目標:
530
+ - 讓使用者可以用固定週期管理工作與休息時間。
531
+
532
+ 初步流程:
533
+ 1. 使用者設定專注時間與休息時間。
534
+ 2. 使用者開始專注計時。
535
+ 3. 使用者可暫停、繼續或重設。
536
+ 4. 專注時間結束後,系統通知使用者並進入休息計時。
537
+ 5. 休息時間結束後,系統通知使用者。
538
+
539
+ 待確認事項:
540
+ 1. 時間結束通知要用瀏覽器通知、音效,還是畫面提示?
541
+ 2. 是否需要記錄完成幾輪番茄鐘?
542
+ 3. 設定時間是否需要保存到下次開啟?
543
+ ```
544
+
545
+ 使用者補充確認:
546
+
547
+ ```text
548
+ 1. 通知先用畫面提示和音效。
549
+ 2. 需要記錄本次開啟頁面後完成幾輪,不需要永久保存。
550
+ 3. 設定時間只保留在本次頁面,不需要資料庫。
551
+ ```
552
+
553
+ ### 4. 分析與起草
554
+
555
+ 輸入:
556
+
557
+ ```text
558
+ spec:analyze
559
+ ```
560
+
561
+ AI 必須先檢查 `project/` 內所有既有需求,包括:
562
+
563
+ - 是否與既有需求目標或流程重疊。
564
+ - 是否改變既有角色、權限或資料存取規則。
565
+ - 是否影響既有 API。
566
+ - 是否影響既有 DB Table。
567
+ - 是否與既有驗收條件矛盾。
568
+
569
+ 若沒有衝突,AI 會產出待確認草稿,包含:
570
+
571
+ ```text
572
+ 需求編號:REQ-001
573
+ 需求名稱:番茄時鐘
574
+ 狀態:待確認
575
+
576
+ SRS 草稿:
577
+ - 需求摘要
578
+ - 業務目標
579
+ - 使用者與角色
580
+ - 前置條件
581
+ - 主要流程
582
+ - 例外流程
583
+ - 功能需求
584
+ - 非功能需求
585
+ - 驗收條件
586
+ - 待確認事項
587
+
588
+ UML 草稿:
589
+ - 依需求選擇活動圖或狀態圖。
590
+
591
+ OpenAPI 草稿:
592
+ - 若本需求不需要後端 API,需明確標示「無 API 需求」。
593
+
594
+ DB Schema 草稿:
595
+ - 若本需求不需要資料庫,需明確標示「無 DB 需求」。
596
+
597
+ Handoff 交接摘要草稿:
598
+ - 整理給 OpenSpec 或 AI 開發工具使用的開發交接摘要。
599
+ - 明確列出要開發什麼、不要開發什麼、已確認規則、API 契約、DB 變更、驗收條件與開發限制。
600
+
601
+ project/system-spec.md 更新建議:
602
+ - 建議新增番茄時鐘模組摘要。
603
+
604
+ 本次未修改其他需求。
605
+ ```
606
+
607
+ 番茄時鐘的 UML 可能選擇狀態圖,因為此需求重點是計時器狀態:
608
+
609
+ ```plantuml
610
+ @startuml
611
+ title REQ-001 番茄時鐘狀態圖
612
+
613
+ [*] --> 閒置
614
+ 閒置 --> 專注計時中 : 開始
615
+ 專注計時中 --> 暫停 : 暫停
616
+ 暫停 --> 專注計時中 : 繼續
617
+ 專注計時中 --> 休息計時中 : 專注時間結束
618
+ 休息計時中 --> 閒置 : 休息時間結束
619
+ 專注計時中 --> 閒置 : 重設
620
+ 休息計時中 --> 閒置 : 重設
621
+ 暫停 --> 閒置 : 重設
622
+
623
+ @enduml
624
+ ```
625
+
626
+ ### 5. 使用者確認
627
+
628
+ 若草稿內容正確,輸入:
629
+
630
+ ```text
631
+ 我確認這版番茄時鐘需求,可以歸檔。
632
+ ```
633
+
634
+ 接著輸入:
635
+
636
+ ```text
637
+ spec:commit
638
+ ```
639
+
640
+ AI 才能把已確認版本寫入需求資料夾、更新索引與歷程,並建立本機 Git commit。
641
+
642
+ ### 6. 歸檔後結構
643
+
644
+ 完成後預期會有:
645
+
646
+ ```text
647
+ project/
648
+ index.md
649
+ system-spec.md
650
+ REQ-001-pomodoro-timer/
651
+ srs.md
652
+ uml/
653
+ state.puml
654
+ openapi.yaml
655
+ db-schema.md
656
+ handoff.md
657
+ history.md
658
+ ```
659
+
660
+ `handoff.md` 會整理給 OpenSpec 或 AI 開發工具使用的交接內容,例如:
661
+
662
+ ```text
663
+ 要開發什麼:番茄時鐘前端計時功能。
664
+ 不要開發什麼:登入、雲端同步、永久資料保存。
665
+ API 契約:無 API 需求。
666
+ DB 變更:無 DB 需求。
667
+ 開發限制:不得自行新增未確認的角色、狀態、API 或 DB 欄位。
668
+ ```
669
+
670
+ 交給 OpenSpec 開發時,可以直接指定:
671
+
672
+ ```text
673
+ 請先閱讀 project/REQ-001-pomodoro-timer/handoff.md,並以 handoff.md 作為本次開發入口與限制摘要。
674
+ ```
675
+
676
+ `project/index.md` 會新增一列:
677
+
678
+ ```text
679
+ | REQ-001 | 番茄時鐘 | 使用者可進行專注與休息計時 | 待確認或已審核 | 建立時間 | 更新時間 |
680
+ ```
681
+
682
+ `history.md` 會記錄本次歸檔,例如:
683
+
684
+ ```text
685
+ | 時間 | 版本 | 類型 | 說明 | 來源 | 影響範圍 | 風險 | 狀態 |
686
+ |---|---|---|---|---|---|---|---|
687
+ | 2026-05-29 21:30 | v0.1 | 新增 | 建立番茄時鐘需求草稿 | 使用者確認 | SRS、UML、OpenAPI、DB Schema、Handoff | 低 | 待確認 |
688
+ ```
689
+
690
+ ### 7. Git commit 與 remote push
691
+
692
+ `spec:commit` 完成後,AI 會自動建立本機 Git commit,例如:
693
+
694
+ ```text
695
+ docs(REQ-001): 番茄時鐘 - 新增專注與休息計時需求
696
+ ```
697
+
698
+ 可以用以下指令確認:
699
+
700
+ ```bash
701
+ git status
702
+ git log -1 --oneline
703
+ ```
704
+
705
+ 若要推送到 remote,需要明確要求 AI 執行 push,或自行執行:
706
+
707
+ ```bash
708
+ git push origin main
709
+ ```
710
+
711
+ 若分支是 `master`:
712
+
713
+ ```bash
714
+ git push origin master
715
+ ```
716
+
717
+ ## 注意事項
718
+
719
+ - 未經使用者確認,不得標示為 `已審核`。
720
+ - `spec:analyze` 發現衝突時不得產出最終文件,也不得修改既有需求文件。
721
+ - `project/system-spec.md` 只能在 `spec:commit` 依使用者確認內容更新。
722
+ - `spec:commit` 會自動建立本機 Git commit;remote push 需使用者明確要求或啟用 auto-push。
723
+ - 一次最多問 3 個待確認問題,優先詢問會影響範圍、資料、權限、API、DB 或驗收的問題。
724
+
725
+ ## 更新紀錄
726
+
727
+ ### v0.2.3
728
+ - **自動領號與自動合併至主分支(Git-Flow 自動化閉環)**:
729
+ - **自動從主分支取新號**:執行 `spec:commit`(`scc`)或 `sa-spec finalize` 時,自動向主分支(`master`/`main`)查詢最新已使用最大序號並定號(`REQ-xxx`),自動置換內部佔位符 `{{REQ_ID}}`,徹底防止多人協作時在 feature 分支發生的號碼撞車與落後問題。
730
+ - **自動合併回主分支**:完成 feature 分支 commit 後,自動切換至主分支(`git checkout master`)並將該 feature 分支自動合併回主分支(`git merge feat/<name>`),並在主分支自動重新整理 `project/index.md`,打造完全自動化的 Git-Flow 零衝突閉環。
731
+ - **CLI 自動化支援**:`sa-spec finalize --name <name>` 預設自動執行主分支序號運算、定號置換、提交與合併回主分支(支援 `--no-merge` 參數跳過自動合併)。
732
+
733
+ ### v0.2.2
734
+ - **npm 首頁與專案文件全多語系化(Multi-Language Documentation on npm)**:
735
+ - **5 國獨立完整說明文件**:新增 `README.en.md`(英文)、`README.zh-CN.md`(簡中)、`README.ja.md`(日文)、`README.ko.md`(韓文)與 `README.zh-TW.md`(繁中)。
736
+ - **npm 國際化首頁最佳化**:在主 `readme.md` 頂部加入醒目的 5 語系導覽切換列與英文 Quick Start 區塊,全球開發者造訪 npm 頁面時能秒懂工具用途與使用方式。
737
+ - **npm 發布配置補全**:在 `package.json` 補充 `repository`、`homepage` 與 `bugs` 欄位,確保 npm 頁面上的多語系相對連結能自動正確導向 GitHub。
738
+
739
+ ### v0.2.1
740
+ - **5 國語言與國際化支援(i18n)**:
741
+ - **支援語系**:繁體中文 (`zh-TW`,台灣常用語)、英文 (`en`)、簡體中文 (`zh-CN`)、日文 (`ja`)、韓文 (`ko`)。
742
+ - **初始化強制鎖定**:`sa-spec init [--lang <lang>]` 或在 AI 對話中輸入 `spec:init`,未指定時主動彈出選單詢問使用者選擇,選定後寫入 `system-spec.md`。
743
+ - **專案語言單一純粹**:全專案規格產出 100% 統一該語言。
744
+ - **技術專有名詞保留原生英文**:非英語系模式下強制保留標準英文術語(如 REST API, Webhook, JWT),嚴禁生硬直譯。
745
+ - **升級保護**:`sa-spec upgrade` 自動偵測並繼承現有專案語言,不變更設定。
746
+
747
+ ### v0.2.0
748
+ - **多人協作 Git-Flow 解決方案(延遲綁定序號與零衝突索引)**:
749
+ - **解決痛點**:多人平行開發時,傳統流水號(`REQ-001`)容易在各自分支撞車,且中心化的 `project/index.md` 容易造成 Git merge conflict。
750
+ - **延遲綁定序號(Late-Binding ID)**:開需求時不搶號,在 feature branch 上以語意名稱建立草稿需求(如 `project/cart`),內部使用 `{{REQ_ID}}` 佔位;只有在 `spec:commit` 最終歸檔時,才向 master/遠端確認最新可用序號並定號(如 `REQ-003`),自動批次置換佔位符,徹底避免幽靈跳號與序號競爭。
751
+ - **動態重建需求索引(`sa-spec reindex`)**:將 `project/index.md` 改為根據 `project/REQ-*` 目錄動態掃描並依序號排序生成,消除手動 append 造成的 Git 合併衝突。
752
+ - **CLI 指令升級**:
753
+ - `sa-spec new [--id REQ-001] --name login [--branch]`:支援草稿模式與自動切換 feature 分支。
754
+ - `sa-spec finalize --name login`:自動定號、重命名目錄、置換佔位符並重建索引。
755
+ - `sa-spec reindex`:一鍵掃描並重新排序生成乾淨的 `project/index.md`。
756
+ - **分析前防護**:`spec:analyze` 執行前確保取得 master/遠端最新規格,避免分支規格落後導致漏檢衝突。
757
+
758
+ ### v0.1.3
759
+ - **支援指令簡寫別名(同時保留完整指令)**:
760
+ - `sci` = `spec:init`
761
+ - `scp` = `spec:propose`
762
+ - `sca` = `spec:analyze`
763
+ - `scc` = `spec:commit`
764
+ - 兩者完全等價,使用者可依輸入習慣自由選擇長指令或 3 字母縮寫。
765
+
766
+ ### v0.1.2
767
+ - **新增 `sa-spec upgrade` 版本升級指令**:
768
+ - **工作區規則同步**:自動檢查並更新專案中的 `AGENTS.md`、`skills/system-analysis/SKILL.md` 以及 `rules/` 目錄下的規則文件至最新版本(自動保留既有的 memory context)。
769
+ - **既有需求自動遷移**:掃描 `project/REQ-*` 目錄,將舊版 `uml.puml` 自動重構移動為 `uml/main.puml`,並自動修復 `handoff.md` 中的來源引用路徑。
770
+ - **提供 `--dry-run` 模擬模式**:可加上 `--dry-run` 參數先行預覽哪些檔案會被更新或遷移,而不實際寫入檔案。
771
+
772
+ ### v0.1.1
773
+ - **PlantUML 檔案架構重構(解決多圖渲染與預覽開不起來問題)**:
774
+ - **目錄化結構**:每個需求目錄下由原本單一檔案 `uml.puml` 改為 `uml/` 資料夾(預設提供 `uml/main.puml` 骨架)。
775
+ - **單檔單圖原則**:嚴格規範每個 `.puml` 檔案僅包含單一組 `@startuml` 與 `@enduml`,禁止在單一檔案內混放多張圖。
776
+ - **支援多面向拆分**:需求若涉及多個面向(如業務流程、循序互動、狀態轉換),必須拆分為獨立 `.puml` 檔案(例如 `uml/main.puml`、`uml/sequence.puml`、`uml/state.puml`),確保 PlantUML 預覽外掛能順暢開啟與渲染。
777
+ - **CLI 自動化**:`sa-spec new` 與 `sa-spec template req` 自動建立 `uml/` 資料夾並產出預設的 `uml/main.puml`。
778
+ - **全專案規範同步**:同步更新 `AGENTS.md`、`system-analysis` skill、`rules/uml-style.md`、`rules/file-style.md` 與 `handoff.md`。
779
+