speckeeper 0.12.0 → 0.13.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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  TypeScript-first specification validation framework — validate design consistency, external SSOT integrity, and traceability with type-safe TypeScript DSL. Supports design lint, external source checks (OpenAPI, DDL, annotations), drift detection, impact analysis, and scaffolding from Mermaid flowcharts.
4
4
 
5
- **Version:** 0.10.1
5
+ **Version:** 0.13.0
6
6
 
7
7
  ## Table of Contents
8
8
 
@@ -402,7 +402,7 @@ speckeeper scaffold --source arch.md --format yaml
402
402
 
403
403
  ```yaml
404
404
  x-agent:
405
- recommendedBeforeUse:
405
+ recommended_before_use:
406
406
  - Run with --dry-run first to preview generated files
407
407
  ```
408
408
 
@@ -488,6 +488,222 @@ speckeeper audit-requirements --report-format json --output audit.json
488
488
 
489
489
  - **stdout:** format=`{options.report-format}`
490
490
 
491
+ | Property | Type | Required | Description |
492
+ |---|---|---|---|
493
+ | `summary` | `string` | Yes | |
494
+ | `riskLevel` | `"low" \| "medium" \| "high" \| "critical"` | Yes | |
495
+ | `findings` | `object[]` | Yes | |
496
+ | `findings[].id` | `string` | No | Unique finding identifier. |
497
+ | `findings[].severity` | `"info" \| "warning" \| "error" \| "critical"` | Yes | |
498
+ | `findings[].category` | `string` | Yes | Finding category (e.g. verifiability, ambiguity, granularity). |
499
+ | `findings[].target` | `string` | No | Target of the finding (spec ID, model type). |
500
+ | `findings[].location` | `string` | No | Location within the target. |
501
+ | `findings[].message` | `string` | Yes | |
502
+ | `findings[].recommendation` | `string` | No | |
503
+ | `findings[].confidence` | `number (min: 0, max: 1)` | No | Confidence score (0-1) for LLM-generated findings. |
504
+ | `findings[].evidence` | `object[]` | No | |
505
+ | `findings[].evidence[].kind` | `enum(7 values)` | Yes | |
506
+ | `findings[].evidence[].target` | `string` | No | Target identifier (file path, command ID, schema name). |
507
+ | `findings[].evidence[].location` | `string` | No | Location within the target (line number, JSON pointer). |
508
+ | `findings[].evidence[].excerpt` | `string` | No | Relevant excerpt from the target. |
509
+ | `findings[].details` | `Record<string, any>` | No | |
510
+ | `recommendedActions` | `object[]` | No | |
511
+ | `recommendedActions[].kind` | `enum(6 values)` | Yes | |
512
+ | `recommendedActions[].title` | `string` | Yes | |
513
+ | `recommendedActions[].command` | `string` | No | CLI command to run (for run_command kind). |
514
+ | `recommendedActions[].target` | `string` | No | Target file or resource. |
515
+ | `recommendedActions[].rationale` | `string` | No | |
516
+ | `metadata` | `object` | No | |
517
+ | `metadata.tool` | `string` | No | |
518
+ | `metadata.command` | `string` | No | |
519
+ | `metadata.version` | `string` | No | |
520
+ | `metadata.generatedAt` | `string` | No | |
521
+ | `metadata.adapter` | `string` | No | |
522
+ | `metadata.model` | `string` | No | |
523
+
524
+ <details>
525
+ <summary>JSON Schema</summary>
526
+
527
+ ```json
528
+ {
529
+ "type": "object",
530
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
531
+ "required": [
532
+ "summary",
533
+ "riskLevel",
534
+ "findings"
535
+ ],
536
+ "properties": {
537
+ "summary": {
538
+ "type": "string"
539
+ },
540
+ "riskLevel": {
541
+ "type": "string",
542
+ "enum": [
543
+ "low",
544
+ "medium",
545
+ "high",
546
+ "critical"
547
+ ]
548
+ },
549
+ "findings": {
550
+ "type": "array",
551
+ "items": {
552
+ "type": "object",
553
+ "description": "A single finding from an agent audit or analysis.",
554
+ "required": [
555
+ "severity",
556
+ "category",
557
+ "message"
558
+ ],
559
+ "properties": {
560
+ "id": {
561
+ "type": "string",
562
+ "description": "Unique finding identifier."
563
+ },
564
+ "severity": {
565
+ "type": "string",
566
+ "enum": [
567
+ "info",
568
+ "warning",
569
+ "error",
570
+ "critical"
571
+ ]
572
+ },
573
+ "category": {
574
+ "type": "string",
575
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
576
+ },
577
+ "target": {
578
+ "type": "string",
579
+ "description": "Target of the finding (spec ID, model type)."
580
+ },
581
+ "location": {
582
+ "type": "string",
583
+ "description": "Location within the target."
584
+ },
585
+ "message": {
586
+ "type": "string"
587
+ },
588
+ "recommendation": {
589
+ "type": "string"
590
+ },
591
+ "confidence": {
592
+ "type": "number",
593
+ "minimum": 0,
594
+ "maximum": 1,
595
+ "description": "Confidence score (0-1) for LLM-generated findings."
596
+ },
597
+ "evidence": {
598
+ "type": "array",
599
+ "items": {
600
+ "type": "object",
601
+ "description": "Evidence supporting an agent finding.",
602
+ "required": [
603
+ "kind"
604
+ ],
605
+ "properties": {
606
+ "kind": {
607
+ "type": "string",
608
+ "enum": [
609
+ "file",
610
+ "command",
611
+ "schema",
612
+ "diff",
613
+ "stdout",
614
+ "stderr",
615
+ "text"
616
+ ]
617
+ },
618
+ "target": {
619
+ "type": "string",
620
+ "description": "Target identifier (file path, command ID, schema name)."
621
+ },
622
+ "location": {
623
+ "type": "string",
624
+ "description": "Location within the target (line number, JSON pointer)."
625
+ },
626
+ "excerpt": {
627
+ "type": "string",
628
+ "description": "Relevant excerpt from the target."
629
+ }
630
+ }
631
+ }
632
+ },
633
+ "details": {
634
+ "type": "object",
635
+ "additionalProperties": true
636
+ }
637
+ }
638
+ }
639
+ },
640
+ "recommendedActions": {
641
+ "type": "array",
642
+ "items": {
643
+ "type": "object",
644
+ "description": "A recommended action from an agent audit.",
645
+ "required": [
646
+ "kind",
647
+ "title"
648
+ ],
649
+ "properties": {
650
+ "kind": {
651
+ "type": "string",
652
+ "enum": [
653
+ "run_command",
654
+ "edit_file",
655
+ "review",
656
+ "confirm",
657
+ "block",
658
+ "ignore"
659
+ ]
660
+ },
661
+ "title": {
662
+ "type": "string"
663
+ },
664
+ "command": {
665
+ "type": "string",
666
+ "description": "CLI command to run (for run_command kind)."
667
+ },
668
+ "target": {
669
+ "type": "string",
670
+ "description": "Target file or resource."
671
+ },
672
+ "rationale": {
673
+ "type": "string"
674
+ }
675
+ }
676
+ }
677
+ },
678
+ "metadata": {
679
+ "type": "object",
680
+ "properties": {
681
+ "tool": {
682
+ "type": "string"
683
+ },
684
+ "command": {
685
+ "type": "string"
686
+ },
687
+ "version": {
688
+ "type": "string"
689
+ },
690
+ "generatedAt": {
691
+ "type": "string"
692
+ },
693
+ "adapter": {
694
+ "type": "string"
695
+ },
696
+ "model": {
697
+ "type": "string"
698
+ }
699
+ }
700
+ }
701
+ }
702
+ }
703
+ ```
704
+
705
+ </details>
706
+
491
707
  **Exit 1:** Unexpected error.
492
708
 
493
709
  - **stderr:** format=`text`
@@ -500,6 +716,222 @@ speckeeper audit-requirements --report-format json --output audit.json
500
716
 
501
717
  - **stdout:** format=`{options.report-format}`
502
718
 
719
+ | Property | Type | Required | Description |
720
+ |---|---|---|---|
721
+ | `summary` | `string` | Yes | |
722
+ | `riskLevel` | `"low" \| "medium" \| "high" \| "critical"` | Yes | |
723
+ | `findings` | `object[]` | Yes | |
724
+ | `findings[].id` | `string` | No | Unique finding identifier. |
725
+ | `findings[].severity` | `"info" \| "warning" \| "error" \| "critical"` | Yes | |
726
+ | `findings[].category` | `string` | Yes | Finding category (e.g. verifiability, ambiguity, granularity). |
727
+ | `findings[].target` | `string` | No | Target of the finding (spec ID, model type). |
728
+ | `findings[].location` | `string` | No | Location within the target. |
729
+ | `findings[].message` | `string` | Yes | |
730
+ | `findings[].recommendation` | `string` | No | |
731
+ | `findings[].confidence` | `number (min: 0, max: 1)` | No | Confidence score (0-1) for LLM-generated findings. |
732
+ | `findings[].evidence` | `object[]` | No | |
733
+ | `findings[].evidence[].kind` | `enum(7 values)` | Yes | |
734
+ | `findings[].evidence[].target` | `string` | No | Target identifier (file path, command ID, schema name). |
735
+ | `findings[].evidence[].location` | `string` | No | Location within the target (line number, JSON pointer). |
736
+ | `findings[].evidence[].excerpt` | `string` | No | Relevant excerpt from the target. |
737
+ | `findings[].details` | `Record<string, any>` | No | |
738
+ | `recommendedActions` | `object[]` | No | |
739
+ | `recommendedActions[].kind` | `enum(6 values)` | Yes | |
740
+ | `recommendedActions[].title` | `string` | Yes | |
741
+ | `recommendedActions[].command` | `string` | No | CLI command to run (for run_command kind). |
742
+ | `recommendedActions[].target` | `string` | No | Target file or resource. |
743
+ | `recommendedActions[].rationale` | `string` | No | |
744
+ | `metadata` | `object` | No | |
745
+ | `metadata.tool` | `string` | No | |
746
+ | `metadata.command` | `string` | No | |
747
+ | `metadata.version` | `string` | No | |
748
+ | `metadata.generatedAt` | `string` | No | |
749
+ | `metadata.adapter` | `string` | No | |
750
+ | `metadata.model` | `string` | No | |
751
+
752
+ <details>
753
+ <summary>JSON Schema</summary>
754
+
755
+ ```json
756
+ {
757
+ "type": "object",
758
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
759
+ "required": [
760
+ "summary",
761
+ "riskLevel",
762
+ "findings"
763
+ ],
764
+ "properties": {
765
+ "summary": {
766
+ "type": "string"
767
+ },
768
+ "riskLevel": {
769
+ "type": "string",
770
+ "enum": [
771
+ "low",
772
+ "medium",
773
+ "high",
774
+ "critical"
775
+ ]
776
+ },
777
+ "findings": {
778
+ "type": "array",
779
+ "items": {
780
+ "type": "object",
781
+ "description": "A single finding from an agent audit or analysis.",
782
+ "required": [
783
+ "severity",
784
+ "category",
785
+ "message"
786
+ ],
787
+ "properties": {
788
+ "id": {
789
+ "type": "string",
790
+ "description": "Unique finding identifier."
791
+ },
792
+ "severity": {
793
+ "type": "string",
794
+ "enum": [
795
+ "info",
796
+ "warning",
797
+ "error",
798
+ "critical"
799
+ ]
800
+ },
801
+ "category": {
802
+ "type": "string",
803
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
804
+ },
805
+ "target": {
806
+ "type": "string",
807
+ "description": "Target of the finding (spec ID, model type)."
808
+ },
809
+ "location": {
810
+ "type": "string",
811
+ "description": "Location within the target."
812
+ },
813
+ "message": {
814
+ "type": "string"
815
+ },
816
+ "recommendation": {
817
+ "type": "string"
818
+ },
819
+ "confidence": {
820
+ "type": "number",
821
+ "minimum": 0,
822
+ "maximum": 1,
823
+ "description": "Confidence score (0-1) for LLM-generated findings."
824
+ },
825
+ "evidence": {
826
+ "type": "array",
827
+ "items": {
828
+ "type": "object",
829
+ "description": "Evidence supporting an agent finding.",
830
+ "required": [
831
+ "kind"
832
+ ],
833
+ "properties": {
834
+ "kind": {
835
+ "type": "string",
836
+ "enum": [
837
+ "file",
838
+ "command",
839
+ "schema",
840
+ "diff",
841
+ "stdout",
842
+ "stderr",
843
+ "text"
844
+ ]
845
+ },
846
+ "target": {
847
+ "type": "string",
848
+ "description": "Target identifier (file path, command ID, schema name)."
849
+ },
850
+ "location": {
851
+ "type": "string",
852
+ "description": "Location within the target (line number, JSON pointer)."
853
+ },
854
+ "excerpt": {
855
+ "type": "string",
856
+ "description": "Relevant excerpt from the target."
857
+ }
858
+ }
859
+ }
860
+ },
861
+ "details": {
862
+ "type": "object",
863
+ "additionalProperties": true
864
+ }
865
+ }
866
+ }
867
+ },
868
+ "recommendedActions": {
869
+ "type": "array",
870
+ "items": {
871
+ "type": "object",
872
+ "description": "A recommended action from an agent audit.",
873
+ "required": [
874
+ "kind",
875
+ "title"
876
+ ],
877
+ "properties": {
878
+ "kind": {
879
+ "type": "string",
880
+ "enum": [
881
+ "run_command",
882
+ "edit_file",
883
+ "review",
884
+ "confirm",
885
+ "block",
886
+ "ignore"
887
+ ]
888
+ },
889
+ "title": {
890
+ "type": "string"
891
+ },
892
+ "command": {
893
+ "type": "string",
894
+ "description": "CLI command to run (for run_command kind)."
895
+ },
896
+ "target": {
897
+ "type": "string",
898
+ "description": "Target file or resource."
899
+ },
900
+ "rationale": {
901
+ "type": "string"
902
+ }
903
+ }
904
+ }
905
+ },
906
+ "metadata": {
907
+ "type": "object",
908
+ "properties": {
909
+ "tool": {
910
+ "type": "string"
911
+ },
912
+ "command": {
913
+ "type": "string"
914
+ },
915
+ "version": {
916
+ "type": "string"
917
+ },
918
+ "generatedAt": {
919
+ "type": "string"
920
+ },
921
+ "adapter": {
922
+ "type": "string"
923
+ },
924
+ "model": {
925
+ "type": "string"
926
+ }
927
+ }
928
+ }
929
+ }
930
+ }
931
+ ```
932
+
933
+ </details>
934
+
503
935
  **Exit 11:** Runtime dependency missing (agent-contracts-runtime).
504
936
 
505
937
  - **stderr:** format=`text`
@@ -512,7 +944,7 @@ speckeeper audit-requirements --report-format json --output audit.json
512
944
 
513
945
  ```yaml
514
946
  x-agent:
515
- recommendedBeforeUse:
947
+ recommended_before_use:
516
948
  - Run with --dry-run first to preview the prompt
517
949
  retryableExitCodes:
518
950
  - 12
@@ -554,6 +986,236 @@ speckeeper propose-trace-links --adapter claude --report-format json
554
986
 
555
987
  - **stdout:** format=`{options.report-format}`
556
988
 
989
+
990
+ <details>
991
+ <summary>JSON Schema</summary>
992
+
993
+ ```json
994
+ {
995
+ "type": "object",
996
+ "description": "Result of trace link proposal with candidate links.",
997
+ "allOf": [
998
+ {
999
+ "type": "object",
1000
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
1001
+ "required": [
1002
+ "summary",
1003
+ "riskLevel",
1004
+ "findings"
1005
+ ],
1006
+ "properties": {
1007
+ "summary": {
1008
+ "type": "string"
1009
+ },
1010
+ "riskLevel": {
1011
+ "type": "string",
1012
+ "enum": [
1013
+ "low",
1014
+ "medium",
1015
+ "high",
1016
+ "critical"
1017
+ ]
1018
+ },
1019
+ "findings": {
1020
+ "type": "array",
1021
+ "items": {
1022
+ "type": "object",
1023
+ "description": "A single finding from an agent audit or analysis.",
1024
+ "required": [
1025
+ "severity",
1026
+ "category",
1027
+ "message"
1028
+ ],
1029
+ "properties": {
1030
+ "id": {
1031
+ "type": "string",
1032
+ "description": "Unique finding identifier."
1033
+ },
1034
+ "severity": {
1035
+ "type": "string",
1036
+ "enum": [
1037
+ "info",
1038
+ "warning",
1039
+ "error",
1040
+ "critical"
1041
+ ]
1042
+ },
1043
+ "category": {
1044
+ "type": "string",
1045
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
1046
+ },
1047
+ "target": {
1048
+ "type": "string",
1049
+ "description": "Target of the finding (spec ID, model type)."
1050
+ },
1051
+ "location": {
1052
+ "type": "string",
1053
+ "description": "Location within the target."
1054
+ },
1055
+ "message": {
1056
+ "type": "string"
1057
+ },
1058
+ "recommendation": {
1059
+ "type": "string"
1060
+ },
1061
+ "confidence": {
1062
+ "type": "number",
1063
+ "minimum": 0,
1064
+ "maximum": 1,
1065
+ "description": "Confidence score (0-1) for LLM-generated findings."
1066
+ },
1067
+ "evidence": {
1068
+ "type": "array",
1069
+ "items": {
1070
+ "type": "object",
1071
+ "description": "Evidence supporting an agent finding.",
1072
+ "required": [
1073
+ "kind"
1074
+ ],
1075
+ "properties": {
1076
+ "kind": {
1077
+ "type": "string",
1078
+ "enum": [
1079
+ "file",
1080
+ "command",
1081
+ "schema",
1082
+ "diff",
1083
+ "stdout",
1084
+ "stderr",
1085
+ "text"
1086
+ ]
1087
+ },
1088
+ "target": {
1089
+ "type": "string",
1090
+ "description": "Target identifier (file path, command ID, schema name)."
1091
+ },
1092
+ "location": {
1093
+ "type": "string",
1094
+ "description": "Location within the target (line number, JSON pointer)."
1095
+ },
1096
+ "excerpt": {
1097
+ "type": "string",
1098
+ "description": "Relevant excerpt from the target."
1099
+ }
1100
+ }
1101
+ }
1102
+ },
1103
+ "details": {
1104
+ "type": "object",
1105
+ "additionalProperties": true
1106
+ }
1107
+ }
1108
+ }
1109
+ },
1110
+ "recommendedActions": {
1111
+ "type": "array",
1112
+ "items": {
1113
+ "type": "object",
1114
+ "description": "A recommended action from an agent audit.",
1115
+ "required": [
1116
+ "kind",
1117
+ "title"
1118
+ ],
1119
+ "properties": {
1120
+ "kind": {
1121
+ "type": "string",
1122
+ "enum": [
1123
+ "run_command",
1124
+ "edit_file",
1125
+ "review",
1126
+ "confirm",
1127
+ "block",
1128
+ "ignore"
1129
+ ]
1130
+ },
1131
+ "title": {
1132
+ "type": "string"
1133
+ },
1134
+ "command": {
1135
+ "type": "string",
1136
+ "description": "CLI command to run (for run_command kind)."
1137
+ },
1138
+ "target": {
1139
+ "type": "string",
1140
+ "description": "Target file or resource."
1141
+ },
1142
+ "rationale": {
1143
+ "type": "string"
1144
+ }
1145
+ }
1146
+ }
1147
+ },
1148
+ "metadata": {
1149
+ "type": "object",
1150
+ "properties": {
1151
+ "tool": {
1152
+ "type": "string"
1153
+ },
1154
+ "command": {
1155
+ "type": "string"
1156
+ },
1157
+ "version": {
1158
+ "type": "string"
1159
+ },
1160
+ "generatedAt": {
1161
+ "type": "string"
1162
+ },
1163
+ "adapter": {
1164
+ "type": "string"
1165
+ },
1166
+ "model": {
1167
+ "type": "string"
1168
+ }
1169
+ }
1170
+ }
1171
+ }
1172
+ },
1173
+ {
1174
+ "type": "object",
1175
+ "required": [
1176
+ "candidateLinks"
1177
+ ],
1178
+ "properties": {
1179
+ "candidateLinks": {
1180
+ "type": "array",
1181
+ "items": {
1182
+ "type": "object",
1183
+ "required": [
1184
+ "from",
1185
+ "relation",
1186
+ "to",
1187
+ "confidence",
1188
+ "reason"
1189
+ ],
1190
+ "properties": {
1191
+ "from": {
1192
+ "type": "string"
1193
+ },
1194
+ "relation": {
1195
+ "type": "string"
1196
+ },
1197
+ "to": {
1198
+ "type": "string"
1199
+ },
1200
+ "confidence": {
1201
+ "type": "number",
1202
+ "minimum": 0,
1203
+ "maximum": 1
1204
+ },
1205
+ "reason": {
1206
+ "type": "string"
1207
+ }
1208
+ }
1209
+ }
1210
+ }
1211
+ }
1212
+ }
1213
+ ]
1214
+ }
1215
+ ```
1216
+
1217
+ </details>
1218
+
557
1219
  **Exit 1:** Unexpected error.
558
1220
 
559
1221
  - **stderr:** format=`text`
@@ -566,6 +1228,236 @@ speckeeper propose-trace-links --adapter claude --report-format json
566
1228
 
567
1229
  - **stdout:** format=`{options.report-format}`
568
1230
 
1231
+
1232
+ <details>
1233
+ <summary>JSON Schema</summary>
1234
+
1235
+ ```json
1236
+ {
1237
+ "type": "object",
1238
+ "description": "Result of trace link proposal with candidate links.",
1239
+ "allOf": [
1240
+ {
1241
+ "type": "object",
1242
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
1243
+ "required": [
1244
+ "summary",
1245
+ "riskLevel",
1246
+ "findings"
1247
+ ],
1248
+ "properties": {
1249
+ "summary": {
1250
+ "type": "string"
1251
+ },
1252
+ "riskLevel": {
1253
+ "type": "string",
1254
+ "enum": [
1255
+ "low",
1256
+ "medium",
1257
+ "high",
1258
+ "critical"
1259
+ ]
1260
+ },
1261
+ "findings": {
1262
+ "type": "array",
1263
+ "items": {
1264
+ "type": "object",
1265
+ "description": "A single finding from an agent audit or analysis.",
1266
+ "required": [
1267
+ "severity",
1268
+ "category",
1269
+ "message"
1270
+ ],
1271
+ "properties": {
1272
+ "id": {
1273
+ "type": "string",
1274
+ "description": "Unique finding identifier."
1275
+ },
1276
+ "severity": {
1277
+ "type": "string",
1278
+ "enum": [
1279
+ "info",
1280
+ "warning",
1281
+ "error",
1282
+ "critical"
1283
+ ]
1284
+ },
1285
+ "category": {
1286
+ "type": "string",
1287
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
1288
+ },
1289
+ "target": {
1290
+ "type": "string",
1291
+ "description": "Target of the finding (spec ID, model type)."
1292
+ },
1293
+ "location": {
1294
+ "type": "string",
1295
+ "description": "Location within the target."
1296
+ },
1297
+ "message": {
1298
+ "type": "string"
1299
+ },
1300
+ "recommendation": {
1301
+ "type": "string"
1302
+ },
1303
+ "confidence": {
1304
+ "type": "number",
1305
+ "minimum": 0,
1306
+ "maximum": 1,
1307
+ "description": "Confidence score (0-1) for LLM-generated findings."
1308
+ },
1309
+ "evidence": {
1310
+ "type": "array",
1311
+ "items": {
1312
+ "type": "object",
1313
+ "description": "Evidence supporting an agent finding.",
1314
+ "required": [
1315
+ "kind"
1316
+ ],
1317
+ "properties": {
1318
+ "kind": {
1319
+ "type": "string",
1320
+ "enum": [
1321
+ "file",
1322
+ "command",
1323
+ "schema",
1324
+ "diff",
1325
+ "stdout",
1326
+ "stderr",
1327
+ "text"
1328
+ ]
1329
+ },
1330
+ "target": {
1331
+ "type": "string",
1332
+ "description": "Target identifier (file path, command ID, schema name)."
1333
+ },
1334
+ "location": {
1335
+ "type": "string",
1336
+ "description": "Location within the target (line number, JSON pointer)."
1337
+ },
1338
+ "excerpt": {
1339
+ "type": "string",
1340
+ "description": "Relevant excerpt from the target."
1341
+ }
1342
+ }
1343
+ }
1344
+ },
1345
+ "details": {
1346
+ "type": "object",
1347
+ "additionalProperties": true
1348
+ }
1349
+ }
1350
+ }
1351
+ },
1352
+ "recommendedActions": {
1353
+ "type": "array",
1354
+ "items": {
1355
+ "type": "object",
1356
+ "description": "A recommended action from an agent audit.",
1357
+ "required": [
1358
+ "kind",
1359
+ "title"
1360
+ ],
1361
+ "properties": {
1362
+ "kind": {
1363
+ "type": "string",
1364
+ "enum": [
1365
+ "run_command",
1366
+ "edit_file",
1367
+ "review",
1368
+ "confirm",
1369
+ "block",
1370
+ "ignore"
1371
+ ]
1372
+ },
1373
+ "title": {
1374
+ "type": "string"
1375
+ },
1376
+ "command": {
1377
+ "type": "string",
1378
+ "description": "CLI command to run (for run_command kind)."
1379
+ },
1380
+ "target": {
1381
+ "type": "string",
1382
+ "description": "Target file or resource."
1383
+ },
1384
+ "rationale": {
1385
+ "type": "string"
1386
+ }
1387
+ }
1388
+ }
1389
+ },
1390
+ "metadata": {
1391
+ "type": "object",
1392
+ "properties": {
1393
+ "tool": {
1394
+ "type": "string"
1395
+ },
1396
+ "command": {
1397
+ "type": "string"
1398
+ },
1399
+ "version": {
1400
+ "type": "string"
1401
+ },
1402
+ "generatedAt": {
1403
+ "type": "string"
1404
+ },
1405
+ "adapter": {
1406
+ "type": "string"
1407
+ },
1408
+ "model": {
1409
+ "type": "string"
1410
+ }
1411
+ }
1412
+ }
1413
+ }
1414
+ },
1415
+ {
1416
+ "type": "object",
1417
+ "required": [
1418
+ "candidateLinks"
1419
+ ],
1420
+ "properties": {
1421
+ "candidateLinks": {
1422
+ "type": "array",
1423
+ "items": {
1424
+ "type": "object",
1425
+ "required": [
1426
+ "from",
1427
+ "relation",
1428
+ "to",
1429
+ "confidence",
1430
+ "reason"
1431
+ ],
1432
+ "properties": {
1433
+ "from": {
1434
+ "type": "string"
1435
+ },
1436
+ "relation": {
1437
+ "type": "string"
1438
+ },
1439
+ "to": {
1440
+ "type": "string"
1441
+ },
1442
+ "confidence": {
1443
+ "type": "number",
1444
+ "minimum": 0,
1445
+ "maximum": 1
1446
+ },
1447
+ "reason": {
1448
+ "type": "string"
1449
+ }
1450
+ }
1451
+ }
1452
+ }
1453
+ }
1454
+ }
1455
+ ]
1456
+ }
1457
+ ```
1458
+
1459
+ </details>
1460
+
569
1461
  **Exit 11:** Runtime dependency missing (agent-contracts-runtime).
570
1462
 
571
1463
  - **stderr:** format=`text`
@@ -578,7 +1470,7 @@ speckeeper propose-trace-links --adapter claude --report-format json
578
1470
 
579
1471
  ```yaml
580
1472
  x-agent:
581
- recommendedBeforeUse:
1473
+ recommended_before_use:
582
1474
  - Run with --dry-run first to preview the prompt
583
1475
  retryableExitCodes:
584
1476
  - 12
@@ -619,6 +1511,253 @@ speckeeper impact ENT-ORDER --format json | speckeeper explain-impact --adapter
619
1511
 
620
1512
  - **stdout:** format=`{options.report-format}`
621
1513
 
1514
+
1515
+ <details>
1516
+ <summary>JSON Schema</summary>
1517
+
1518
+ ```json
1519
+ {
1520
+ "type": "object",
1521
+ "description": "Human-readable explanation of impact analysis output.",
1522
+ "allOf": [
1523
+ {
1524
+ "type": "object",
1525
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
1526
+ "required": [
1527
+ "summary",
1528
+ "riskLevel",
1529
+ "findings"
1530
+ ],
1531
+ "properties": {
1532
+ "summary": {
1533
+ "type": "string"
1534
+ },
1535
+ "riskLevel": {
1536
+ "type": "string",
1537
+ "enum": [
1538
+ "low",
1539
+ "medium",
1540
+ "high",
1541
+ "critical"
1542
+ ]
1543
+ },
1544
+ "findings": {
1545
+ "type": "array",
1546
+ "items": {
1547
+ "type": "object",
1548
+ "description": "A single finding from an agent audit or analysis.",
1549
+ "required": [
1550
+ "severity",
1551
+ "category",
1552
+ "message"
1553
+ ],
1554
+ "properties": {
1555
+ "id": {
1556
+ "type": "string",
1557
+ "description": "Unique finding identifier."
1558
+ },
1559
+ "severity": {
1560
+ "type": "string",
1561
+ "enum": [
1562
+ "info",
1563
+ "warning",
1564
+ "error",
1565
+ "critical"
1566
+ ]
1567
+ },
1568
+ "category": {
1569
+ "type": "string",
1570
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
1571
+ },
1572
+ "target": {
1573
+ "type": "string",
1574
+ "description": "Target of the finding (spec ID, model type)."
1575
+ },
1576
+ "location": {
1577
+ "type": "string",
1578
+ "description": "Location within the target."
1579
+ },
1580
+ "message": {
1581
+ "type": "string"
1582
+ },
1583
+ "recommendation": {
1584
+ "type": "string"
1585
+ },
1586
+ "confidence": {
1587
+ "type": "number",
1588
+ "minimum": 0,
1589
+ "maximum": 1,
1590
+ "description": "Confidence score (0-1) for LLM-generated findings."
1591
+ },
1592
+ "evidence": {
1593
+ "type": "array",
1594
+ "items": {
1595
+ "type": "object",
1596
+ "description": "Evidence supporting an agent finding.",
1597
+ "required": [
1598
+ "kind"
1599
+ ],
1600
+ "properties": {
1601
+ "kind": {
1602
+ "type": "string",
1603
+ "enum": [
1604
+ "file",
1605
+ "command",
1606
+ "schema",
1607
+ "diff",
1608
+ "stdout",
1609
+ "stderr",
1610
+ "text"
1611
+ ]
1612
+ },
1613
+ "target": {
1614
+ "type": "string",
1615
+ "description": "Target identifier (file path, command ID, schema name)."
1616
+ },
1617
+ "location": {
1618
+ "type": "string",
1619
+ "description": "Location within the target (line number, JSON pointer)."
1620
+ },
1621
+ "excerpt": {
1622
+ "type": "string",
1623
+ "description": "Relevant excerpt from the target."
1624
+ }
1625
+ }
1626
+ }
1627
+ },
1628
+ "details": {
1629
+ "type": "object",
1630
+ "additionalProperties": true
1631
+ }
1632
+ }
1633
+ }
1634
+ },
1635
+ "recommendedActions": {
1636
+ "type": "array",
1637
+ "items": {
1638
+ "type": "object",
1639
+ "description": "A recommended action from an agent audit.",
1640
+ "required": [
1641
+ "kind",
1642
+ "title"
1643
+ ],
1644
+ "properties": {
1645
+ "kind": {
1646
+ "type": "string",
1647
+ "enum": [
1648
+ "run_command",
1649
+ "edit_file",
1650
+ "review",
1651
+ "confirm",
1652
+ "block",
1653
+ "ignore"
1654
+ ]
1655
+ },
1656
+ "title": {
1657
+ "type": "string"
1658
+ },
1659
+ "command": {
1660
+ "type": "string",
1661
+ "description": "CLI command to run (for run_command kind)."
1662
+ },
1663
+ "target": {
1664
+ "type": "string",
1665
+ "description": "Target file or resource."
1666
+ },
1667
+ "rationale": {
1668
+ "type": "string"
1669
+ }
1670
+ }
1671
+ }
1672
+ },
1673
+ "metadata": {
1674
+ "type": "object",
1675
+ "properties": {
1676
+ "tool": {
1677
+ "type": "string"
1678
+ },
1679
+ "command": {
1680
+ "type": "string"
1681
+ },
1682
+ "version": {
1683
+ "type": "string"
1684
+ },
1685
+ "generatedAt": {
1686
+ "type": "string"
1687
+ },
1688
+ "adapter": {
1689
+ "type": "string"
1690
+ },
1691
+ "model": {
1692
+ "type": "string"
1693
+ }
1694
+ }
1695
+ }
1696
+ }
1697
+ },
1698
+ {
1699
+ "type": "object",
1700
+ "required": [
1701
+ "explanation"
1702
+ ],
1703
+ "properties": {
1704
+ "explanation": {
1705
+ "type": "string"
1706
+ },
1707
+ "affectedArtifacts": {
1708
+ "type": "array",
1709
+ "items": {
1710
+ "type": "object",
1711
+ "required": [
1712
+ "type",
1713
+ "id",
1714
+ "summary"
1715
+ ],
1716
+ "properties": {
1717
+ "type": {
1718
+ "type": "string",
1719
+ "enum": [
1720
+ "spec",
1721
+ "api",
1722
+ "ddl",
1723
+ "test",
1724
+ "annotation"
1725
+ ]
1726
+ },
1727
+ "id": {
1728
+ "type": "string"
1729
+ },
1730
+ "summary": {
1731
+ "type": "string"
1732
+ }
1733
+ }
1734
+ }
1735
+ },
1736
+ "testConsiderations": {
1737
+ "type": "array",
1738
+ "items": {
1739
+ "type": "string"
1740
+ }
1741
+ },
1742
+ "releaseRisk": {
1743
+ "type": "string",
1744
+ "enum": [
1745
+ "low",
1746
+ "medium",
1747
+ "high"
1748
+ ]
1749
+ },
1750
+ "sourceCommand": {
1751
+ "type": "string"
1752
+ }
1753
+ }
1754
+ }
1755
+ ]
1756
+ }
1757
+ ```
1758
+
1759
+ </details>
1760
+
622
1761
  **Exit 1:** Unexpected error.
623
1762
 
624
1763
  - **stderr:** format=`text`
@@ -631,6 +1770,253 @@ speckeeper impact ENT-ORDER --format json | speckeeper explain-impact --adapter
631
1770
 
632
1771
  - **stdout:** format=`{options.report-format}`
633
1772
 
1773
+
1774
+ <details>
1775
+ <summary>JSON Schema</summary>
1776
+
1777
+ ```json
1778
+ {
1779
+ "type": "object",
1780
+ "description": "Human-readable explanation of impact analysis output.",
1781
+ "allOf": [
1782
+ {
1783
+ "type": "object",
1784
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
1785
+ "required": [
1786
+ "summary",
1787
+ "riskLevel",
1788
+ "findings"
1789
+ ],
1790
+ "properties": {
1791
+ "summary": {
1792
+ "type": "string"
1793
+ },
1794
+ "riskLevel": {
1795
+ "type": "string",
1796
+ "enum": [
1797
+ "low",
1798
+ "medium",
1799
+ "high",
1800
+ "critical"
1801
+ ]
1802
+ },
1803
+ "findings": {
1804
+ "type": "array",
1805
+ "items": {
1806
+ "type": "object",
1807
+ "description": "A single finding from an agent audit or analysis.",
1808
+ "required": [
1809
+ "severity",
1810
+ "category",
1811
+ "message"
1812
+ ],
1813
+ "properties": {
1814
+ "id": {
1815
+ "type": "string",
1816
+ "description": "Unique finding identifier."
1817
+ },
1818
+ "severity": {
1819
+ "type": "string",
1820
+ "enum": [
1821
+ "info",
1822
+ "warning",
1823
+ "error",
1824
+ "critical"
1825
+ ]
1826
+ },
1827
+ "category": {
1828
+ "type": "string",
1829
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
1830
+ },
1831
+ "target": {
1832
+ "type": "string",
1833
+ "description": "Target of the finding (spec ID, model type)."
1834
+ },
1835
+ "location": {
1836
+ "type": "string",
1837
+ "description": "Location within the target."
1838
+ },
1839
+ "message": {
1840
+ "type": "string"
1841
+ },
1842
+ "recommendation": {
1843
+ "type": "string"
1844
+ },
1845
+ "confidence": {
1846
+ "type": "number",
1847
+ "minimum": 0,
1848
+ "maximum": 1,
1849
+ "description": "Confidence score (0-1) for LLM-generated findings."
1850
+ },
1851
+ "evidence": {
1852
+ "type": "array",
1853
+ "items": {
1854
+ "type": "object",
1855
+ "description": "Evidence supporting an agent finding.",
1856
+ "required": [
1857
+ "kind"
1858
+ ],
1859
+ "properties": {
1860
+ "kind": {
1861
+ "type": "string",
1862
+ "enum": [
1863
+ "file",
1864
+ "command",
1865
+ "schema",
1866
+ "diff",
1867
+ "stdout",
1868
+ "stderr",
1869
+ "text"
1870
+ ]
1871
+ },
1872
+ "target": {
1873
+ "type": "string",
1874
+ "description": "Target identifier (file path, command ID, schema name)."
1875
+ },
1876
+ "location": {
1877
+ "type": "string",
1878
+ "description": "Location within the target (line number, JSON pointer)."
1879
+ },
1880
+ "excerpt": {
1881
+ "type": "string",
1882
+ "description": "Relevant excerpt from the target."
1883
+ }
1884
+ }
1885
+ }
1886
+ },
1887
+ "details": {
1888
+ "type": "object",
1889
+ "additionalProperties": true
1890
+ }
1891
+ }
1892
+ }
1893
+ },
1894
+ "recommendedActions": {
1895
+ "type": "array",
1896
+ "items": {
1897
+ "type": "object",
1898
+ "description": "A recommended action from an agent audit.",
1899
+ "required": [
1900
+ "kind",
1901
+ "title"
1902
+ ],
1903
+ "properties": {
1904
+ "kind": {
1905
+ "type": "string",
1906
+ "enum": [
1907
+ "run_command",
1908
+ "edit_file",
1909
+ "review",
1910
+ "confirm",
1911
+ "block",
1912
+ "ignore"
1913
+ ]
1914
+ },
1915
+ "title": {
1916
+ "type": "string"
1917
+ },
1918
+ "command": {
1919
+ "type": "string",
1920
+ "description": "CLI command to run (for run_command kind)."
1921
+ },
1922
+ "target": {
1923
+ "type": "string",
1924
+ "description": "Target file or resource."
1925
+ },
1926
+ "rationale": {
1927
+ "type": "string"
1928
+ }
1929
+ }
1930
+ }
1931
+ },
1932
+ "metadata": {
1933
+ "type": "object",
1934
+ "properties": {
1935
+ "tool": {
1936
+ "type": "string"
1937
+ },
1938
+ "command": {
1939
+ "type": "string"
1940
+ },
1941
+ "version": {
1942
+ "type": "string"
1943
+ },
1944
+ "generatedAt": {
1945
+ "type": "string"
1946
+ },
1947
+ "adapter": {
1948
+ "type": "string"
1949
+ },
1950
+ "model": {
1951
+ "type": "string"
1952
+ }
1953
+ }
1954
+ }
1955
+ }
1956
+ },
1957
+ {
1958
+ "type": "object",
1959
+ "required": [
1960
+ "explanation"
1961
+ ],
1962
+ "properties": {
1963
+ "explanation": {
1964
+ "type": "string"
1965
+ },
1966
+ "affectedArtifacts": {
1967
+ "type": "array",
1968
+ "items": {
1969
+ "type": "object",
1970
+ "required": [
1971
+ "type",
1972
+ "id",
1973
+ "summary"
1974
+ ],
1975
+ "properties": {
1976
+ "type": {
1977
+ "type": "string",
1978
+ "enum": [
1979
+ "spec",
1980
+ "api",
1981
+ "ddl",
1982
+ "test",
1983
+ "annotation"
1984
+ ]
1985
+ },
1986
+ "id": {
1987
+ "type": "string"
1988
+ },
1989
+ "summary": {
1990
+ "type": "string"
1991
+ }
1992
+ }
1993
+ }
1994
+ },
1995
+ "testConsiderations": {
1996
+ "type": "array",
1997
+ "items": {
1998
+ "type": "string"
1999
+ }
2000
+ },
2001
+ "releaseRisk": {
2002
+ "type": "string",
2003
+ "enum": [
2004
+ "low",
2005
+ "medium",
2006
+ "high"
2007
+ ]
2008
+ },
2009
+ "sourceCommand": {
2010
+ "type": "string"
2011
+ }
2012
+ }
2013
+ }
2014
+ ]
2015
+ }
2016
+ ```
2017
+
2018
+ </details>
2019
+
634
2020
  **Exit 11:** Runtime dependency missing (agent-contracts-runtime).
635
2021
 
636
2022
  - **stderr:** format=`text`
@@ -643,7 +2029,7 @@ speckeeper impact ENT-ORDER --format json | speckeeper explain-impact --adapter
643
2029
 
644
2030
  ```yaml
645
2031
  x-agent:
646
- recommendedBeforeUse:
2032
+ recommended_before_use:
647
2033
  - Run with --dry-run first to preview the prompt
648
2034
  retryableExitCodes:
649
2035
  - 12
@@ -694,6 +2080,229 @@ speckeeper propose-acceptance-criteria --adapter gemini --dry-run
694
2080
 
695
2081
  - **stdout:** format=`{options.report-format}`
696
2082
 
2083
+
2084
+ <details>
2085
+ <summary>JSON Schema</summary>
2086
+
2087
+ ```json
2088
+ {
2089
+ "type": "object",
2090
+ "description": "Proposed acceptance criteria for design specs.",
2091
+ "allOf": [
2092
+ {
2093
+ "type": "object",
2094
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
2095
+ "required": [
2096
+ "summary",
2097
+ "riskLevel",
2098
+ "findings"
2099
+ ],
2100
+ "properties": {
2101
+ "summary": {
2102
+ "type": "string"
2103
+ },
2104
+ "riskLevel": {
2105
+ "type": "string",
2106
+ "enum": [
2107
+ "low",
2108
+ "medium",
2109
+ "high",
2110
+ "critical"
2111
+ ]
2112
+ },
2113
+ "findings": {
2114
+ "type": "array",
2115
+ "items": {
2116
+ "type": "object",
2117
+ "description": "A single finding from an agent audit or analysis.",
2118
+ "required": [
2119
+ "severity",
2120
+ "category",
2121
+ "message"
2122
+ ],
2123
+ "properties": {
2124
+ "id": {
2125
+ "type": "string",
2126
+ "description": "Unique finding identifier."
2127
+ },
2128
+ "severity": {
2129
+ "type": "string",
2130
+ "enum": [
2131
+ "info",
2132
+ "warning",
2133
+ "error",
2134
+ "critical"
2135
+ ]
2136
+ },
2137
+ "category": {
2138
+ "type": "string",
2139
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
2140
+ },
2141
+ "target": {
2142
+ "type": "string",
2143
+ "description": "Target of the finding (spec ID, model type)."
2144
+ },
2145
+ "location": {
2146
+ "type": "string",
2147
+ "description": "Location within the target."
2148
+ },
2149
+ "message": {
2150
+ "type": "string"
2151
+ },
2152
+ "recommendation": {
2153
+ "type": "string"
2154
+ },
2155
+ "confidence": {
2156
+ "type": "number",
2157
+ "minimum": 0,
2158
+ "maximum": 1,
2159
+ "description": "Confidence score (0-1) for LLM-generated findings."
2160
+ },
2161
+ "evidence": {
2162
+ "type": "array",
2163
+ "items": {
2164
+ "type": "object",
2165
+ "description": "Evidence supporting an agent finding.",
2166
+ "required": [
2167
+ "kind"
2168
+ ],
2169
+ "properties": {
2170
+ "kind": {
2171
+ "type": "string",
2172
+ "enum": [
2173
+ "file",
2174
+ "command",
2175
+ "schema",
2176
+ "diff",
2177
+ "stdout",
2178
+ "stderr",
2179
+ "text"
2180
+ ]
2181
+ },
2182
+ "target": {
2183
+ "type": "string",
2184
+ "description": "Target identifier (file path, command ID, schema name)."
2185
+ },
2186
+ "location": {
2187
+ "type": "string",
2188
+ "description": "Location within the target (line number, JSON pointer)."
2189
+ },
2190
+ "excerpt": {
2191
+ "type": "string",
2192
+ "description": "Relevant excerpt from the target."
2193
+ }
2194
+ }
2195
+ }
2196
+ },
2197
+ "details": {
2198
+ "type": "object",
2199
+ "additionalProperties": true
2200
+ }
2201
+ }
2202
+ }
2203
+ },
2204
+ "recommendedActions": {
2205
+ "type": "array",
2206
+ "items": {
2207
+ "type": "object",
2208
+ "description": "A recommended action from an agent audit.",
2209
+ "required": [
2210
+ "kind",
2211
+ "title"
2212
+ ],
2213
+ "properties": {
2214
+ "kind": {
2215
+ "type": "string",
2216
+ "enum": [
2217
+ "run_command",
2218
+ "edit_file",
2219
+ "review",
2220
+ "confirm",
2221
+ "block",
2222
+ "ignore"
2223
+ ]
2224
+ },
2225
+ "title": {
2226
+ "type": "string"
2227
+ },
2228
+ "command": {
2229
+ "type": "string",
2230
+ "description": "CLI command to run (for run_command kind)."
2231
+ },
2232
+ "target": {
2233
+ "type": "string",
2234
+ "description": "Target file or resource."
2235
+ },
2236
+ "rationale": {
2237
+ "type": "string"
2238
+ }
2239
+ }
2240
+ }
2241
+ },
2242
+ "metadata": {
2243
+ "type": "object",
2244
+ "properties": {
2245
+ "tool": {
2246
+ "type": "string"
2247
+ },
2248
+ "command": {
2249
+ "type": "string"
2250
+ },
2251
+ "version": {
2252
+ "type": "string"
2253
+ },
2254
+ "generatedAt": {
2255
+ "type": "string"
2256
+ },
2257
+ "adapter": {
2258
+ "type": "string"
2259
+ },
2260
+ "model": {
2261
+ "type": "string"
2262
+ }
2263
+ }
2264
+ }
2265
+ }
2266
+ },
2267
+ {
2268
+ "type": "object",
2269
+ "required": [
2270
+ "criteriaProposals"
2271
+ ],
2272
+ "properties": {
2273
+ "criteriaProposals": {
2274
+ "type": "array",
2275
+ "items": {
2276
+ "type": "object",
2277
+ "required": [
2278
+ "specId",
2279
+ "criteria",
2280
+ "rationale"
2281
+ ],
2282
+ "properties": {
2283
+ "specId": {
2284
+ "type": "string"
2285
+ },
2286
+ "criteria": {
2287
+ "type": "array",
2288
+ "items": {
2289
+ "type": "string"
2290
+ }
2291
+ },
2292
+ "rationale": {
2293
+ "type": "string"
2294
+ }
2295
+ }
2296
+ }
2297
+ }
2298
+ }
2299
+ }
2300
+ ]
2301
+ }
2302
+ ```
2303
+
2304
+ </details>
2305
+
697
2306
  **Exit 1:** Unexpected error.
698
2307
 
699
2308
  - **stderr:** format=`text`
@@ -706,6 +2315,229 @@ speckeeper propose-acceptance-criteria --adapter gemini --dry-run
706
2315
 
707
2316
  - **stdout:** format=`{options.report-format}`
708
2317
 
2318
+
2319
+ <details>
2320
+ <summary>JSON Schema</summary>
2321
+
2322
+ ```json
2323
+ {
2324
+ "type": "object",
2325
+ "description": "Proposed acceptance criteria for design specs.",
2326
+ "allOf": [
2327
+ {
2328
+ "type": "object",
2329
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
2330
+ "required": [
2331
+ "summary",
2332
+ "riskLevel",
2333
+ "findings"
2334
+ ],
2335
+ "properties": {
2336
+ "summary": {
2337
+ "type": "string"
2338
+ },
2339
+ "riskLevel": {
2340
+ "type": "string",
2341
+ "enum": [
2342
+ "low",
2343
+ "medium",
2344
+ "high",
2345
+ "critical"
2346
+ ]
2347
+ },
2348
+ "findings": {
2349
+ "type": "array",
2350
+ "items": {
2351
+ "type": "object",
2352
+ "description": "A single finding from an agent audit or analysis.",
2353
+ "required": [
2354
+ "severity",
2355
+ "category",
2356
+ "message"
2357
+ ],
2358
+ "properties": {
2359
+ "id": {
2360
+ "type": "string",
2361
+ "description": "Unique finding identifier."
2362
+ },
2363
+ "severity": {
2364
+ "type": "string",
2365
+ "enum": [
2366
+ "info",
2367
+ "warning",
2368
+ "error",
2369
+ "critical"
2370
+ ]
2371
+ },
2372
+ "category": {
2373
+ "type": "string",
2374
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
2375
+ },
2376
+ "target": {
2377
+ "type": "string",
2378
+ "description": "Target of the finding (spec ID, model type)."
2379
+ },
2380
+ "location": {
2381
+ "type": "string",
2382
+ "description": "Location within the target."
2383
+ },
2384
+ "message": {
2385
+ "type": "string"
2386
+ },
2387
+ "recommendation": {
2388
+ "type": "string"
2389
+ },
2390
+ "confidence": {
2391
+ "type": "number",
2392
+ "minimum": 0,
2393
+ "maximum": 1,
2394
+ "description": "Confidence score (0-1) for LLM-generated findings."
2395
+ },
2396
+ "evidence": {
2397
+ "type": "array",
2398
+ "items": {
2399
+ "type": "object",
2400
+ "description": "Evidence supporting an agent finding.",
2401
+ "required": [
2402
+ "kind"
2403
+ ],
2404
+ "properties": {
2405
+ "kind": {
2406
+ "type": "string",
2407
+ "enum": [
2408
+ "file",
2409
+ "command",
2410
+ "schema",
2411
+ "diff",
2412
+ "stdout",
2413
+ "stderr",
2414
+ "text"
2415
+ ]
2416
+ },
2417
+ "target": {
2418
+ "type": "string",
2419
+ "description": "Target identifier (file path, command ID, schema name)."
2420
+ },
2421
+ "location": {
2422
+ "type": "string",
2423
+ "description": "Location within the target (line number, JSON pointer)."
2424
+ },
2425
+ "excerpt": {
2426
+ "type": "string",
2427
+ "description": "Relevant excerpt from the target."
2428
+ }
2429
+ }
2430
+ }
2431
+ },
2432
+ "details": {
2433
+ "type": "object",
2434
+ "additionalProperties": true
2435
+ }
2436
+ }
2437
+ }
2438
+ },
2439
+ "recommendedActions": {
2440
+ "type": "array",
2441
+ "items": {
2442
+ "type": "object",
2443
+ "description": "A recommended action from an agent audit.",
2444
+ "required": [
2445
+ "kind",
2446
+ "title"
2447
+ ],
2448
+ "properties": {
2449
+ "kind": {
2450
+ "type": "string",
2451
+ "enum": [
2452
+ "run_command",
2453
+ "edit_file",
2454
+ "review",
2455
+ "confirm",
2456
+ "block",
2457
+ "ignore"
2458
+ ]
2459
+ },
2460
+ "title": {
2461
+ "type": "string"
2462
+ },
2463
+ "command": {
2464
+ "type": "string",
2465
+ "description": "CLI command to run (for run_command kind)."
2466
+ },
2467
+ "target": {
2468
+ "type": "string",
2469
+ "description": "Target file or resource."
2470
+ },
2471
+ "rationale": {
2472
+ "type": "string"
2473
+ }
2474
+ }
2475
+ }
2476
+ },
2477
+ "metadata": {
2478
+ "type": "object",
2479
+ "properties": {
2480
+ "tool": {
2481
+ "type": "string"
2482
+ },
2483
+ "command": {
2484
+ "type": "string"
2485
+ },
2486
+ "version": {
2487
+ "type": "string"
2488
+ },
2489
+ "generatedAt": {
2490
+ "type": "string"
2491
+ },
2492
+ "adapter": {
2493
+ "type": "string"
2494
+ },
2495
+ "model": {
2496
+ "type": "string"
2497
+ }
2498
+ }
2499
+ }
2500
+ }
2501
+ },
2502
+ {
2503
+ "type": "object",
2504
+ "required": [
2505
+ "criteriaProposals"
2506
+ ],
2507
+ "properties": {
2508
+ "criteriaProposals": {
2509
+ "type": "array",
2510
+ "items": {
2511
+ "type": "object",
2512
+ "required": [
2513
+ "specId",
2514
+ "criteria",
2515
+ "rationale"
2516
+ ],
2517
+ "properties": {
2518
+ "specId": {
2519
+ "type": "string"
2520
+ },
2521
+ "criteria": {
2522
+ "type": "array",
2523
+ "items": {
2524
+ "type": "string"
2525
+ }
2526
+ },
2527
+ "rationale": {
2528
+ "type": "string"
2529
+ }
2530
+ }
2531
+ }
2532
+ }
2533
+ }
2534
+ }
2535
+ ]
2536
+ }
2537
+ ```
2538
+
2539
+ </details>
2540
+
709
2541
  **Exit 11:** Runtime dependency missing (agent-contracts-runtime).
710
2542
 
711
2543
  - **stderr:** format=`text`
@@ -718,10 +2550,592 @@ speckeeper propose-acceptance-criteria --adapter gemini --dry-run
718
2550
 
719
2551
  ```yaml
720
2552
  x-agent:
721
- recommendedBeforeUse:
2553
+ recommended_before_use:
722
2554
  - Run with --dry-run first to preview the prompt
723
2555
  retryableExitCodes:
724
2556
  - 12
725
2557
  ```
726
2558
 
727
2559
  ---
2560
+
2561
+ ---
2562
+
2563
+ ## Schemas
2564
+
2565
+ ### AgentEvidence
2566
+
2567
+ Evidence supporting an agent finding.
2568
+
2569
+ Type: `object`
2570
+
2571
+ | Property | Type | Required | Description |
2572
+ |---|---|---|---|
2573
+ | `kind` | `enum(7 values)` | Yes | |
2574
+ | `target` | `string` | No | Target identifier (file path, command ID, schema name). |
2575
+ | `location` | `string` | No | Location within the target (line number, JSON pointer). |
2576
+ | `excerpt` | `string` | No | Relevant excerpt from the target. |
2577
+
2578
+ <details>
2579
+ <summary>JSON Schema</summary>
2580
+
2581
+ ```json
2582
+ {
2583
+ "type": "object",
2584
+ "description": "Evidence supporting an agent finding.",
2585
+ "required": [
2586
+ "kind"
2587
+ ],
2588
+ "properties": {
2589
+ "kind": {
2590
+ "type": "string",
2591
+ "enum": [
2592
+ "file",
2593
+ "command",
2594
+ "schema",
2595
+ "diff",
2596
+ "stdout",
2597
+ "stderr",
2598
+ "text"
2599
+ ]
2600
+ },
2601
+ "target": {
2602
+ "type": "string",
2603
+ "description": "Target identifier (file path, command ID, schema name)."
2604
+ },
2605
+ "location": {
2606
+ "type": "string",
2607
+ "description": "Location within the target (line number, JSON pointer)."
2608
+ },
2609
+ "excerpt": {
2610
+ "type": "string",
2611
+ "description": "Relevant excerpt from the target."
2612
+ }
2613
+ }
2614
+ }
2615
+ ```
2616
+
2617
+ </details>
2618
+
2619
+ ### AgentFinding
2620
+
2621
+ A single finding from an agent audit or analysis.
2622
+
2623
+ Type: `object`
2624
+
2625
+ | Property | Type | Required | Description |
2626
+ |---|---|---|---|
2627
+ | `id` | `string` | No | Unique finding identifier. |
2628
+ | `severity` | `"info" \| "warning" \| "error" \| "critical"` | Yes | |
2629
+ | `category` | `string` | Yes | Finding category (e.g. verifiability, ambiguity, granularity). |
2630
+ | `target` | `string` | No | Target of the finding (spec ID, model type). |
2631
+ | `location` | `string` | No | Location within the target. |
2632
+ | `message` | `string` | Yes | |
2633
+ | `recommendation` | `string` | No | |
2634
+ | `confidence` | `number (min: 0, max: 1)` | No | Confidence score (0-1) for LLM-generated findings. |
2635
+ | `evidence` | `object[]` | No | |
2636
+ | `evidence[].kind` | `enum(7 values)` | Yes | |
2637
+ | `evidence[].target` | `string` | No | Target identifier (file path, command ID, schema name). |
2638
+ | `evidence[].location` | `string` | No | Location within the target (line number, JSON pointer). |
2639
+ | `evidence[].excerpt` | `string` | No | Relevant excerpt from the target. |
2640
+ | `details` | `Record<string, any>` | No | |
2641
+
2642
+ <details>
2643
+ <summary>JSON Schema</summary>
2644
+
2645
+ ```json
2646
+ {
2647
+ "type": "object",
2648
+ "description": "A single finding from an agent audit or analysis.",
2649
+ "required": [
2650
+ "severity",
2651
+ "category",
2652
+ "message"
2653
+ ],
2654
+ "properties": {
2655
+ "id": {
2656
+ "type": "string",
2657
+ "description": "Unique finding identifier."
2658
+ },
2659
+ "severity": {
2660
+ "type": "string",
2661
+ "enum": [
2662
+ "info",
2663
+ "warning",
2664
+ "error",
2665
+ "critical"
2666
+ ]
2667
+ },
2668
+ "category": {
2669
+ "type": "string",
2670
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
2671
+ },
2672
+ "target": {
2673
+ "type": "string",
2674
+ "description": "Target of the finding (spec ID, model type)."
2675
+ },
2676
+ "location": {
2677
+ "type": "string",
2678
+ "description": "Location within the target."
2679
+ },
2680
+ "message": {
2681
+ "type": "string"
2682
+ },
2683
+ "recommendation": {
2684
+ "type": "string"
2685
+ },
2686
+ "confidence": {
2687
+ "type": "number",
2688
+ "minimum": 0,
2689
+ "maximum": 1,
2690
+ "description": "Confidence score (0-1) for LLM-generated findings."
2691
+ },
2692
+ "evidence": {
2693
+ "type": "array",
2694
+ "items": {
2695
+ "type": "object",
2696
+ "description": "Evidence supporting an agent finding.",
2697
+ "required": [
2698
+ "kind"
2699
+ ],
2700
+ "properties": {
2701
+ "kind": {
2702
+ "type": "string",
2703
+ "enum": [
2704
+ "file",
2705
+ "command",
2706
+ "schema",
2707
+ "diff",
2708
+ "stdout",
2709
+ "stderr",
2710
+ "text"
2711
+ ]
2712
+ },
2713
+ "target": {
2714
+ "type": "string",
2715
+ "description": "Target identifier (file path, command ID, schema name)."
2716
+ },
2717
+ "location": {
2718
+ "type": "string",
2719
+ "description": "Location within the target (line number, JSON pointer)."
2720
+ },
2721
+ "excerpt": {
2722
+ "type": "string",
2723
+ "description": "Relevant excerpt from the target."
2724
+ }
2725
+ }
2726
+ }
2727
+ },
2728
+ "details": {
2729
+ "type": "object",
2730
+ "additionalProperties": true
2731
+ }
2732
+ }
2733
+ }
2734
+ ```
2735
+
2736
+ </details>
2737
+
2738
+ ### AgentRecommendedAction
2739
+
2740
+ A recommended action from an agent audit.
2741
+
2742
+ Type: `object`
2743
+
2744
+ | Property | Type | Required | Description |
2745
+ |---|---|---|---|
2746
+ | `kind` | `enum(6 values)` | Yes | |
2747
+ | `title` | `string` | Yes | |
2748
+ | `command` | `string` | No | CLI command to run (for run_command kind). |
2749
+ | `target` | `string` | No | Target file or resource. |
2750
+ | `rationale` | `string` | No | |
2751
+
2752
+ <details>
2753
+ <summary>JSON Schema</summary>
2754
+
2755
+ ```json
2756
+ {
2757
+ "type": "object",
2758
+ "description": "A recommended action from an agent audit.",
2759
+ "required": [
2760
+ "kind",
2761
+ "title"
2762
+ ],
2763
+ "properties": {
2764
+ "kind": {
2765
+ "type": "string",
2766
+ "enum": [
2767
+ "run_command",
2768
+ "edit_file",
2769
+ "review",
2770
+ "confirm",
2771
+ "block",
2772
+ "ignore"
2773
+ ]
2774
+ },
2775
+ "title": {
2776
+ "type": "string"
2777
+ },
2778
+ "command": {
2779
+ "type": "string",
2780
+ "description": "CLI command to run (for run_command kind)."
2781
+ },
2782
+ "target": {
2783
+ "type": "string",
2784
+ "description": "Target file or resource."
2785
+ },
2786
+ "rationale": {
2787
+ "type": "string"
2788
+ }
2789
+ }
2790
+ }
2791
+ ```
2792
+
2793
+ </details>
2794
+
2795
+ ### RequirementAuditResult
2796
+
2797
+ Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.
2798
+
2799
+ Type: `object`
2800
+
2801
+ | Property | Type | Required | Description |
2802
+ |---|---|---|---|
2803
+ | `summary` | `string` | Yes | |
2804
+ | `riskLevel` | `"low" \| "medium" \| "high" \| "critical"` | Yes | |
2805
+ | `findings` | `object[]` | Yes | |
2806
+ | `findings[].id` | `string` | No | Unique finding identifier. |
2807
+ | `findings[].severity` | `"info" \| "warning" \| "error" \| "critical"` | Yes | |
2808
+ | `findings[].category` | `string` | Yes | Finding category (e.g. verifiability, ambiguity, granularity). |
2809
+ | `findings[].target` | `string` | No | Target of the finding (spec ID, model type). |
2810
+ | `findings[].location` | `string` | No | Location within the target. |
2811
+ | `findings[].message` | `string` | Yes | |
2812
+ | `findings[].recommendation` | `string` | No | |
2813
+ | `findings[].confidence` | `number (min: 0, max: 1)` | No | Confidence score (0-1) for LLM-generated findings. |
2814
+ | `findings[].evidence` | `object[]` | No | |
2815
+ | `findings[].evidence[].kind` | `enum(7 values)` | Yes | |
2816
+ | `findings[].evidence[].target` | `string` | No | Target identifier (file path, command ID, schema name). |
2817
+ | `findings[].evidence[].location` | `string` | No | Location within the target (line number, JSON pointer). |
2818
+ | `findings[].evidence[].excerpt` | `string` | No | Relevant excerpt from the target. |
2819
+ | `findings[].details` | `Record<string, any>` | No | |
2820
+ | `recommendedActions` | `object[]` | No | |
2821
+ | `recommendedActions[].kind` | `enum(6 values)` | Yes | |
2822
+ | `recommendedActions[].title` | `string` | Yes | |
2823
+ | `recommendedActions[].command` | `string` | No | CLI command to run (for run_command kind). |
2824
+ | `recommendedActions[].target` | `string` | No | Target file or resource. |
2825
+ | `recommendedActions[].rationale` | `string` | No | |
2826
+ | `metadata` | `object` | No | |
2827
+ | `metadata.tool` | `string` | No | |
2828
+ | `metadata.command` | `string` | No | |
2829
+ | `metadata.version` | `string` | No | |
2830
+ | `metadata.generatedAt` | `string` | No | |
2831
+ | `metadata.adapter` | `string` | No | |
2832
+ | `metadata.model` | `string` | No | |
2833
+
2834
+ <details>
2835
+ <summary>JSON Schema</summary>
2836
+
2837
+ ```json
2838
+ {
2839
+ "type": "object",
2840
+ "description": "Top-level result from an agent audit. Canonical schema for agent interoperability across toolchains.",
2841
+ "required": [
2842
+ "summary",
2843
+ "riskLevel",
2844
+ "findings"
2845
+ ],
2846
+ "properties": {
2847
+ "summary": {
2848
+ "type": "string"
2849
+ },
2850
+ "riskLevel": {
2851
+ "type": "string",
2852
+ "enum": [
2853
+ "low",
2854
+ "medium",
2855
+ "high",
2856
+ "critical"
2857
+ ]
2858
+ },
2859
+ "findings": {
2860
+ "type": "array",
2861
+ "items": {
2862
+ "type": "object",
2863
+ "description": "A single finding from an agent audit or analysis.",
2864
+ "required": [
2865
+ "severity",
2866
+ "category",
2867
+ "message"
2868
+ ],
2869
+ "properties": {
2870
+ "id": {
2871
+ "type": "string",
2872
+ "description": "Unique finding identifier."
2873
+ },
2874
+ "severity": {
2875
+ "type": "string",
2876
+ "enum": [
2877
+ "info",
2878
+ "warning",
2879
+ "error",
2880
+ "critical"
2881
+ ]
2882
+ },
2883
+ "category": {
2884
+ "type": "string",
2885
+ "description": "Finding category (e.g. verifiability, ambiguity, granularity)."
2886
+ },
2887
+ "target": {
2888
+ "type": "string",
2889
+ "description": "Target of the finding (spec ID, model type)."
2890
+ },
2891
+ "location": {
2892
+ "type": "string",
2893
+ "description": "Location within the target."
2894
+ },
2895
+ "message": {
2896
+ "type": "string"
2897
+ },
2898
+ "recommendation": {
2899
+ "type": "string"
2900
+ },
2901
+ "confidence": {
2902
+ "type": "number",
2903
+ "minimum": 0,
2904
+ "maximum": 1,
2905
+ "description": "Confidence score (0-1) for LLM-generated findings."
2906
+ },
2907
+ "evidence": {
2908
+ "type": "array",
2909
+ "items": {
2910
+ "type": "object",
2911
+ "description": "Evidence supporting an agent finding.",
2912
+ "required": [
2913
+ "kind"
2914
+ ],
2915
+ "properties": {
2916
+ "kind": {
2917
+ "type": "string",
2918
+ "enum": [
2919
+ "file",
2920
+ "command",
2921
+ "schema",
2922
+ "diff",
2923
+ "stdout",
2924
+ "stderr",
2925
+ "text"
2926
+ ]
2927
+ },
2928
+ "target": {
2929
+ "type": "string",
2930
+ "description": "Target identifier (file path, command ID, schema name)."
2931
+ },
2932
+ "location": {
2933
+ "type": "string",
2934
+ "description": "Location within the target (line number, JSON pointer)."
2935
+ },
2936
+ "excerpt": {
2937
+ "type": "string",
2938
+ "description": "Relevant excerpt from the target."
2939
+ }
2940
+ }
2941
+ }
2942
+ },
2943
+ "details": {
2944
+ "type": "object",
2945
+ "additionalProperties": true
2946
+ }
2947
+ }
2948
+ }
2949
+ },
2950
+ "recommendedActions": {
2951
+ "type": "array",
2952
+ "items": {
2953
+ "type": "object",
2954
+ "description": "A recommended action from an agent audit.",
2955
+ "required": [
2956
+ "kind",
2957
+ "title"
2958
+ ],
2959
+ "properties": {
2960
+ "kind": {
2961
+ "type": "string",
2962
+ "enum": [
2963
+ "run_command",
2964
+ "edit_file",
2965
+ "review",
2966
+ "confirm",
2967
+ "block",
2968
+ "ignore"
2969
+ ]
2970
+ },
2971
+ "title": {
2972
+ "type": "string"
2973
+ },
2974
+ "command": {
2975
+ "type": "string",
2976
+ "description": "CLI command to run (for run_command kind)."
2977
+ },
2978
+ "target": {
2979
+ "type": "string",
2980
+ "description": "Target file or resource."
2981
+ },
2982
+ "rationale": {
2983
+ "type": "string"
2984
+ }
2985
+ }
2986
+ }
2987
+ },
2988
+ "metadata": {
2989
+ "type": "object",
2990
+ "properties": {
2991
+ "tool": {
2992
+ "type": "string"
2993
+ },
2994
+ "command": {
2995
+ "type": "string"
2996
+ },
2997
+ "version": {
2998
+ "type": "string"
2999
+ },
3000
+ "generatedAt": {
3001
+ "type": "string"
3002
+ },
3003
+ "adapter": {
3004
+ "type": "string"
3005
+ },
3006
+ "model": {
3007
+ "type": "string"
3008
+ }
3009
+ }
3010
+ }
3011
+ }
3012
+ }
3013
+ ```
3014
+
3015
+ </details>
3016
+
3017
+ ### TraceLinkResult
3018
+
3019
+ Result of trace link proposal with candidate links.
3020
+
3021
+ Type: `object`
3022
+
3023
+
3024
+ ### ImpactExplainResult
3025
+
3026
+ Human-readable explanation of impact analysis output.
3027
+
3028
+ Type: `object`
3029
+
3030
+
3031
+ ### AcceptanceCriteriaResult
3032
+
3033
+ Proposed acceptance criteria for design specs.
3034
+
3035
+ Type: `object`
3036
+
3037
+
3038
+ ### ImpactAnalysisOutput
3039
+
3040
+ JSON output from speckeeper impact --format json.
3041
+
3042
+ Type: `object`
3043
+
3044
+ | Property | Type | Required | Description |
3045
+ |---|---|---|---|
3046
+ | `target` | `string` | Yes | |
3047
+ | `targetType` | `string` | Yes | |
3048
+ | `direction` | `"upstream" \| "downstream" \| "both"` | No | |
3049
+ | `depth` | `integer` | No | |
3050
+ | `impactedNodes` | `object[]` | Yes | |
3051
+ | `impactedNodes[].id` | `string` | Yes | |
3052
+ | `impactedNodes[].type` | `string` | Yes | |
3053
+ | `impactedNodes[].depth` | `integer` | Yes | |
3054
+ | `impactedNodes[].impactType` | `"direct" \| "indirect"` | Yes | |
3055
+ | `impactedNodes[].relations` | `object[]` | No | |
3056
+ | `impactedNodes[].relations[].type` | `string` | No | |
3057
+ | `impactedNodes[].relations[].from` | `string` | No | |
3058
+ | `impactedNodes[].relations[].to` | `string` | No | |
3059
+
3060
+ <details>
3061
+ <summary>JSON Schema</summary>
3062
+
3063
+ ```json
3064
+ {
3065
+ "type": "object",
3066
+ "description": "JSON output from speckeeper impact --format json.",
3067
+ "required": [
3068
+ "target",
3069
+ "targetType",
3070
+ "impactedNodes"
3071
+ ],
3072
+ "properties": {
3073
+ "target": {
3074
+ "type": "string"
3075
+ },
3076
+ "targetType": {
3077
+ "type": "string"
3078
+ },
3079
+ "direction": {
3080
+ "type": "string",
3081
+ "enum": [
3082
+ "upstream",
3083
+ "downstream",
3084
+ "both"
3085
+ ]
3086
+ },
3087
+ "depth": {
3088
+ "type": "integer"
3089
+ },
3090
+ "impactedNodes": {
3091
+ "type": "array",
3092
+ "items": {
3093
+ "type": "object",
3094
+ "required": [
3095
+ "id",
3096
+ "type",
3097
+ "depth",
3098
+ "impactType"
3099
+ ],
3100
+ "properties": {
3101
+ "id": {
3102
+ "type": "string"
3103
+ },
3104
+ "type": {
3105
+ "type": "string"
3106
+ },
3107
+ "depth": {
3108
+ "type": "integer"
3109
+ },
3110
+ "impactType": {
3111
+ "type": "string",
3112
+ "enum": [
3113
+ "direct",
3114
+ "indirect"
3115
+ ]
3116
+ },
3117
+ "relations": {
3118
+ "type": "array",
3119
+ "items": {
3120
+ "type": "object",
3121
+ "properties": {
3122
+ "type": {
3123
+ "type": "string"
3124
+ },
3125
+ "from": {
3126
+ "type": "string"
3127
+ },
3128
+ "to": {
3129
+ "type": "string"
3130
+ }
3131
+ }
3132
+ }
3133
+ }
3134
+ }
3135
+ }
3136
+ }
3137
+ }
3138
+ }
3139
+ ```
3140
+
3141
+ </details>