speckeeper 0.9.1 → 0.9.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.
- package/README.md +39 -0
- package/cli-contract.yaml +574 -0
- package/dist/cli.js +84 -9
- package/dist/cli.js.map +1 -1
- package/dist/{config-api-CfxXt9Zt.d.ts → config-api-CLVjdgIP.d.ts} +5 -0
- package/dist/dsl/index.d.ts +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js.map +1 -1
- package/docs/cli-reference.md +449 -0
- package/docs/design/actors.md +72 -0
- package/docs/design/arch-actors.md +42 -0
- package/docs/design/artifacts.md +69 -0
- package/docs/design/cli-commands.md +332 -0
- package/docs/design/constraints.md +66 -0
- package/docs/design/containers.md +86 -0
- package/docs/design/entities.md +161 -0
- package/docs/design/external-systems.md +42 -0
- package/docs/design/functional-requirements.md +810 -0
- package/docs/design/glossary.md +242 -0
- package/docs/design/nonfunctional-requirements.md +242 -0
- package/docs/design/test-refs.md +258 -0
- package/docs/design/usecases.md +114 -0
- package/docs/directory-entries.md +22 -0
- package/docs/framework_requirements_spec.md +1052 -0
- package/docs/model-guide.md +762 -0
- package/docs/model_entity_catalog.md +67 -0
- package/docs/scaffold-mermaid-spec.md +357 -0
- package/package.json +7 -2
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Glossary
|
|
2
|
+
|
|
3
|
+
- **API**: Application programming interface
|
|
4
|
+
- **C4**: Software architecture visualization model
|
|
5
|
+
- **CLI**: Command line interface
|
|
6
|
+
- **Concretization Slot**: Items to be filled in subsequent phases (allows TBD while having a deadline phase)
|
|
7
|
+
- **DDL**: Data definition language. A language for defining database schemas
|
|
8
|
+
- **Design Artifact**: Design artifacts to satisfy requirements such as monitoring, Runbook, Dashboard, data schema, etc.
|
|
9
|
+
- **Drift**: A state where docs//specs/ that should have been generated from TS have differences due to manual edits, etc.
|
|
10
|
+
- **DSL**: Domain-specific language. A programming language specialized for a particular domain
|
|
11
|
+
- **DTO**: Data transfer object. A structure for passing data between systems
|
|
12
|
+
- **ER**: Entity relationship. A data modeling technique
|
|
13
|
+
- **External SSOT**: Artifacts managed by existing tools/formats (OpenAPI, DDL, IaC, etc.). This framework does not generate them but checks consistency against them
|
|
14
|
+
- **External SSOT Reference**: Minimal interface for referencing external SSOT from TS models (ID, path, correspondence, etc.)
|
|
15
|
+
- **IaC**: Infrastructure definition through code
|
|
16
|
+
- **ID Linkage**: A mechanism that ensures componentId/entityId/requirementId from TS models appear in external SSOT, generated artifacts, implementation, and IaC to connect design and implementation
|
|
17
|
+
- **Model**: A unit of design information defined in TypeScript. Inherits from Model base class and has schema, lint rules, renderers, etc.
|
|
18
|
+
- **Reconciliation**: Checks to bridge gaps between design and external SSOT/implementation (design consistency, external SSOT consistency, implementation existence verification)
|
|
19
|
+
- **SSOT**: The single authoritative source of information. The canonical location for data and design
|
|
20
|
+
- **TS**: Statically typed JavaScript developed by Microsoft
|
|
21
|
+
- **TS-SSOT**: A policy where TypeScript is the source of truth and generated artifacts are regeneratable derivatives
|
|
22
|
+
- **User-defined Model**: Project-specific models defined by users inheriting from the Model base class. The standard way to use speckeeper
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## TERM-A005: API
|
|
27
|
+
|
|
28
|
+
**Category**: acronym
|
|
29
|
+
**Abbreviation**: API
|
|
30
|
+
**Expanded Form**: Application Programming Interface
|
|
31
|
+
|
|
32
|
+
### Definition
|
|
33
|
+
|
|
34
|
+
Application programming interface
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## TERM-A010: C4
|
|
39
|
+
|
|
40
|
+
**Category**: acronym
|
|
41
|
+
**Abbreviation**: C4
|
|
42
|
+
**Expanded Form**: Context, Container, Component, Code
|
|
43
|
+
|
|
44
|
+
### Definition
|
|
45
|
+
|
|
46
|
+
Software architecture visualization model
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## TERM-A004: CLI
|
|
51
|
+
|
|
52
|
+
**Category**: acronym
|
|
53
|
+
**Abbreviation**: CLI
|
|
54
|
+
**Expanded Form**: Command Line Interface
|
|
55
|
+
|
|
56
|
+
### Definition
|
|
57
|
+
|
|
58
|
+
Command line interface
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## TERM-011: Concretization Slot
|
|
63
|
+
|
|
64
|
+
**Category**: core
|
|
65
|
+
|
|
66
|
+
### Definition
|
|
67
|
+
|
|
68
|
+
Items to be filled in subsequent phases (allows TBD while having a deadline phase)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## TERM-A006: DDL
|
|
73
|
+
|
|
74
|
+
**Category**: acronym
|
|
75
|
+
**Abbreviation**: DDL
|
|
76
|
+
**Expanded Form**: Data Definition Language
|
|
77
|
+
|
|
78
|
+
### Definition
|
|
79
|
+
|
|
80
|
+
Data definition language. A language for defining database schemas
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## TERM-010: Design Artifact
|
|
85
|
+
|
|
86
|
+
**Category**: core
|
|
87
|
+
|
|
88
|
+
### Definition
|
|
89
|
+
|
|
90
|
+
Design artifacts to satisfy requirements such as monitoring, Runbook, Dashboard, data schema, etc.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## TERM-013: Drift
|
|
95
|
+
|
|
96
|
+
**Category**: process
|
|
97
|
+
|
|
98
|
+
### Definition
|
|
99
|
+
|
|
100
|
+
A state where docs//specs/ that should have been generated from TS have differences due to manual edits, etc.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## TERM-A003: DSL
|
|
105
|
+
|
|
106
|
+
**Category**: acronym
|
|
107
|
+
**Abbreviation**: DSL
|
|
108
|
+
**Expanded Form**: Domain Specific Language
|
|
109
|
+
|
|
110
|
+
### Definition
|
|
111
|
+
|
|
112
|
+
Domain-specific language. A programming language specialized for a particular domain
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## TERM-A008: DTO
|
|
117
|
+
|
|
118
|
+
**Category**: acronym
|
|
119
|
+
**Abbreviation**: DTO
|
|
120
|
+
**Expanded Form**: Data Transfer Object
|
|
121
|
+
|
|
122
|
+
### Definition
|
|
123
|
+
|
|
124
|
+
Data transfer object. A structure for passing data between systems
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## TERM-A009: ER
|
|
129
|
+
|
|
130
|
+
**Category**: acronym
|
|
131
|
+
**Abbreviation**: ER
|
|
132
|
+
**Expanded Form**: Entity Relationship
|
|
133
|
+
|
|
134
|
+
### Definition
|
|
135
|
+
|
|
136
|
+
Entity relationship. A data modeling technique
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## TERM-002: External SSOT
|
|
141
|
+
|
|
142
|
+
**Category**: core
|
|
143
|
+
|
|
144
|
+
### Definition
|
|
145
|
+
|
|
146
|
+
Artifacts managed by existing tools/formats (OpenAPI, DDL, IaC, etc.). This framework does not generate them but checks consistency against them
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## TERM-003: External SSOT Reference
|
|
151
|
+
|
|
152
|
+
**Category**: core
|
|
153
|
+
|
|
154
|
+
### Definition
|
|
155
|
+
|
|
156
|
+
Minimal interface for referencing external SSOT from TS models (ID, path, correspondence, etc.)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## TERM-A007: IaC
|
|
161
|
+
|
|
162
|
+
**Category**: acronym
|
|
163
|
+
**Abbreviation**: IaC
|
|
164
|
+
**Expanded Form**: Infrastructure as Code
|
|
165
|
+
|
|
166
|
+
### Definition
|
|
167
|
+
|
|
168
|
+
Infrastructure definition through code
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## TERM-012: ID Linkage
|
|
173
|
+
|
|
174
|
+
**Category**: core
|
|
175
|
+
|
|
176
|
+
### Definition
|
|
177
|
+
|
|
178
|
+
A mechanism that ensures componentId/entityId/requirementId from TS models appear in external SSOT, generated artifacts, implementation, and IaC to connect design and implementation
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## TERM-004: Model
|
|
183
|
+
|
|
184
|
+
**Category**: core
|
|
185
|
+
|
|
186
|
+
### Definition
|
|
187
|
+
|
|
188
|
+
A unit of design information defined in TypeScript. Inherits from Model base class and has schema, lint rules, renderers, etc.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## TERM-014: Reconciliation
|
|
193
|
+
|
|
194
|
+
**Category**: process
|
|
195
|
+
|
|
196
|
+
### Definition
|
|
197
|
+
|
|
198
|
+
Checks to bridge gaps between design and external SSOT/implementation (design consistency, external SSOT consistency, implementation existence verification)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## TERM-A001: SSOT
|
|
203
|
+
|
|
204
|
+
**Category**: acronym
|
|
205
|
+
**Abbreviation**: SSOT
|
|
206
|
+
**Expanded Form**: Single Source of Truth
|
|
207
|
+
|
|
208
|
+
### Definition
|
|
209
|
+
|
|
210
|
+
The single authoritative source of information. The canonical location for data and design
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## TERM-A002: TS
|
|
215
|
+
|
|
216
|
+
**Category**: acronym
|
|
217
|
+
**Abbreviation**: TS
|
|
218
|
+
**Expanded Form**: TypeScript
|
|
219
|
+
|
|
220
|
+
### Definition
|
|
221
|
+
|
|
222
|
+
Statically typed JavaScript developed by Microsoft
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## TERM-001: TS-SSOT
|
|
227
|
+
|
|
228
|
+
**Category**: core
|
|
229
|
+
|
|
230
|
+
### Definition
|
|
231
|
+
|
|
232
|
+
A policy where TypeScript is the source of truth and generated artifacts are regeneratable derivatives
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## TERM-015: User-defined Model
|
|
237
|
+
|
|
238
|
+
**Category**: core
|
|
239
|
+
|
|
240
|
+
### Definition
|
|
241
|
+
|
|
242
|
+
Project-specific models defined by users inheriting from the Model base class. The standard way to use speckeeper
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# Requirements
|
|
2
|
+
|
|
3
|
+
## Non-Functional Requirements
|
|
4
|
+
|
|
5
|
+
| ID | Name | Priority | Category |
|
|
6
|
+
|----|------|----------|----------|
|
|
7
|
+
| NFR-001 | Command Execution Time | should | performance |
|
|
8
|
+
| NFR-002 | Node.js Compatibility | must | portability |
|
|
9
|
+
| NFR-003 | Multi-OS Support | must | portability |
|
|
10
|
+
| NFR-004 | User-defined Models | must | extensibility |
|
|
11
|
+
| NFR-005 | Input Format Diversity | should | extensibility |
|
|
12
|
+
| NFR-006 | Rule Extensibility | should | extensibility |
|
|
13
|
+
| NFR-007 | Error Message Clarity | must | transparency |
|
|
14
|
+
| NFR-008 | TypeScript Compatibility | must | compatibility |
|
|
15
|
+
| NFR-009 | ESM Support | must | compatibility |
|
|
16
|
+
| NFR-010 | npm Distribution | must | deployability |
|
|
17
|
+
| NFR-011 | CLI Test Infrastructure | must | testability |
|
|
18
|
+
| NFR-012 | CLI Command Test Coverage | must | testability |
|
|
19
|
+
| NFR-013 | Test-Specification Traceability | must | testability |
|
|
20
|
+
| NFR-014 | CLI Definition-Implementation Consistency | must | testability |
|
|
21
|
+
| NFR-015 | CLI Backward Compatibility | must | testability |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## NFR-001: Command Execution Time
|
|
26
|
+
|
|
27
|
+
**Type**: non-functional | **Priority**: should | **Category**: performance
|
|
28
|
+
|
|
29
|
+
lint/build/drift within 1 minute for typical requirement scale (~500 items), check within 2 minutes (depends on file count)
|
|
30
|
+
|
|
31
|
+
### Acceptance Criteria
|
|
32
|
+
|
|
33
|
+
- **NFR-001-01**: lint/build/drift within 60 seconds for 500 requirements scale [test]
|
|
34
|
+
- **NFR-001-02**: check within 120 seconds for 1000 files scale [test]
|
|
35
|
+
- **NFR-001-03**: build within 5 seconds for 1000 requirements, 100 entities, 50 screens [test]
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## NFR-002: Node.js Compatibility
|
|
40
|
+
|
|
41
|
+
**Type**: non-functional | **Priority**: must | **Category**: portability
|
|
42
|
+
|
|
43
|
+
Works on Node.js (LTS)
|
|
44
|
+
|
|
45
|
+
### Acceptance Criteria
|
|
46
|
+
|
|
47
|
+
- **NFR-002-01**: Verified on Node.js 18 LTS [test]
|
|
48
|
+
- **NFR-002-02**: Verified on Node.js 20 LTS [test]
|
|
49
|
+
- **NFR-002-03**: Verified on Node.js 22 LTS [test]
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## NFR-003: Multi-OS Support
|
|
54
|
+
|
|
55
|
+
**Type**: non-functional | **Priority**: must | **Category**: portability
|
|
56
|
+
|
|
57
|
+
Avoid OS dependencies and work on Linux/macOS/Windows
|
|
58
|
+
|
|
59
|
+
### Acceptance Criteria
|
|
60
|
+
|
|
61
|
+
- **NFR-003-01**: Verified on Linux (Ubuntu) [test]
|
|
62
|
+
- **NFR-003-02**: Verified on macOS [test]
|
|
63
|
+
- **NFR-003-03**: Verified on Windows (PowerShell) [test]
|
|
64
|
+
- **NFR-003-04**: Eliminate OS-dependent code such as path separators [review]
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## NFR-004: User-defined Models
|
|
69
|
+
|
|
70
|
+
**Type**: non-functional | **Priority**: must | **Category**: extensibility
|
|
71
|
+
|
|
72
|
+
Users can define custom models by inheriting from Model base class
|
|
73
|
+
|
|
74
|
+
### Acceptance Criteria
|
|
75
|
+
|
|
76
|
+
- **NFR-004-01**: Can define new models by inheriting from Model base class [test]
|
|
77
|
+
- **NFR-004-02**: Can define model-specific schema, lint rules, and renderers [test]
|
|
78
|
+
- **NFR-004-03**: Models registered in speckeeper.config.ts become targets of lint/build/check [test]
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## NFR-005: Input Format Diversity
|
|
83
|
+
|
|
84
|
+
**Type**: non-functional | **Priority**: should | **Category**: extensibility
|
|
85
|
+
|
|
86
|
+
Allow YAML/JSON input to lower participation barriers for non-developers
|
|
87
|
+
|
|
88
|
+
### Acceptance Criteria
|
|
89
|
+
|
|
90
|
+
- **NFR-005-01**: Support TypeScript DSL input [test]
|
|
91
|
+
- **NFR-005-02**: Support YAML format input [demo]
|
|
92
|
+
- **NFR-005-03**: Support JSON format input [demo]
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## NFR-006: Rule Extensibility
|
|
97
|
+
|
|
98
|
+
**Type**: non-functional | **Priority**: should | **Category**: extensibility
|
|
99
|
+
|
|
100
|
+
Allow adding lint and check rules via plugin mechanism
|
|
101
|
+
|
|
102
|
+
### Acceptance Criteria
|
|
103
|
+
|
|
104
|
+
- **NFR-006-01**: Custom lint rules can be added [demo]
|
|
105
|
+
- **NFR-006-02**: Custom check rules (external SSOT verification) can be added [demo]
|
|
106
|
+
- **NFR-006-03**: Rules are defined under Model._models/ [review]
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## NFR-007: Error Message Clarity
|
|
111
|
+
|
|
112
|
+
**Type**: non-functional | **Priority**: must | **Category**: transparency
|
|
113
|
+
|
|
114
|
+
Output errors showing requirement ID, file, and field name, providing messages that clearly show "why it failed"
|
|
115
|
+
|
|
116
|
+
### Acceptance Criteria
|
|
117
|
+
|
|
118
|
+
- **NFR-007-01**: Errors include requirement ID/specification ID [test]
|
|
119
|
+
- **NFR-007-02**: Errors include file path and line number (when possible) [test]
|
|
120
|
+
- **NFR-007-03**: Errors include problematic field name [test]
|
|
121
|
+
- **NFR-007-04**: Provide hints for fixes [review]
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## NFR-008: TypeScript Compatibility
|
|
126
|
+
|
|
127
|
+
**Type**: non-functional | **Priority**: must | **Category**: compatibility
|
|
128
|
+
|
|
129
|
+
Type checking passes on TypeScript 5.0+
|
|
130
|
+
|
|
131
|
+
### Acceptance Criteria
|
|
132
|
+
|
|
133
|
+
- **NFR-008-01**: Compiles successfully on TypeScript 5.0 [test]
|
|
134
|
+
- **NFR-008-02**: No type errors in strict mode [test]
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## NFR-009: ESM Support
|
|
139
|
+
|
|
140
|
+
**Type**: non-functional | **Priority**: must | **Category**: compatibility
|
|
141
|
+
|
|
142
|
+
Provided in ES Modules format
|
|
143
|
+
|
|
144
|
+
### Acceptance Criteria
|
|
145
|
+
|
|
146
|
+
- **NFR-009-01**: Can be imported via import statement [test]
|
|
147
|
+
- **NFR-009-02**: Tree-shaking works [inspection]
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## NFR-010: npm Distribution
|
|
152
|
+
|
|
153
|
+
**Type**: non-functional | **Priority**: must | **Category**: deployability
|
|
154
|
+
|
|
155
|
+
Can be distributed as npm package
|
|
156
|
+
|
|
157
|
+
### Acceptance Criteria
|
|
158
|
+
|
|
159
|
+
- **NFR-010-01**: Can publish package via npm publish [demo]
|
|
160
|
+
- **NFR-010-02**: Can install via npm install speckeeper [demo]
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## NFR-011: CLI Test Infrastructure
|
|
165
|
+
|
|
166
|
+
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
167
|
+
|
|
168
|
+
All CLI commands have comprehensive test coverage with traceability to specifications
|
|
169
|
+
|
|
170
|
+
### Acceptance Criteria
|
|
171
|
+
|
|
172
|
+
- **NFR-011-01**: All child requirements (NFR-012~NFR-015) are satisfied [review]
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## NFR-012: CLI Command Test Coverage
|
|
177
|
+
|
|
178
|
+
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
179
|
+
|
|
180
|
+
Each CLI command (lint, check, build, impact, drift, new) has a corresponding test file in test/cli/ with requirement ID references
|
|
181
|
+
|
|
182
|
+
### Rationale
|
|
183
|
+
|
|
184
|
+
To prevent regression bugs in CLI commands that directly affect all users and CI pipelines
|
|
185
|
+
|
|
186
|
+
### Acceptance Criteria
|
|
187
|
+
|
|
188
|
+
- **NFR-012-01**: Test files exist in test/cli/ for each CLI command (lint, check, build, impact, drift, new) [test]
|
|
189
|
+
- **NFR-012-02**: describe/it block names contain corresponding requirement IDs (FR-xxx) [test]
|
|
190
|
+
- **NFR-012-03**: CLI module statement coverage reaches 60% or above (from 0%) [test]
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## NFR-013: Test-Specification Traceability
|
|
195
|
+
|
|
196
|
+
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
197
|
+
|
|
198
|
+
TestRef definitions in design/test-refs.ts provide bidirectional traceability between tests and specifications
|
|
199
|
+
|
|
200
|
+
### Rationale
|
|
201
|
+
|
|
202
|
+
To ensure all acceptance criteria are covered by test cases and maintain spec-test traceability
|
|
203
|
+
|
|
204
|
+
### Acceptance Criteria
|
|
205
|
+
|
|
206
|
+
- **NFR-013-01**: TestRef definitions (TEST-020~025) exist in design/test-refs.ts for each CLI test file [test]
|
|
207
|
+
- **NFR-013-02**: TestRefs are linked to corresponding command IDs via implementsCommand [test]
|
|
208
|
+
- **NFR-013-03**: speckeeper check test succeeds for all TestRefs [test]
|
|
209
|
+
- **NFR-013-04**: speckeeper check test --coverage achieves 100% for target acceptance criteria [test]
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## NFR-014: CLI Definition-Implementation Consistency
|
|
214
|
+
|
|
215
|
+
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
216
|
+
|
|
217
|
+
CLI command definitions in design/cli-commands.ts match actual implementation in src/cli/index.ts
|
|
218
|
+
|
|
219
|
+
### Rationale
|
|
220
|
+
|
|
221
|
+
To ensure specification and implementation stay synchronized (e.g., no missing --config parameters)
|
|
222
|
+
|
|
223
|
+
### Acceptance Criteria
|
|
224
|
+
|
|
225
|
+
- **NFR-014-01**: All command definitions in design/cli-commands.ts match implementation (parameters, subcommands, exit codes) [test]
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## NFR-015: CLI Backward Compatibility
|
|
230
|
+
|
|
231
|
+
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
232
|
+
|
|
233
|
+
Existing public APIs and CLI behavior are not changed by test additions
|
|
234
|
+
|
|
235
|
+
### Rationale
|
|
236
|
+
|
|
237
|
+
To ensure test strengthening does not introduce regressions
|
|
238
|
+
|
|
239
|
+
### Acceptance Criteria
|
|
240
|
+
|
|
241
|
+
- **NFR-015-01**: All existing tests continue to pass (no regression) [test]
|
|
242
|
+
- **NFR-015-02**: No changes to existing public API or CLI behavior [review]
|