這個範例要解決的問題
新成員問你:「為什麼我們的認證系統當初選 JWT 而不是 session?」
如果沒有決策紀錄,你只能憑記憶回答,或去 git log 裡考古。OpenSpec 的歸檔變更其實保留了當時的 proposal 與 delta specs——但 v1.13.2 之前,CLI 沒有入口讓你找到它們。
v1.14.0 補上了這個入口。
第一步:翻出歷史決策
openspec list --archived
下列為歷史決策的示意資料,並非 CLI 的實際輸出格式;操作時請使用清單列出的完整歸檔目錄名稱:
Archived changes (12):
add-user-auth 2026-06-15 ✓ archived
migrate-to-jwt 2026-07-02 ✓ archived
add-session-store 2026-05-20 ✓ archived
...
想同時看進行中與已歸檔的:
openspec list --all
第二步:讀出當時的決策
找到 migrate-to-jwt 對應的歸檔目錄後,直接讀取其中的 proposal。以下假設清單列出的目錄是 2026-07-02-migrate-to-jwt,請換成你專案的實際名稱:
cat openspec/changes/archive/2026-07-02-migrate-to-jwt/proposal.md
PowerShell 可用 Get-Content openspec/changes/archive/2026-07-02-migrate-to-jwt/proposal.md。openspec show 在 v1.14.0 只查詢進行中的變更與 specs,不能直接查閱歸檔變更。
歸檔目錄保留變更當時實際建立的 artifacts;依 schema 與工作內容,可能包含 proposal、design 與 delta specs——這就是你的決策紀錄。
第三步:用 view 掌握進行中的工作
openspec view
v1.14.0 的 dashboard 現在顯示每個 active change 的 schema 與 artifact 狀態。以下為狀態關係示意,並非 CLI 的逐字輸出:
add-payment-webhook
├── proposal.md done
├── specs/ done
├── design.md ready
└── tasks.md blocked
dashboard 顯示 `design.md` 是 ready、`tasks.md` 是 blocked。這代表什麼?
💡 想先看個提示?
回顧四種狀態的定義:done / ready / blocked / skipped。
第四步:自動化版本檢查
v1.14.0 新增 openspec version:
openspec version
# npm 全域安裝時的示例:OpenSpec 1.14.0 (npm, global)
openspec version --check --json
JSON 的頂層欄位為 schemaVersion、version、install,加上 --check 時另有 update:
version:目前執行的版本install.location、install.packageManager、install.scope:安裝路徑、套件管理器與安裝範圍;無法辨識的資訊可能為nullupdate.status:available(可更新)、current(目前版本)、disabled(停用檢查)或offline(無法查證)update.latest:查得的版本,無法查得時為nullupdate.command、update.canSelfUpgrade:建議更新指令與能否自行更新
CI 應明確處理 disabled 與 offline,不能把它們當成「版本已是最新」。這個指令查的是 CI 執行環境中的安裝版本,不能直接得知其他成員電腦的版本。
第五步:檢查未知 metadata(v1.14.0 誠實化)
openspec validate --strict
如果出現類似下列的警告(文字為示意):
⚠ Unrecognized key in .openspec.yaml: skip_design
(OpenSpec ignores this; remove it or check the name)
這表示 skip_design 一直以來都被忽略——你以為跳過了 design 階段,其實什麼都沒發生。v1.14.0 讓它變成可見的失敗。
常見誤區
| 誤區 | 事實 |
|---|---|
| 「歸檔的 change 就找不到了」 | list --archived 與 view 都能看到 |
| 「ready 就是已完成」 | ready 是「可以開始」,done 才是完成 |
| 「validate 通過就代表設定生效」 | 未知 metadata 過去被靜默忽略,--strict 才會揪出 |
| 「archive 一定成功」 | v1.14.0 起,spec sync 有阻斷條件時 archive 會停止 |
動手練習
- 跑
openspec list --archived看看你的專案有多少歷史決策 - 挑一個歸檔 change,直接讀取歸檔目錄中的 proposal/design,確認當時的設計理由
- 跑
openspec validate --strict檢查是否有被忽略的 metadata
延伸閱讀
-
教學:
v1140-new-tools-and-archived-changes——v1.14.0 完整功能說明 -
範例 012:
012-ci-findings-report——CI 中的驗證報告