speckeeper 0.10.0 → 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/cli-contract.yaml CHANGED
@@ -3,7 +3,7 @@ cliContracts: 0.1.0
3
3
 
4
4
  info:
5
5
  title: speckeeper CLI
6
- version: 0.10.0
6
+ version: 0.10.1
7
7
  description: >-
8
8
  TypeScript-first specification validation framework — validate design
9
9
  consistency, external SSOT integrity, and traceability with type-safe
@@ -18,6 +18,20 @@ commandSets:
18
18
  summary: Requirements and design management framework with TypeScript DSL.
19
19
  executable: speckeeper
20
20
 
21
+ env:
22
+ CURSOR_API_KEY:
23
+ description: API key for Cursor SDK adapter.
24
+ sensitive: true
25
+ GEMINI_API_KEY:
26
+ description: API key for Gemini adapter.
27
+ sensitive: true
28
+ OPENAI_API_KEY:
29
+ description: API key for OpenAI adapter.
30
+ sensitive: true
31
+ ANTHROPIC_API_KEY:
32
+ description: API key for Anthropic/Claude adapter.
33
+ sensitive: true
34
+
21
35
  globalOptions:
22
36
  - name: version
23
37
  aliases: [V]
@@ -42,6 +56,14 @@ commandSets:
42
56
  usage:
43
57
  - speckeeper init
44
58
  - speckeeper init --force
59
+ - speckeeper init --format yaml
60
+
61
+ effects:
62
+ riskLevel: medium
63
+ writes:
64
+ - target: "speckeeper.config.ts, design/ directory"
65
+ description: "generates config and starter template files"
66
+ idempotent: false
45
67
 
46
68
  options:
47
69
  - name: force
@@ -50,6 +72,21 @@ commandSets:
50
72
  schema:
51
73
  type: boolean
52
74
  default: false
75
+ effects:
76
+ riskLevel: high
77
+ writes:
78
+ - target: "existing project files"
79
+ description: "overwrites existing config and design files"
80
+ overwrite: true
81
+ destructive: true
82
+
83
+ - name: format
84
+ description: "Spec data format: ts (default) or yaml."
85
+ valueName: format
86
+ schema:
87
+ type: string
88
+ default: ts
89
+ enum: [ts, yaml]
53
90
 
54
91
  exits:
55
92
  '0':
@@ -62,28 +99,25 @@ commandSets:
62
99
  stderr:
63
100
  format: text
64
101
 
65
- x-agent:
66
- riskLevel: medium
67
- requiresConfirmation: true
68
- idempotent: false
69
- sideEffects:
70
- - file_write
71
- sideEffectNote: >-
72
- Creates config file and design/ directory structure.
73
- With --force, overwrites existing files.
74
-
75
102
  # ── build ─────────────────────────────────────────
76
103
  build:
77
104
  summary: Generate docs/ and specs/ from TypeScript models.
78
105
  description: >-
79
106
  Loads the design TypeScript models and generates machine-readable
80
107
  specs/ output and optionally human-readable docs/ output. Supports
81
- markdown, JSON, or both formats. Can watch for file changes and
82
- auto-regenerate.
108
+ markdown, JSON, or both formats.
83
109
  usage:
84
110
  - speckeeper build
85
111
  - speckeeper build --format json --output ./out
86
- - speckeeper build --watch --verbose
112
+ - speckeeper build --verbose
113
+
114
+ effects:
115
+ riskLevel: low
116
+ writes:
117
+ - target: "docs/ directory"
118
+ description: "generated Markdown documentation files"
119
+ overwrite: true
120
+ idempotent: true
87
121
 
88
122
  options:
89
123
  - name: config
@@ -120,6 +154,8 @@ commandSets:
120
154
  schema:
121
155
  type: boolean
122
156
  default: false
157
+ effects:
158
+ executionMode: watch
123
159
 
124
160
  - name: verbose
125
161
  aliases: [v]
@@ -139,17 +175,6 @@ commandSets:
139
175
  stderr:
140
176
  format: text
141
177
 
142
- x-agent:
143
- riskLevel: low
144
- requiresConfirmation: false
145
- idempotent: true
146
- sideEffects:
147
- - file_write
148
- sideEffectNote: >-
149
- When --watch is used, the process runs indefinitely and is
150
- unsuitable for non-interactive agent invocation.
151
- Always writes generated files to docs/ and specs/.
152
-
153
178
  # ── lint ──────────────────────────────────────────
154
179
  lint:
155
180
  summary: Check design integrity (ID duplicates, references, layer violations, etc.).
@@ -157,11 +182,11 @@ commandSets:
157
182
  Validates design models for structural integrity. Checks include
158
183
  ID uniqueness, ID naming conventions, reference integrity, circular
159
184
  dependency detection, phase gate enforcement, and custom model-specific
160
- lint rules. Optionally auto-fixes issues.
185
+ lint rules.
161
186
  usage:
162
187
  - speckeeper lint
163
188
  - speckeeper lint --strict --format github
164
- - speckeeper lint --phase HLD --fix
189
+ - speckeeper lint --phase HLD
165
190
 
166
191
  options:
167
192
  - name: config
@@ -191,7 +216,7 @@ commandSets:
191
216
  default: false
192
217
 
193
218
  - name: fix
194
- description: Attempt to fix auto-fixable issues.
219
+ description: Attempt to fix auto-fixable issues (not yet implemented).
195
220
  schema:
196
221
  type: boolean
197
222
  default: false
@@ -207,7 +232,7 @@ commandSets:
207
232
 
208
233
  exits:
209
234
  '0':
210
- description: No lint issues found (or all issues auto-fixed).
235
+ description: No lint issues found.
211
236
  stdout:
212
237
  format: '{options.format}'
213
238
 
@@ -217,15 +242,7 @@ commandSets:
217
242
  format: '{options.format}'
218
243
 
219
244
  x-agent:
220
- riskLevel: low
221
- requiresConfirmation: false
222
245
  idempotent: true
223
- sideEffects:
224
- - file_write
225
- sideEffectNote: >-
226
- file_write applies only when --fix is provided.
227
- Without --fix the command is read-only.
228
- safeDryRunOption: Omit --fix to run in read-only mode.
229
246
 
230
247
  # ── drift ─────────────────────────────────────────
231
248
  drift:
@@ -233,12 +250,10 @@ commandSets:
233
250
  description: >-
234
251
  Compares generated files against their expected content to detect
235
252
  manual edits (drift). Useful for CI pipelines to ensure generated
236
- docs/ files stay in sync with model definitions. Can auto-update
237
- drifted files.
253
+ docs/ files stay in sync with model definitions.
238
254
  usage:
239
255
  - speckeeper drift
240
256
  - speckeeper drift --fail-on-drift
241
- - speckeeper drift --update --format diff
242
257
 
243
258
  options:
244
259
  - name: config
@@ -254,7 +269,7 @@ commandSets:
254
269
 
255
270
  - name: update
256
271
  aliases: [u]
257
- description: Auto-update if differences are found.
272
+ description: Auto-update if differences are found (not yet implemented).
258
273
  schema:
259
274
  type: boolean
260
275
  default: false
@@ -276,49 +291,37 @@ commandSets:
276
291
 
277
292
  exits:
278
293
  '0':
279
- description: No drift detected (or drift auto-updated with --update).
294
+ description: No drift detected.
280
295
  stdout:
281
296
  format: '{options.format}'
282
297
 
283
298
  '1':
284
- description: Drift detected (with --fail-on-drift), or update failed.
299
+ description: Drift detected (with --fail-on-drift).
285
300
  stdout:
286
301
  format: '{options.format}'
287
302
 
288
303
  x-agent:
289
- riskLevel: medium
290
- requiresConfirmation: true
291
304
  idempotent: true
292
- sideEffects:
293
- - file_write
294
- sideEffectNote: >-
295
- file_write applies only when --update is provided.
296
- Without --update the command is read-only.
297
- safeDryRunOption: Omit --update to run in read-only mode.
298
305
 
299
306
  # ── check ─────────────────────────────────────────
300
307
  check:
301
308
  summary: Check external SSOT conformance (including custom models).
302
309
  description: >-
303
310
  Validates specifications against actual implementation artifacts
304
- using a global source scan. Performs existence checks (is the spec
305
- ID found in configured sources?), optional structural checks (via
306
- deep validation), and optional type checks. Sources include OpenAPI,
307
- DDL, annotations, and custom scanners. Supports filtering by check
308
- type and test coverage reporting.
311
+ using a global source scan. Performs existence checks, optional
312
+ structural checks (via deep validation), and optional type checks.
313
+ Sources include OpenAPI, DDL, annotations, and custom scanners.
309
314
  usage:
310
315
  - speckeeper check
311
316
  - speckeeper check external-ssot --verbose
312
317
  - speckeeper check test --coverage
313
- - speckeeper check openapi --strict
314
318
 
315
319
  arguments:
316
320
  - name: type
317
321
  index: 0
318
322
  required: false
319
323
  description: >-
320
- Type of check to run. Filters sources by type. When omitted,
321
- checks all configured sources.
324
+ Type of check to run. Filters sources by type.
322
325
  schema:
323
326
  type: string
324
327
  enum: [external-ssot, openapi, ddl, iac, custom, all, test]
@@ -343,7 +346,7 @@ commandSets:
343
346
 
344
347
  - name: verbose
345
348
  aliases: [v]
346
- description: Show detailed output (e.g. list unmatched specs).
349
+ description: Show detailed output.
347
350
  schema:
348
351
  type: boolean
349
352
  default: false
@@ -354,51 +357,43 @@ commandSets:
354
357
  type: boolean
355
358
  default: false
356
359
 
357
- - name: format
358
- aliases: [f]
359
- description: "Output format: text, json, github."
360
- valueName: format
361
- schema:
362
- type: string
363
- default: text
364
- enum: [text, json, github]
365
-
366
360
  exits:
367
361
  '0':
368
- description: All checks passed (all specs found in sources, deep validation passed).
362
+ description: All checks passed.
369
363
  stdout:
370
- format: '{options.format}'
364
+ format: text
371
365
 
372
366
  '1':
373
- description: Check failures found (missing specs, structural mismatches, or coverage gaps).
367
+ description: Check failures found.
374
368
  stdout:
375
- format: '{options.format}'
369
+ format: text
376
370
 
377
371
  x-agent:
378
- riskLevel: low
379
- requiresConfirmation: false
380
372
  idempotent: true
381
- sideEffects: []
382
373
 
383
374
  # ── new ───────────────────────────────────────────
384
375
  new:
385
376
  summary: Create a new element with auto-generated ID.
386
377
  description: >-
387
378
  Generates a new design element file with a unique auto-generated ID
388
- based on the model's ID prefix and existing elements. Supports all
389
- built-in model types and uses templates for file generation.
379
+ based on the model's ID prefix and existing elements.
390
380
  usage:
391
381
  - speckeeper new requirement --name "User Authentication"
392
- - speckeeper new entity --kind functional
393
- - speckeeper new usecase --template custom-template.ts
382
+ - speckeeper new entity
383
+
384
+ effects:
385
+ riskLevel: low
386
+ writes:
387
+ - target: "design/ directory"
388
+ description: "new TypeScript spec file with auto-generated ID"
389
+ idempotent: false
394
390
 
395
391
  arguments:
396
392
  - name: type
397
393
  index: 0
398
394
  required: true
399
395
  description: >-
400
- Element type to create: requirement, usecase, entity, component,
401
- screen, flow, error-case, term.
396
+ Element type to create.
402
397
  schema:
403
398
  type: string
404
399
  enum: [requirement, usecase, entity, component, screen, flow, error-case, term]
@@ -437,51 +432,38 @@ commandSets:
437
432
  encoding: utf-8
438
433
 
439
434
  - name: dry-run
440
- description: Preview generated file content and ID without writing to disk.
435
+ description: Preview generated file content without writing.
441
436
  schema:
442
437
  type: boolean
443
438
  default: false
444
439
 
445
440
  exits:
446
441
  '0':
447
- description: Element file created (or previewed with --dry-run) with auto-generated ID.
442
+ description: Element file created (or previewed with --dry-run).
448
443
  stdout:
449
444
  format: text
450
445
 
451
446
  '1':
452
- description: Creation failed (invalid type, template error, or write error).
447
+ description: Creation failed.
453
448
  stderr:
454
449
  format: text
455
450
 
456
- x-agent:
457
- riskLevel: low
458
- requiresConfirmation: false
459
- idempotent: false
460
- sideEffects:
461
- - file_write
462
- sideEffectNote: >-
463
- Creates a new TypeScript spec file with auto-generated ID.
464
- With --dry-run, only previews the generated content without writing.
465
- safeDryRunOption: --dry-run
466
-
467
451
  # ── impact ────────────────────────────────────────
468
452
  impact:
469
453
  summary: Analyze impact of changes to an ID.
470
454
  description: >-
471
455
  Performs change impact analysis by traversing the relation graph
472
- starting from the specified spec ID. Shows upstream (dependants)
473
- and/or downstream (dependencies) elements up to the configured
474
- depth. Supports text, JSON, and Mermaid diagram output.
456
+ starting from the specified spec ID.
475
457
  usage:
476
458
  - speckeeper impact FR-001
477
- - speckeeper impact ENT-ORDER --direction upstream --depth 5
459
+ - speckeeper impact ENT-ORDER --depth 5
478
460
  - speckeeper impact COMP-AUTH --format mermaid
479
461
 
480
462
  arguments:
481
463
  - name: id
482
464
  index: 0
483
465
  required: true
484
- description: "Spec ID to analyze (e.g. REQ-001, ENT-ORDER, COMP-AUTH)."
466
+ description: "Spec ID to analyze (e.g. REQ-001, ENT-ORDER)."
485
467
  schema:
486
468
  type: string
487
469
 
@@ -525,7 +507,7 @@ commandSets:
525
507
 
526
508
  exits:
527
509
  '0':
528
- description: Impact analysis completed and displayed.
510
+ description: Impact analysis completed.
529
511
  stdout:
530
512
  format: '{options.format}'
531
513
 
@@ -535,23 +517,26 @@ commandSets:
535
517
  format: text
536
518
 
537
519
  x-agent:
538
- riskLevel: low
539
- requiresConfirmation: false
540
520
  idempotent: true
541
- sideEffects: []
542
521
 
543
522
  # ── scaffold ──────────────────────────────────────
544
523
  scaffold:
545
524
  summary: Generate _models/ from a Mermaid flowchart definition.
546
525
  description: >-
547
526
  Parses a Mermaid flowchart from a Markdown file and generates
548
- TypeScript model classes, spec data files, and an index file in
549
- the design directory. Uses class-based artifact resolution to
550
- determine model types from Mermaid node classes.
527
+ TypeScript model classes, spec data files, and an index file.
551
528
  usage:
552
529
  - speckeeper scaffold --source requirements.md
553
530
  - speckeeper scaffold --source flow.md --output design/ --force
554
531
  - speckeeper scaffold --source arch.md --dry-run
532
+ - speckeeper scaffold --source arch.md --format yaml
533
+
534
+ effects:
535
+ riskLevel: low
536
+ writes:
537
+ - target: "design/ directory"
538
+ description: "generated _models/ and spec data files"
539
+ idempotent: false
555
540
 
556
541
  options:
557
542
  - name: source
@@ -580,6 +565,12 @@ commandSets:
580
565
  schema:
581
566
  type: boolean
582
567
  default: false
568
+ effects:
569
+ riskLevel: medium
570
+ writes:
571
+ - target: "existing model and spec files"
572
+ description: "overwrites existing TypeScript model source files"
573
+ overwrite: true
583
574
 
584
575
  - name: dry-run
585
576
  description: Preview generated files without writing.
@@ -587,38 +578,97 @@ commandSets:
587
578
  type: boolean
588
579
  default: false
589
580
 
581
+ - name: format
582
+ description: "Spec data format: ts (default) or yaml."
583
+ valueName: format
584
+ schema:
585
+ type: string
586
+ default: ts
587
+ enum: [ts, yaml]
588
+
590
589
  exits:
591
590
  '0':
592
- description: >-
593
- Model files generated (or previewed with --dry-run) successfully.
591
+ description: Model files generated (or previewed with --dry-run).
594
592
  stdout:
595
593
  format: text
596
594
 
597
595
  '1':
598
- description: >-
599
- Scaffold failed (source file not found, invalid Mermaid syntax,
600
- or write error).
596
+ description: Scaffold failed.
601
597
  stderr:
602
598
  format: text
603
599
 
604
600
  x-agent:
605
- riskLevel: high
606
- requiresConfirmation: true
607
- idempotent: false
608
- sideEffects:
609
- - file_write
610
- sideEffectNote: >-
611
- --force overwrites existing TypeScript model source files.
612
- safeDryRunOption: --dry-run
601
+ recommendedBeforeUse:
602
+ - "Run with --dry-run first to preview generated files"
603
+
604
+ # ── convert ───────────────────────────────────────
605
+ convert:
606
+ summary: Convert a TS spec data file to YAML format.
607
+ description: >-
608
+ Reads a TypeScript spec data file that exports a SpecModule via
609
+ defineSpecs(), extracts model IDs and spec data, and writes the
610
+ equivalent YAML file. Supports --dry-run for preview.
611
+ usage:
612
+ - speckeeper convert design/glossary.ts
613
+ - speckeeper convert design/requirements.ts --output reqs.yaml
614
+ - speckeeper convert design/glossary.ts --dry-run
615
+
616
+ effects:
617
+ riskLevel: low
618
+ writes:
619
+ - target: ".yaml output file"
620
+ description: "YAML conversion of the TS spec data"
621
+ idempotent: true
622
+
623
+ arguments:
624
+ - name: file
625
+ index: 0
626
+ required: true
627
+ description: Path to TS spec data file.
628
+ schema:
629
+ type: string
630
+
631
+ options:
632
+ - name: output
633
+ aliases: [o]
634
+ description: "Output file path (default: same name with .yaml extension)."
635
+ valueName: path
636
+ schema:
637
+ type: string
638
+ file:
639
+ mode: write
640
+ encoding: utf-8
641
+
642
+ - name: dry-run
643
+ aliases: [n]
644
+ description: Preview conversion without writing.
645
+ schema:
646
+ type: boolean
647
+ default: false
648
+
649
+ exits:
650
+ '0':
651
+ description: Conversion completed (or previewed with --dry-run).
652
+ stdout:
653
+ format: text
654
+
655
+ '1':
656
+ description: Conversion failed (file not found, invalid module, or write error).
657
+ stderr:
658
+ format: text
613
659
 
614
660
  # ── audit-requirements ──────────────────────────────
615
661
  audit-requirements:
616
662
  summary: Run LLM-based requirement quality audit.
617
663
  description: >-
618
664
  Performs semantic analysis of design specs using LLM to identify
619
- quality issues that static lint cannot detect. Evaluates verifiability,
620
- ambiguity, granularity, terminology consistency, and design-mixing.
621
- Requires agent-contracts-runtime as an optional peer dependency.
665
+ quality issues that static lint cannot detect.
666
+
667
+ effects:
668
+ network:
669
+ description: LLM API calls to configured provider
670
+ idempotent: true
671
+
622
672
  usage:
623
673
  - speckeeper audit-requirements
624
674
  - speckeeper audit-requirements --adapter gemini --dry-run
@@ -725,17 +775,8 @@ commandSets:
725
775
  format: text
726
776
 
727
777
  x-agent:
728
- riskLevel: medium
729
- requiresConfirmation: false
730
- idempotent: true
731
- sideEffects: [network, file_write]
732
- sideEffectNote: >-
733
- Network calls to LLM provider when adapter is not mock.
734
- Filesystem write when --output is specified.
735
- Exit 10 = valid output with blocking findings (stdout contains result).
736
- Exit 11 = missing runtime dependency (non-retryable).
737
- safeDryRunOption: --dry-run
738
- expectedDurationMs: 120000
778
+ recommendedBeforeUse:
779
+ - "Run with --dry-run first to preview the prompt"
739
780
  retryableExitCodes: [12]
740
781
 
741
782
  # ── propose-trace-links ─────────────────────────────
@@ -743,13 +784,16 @@ commandSets:
743
784
  summary: LLM-based traceability link proposal.
744
785
  description: >-
745
786
  Analyzes spec definitions and external source scan results to
746
- propose candidate traceability links between specs and
747
- implementation artifacts. Each link includes a confidence score
748
- and rationale.
787
+ propose candidate traceability links.
788
+
789
+ effects:
790
+ network:
791
+ description: LLM API calls to configured provider
792
+ idempotent: true
793
+
749
794
  usage:
750
795
  - speckeeper propose-trace-links
751
796
  - speckeeper propose-trace-links --adapter claude --report-format json
752
- - speckeeper propose-trace-links --dry-run
753
797
 
754
798
  options:
755
799
  - name: config
@@ -852,17 +896,8 @@ commandSets:
852
896
  format: text
853
897
 
854
898
  x-agent:
855
- riskLevel: medium
856
- requiresConfirmation: false
857
- idempotent: true
858
- sideEffects: [network, file_write]
859
- sideEffectNote: >-
860
- Network calls to LLM provider when adapter is not mock.
861
- Filesystem write when --output is specified.
862
- Exit 10 = valid output with blocking findings (stdout contains result).
863
- Exit 11 = missing runtime dependency (non-retryable).
864
- safeDryRunOption: --dry-run
865
- expectedDurationMs: 120000
899
+ recommendedBeforeUse:
900
+ - "Run with --dry-run first to preview the prompt"
866
901
  retryableExitCodes: [12]
867
902
 
868
903
  # ── explain-impact ──────────────────────────────────
@@ -870,34 +905,26 @@ commandSets:
870
905
  summary: LLM-based explanation of impact analysis output.
871
906
  description: >-
872
907
  Reads JSON output from speckeeper impact on stdin and generates
873
- a human-readable explanation suitable for PM/executive audiences.
874
- Includes affected artifact categorization, test considerations,
875
- and release risk assessment.
876
- usage:
877
- - speckeeper impact FR-001 --format json | speckeeper explain-impact
878
- - speckeeper impact ENT-ORDER --format json | speckeeper explain-impact --adapter claude
908
+ a human-readable explanation.
909
+
910
+ effects:
911
+ network:
912
+ description: LLM API calls to configured provider
913
+ idempotent: true
879
914
 
880
915
  stdin:
881
916
  required: true
882
917
  format: json
883
918
  description: >-
884
919
  JSON output from speckeeper impact --format json.
885
- Must contain target, targetType, and impactedNodes fields.
886
920
  schema:
887
921
  $ref: '#/components/schemas/ImpactAnalysisOutput'
888
922
 
889
- options:
890
- - name: config
891
- aliases: [c]
892
- description: Path to config file.
893
- valueName: path
894
- schema:
895
- type: string
896
- file:
897
- mode: read
898
- exists: true
899
- encoding: utf-8
923
+ usage:
924
+ - speckeeper impact FR-001 --format json | speckeeper explain-impact
925
+ - speckeeper impact ENT-ORDER --format json | speckeeper explain-impact --adapter claude
900
926
 
927
+ options:
901
928
  - name: adapter
902
929
  aliases: [a]
903
930
  description: SDK adapter to use for LLM execution.
@@ -965,11 +992,6 @@ commandSets:
965
992
  format: text
966
993
 
967
994
  '2':
968
- description: Configuration or input error.
969
- stderr:
970
- format: text
971
-
972
- '3':
973
995
  description: No input on stdin.
974
996
  stderr:
975
997
  format: text
@@ -992,27 +1014,21 @@ commandSets:
992
1014
  format: text
993
1015
 
994
1016
  x-agent:
995
- riskLevel: medium
996
- requiresConfirmation: false
997
- idempotent: true
998
- sideEffects: [network, file_write]
999
- sideEffectNote: >-
1000
- Network calls to LLM provider when adapter is not mock.
1001
- Filesystem write when --output is specified.
1002
- Exit 10 = valid output with blocking findings (stdout contains result).
1003
- Exit 11 = missing runtime dependency (non-retryable).
1004
- safeDryRunOption: --dry-run
1005
- expectedDurationMs: 120000
1017
+ recommendedBeforeUse:
1018
+ - "Run with --dry-run first to preview the prompt"
1006
1019
  retryableExitCodes: [12]
1007
1020
 
1008
1021
  # ── propose-acceptance-criteria ─────────────────────
1009
1022
  propose-acceptance-criteria:
1010
1023
  summary: LLM-based acceptance criteria proposal.
1011
1024
  description: >-
1012
- Analyzes design specs and proposes testable acceptance criteria
1013
- for each target spec. Optionally takes spec IDs as arguments to
1014
- scope the proposal. Criteria are proposed in Given/When/Then or
1015
- verification format.
1025
+ Analyzes design specs and proposes testable acceptance criteria.
1026
+
1027
+ effects:
1028
+ network:
1029
+ description: LLM API calls to configured provider
1030
+ idempotent: true
1031
+
1016
1032
  usage:
1017
1033
  - speckeeper propose-acceptance-criteria
1018
1034
  - speckeeper propose-acceptance-criteria FR-001 FR-002
@@ -1024,8 +1040,7 @@ commandSets:
1024
1040
  required: false
1025
1041
  variadic: true
1026
1042
  description: >-
1027
- Spec IDs to propose criteria for.
1028
- Defaults to all specs if omitted.
1043
+ Spec IDs to propose criteria for. Defaults to all specs if omitted.
1029
1044
  schema:
1030
1045
  type: string
1031
1046
 
@@ -1130,22 +1145,12 @@ commandSets:
1130
1145
  format: text
1131
1146
 
1132
1147
  x-agent:
1133
- riskLevel: medium
1134
- requiresConfirmation: false
1135
- idempotent: true
1136
- sideEffects: [network, file_write]
1137
- sideEffectNote: >-
1138
- Network calls to LLM provider when adapter is not mock.
1139
- Filesystem write when --output is specified.
1140
- Exit 10 = valid output with blocking findings (stdout contains result).
1141
- Exit 11 = missing runtime dependency (non-retryable).
1142
- safeDryRunOption: --dry-run
1143
- expectedDurationMs: 120000
1148
+ recommendedBeforeUse:
1149
+ - "Run with --dry-run first to preview the prompt"
1144
1150
  retryableExitCodes: [12]
1145
1151
 
1146
1152
  components:
1147
1153
  schemas:
1148
- # ── AI Agent Interoperability Schemas ──────────────────
1149
1154
  AgentEvidence:
1150
1155
  $ref: 'components.yaml#/schemas/agent-evidence'
1151
1156
  AgentFinding:
@@ -1171,13 +1176,10 @@ components:
1171
1176
  properties:
1172
1177
  from:
1173
1178
  type: string
1174
- description: Source spec ID.
1175
1179
  relation:
1176
1180
  type: string
1177
- description: Relation type (implements, verifiedBy, satisfies, etc.).
1178
1181
  to:
1179
1182
  type: string
1180
- description: Target ID.
1181
1183
  confidence:
1182
1184
  type: number
1183
1185
  minimum: 0
@@ -1195,7 +1197,6 @@ components:
1195
1197
  properties:
1196
1198
  explanation:
1197
1199
  type: string
1198
- description: Multi-paragraph human-readable explanation in Markdown format.
1199
1200
  affectedArtifacts:
1200
1201
  type: array
1201
1202
  items:
@@ -1246,15 +1247,12 @@ components:
1246
1247
  type: object
1247
1248
  description: >-
1248
1249
  JSON output from speckeeper impact --format json.
1249
- Used as stdin input for explain-impact command.
1250
1250
  required: [target, targetType, impactedNodes]
1251
1251
  properties:
1252
1252
  target:
1253
1253
  type: string
1254
- description: The spec ID that was analyzed.
1255
1254
  targetType:
1256
1255
  type: string
1257
- description: Type of the target spec (requirement, usecase, entity, etc.).
1258
1256
  direction:
1259
1257
  type: string
1260
1258
  enum: [upstream, downstream, both]