@loviusc/sa-spec 0.2.1 → 0.2.2
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.
- package/README.en.md +155 -0
- package/README.ja.md +143 -0
- package/README.ko.md +143 -0
- package/README.zh-CN.md +143 -0
- package/README.zh-TW.md +767 -0
- package/package.json +13 -3
- package/readme.md +44 -1
- package/templates/readme.md +44 -1
package/README.en.md
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# sa-spec - System Analysis AI Workspace
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@loviusc/sa-spec)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> A lightweight, defensive system analysis documentation workspace that turns ideas into verifiable, auditable, and conflict-checked engineering specifications for AI-driven development.
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<b>🌐 Languages:</b>
|
|
10
|
+
<a href="./README.en.md"><b>English</b></a> |
|
|
11
|
+
<a href="./README.zh-TW.md"><b>繁體中文</b></a> |
|
|
12
|
+
<a href="./README.zh-CN.md"><b>简体中文</b></a> |
|
|
13
|
+
<a href="./README.ja.md"><b>日本語</b></a> |
|
|
14
|
+
<a href="./README.ko.md"><b>한국어</b></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
`sa-spec` is not just a document generator; it is a **pre-development system analysis workspace**.
|
|
22
|
+
|
|
23
|
+
Before code-generation AI tools (OpenSpec, Claude Code, OpenAI Codex, Gemini CLI, Cursor) start implementation, `sa-spec` clarifies scopes, boundaries, data schemas, API contracts, permission matrices, and acceptance criteria to ensure that subsequent coding proceeds within safe, well-defined boundaries.
|
|
24
|
+
|
|
25
|
+
The AI workflow operates on four standard commands (with shorthand aliases):
|
|
26
|
+
|
|
27
|
+
| Command | Alias | Purpose | Description |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `spec:init` | `sci` | Initialize | Sets up `AGENTS.md`, system rules, and prompts for the target language. |
|
|
30
|
+
| `spec:propose` | `scp` | Propose | Summarizes objectives, user stories, workflows, and open items without altering existing requirements. |
|
|
31
|
+
| `spec:analyze` | `sca` | Analyze & Draft | Checks for conflicts against existing requirements, APIs, and DB schemas; drafts SRS, UML, OpenAPI, and DB schema. |
|
|
32
|
+
| `spec:commit` | `scc` | Commit & Archive | Archives the user-verified version, assigns sequential ID, updates indexes, and generates a local Git commit. |
|
|
33
|
+
|
|
34
|
+
Each finalized requirement produces a standardized, self-contained directory:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
project/
|
|
38
|
+
REQ-001-login/
|
|
39
|
+
srs.md # Software Requirements Specification
|
|
40
|
+
uml/
|
|
41
|
+
main.puml # Standalone PlantUML diagrams (single-diagram-per-file)
|
|
42
|
+
openapi.yaml # OpenAPI 3.0 specification draft
|
|
43
|
+
db-schema.md # Database schema and migration draft
|
|
44
|
+
handoff.md # AI developer handoff brief (OpenSpec / Claude Code entry point)
|
|
45
|
+
history.md # Version history and decision audit trail
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Design Philosophy
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
sa-spec defines what to build and its constraints; AI code tools build it right.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
1. **Defensive Impact Assessment**: `spec:analyze` enforces conflict detection. It explicitly checks whether a new requirement mutates existing roles, permissions, API signatures, or database tables, preventing regressions and security flaws.
|
|
57
|
+
2. **Deterministic State Machine**: `propose -> analyze -> commit`. The AI is strictly prohibited from inventing unconfirmed business assumptions or hallucinating table columns. If conflicts are detected, document generation halts until the user clarifies.
|
|
58
|
+
3. **AI Developer Handoff (`handoff.md`)**: Acts as a concise, unambiguous constraint summary for development tools like OpenSpec, Claude Code, or Codex, detailing what to implement, what NOT to touch, and exact acceptance criteria.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Installation
|
|
63
|
+
|
|
64
|
+
### Prerequisites
|
|
65
|
+
- Node.js 18 or above
|
|
66
|
+
- npm
|
|
67
|
+
- Git
|
|
68
|
+
|
|
69
|
+
### Global Installation via npm
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g @loviusc/sa-spec
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Verify installation:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
sa-spec help
|
|
79
|
+
sa-spec --version
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## CLI Commands
|
|
85
|
+
|
|
86
|
+
| Command | Description |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `sa-spec init [--full] [--lang <lang>]` | Scaffolds the workspace skeleton (Supports `zh-TW`, `en`, `zh-CN`, `ja`, `ko`). |
|
|
89
|
+
| `sa-spec new [--id REQ-001] --name login [--branch]` | Creates a requirement folder template. Omitting `--id` starts a draft in a feature branch (`feat/<name>`). |
|
|
90
|
+
| `sa-spec finalize --name login` | Assigns the latest available sequential ID to a draft requirement, renames directory, substitutes `{{REQ_ID}}`, and regenerates index. |
|
|
91
|
+
| `sa-spec reindex` | Scans `project/REQ-*` directories and dynamically rebuilds `project/index.md` sorted by numerical ID. |
|
|
92
|
+
| `sa-spec check` | Validates required project files and system spec status. |
|
|
93
|
+
| `sa-spec status` | Displays overview status of requirements and specs. |
|
|
94
|
+
| `sa-spec doctor` | Diagnostic tool to verify workspace integrity. |
|
|
95
|
+
| `sa-spec upgrade [--dry-run]` | Upgrades project rules, templates, and agent configs to the latest version while preserving existing language. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Multi-User Collaboration & Git-Flow
|
|
100
|
+
|
|
101
|
+
To solve sequential ID collisions and Git merge conflicts in team environments, `sa-spec` introduces **Feature Branch Isolation + Late-Binding ID**:
|
|
102
|
+
|
|
103
|
+
```mermaid
|
|
104
|
+
flowchart TD
|
|
105
|
+
A[New Requirement: sa-spec new --name cart --branch] --> B[Create & switch to feat/cart branch<br/>Draft directory: project/cart/]
|
|
106
|
+
B --> C[AI Analysis: sca<br/>Uses {{REQ_ID}} placeholder<br/>Pre-check against master spec baseline]
|
|
107
|
+
C --> D{User Approved?<br/>Execute scc or finalize}
|
|
108
|
+
D --> E[Query latest sequential ID N from master]
|
|
109
|
+
E --> F[Rename to project/REQ-N+1-cart/<br/>Substitute {{REQ_ID}} with actual ID]
|
|
110
|
+
F --> G[sa-spec reindex: Dynamically rebuild index.md]
|
|
111
|
+
G --> H[Merge into master: Zero conflicts, Continuous IDs!]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
1. **Draft Phase (No ID Contention)**: Run `sa-spec new --name checkout --branch` to create `feat/checkout` and `project/checkout/` using `{{REQ_ID}}`. Parallel branches never collide. If an idea is abandoned, deleting the branch leaves zero ghost IDs.
|
|
115
|
+
2. **Baseline Protection**: `spec:analyze` fetches latest `master` before analyzing to prevent missing newly merged API or table changes.
|
|
116
|
+
3. **Late-Binding Finalize**: Running `sa-spec finalize --name checkout` inspects master's latest ID, renames the folder, replaces placeholders, and updates `index.md`.
|
|
117
|
+
4. **Conflict-Free Reindex**: `sa-spec reindex` builds `project/index.md` on the fly from disk.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Internationalization (i18n)
|
|
122
|
+
|
|
123
|
+
`sa-spec` supports 5 primary languages:
|
|
124
|
+
|
|
125
|
+
| Code | Language | Text & Style Guideline | Technical Terminology Rule |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `en` | **English** | 100% standard technical English | Standard technical English |
|
|
128
|
+
| `zh-TW` | **繁體中文** (Default) | Traditional Chinese (Taiwan terminology) | Retain native English terms (`REST API`, `Webhook`, `JWT`) |
|
|
129
|
+
| `zh-CN` | **简体中文** | Simplified Chinese (Mainland terminology) | Retain native English terms (`REST API`, `Webhook`, `JWT`) |
|
|
130
|
+
| `ja` | **日本語** | Japanese technical prose with Katakana loanwords | Retain native English terms (`REST API`, `Webhook`, `JWT`) |
|
|
131
|
+
| `ko` | **한국어** | Korean technical prose with standard honorifics | Retain native English terms (`REST API`, `Webhook`, `JWT`) |
|
|
132
|
+
|
|
133
|
+
### Core Rules:
|
|
134
|
+
1. **Init-Time Language Lock**: Set via `sa-spec init --lang en` or selected interactively upon `spec:init`.
|
|
135
|
+
2. **Single-Language Purity**: The entire project must strictly adhere to the declared language.
|
|
136
|
+
3. **Technical Terms in Native English**: In non-English modes, standard industry terms (`REST API`, `Webhook`, `JWT`, `OAuth 2.0`, `Payload`, `Idempotency Key`, `Redis`, `UUID`) must remain in native English without awkward literal translations.
|
|
137
|
+
4. **Upgrade Protection**: `sa-spec upgrade` automatically detects and respects existing project language without overwriting.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## AI Developer Handoff
|
|
142
|
+
|
|
143
|
+
Once a requirement is finalized via `scc`, pass `handoff.md` to your development agent:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
Please read project/REQ-001-login/handoff.md first as the primary implementation entry point.
|
|
147
|
+
Refer to srs.md, uml/, openapi.yaml, and db-schema.md in the same directory for detailed contracts.
|
|
148
|
+
Do not invent unconfirmed roles, APIs, or database columns.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
MIT © [lovius](https://github.com/lovius215)
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# sa-spec - システム分析 AI ワークスペース
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@loviusc/sa-spec)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> 要件やアイデアを、確認可能・監査可能・コンフリクト検出可能なエンジニアリング仕様書へと整理する、AI主導開発向けシステム分析(SA)ドキュメント・ワークスペース。
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<b>🌐 言語ナビゲーション (Languages):</b>
|
|
10
|
+
<a href="./README.en.md"><b>English</b></a> |
|
|
11
|
+
<a href="./README.zh-TW.md"><b>繁體中文</b></a> |
|
|
12
|
+
<a href="./README.zh-CN.md"><b>简体中文</b></a> |
|
|
13
|
+
<a href="./README.ja.md"><b>日本語</b></a> |
|
|
14
|
+
<a href="./README.ko.md"><b>한국어</b></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 概要
|
|
20
|
+
|
|
21
|
+
`sa-spec` は単なる AI ドキュメント生成ツールではなく、**AI コーディング前に行う「システム分析(System Analysis)ワークスペース」** です。
|
|
22
|
+
|
|
23
|
+
OpenSpec、Claude Code、OpenAI Codex、Gemini CLI などの AI 開発ツールがコード実装を始める前に、要件のスコープ、境界線、データモデル、API 規約、権限マトリクス、受入条件を事前に明確化し、安全で堅牢な開発境界を定義します。
|
|
24
|
+
|
|
25
|
+
AI ワークフローは 4 つの標準コマンド(エイリアス対応)で動作します:
|
|
26
|
+
|
|
27
|
+
| コマンド | エイリアス | 目的 | 説明 |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `spec:init` | `sci` | 初期化 | `AGENTS.md`、ルールセット、指定言語のプロンプトを読み込みます。 |
|
|
30
|
+
| `spec:propose` | `scp` | 要件提案 | 既存の仕様を変更せず、目的・概要・初期フロー・確認事項を整理します。 |
|
|
31
|
+
| `spec:analyze` | `sca` | 分析と起草 | 既存の要件、API、DB スキーマとの競合をチェックし、問題がなければ SRS、UML、OpenAPI、DB スキーマのドラフトを作成します。 |
|
|
32
|
+
| `spec:commit` | `scc` | 確認と保存 | ユーザーが承認したバージョンを正式に採番・保存し、インデックスを更新して Git コミットを作成します。 |
|
|
33
|
+
|
|
34
|
+
各要件フォルダーには以下の標準成果物が生成されます:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
project/
|
|
38
|
+
REQ-001-login/
|
|
39
|
+
srs.md # ソフトウェア要件仕様書 (SRS)
|
|
40
|
+
uml/
|
|
41
|
+
main.puml # 独立した PlantUML 図(1ファイル1図の原則)
|
|
42
|
+
openapi.yaml # OpenAPI 3.0 ドラフト
|
|
43
|
+
db-schema.md # データベーススキーマ仕様書
|
|
44
|
+
handoff.md # AI 開発ツール向け引き継ぎ要約 (OpenSpec / Claude Code エントリポイント)
|
|
45
|
+
history.md # 変更履歴および意思決定ログ
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 設計思想
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
sa-spec が仕様と境界を明確にし、AI 開発ツールが正しく実装する。
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
1. **防御的な影響評価**: `spec:analyze` は競合チェックを強制します。新しい要件が既存の権限、API シグネチャ、DB テーブルを意図せず上書き・破壊しないかを厳密に検証します。
|
|
57
|
+
2. **決定論的ステートマシン**: `propose -> analyze -> commit` の流れを遵守します。AI が未確認の業務ルールやテーブルカラムを勝手に捏造することを防ぎます。競合が発見された場合は生成を停止し、人間の指示を仰ぎます。
|
|
58
|
+
3. **AI 開発引き継ぎサマリー (`handoff.md`)**: 実装すべき内容、触れてはならない境界、API 契約、受入条件を凝縮し、後続の AI 開発ツールに安全なガイドラインを提供します。
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## インストールと利用準備
|
|
63
|
+
|
|
64
|
+
### 前提環境
|
|
65
|
+
- Node.js 18 以上
|
|
66
|
+
- npm
|
|
67
|
+
- Git
|
|
68
|
+
|
|
69
|
+
### グローバルインストール
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g @loviusc/sa-spec
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
インストールの確認:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
sa-spec help
|
|
79
|
+
sa-spec --version
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## CLI コマンド一覧
|
|
85
|
+
|
|
86
|
+
| コマンド | 説明 |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `sa-spec init [--full] [--lang <lang>]` | ワークスペースの骨格を初期化します(`zh-TW`、`en`、`zh-CN`、`ja`、`ko` に対応)。 |
|
|
89
|
+
| `sa-spec new [--id REQ-001] --name login [--branch]` | 要件テンプレートを作成します。`--id` を省略すると、Git 分岐を活用したドラフトモード(`feat/<name>`)で開始します。 |
|
|
90
|
+
| `sa-spec finalize --name login` | ドラフト要件に最新の連続番号を割り当て、フォルダー名を変更し、`{{REQ_ID}}` を置換してインデックスを再生成します。 |
|
|
91
|
+
| `sa-spec reindex` | `project/REQ-*` ディレクトリをスキャンし、数値順にソートされた `project/index.md` を自動再構築します。 |
|
|
92
|
+
| `sa-spec check` | 必須ファイルとシステム仕様の状態を検証します。 |
|
|
93
|
+
| `sa-spec status` | 要件とシステム仕様の概要ステータスを表示します。 |
|
|
94
|
+
| `sa-spec doctor` | ワークスペースの依存関係と整合性を診断します。 |
|
|
95
|
+
| `sa-spec upgrade [--dry-run]` | 既存の言語設定を保持したまま、ルールとスキルを最新版にアップグレードします。 |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## チーム開発と Git-Flow(遅延採番アーキテクチャ)
|
|
100
|
+
|
|
101
|
+
複数人での並行開発時に発生する「要件番号の競合」や「Git マージコンフリクト」を防ぐため、**Feature Branch 隔離 + 遅延バインディング(Late-Binding ID)** を採用しています:
|
|
102
|
+
|
|
103
|
+
```mermaid
|
|
104
|
+
flowchart TD
|
|
105
|
+
A[要件提案: sa-spec new --name cart --branch] --> B[feat/cart ブランチを作成して切替<br/>ドラフトディレクトリ: project/cart/]
|
|
106
|
+
B --> C[AI による分析: sca<br/>内部で {{REQ_ID}} プレースホルダー使用<br/>master の最新仕様との競合予防チェック]
|
|
107
|
+
C --> D{ユーザー承認?<br/>scc または finalize を実行}
|
|
108
|
+
D --> E[master から最新の利用可能番号 N を取得]
|
|
109
|
+
E --> F[project/REQ-N+1-cart/ にリネーム<br/>{{REQ_ID}} を正式番号に一括置換]
|
|
110
|
+
F --> G[sa-spec reindex: index.md を動的に再生成]
|
|
111
|
+
G --> H[master へマージ: 競合ゼロ、連番維持!]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
1. **ドラフト時は番号を奪い合わない**: `sa-spec new --name cart --branch` でブランチを切り、`{{REQ_ID}}` を使って作業します。途中で要件を破棄する場合も、ブランチを削除するだけで済み、欠番(ゴーストID)を残しません。
|
|
115
|
+
2. **基線同期で競合見落としを防止**: `spec:analyze` の実行前に master の最新状態を取得し、他メンバーがマージした最新の API やテーブル変更を反映して競合チェックを行います。
|
|
116
|
+
3. **マージ確定時に正式採番**: `sa-spec finalize` または `scc` で master 上の最新番号を取得してリネームします。
|
|
117
|
+
4. **インデックスのコンフリクト解消**: `sa-spec reindex` でディレクトリから常に決定論的に `project/index.md` を再構築します。
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 国際化(i18n)対応
|
|
122
|
+
|
|
123
|
+
`sa-spec` は 5 つの主要言語を正式にサポートしています:
|
|
124
|
+
|
|
125
|
+
| コード | 言語名 | 文体・表記ガイドライン | 技術用語の取り扱い原則 |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `ja` | **日本語** | 日本語技術文体(です/ます、またはである調) | 業界標準の英語用語を維持(`REST API`, `Webhook`, `JWT`) |
|
|
128
|
+
| `en` | **English** | 100% 標準的な技術英文 | 原文の標準英語 |
|
|
129
|
+
| `zh-TW` | **繁體中文** (既定) | 台湾の標準的な技術用語 | 業界標準の英語用語を維持(`REST API`, `Webhook`, `JWT`) |
|
|
130
|
+
| `zh-CN` | **简体中文** | 中国本土の標準的な技術用語 | 業界標準の英語用語を維持(`REST API`, `Webhook`, `JWT`) |
|
|
131
|
+
| `ko` | **한국어** | 韓国語の専門技術文体と敬語 | 業界標準の英語用語を維持(`REST API`, `Webhook`, `JWT`) |
|
|
132
|
+
|
|
133
|
+
### 重要ルール:
|
|
134
|
+
1. **初期化時の言語確定**: `sa-spec init --lang ja` または `spec:init` 時に対話形式で言語を決定し、`project/system-spec.md` に記録します。
|
|
135
|
+
2. **単一言語の一貫性**: プロジェクト内の全仕様書は選択した言語に統一されます。
|
|
136
|
+
3. **技術専門用語の英語表記維持**: 非英語モードであっても、標準的な技術用語(`REST API`、`Webhook`、`JWT`、`OAuth 2.0`、`Payload`、`Idempotency Key`、`Redis` など)は無理な直訳を避け、**原語の英語表記を強制維持**します。
|
|
137
|
+
4. **アップグレード時の言語保護**: `sa-spec upgrade` は既存プロジェクトの言語を自動検知し、言語設定を勝手に変更しません。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## ライセンス
|
|
142
|
+
|
|
143
|
+
MIT © [lovius](https://github.com/lovius215)
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# sa-spec - 시스템 분석 AI 워크스페이스
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@loviusc/sa-spec)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> 요구사항과 아이디어를 검증 가능하고, 감사 가능하며, 충돌 검사가 완료된 엔지니어링 기술 사양서로 정리하는 AI 기반 개발용 시스템 분석(SA) 문서 워크스페이스입니다.
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<b>🌐 언어 선택 (Languages):</b>
|
|
10
|
+
<a href="./README.en.md"><b>English</b></a> |
|
|
11
|
+
<a href="./README.zh-TW.md"><b>繁體中文</b></a> |
|
|
12
|
+
<a href="./README.zh-CN.md"><b>简体中文</b></a> |
|
|
13
|
+
<a href="./README.ja.md"><b>日本語</b></a> |
|
|
14
|
+
<a href="./README.ko.md"><b>한국어</b></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 개요
|
|
20
|
+
|
|
21
|
+
`sa-spec`은 단순한 AI 문서 생성 도구가 아니라, **AI 개발 착수 전의 "시스템 분석(System Analysis) 워크스페이스"** 입니다.
|
|
22
|
+
|
|
23
|
+
OpenSpec, Claude Code, OpenAI Codex, Gemini CLI 등 코드 생성 AI 도구가 구현을 시작하기 전에, 요구사항의 범위, 경계, 데이터 모델, API 인터페이스, 권한 매트릭스, 인수 조건을 사전에 명확히 정의하여 후속 개발이 안전하고 명확한 경계 내에서 진행되도록 보장합니다.
|
|
24
|
+
|
|
25
|
+
AI 워크플로는 4가지 표준 명령어(별칭 지원)를 기반으로 동작합니다:
|
|
26
|
+
|
|
27
|
+
| 표준 명령어 | 별칭 | 단계 | 설명 |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `spec:init` | `sci` | 초기화 | `AGENTS.md`, 시스템 규칙 및 지정된 언어 프롬프트를 로드합니다. |
|
|
30
|
+
| `spec:propose` | `scp` | 요구사항 제안 | 기존 사양을 변경하지 않고 목표, 요약, 초기 흐름 및 미확인 사항을 정리합니다. |
|
|
31
|
+
| `spec:analyze` | `sca` | 분석 및 초안 작성 | 기존 요구사항, API, DB와의 충돌 여부를 검사하고, 문제가 없을 때만 SRS, UML, OpenAPI, DB Schema 초안을 작성합니다. |
|
|
32
|
+
| `spec:commit` | `scc` | 확인 및 보관 | 사용자가 승인한 버전을 정식 번호로 보관하고, 인덱스를 갱신하며 로컬 Git 커밋을 생성합니다. |
|
|
33
|
+
|
|
34
|
+
보관된 각 요구사항은 독립적이고 완전한 폴더로 구성됩니다:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
project/
|
|
38
|
+
REQ-001-login/
|
|
39
|
+
srs.md # 소프트웨어 요구사항 명세서 (SRS)
|
|
40
|
+
uml/
|
|
41
|
+
main.puml # 독립 PlantUML 다이어그램 (파일당 1개 다이어그램 원칙)
|
|
42
|
+
openapi.yaml # OpenAPI 3.0 사양 초안
|
|
43
|
+
db-schema.md # 데이터베이스 스키마 및 마이그레이션 정의
|
|
44
|
+
handoff.md # AI 개발 도구 인수인계 요약 (OpenSpec / Claude Code 진입점)
|
|
45
|
+
history.md # 버전 이력 및 설계 결정 감사 로그
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 설계 철학
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
sa-spec이 요구사항과 경계를 명확히 정의하고, AI 개발 도구가 올바르게 구현합니다.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
1. **방어적 영향도 평가**: `spec:analyze`는 충돌 검사를 강제합니다. 새로운 요구사항이 기존의 역할, 권한, API 서명, 데이터베이스 테이블을 무단으로 변경하지 않는지 사전에 철저히 검증합니다.
|
|
57
|
+
2. **결정론적 상태 머신**: `propose -> analyze -> commit` 흐름을 엄격히 준수합니다. AI가 확인되지 않은 비즈니스 가설이나 테이블 컬럼을 임의로 날조(환각)하는 것을 방지하며, 충돌 발생 시 즉시 생성을 중단하고 사용자 확인을 요청합니다.
|
|
58
|
+
3. **AI 개발 인수인계서 (`handoff.md`)**: 구현해야 할 내용, 변경해서는 안 되는 경계, API 계약 및 인수 조건을 간결하게 정리하여 개발 AI 도구의 안전한 나침반 역할을 수행합니다.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 설치 및 준비
|
|
63
|
+
|
|
64
|
+
### 필수 환경
|
|
65
|
+
- Node.js 18 이상
|
|
66
|
+
- npm
|
|
67
|
+
- Git
|
|
68
|
+
|
|
69
|
+
### npm 글로벌 설치
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g @loviusc/sa-spec
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
설치 확인:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
sa-spec help
|
|
79
|
+
sa-spec --version
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## CLI 명령어 안내
|
|
85
|
+
|
|
86
|
+
| 명령어 | 설명 |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `sa-spec init [--full] [--lang <lang>]` | 워크스페이스 골격을 생성합니다 (`zh-TW`, `en`, `zh-CN`, `ja`, `ko` 지원, 기본값 `zh-TW`). |
|
|
89
|
+
| `sa-spec new [--id REQ-001] --name login [--branch]` | 요구사항 템플릿 폴더를 생성합니다. `--id` 생략 시 다중 사용자 초안 브랜치(`feat/<name>`)로 생성됩니다. |
|
|
90
|
+
| `sa-spec finalize --name login` | 초안 요구사항에 최신 연속 번호를 할당하고 폴더명 변경, `{{REQ_ID}}` 치환 및 인덱스를 자동 재구축합니다. |
|
|
91
|
+
| `sa-spec reindex` | `project/REQ-*` 디렉토리를 스캔하여 번호순으로 정렬된 `project/index.md`를 동적으로 재생성합니다. |
|
|
92
|
+
| `sa-spec check` | 필수 파일과 시스템 사양 상태를 검증합니다. |
|
|
93
|
+
| `sa-spec status` | 요구사항 및 시스템 사양 현황을 확인합니다. |
|
|
94
|
+
| `sa-spec doctor` | 워크스페이스 무결성 및 필수 의존 파일을 진단합니다. |
|
|
95
|
+
| `sa-spec upgrade [--dry-run]` | 기존 프로젝트의 언어 설정을 유지하면서 규칙과 스킬을 최신 버전으로 업그레이드합니다. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 팀 협업 및 Git-Flow (지연 바인딩 아키텍처)
|
|
100
|
+
|
|
101
|
+
팀 내 동시 병렬 개발 시 발생하는 "일련번호 충돌" 및 "Git 머지 컨플릭트"를 해결하기 위해 **Feature Branch 격리 + 지연 바인딩(Late-Binding ID)** 방식을 적용했습니다:
|
|
102
|
+
|
|
103
|
+
```mermaid
|
|
104
|
+
flowchart TD
|
|
105
|
+
A[요구사항 제안: sa-spec new --name cart --branch] --> B[feat/cart 브랜치 생성 및 전환<br/>초안 디렉토리: project/cart/]
|
|
106
|
+
B --> C[AI 분석 및 초안: sca<br/>내부에서 {{REQ_ID}} 플레이스홀더 사용<br/>master 최신 사양 기반 충돌 검사]
|
|
107
|
+
C --> D{사용자 승인 완료?<br/>scc 또는 finalize 실행}
|
|
108
|
+
D --> E[master에서 최신 사용 가능 번호 N 확인]
|
|
109
|
+
E --> F[project/REQ-N+1-cart/ 폴더명 변경<br/>{{REQ_ID}}를 공식 번호로 일괄 치환]
|
|
110
|
+
F --> G[sa-spec reindex: index.md 동적 재생성]
|
|
111
|
+
G --> H[master로 머지: 충돌 제로, 연속된 번호 유지!]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
1. **초안 단계 번호 미선점**: `sa-spec new --name cart --branch` 명령으로 독립 브랜치를 생성하고 `{{REQ_ID}}` 플레이스홀더를 사용합니다. 요구사항이 중도 폐기되어도 브랜치만 삭제하면 되며, 결번(고스트 번호)이 발생하지 않습니다.
|
|
115
|
+
2. **사양 기준선 동기화**: `spec:analyze` 실행 전 master의 최신 상태를 동기화하여 다른 팀원이 머지한 API나 테이블과의 충돌 누락을 방지합니다.
|
|
116
|
+
3. **머지 시점 공식 채번**: `sa-spec finalize` 또는 `scc` 실행 시점에 master의 최신 번호를 부여받아 폴더명을 확정합니다.
|
|
117
|
+
4. **인덱스 머지 충돌 제거**: `sa-spec reindex` 명령으로 디렉토리 상태에서 `project/index.md`를 언제든 완벽하게 재생성합니다.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 국제화 (i18n) 지원
|
|
122
|
+
|
|
123
|
+
`sa-spec`은 5가지 주요 언어를 지원합니다:
|
|
124
|
+
|
|
125
|
+
| 코드 | 언어 | 텍스트 및 스타일 규격 | 전문 기술 용어 원칙 |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `ko` | **한국어** | 한국어 전문 기술 문체 및 경어 | 업계 표준 영어 용어 유지 (`REST API`, `Webhook`, `JWT`) |
|
|
128
|
+
| `en` | **English** | 100% 표준 기술 영어 | 원문 표준 영어 |
|
|
129
|
+
| `zh-TW` | **繁體中文** (기본값) | 대만 표준 기술 용어 | 업계 표준 영어 용어 유지 (`REST API`, `Webhook`, `JWT`) |
|
|
130
|
+
| `zh-CN` | **简体中文** | 중국 본토 표준 기술 용어 | 업계 표준 영어 용어 유지 (`REST API`, `Webhook`, `JWT`) |
|
|
131
|
+
| `ja` | **日本語** | 일본어 기술 문체 및 가타카나 외래어 | 업계 표준 영어 용어 유지 (`REST API`, `Webhook`, `JWT`) |
|
|
132
|
+
|
|
133
|
+
### 핵심 원칙:
|
|
134
|
+
1. **초기화 시점 언어 고정**: `sa-spec init --lang ko` 또는 `spec:init` 시점에 대화형으로 선택하여 `project/system-spec.md`에 기록합니다.
|
|
135
|
+
2. **단일 언어의 순수성**: 프로젝트 내의 모든 사양 문서는 선택된 언어로 100% 통일됩니다.
|
|
136
|
+
3. **기술 전문 용어의 영어 유지**: 비영어권 모드에서도 업계 표준 기술 용어(`REST API`, `Webhook`, `JWT`, `OAuth 2.0`, `Payload`, `Idempotency Key`, `Redis` 등)는 억지 번역을 지양하고 **원문 영어를 강제 유지**합니다.
|
|
137
|
+
4. **업그레이드 보호**: `sa-spec upgrade` 실행 시 기존 프로젝트의 언어 설정을 자동으로 감지하여 유지합니다.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 라이선스
|
|
142
|
+
|
|
143
|
+
MIT © [lovius](https://github.com/lovius215)
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# sa-spec - 个人系统分析 AI 工作台
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@loviusc/sa-spec)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> 轻量级、防御性的系统分析文档工作台。通过固定流程把业务想法整理为可确认、可归档、可检查的技术规格文档,为 AI 辅助开发提供明确边界。
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<b>🌐 语言导航 (Languages):</b>
|
|
10
|
+
<a href="./README.en.md"><b>English</b></a> |
|
|
11
|
+
<a href="./README.zh-TW.md"><b>繁體中文</b></a> |
|
|
12
|
+
<a href="./README.zh-CN.md"><b>简体中文</b></a> |
|
|
13
|
+
<a href="./README.ja.md"><b>日本語</b></a> |
|
|
14
|
+
<a href="./README.ko.md"><b>한국어</b></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 核心概述
|
|
20
|
+
|
|
21
|
+
`sa-spec` 的定位不是单纯的 AI 文档生成器,而是 **AI 开发前的系统分析工作台**。
|
|
22
|
+
|
|
23
|
+
在 OpenSpec、Claude Code、OpenAI Codex、Gemini CLI 等代码生成工具介入之前,`sa-spec` 先行厘清需求边界、业务规则、数据模型、API 契约、权限矩阵与验收条件,避免 AI 编码时随心所欲破坏系统架构。
|
|
24
|
+
|
|
25
|
+
AI 工作流使用四个标准指令(支持简写别名):
|
|
26
|
+
|
|
27
|
+
| 标准指令 | 简写 | 阶段 | 说明 |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `spec:init` | `sci` | 初始化 | 加载 `AGENTS.md`、系统分析规则与指定语言的规范文件。 |
|
|
30
|
+
| `spec:propose` | `scp` | 提出需求 | 整理需求摘要、目标、初步流程与待确认事项,不修改已有规格。 |
|
|
31
|
+
| `spec:analyze` | `sca` | 分析与起草 | 检查新需求是否与既有需求、API、DB 发生冲突;无冲突才产出 SRS、UML、OpenAPI 与 DB Schema 草案。 |
|
|
32
|
+
| `spec:commit` | `scc` | 确认归档 | 用户确认后正式定号归档,更新索引与系统总表,并自动创建本地 Git commit。 |
|
|
33
|
+
|
|
34
|
+
每个归档的需求固定包含一个独立完整的文件夹:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
project/
|
|
38
|
+
REQ-001-login/
|
|
39
|
+
srs.md # 软件需求规格说明书 (SRS)
|
|
40
|
+
uml/
|
|
41
|
+
main.puml # 独立 PlantUML 图(单文件单图原则)
|
|
42
|
+
openapi.yaml # OpenAPI 3.0 接口草案
|
|
43
|
+
db-schema.md # 数据库表结构与变更说明
|
|
44
|
+
handoff.md # AI 开发者交接摘要 (面向 OpenSpec / Claude Code)
|
|
45
|
+
history.md # 版本历程与设计决策审计记录
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 设计理念
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
sa-spec 先把需求说清楚、定好边界;AI 代码工具再把需求实现出来。
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
1. **防御性影响评估**:`spec:analyze` 强制执行冲突检查。特别关注新需求是否会无意间篡改既有角色、权限、API 签名或数据表字段,规避线上安全隐患与逻辑破坏。
|
|
57
|
+
2. **确定性状态机**:遵循 `propose -> analyze -> commit` 状态流转。严禁 AI 凭空臆造未确认的业务规则。发现冲突必须立即暂停,交由人工厘清。
|
|
58
|
+
3. **AI 开发交接摘要 (`handoff.md`)**:提炼已确认的规则、禁止触碰的边界、API 规范与验收标准,作为后续 AI 编码工具的统一入口。
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 安装与快速上手
|
|
63
|
+
|
|
64
|
+
### 环境准备
|
|
65
|
+
- Node.js 18 或以上
|
|
66
|
+
- npm
|
|
67
|
+
- Git
|
|
68
|
+
|
|
69
|
+
### 全局安装
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g @loviusc/sa-spec
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
验证安装:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
sa-spec help
|
|
79
|
+
sa-spec --version
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## CLI 指令一览
|
|
85
|
+
|
|
86
|
+
| 指令 | 说明 |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `sa-spec init [--full] [--lang <lang>]` | 初始化工作台骨架(支持 `zh-TW`、`en`、`zh-CN`、`ja`、`ko`,默认 `zh-TW`)。 |
|
|
89
|
+
| `sa-spec new [--id REQ-001] --name login [--branch]` | 创建需求模板文件夹。省略 `--id` 时自动切入多人协作草稿分支(`feat/<name>`)。 |
|
|
90
|
+
| `sa-spec finalize --name login` | 将草稿需求正式定号归档为最新序号,自动重命名目录、替换 `{{REQ_ID}}` 并重构索引。 |
|
|
91
|
+
| `sa-spec reindex` | 扫描 `project/REQ-*` 目录,按序数字顺序动态重新生成 `project/index.md`。 |
|
|
92
|
+
| `sa-spec check` | 检查项目必要文件与规格完整性。 |
|
|
93
|
+
| `sa-spec status` | 查看系统规格与需求总览状态。 |
|
|
94
|
+
| `sa-spec doctor` | 诊断工作区环境与必要文件依赖。 |
|
|
95
|
+
| `sa-spec upgrade [--dry-run]` | 将规则与技能升级至最新版,自动保留原语言与历史上下文。 |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 多人协作与 Git-Flow(延迟绑定序号)
|
|
100
|
+
|
|
101
|
+
为解决团队多人并行开发时“序号争抢”与“Git 合并冲突”的痛点,`sa-spec` 采用 **Feature Branch 隔离 + 延迟定号机制(Late-Binding ID)**:
|
|
102
|
+
|
|
103
|
+
```mermaid
|
|
104
|
+
flowchart TD
|
|
105
|
+
A[提出需求: sa-spec new --name cart --branch] --> B[建立并切换至 feat/cart 分支<br/>创建草稿目录 project/cart/]
|
|
106
|
+
B --> C[AI 分析与起草: sca<br/>内部使用 {{REQ_ID}} 占位<br/>自动同步 master 最新规格防冲突]
|
|
107
|
+
C --> D{用户确认通过<br/>执行 scc 或 finalize}
|
|
108
|
+
D --> E[向 master 查询最新可用序号 N]
|
|
109
|
+
E --> F[重命名为 project/REQ-N+1-cart/<br/>批量替换 {{REQ_ID}} 为正式编号]
|
|
110
|
+
F --> G[sa-spec reindex: 动态重构 index.md]
|
|
111
|
+
G --> H[合并回 master: 零冲突、序号连续!]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
1. **草稿不抢号**:在分支开发时使用 `project/cart/` 与 `{{REQ_ID}}` 占位符。多人同时提出需求互不冲突。如果需求放弃,直接删除分支,**绝不遗留幽灵跳号**。
|
|
115
|
+
2. **基线同步防漏检**:执行 `spec:analyze` 前先确认同步远端 master 规格,确保以全系统最新状态进行冲突检查。
|
|
116
|
+
3. **归档时原子定号**:执行 `sa-spec finalize` 或 `scc` 时向 master 申请下一个号(例如 `REQ-003`),批量替换并更新。
|
|
117
|
+
4. **动态重建索引**:`sa-spec reindex` 随时可由目录动态排序生成总表,消除 `index.md` 的 merge conflict。
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 国际化多语言支持(i18n)
|
|
122
|
+
|
|
123
|
+
`sa-spec` 完整支持 5 种主要语言:
|
|
124
|
+
|
|
125
|
+
| 语系代码 | 语言名称 | 文本风格规范 | 专有名词处理惯例 |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| `zh-CN` | **简体中文** | 中国大陆技术用语(如:项目、服务器、支持、默认) | 强制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
|
|
128
|
+
| `en` | **English** | 100% 标准技术英文,无中/日/韩字符 | 原生标准英文 |
|
|
129
|
+
| `zh-TW` | **繁體中文** (默认) | 台湾地区技术常用语(如:專案、伺服器、支援) | 强制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
|
|
130
|
+
| `ja` | **日本語** | 日语标准技术文体与 Katakana 外来词 | 强制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
|
|
131
|
+
| `ko` | **한국어** | 韩语专业技术文体与标准敬语 | 强制保留原生英文(如 `REST API`, `Webhook`, `JWT`) |
|
|
132
|
+
|
|
133
|
+
### 核心规范:
|
|
134
|
+
1. **初始化锁死**:通过 `sa-spec init --lang zh-CN` 或在 `spec:init` 交互式提示中选定,写入 `project/system-spec.md`。
|
|
135
|
+
2. **全项目语言纯粹**:同一项目内所有需求规格必须 100% 使用该语言,不得杂糅。
|
|
136
|
+
3. **技术专有名词保留原生英文**:非英语系模式下,业界公认的成熟技术术语(如 `REST API`, `Webhook`, `JWT`, `OAuth 2.0`, `Payload`, `Idempotency Key`, `Redis` 等)**强制保持原生英文,禁止生硬直译**。
|
|
137
|
+
4. **升级保护**:执行 `sa-spec upgrade` 时自动继承既有项目语言,不打扰用户。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 开源协议
|
|
142
|
+
|
|
143
|
+
MIT © [lovius](https://github.com/lovius215)
|