speckeeper 0.10.1 → 0.11.0
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 +1 -0
- package/cli-contract.yaml +206 -208
- package/dist/cli.js +1316 -80
- package/dist/cli.js.map +1 -1
- package/dist/{config-api-CLVjdgIP.d.ts → config-api-coyCX1SB.d.ts} +21 -1
- package/dist/dsl/index.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +75 -3
- package/dist/index.js.map +1 -1
- package/docs/cli-reference.md +107 -154
- package/docs/design/cli-commands.md +36 -0
- package/docs/design/functional-requirements.md +101 -3
- package/docs/design/nonfunctional-requirements.md +3 -3
- package/docs/design/test-refs.md +26 -0
- package/package.json +3 -3
|
@@ -51,6 +51,11 @@
|
|
|
51
51
|
| FR-1017 | Source Path Fallback | must | check |
|
|
52
52
|
| FR-1018 | Minimal New Dependencies | must | check |
|
|
53
53
|
| FR-1019 | Checker Documentation Accuracy | must | check |
|
|
54
|
+
| FR-1100 | LLM-Powered Requirement Audit | should | llm |
|
|
55
|
+
| FR-1101 | LLM-Powered Trace Link Proposal | should | llm |
|
|
56
|
+
| FR-1102 | LLM-Powered Impact Explanation | should | llm |
|
|
57
|
+
| FR-1103 | LLM-Powered Acceptance Criteria Proposal | should | llm |
|
|
58
|
+
| FR-1104 | TypeScript to YAML Conversion | should | conversion |
|
|
54
59
|
|
|
55
60
|
---
|
|
56
61
|
|
|
@@ -395,8 +400,8 @@ Since consistency checks are implemented per model, filter by model name
|
|
|
395
400
|
### Acceptance Criteria
|
|
396
401
|
|
|
397
402
|
- **FR-602-01**: speckeeper check runs external SSOT consistency check for all models [test]
|
|
398
|
-
- **FR-602-02**: speckeeper check
|
|
399
|
-
- **FR-602-03**:
|
|
403
|
+
- **FR-602-02**: speckeeper check [type] filters checks by type (openapi, ddl, iac, external-ssot, test, contract) [test]
|
|
404
|
+
- **FR-602-03**: Type argument corresponds to check categories, not model IDs [review]
|
|
400
405
|
- **FR-602-04**: Only models with externalChecker are targeted [test]
|
|
401
406
|
|
|
402
407
|
---
|
|
@@ -807,4 +812,97 @@ README and scaffold-mermaid-spec.md accurately describe all three built-in check
|
|
|
807
812
|
### Acceptance Criteria
|
|
808
813
|
|
|
809
814
|
- **FR-1019-01**: README checker table describes validation levels [review]
|
|
810
|
-
- **FR-1019-02**: scaffold-mermaid-spec.md Section 7 describes validation levels [review]
|
|
815
|
+
- **FR-1019-02**: scaffold-mermaid-spec.md Section 7 describes validation levels [review]
|
|
816
|
+
|
|
817
|
+
---
|
|
818
|
+
|
|
819
|
+
## FR-1100: LLM-Powered Requirement Audit
|
|
820
|
+
|
|
821
|
+
**Type**: functional | **Priority**: should | **Category**: llm
|
|
822
|
+
|
|
823
|
+
Provide LLM-based semantic quality audit for requirement definitions, detecting verifiability issues, ambiguity, granularity problems, terminology inconsistency, and design-mixing
|
|
824
|
+
|
|
825
|
+
### Rationale
|
|
826
|
+
|
|
827
|
+
Static lint rules cannot detect semantic issues such as ambiguous wording or design details mixed into requirements; LLM review complements structural checks
|
|
828
|
+
|
|
829
|
+
### Acceptance Criteria
|
|
830
|
+
|
|
831
|
+
- **FR-1100-01**: audit-requirements command constructs a prompt from all registered specs and sends it to configured LLM adapter [test]
|
|
832
|
+
- **FR-1100-02**: Audit report includes findings with severity (error/warning/info) and affected spec IDs [test]
|
|
833
|
+
- **FR-1100-03**: --dry-run outputs the constructed prompt without calling LLM [test]
|
|
834
|
+
- **FR-1100-04**: --fail-on controls minimum severity that causes non-zero exit [test]
|
|
835
|
+
- **FR-1100-05**: Report format is selectable via --report-format (json, text, yaml) [test]
|
|
836
|
+
|
|
837
|
+
---
|
|
838
|
+
|
|
839
|
+
## FR-1101: LLM-Powered Trace Link Proposal
|
|
840
|
+
|
|
841
|
+
**Type**: functional | **Priority**: should | **Category**: llm
|
|
842
|
+
|
|
843
|
+
Propose candidate traceability links between specs with confidence scores and rationale using LLM analysis
|
|
844
|
+
|
|
845
|
+
### Rationale
|
|
846
|
+
|
|
847
|
+
Manual traceability maintenance is error-prone; LLM can identify semantically related specs that humans may overlook
|
|
848
|
+
|
|
849
|
+
### Acceptance Criteria
|
|
850
|
+
|
|
851
|
+
- **FR-1101-01**: propose-trace-links command analyzes all specs and proposes missing trace links [test]
|
|
852
|
+
- **FR-1101-02**: Each proposed link includes source ID, target ID, relation type, confidence score, and rationale [test]
|
|
853
|
+
- **FR-1101-03**: --dry-run outputs the constructed prompt without calling LLM [test]
|
|
854
|
+
|
|
855
|
+
---
|
|
856
|
+
|
|
857
|
+
## FR-1102: LLM-Powered Impact Explanation
|
|
858
|
+
|
|
859
|
+
**Type**: functional | **Priority**: should | **Category**: llm
|
|
860
|
+
|
|
861
|
+
Translate impact analysis JSON output into human-readable explanation for PM/executive audiences using LLM
|
|
862
|
+
|
|
863
|
+
### Rationale
|
|
864
|
+
|
|
865
|
+
Raw impact analysis JSON is not consumable by non-technical stakeholders; LLM can generate natural language summaries
|
|
866
|
+
|
|
867
|
+
### Acceptance Criteria
|
|
868
|
+
|
|
869
|
+
- **FR-1102-01**: explain-impact command reads impact analysis JSON from stdin [test]
|
|
870
|
+
- **FR-1102-02**: Output is a human-readable explanation suitable for PM/executive audiences [review]
|
|
871
|
+
- **FR-1102-03**: --dry-run outputs the constructed prompt without calling LLM [test]
|
|
872
|
+
|
|
873
|
+
---
|
|
874
|
+
|
|
875
|
+
## FR-1103: LLM-Powered Acceptance Criteria Proposal
|
|
876
|
+
|
|
877
|
+
**Type**: functional | **Priority**: should | **Category**: llm
|
|
878
|
+
|
|
879
|
+
Propose testable acceptance criteria in Given/When/Then format for specified specs using LLM
|
|
880
|
+
|
|
881
|
+
### Rationale
|
|
882
|
+
|
|
883
|
+
Writing testable acceptance criteria is time-consuming; LLM can propose initial criteria that humans refine
|
|
884
|
+
|
|
885
|
+
### Acceptance Criteria
|
|
886
|
+
|
|
887
|
+
- **FR-1103-01**: propose-acceptance-criteria command generates criteria for specified spec IDs (or all) [test]
|
|
888
|
+
- **FR-1103-02**: Proposed criteria follow Given/When/Then format [review]
|
|
889
|
+
- **FR-1103-03**: --dry-run outputs the constructed prompt without calling LLM [test]
|
|
890
|
+
|
|
891
|
+
---
|
|
892
|
+
|
|
893
|
+
## FR-1104: TypeScript to YAML Conversion
|
|
894
|
+
|
|
895
|
+
**Type**: functional | **Priority**: should | **Category**: conversion
|
|
896
|
+
|
|
897
|
+
Convert TypeScript spec data files to equivalent YAML format, enabling non-TypeScript workflows and interoperability
|
|
898
|
+
|
|
899
|
+
### Rationale
|
|
900
|
+
|
|
901
|
+
YAML input lowers participation barriers for non-developers (NFR-005) and enables interoperability with external tools
|
|
902
|
+
|
|
903
|
+
### Acceptance Criteria
|
|
904
|
+
|
|
905
|
+
- **FR-1104-01**: convert command reads a TS file exporting a SpecModule via defineSpecs() and writes equivalent YAML [test]
|
|
906
|
+
- **FR-1104-02**: Output defaults to same filename with .yaml extension [test]
|
|
907
|
+
- **FR-1104-03**: --output allows specifying a custom output path [test]
|
|
908
|
+
- **FR-1104-04**: --dry-run previews conversion without writing files [test]
|
|
@@ -214,15 +214,15 @@ To ensure all acceptance criteria are covered by test cases and maintain spec-te
|
|
|
214
214
|
|
|
215
215
|
**Type**: non-functional | **Priority**: must | **Category**: testability
|
|
216
216
|
|
|
217
|
-
CLI command definitions in design/cli-commands.ts match
|
|
217
|
+
CLI command definitions in design/cli-commands.ts match cli-contract.yaml and generated code in src/generated/
|
|
218
218
|
|
|
219
219
|
### Rationale
|
|
220
220
|
|
|
221
|
-
To ensure specification and implementation stay synchronized
|
|
221
|
+
To ensure specification, DSL contract, and generated implementation stay synchronized
|
|
222
222
|
|
|
223
223
|
### Acceptance Criteria
|
|
224
224
|
|
|
225
|
-
- **NFR-014-01**: All command definitions in design/cli-commands.ts match
|
|
225
|
+
- **NFR-014-01**: All command definitions in design/cli-commands.ts match cli-contract.yaml and generated code (parameters, subcommands, exit codes) [test]
|
|
226
226
|
|
|
227
227
|
---
|
|
228
228
|
|
package/docs/design/test-refs.md
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
| TEST-023 | Impact command verification test | vitest | 1 |
|
|
13
13
|
| TEST-024 | Drift command verification test | vitest | 1 |
|
|
14
14
|
| TEST-025 | New command verification test | vitest | 1 |
|
|
15
|
+
| TEST-026 | Scaffold integration verification test (mermaid parsing, class-based generation) | vitest | 1 |
|
|
15
16
|
|
|
16
17
|
---
|
|
17
18
|
|
|
@@ -256,3 +257,28 @@
|
|
|
256
257
|
| FR-104-01 | `FR-104-01.*available model types header` | Outputs model types header when type omitted |
|
|
257
258
|
|
|
258
259
|
---
|
|
260
|
+
|
|
261
|
+
## TEST-026: Scaffold integration verification test (mermaid parsing, class-based generation)
|
|
262
|
+
|
|
263
|
+
### Test Source
|
|
264
|
+
|
|
265
|
+
- **Path**: `test/scaffold/integration.test.ts`
|
|
266
|
+
- **Framework**: vitest
|
|
267
|
+
|
|
268
|
+
### Verified Requirements
|
|
269
|
+
|
|
270
|
+
- FR-106
|
|
271
|
+
|
|
272
|
+
### Implemented Command
|
|
273
|
+
|
|
274
|
+
- CMD-SCAFFOLD
|
|
275
|
+
|
|
276
|
+
### Test Case Patterns
|
|
277
|
+
|
|
278
|
+
| Acceptance Criteria ID | Pattern | Description |
|
|
279
|
+
|------------------------|---------|-------------|
|
|
280
|
+
| FR-106-01 | `base template.*core factory|generated models.*base template` | Artifact class generates from base template |
|
|
281
|
+
| FR-106-03 | `SR.*FR.*NFR.*map to requirement.*de-duplicated` | Same-class node aggregation into single model file |
|
|
282
|
+
| FR-106-05 | `de-duplicated model files.*spec data` | Model file generation with naming conventions |
|
|
283
|
+
|
|
284
|
+
---
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speckeeper",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "TypeScript-first specification validation framework with external SSOT integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"license": "MIT",
|
|
64
64
|
"dependencies": {
|
|
65
65
|
"chalk": "^5.3.0",
|
|
66
|
+
"cli-contracts": "^0.7.0",
|
|
66
67
|
"commander": "^12.1.0",
|
|
67
68
|
"embedoc": "^0.10.1",
|
|
68
69
|
"glob": "^10.3.10",
|
|
@@ -86,9 +87,8 @@
|
|
|
86
87
|
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
87
88
|
"@typescript-eslint/parser": "^8.54.0",
|
|
88
89
|
"@vitest/coverage-v8": "^1.6.1",
|
|
89
|
-
"agent-contracts": "^0.
|
|
90
|
+
"agent-contracts": "^0.22.3",
|
|
90
91
|
"agent-contracts-runtime": "^0.13.0",
|
|
91
|
-
"cli-contracts": "^0.6.1",
|
|
92
92
|
"eslint": "^9.39.2",
|
|
93
93
|
"tsup": "^8.0.1",
|
|
94
94
|
"typescript": "^5.3.3",
|