@appport/assessment 0.0.0-stage → 0.1.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.
@@ -0,0 +1,1424 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://appport.dev/schemas/appport/1/application-assessment.schema.json",
4
+ "title": "AppWorks existing-application assessment",
5
+ "description": "appport.application-assessment/1: an evidence-backed capability inventory of a repository from a static reading. It verifies no behavior, grants no authority and registers nothing. See spec/assessment-1.md.",
6
+ "type": "object",
7
+ "properties": {
8
+ "format": {
9
+ "const": "appport.application-assessment/1"
10
+ },
11
+ "assessment": {
12
+ "type": "object",
13
+ "properties": {
14
+ "id": {
15
+ "type": "string",
16
+ "minLength": 1
17
+ },
18
+ "createdAt": {
19
+ "type": "string",
20
+ "format": "date-time"
21
+ }
22
+ },
23
+ "required": [
24
+ "id",
25
+ "createdAt"
26
+ ],
27
+ "additionalProperties": false
28
+ },
29
+ "tool": {
30
+ "type": "object",
31
+ "properties": {
32
+ "name": {
33
+ "type": "string"
34
+ },
35
+ "version": {
36
+ "type": "string"
37
+ }
38
+ },
39
+ "required": [
40
+ "name",
41
+ "version"
42
+ ],
43
+ "additionalProperties": false
44
+ },
45
+ "target": {
46
+ "type": "object",
47
+ "properties": {
48
+ "name": {
49
+ "type": "string",
50
+ "minLength": 1
51
+ },
52
+ "nameSource": {
53
+ "enum": [
54
+ "go.mod",
55
+ "package.json",
56
+ "directory"
57
+ ]
58
+ },
59
+ "repository": {
60
+ "type": "string"
61
+ },
62
+ "revision": {
63
+ "type": "string",
64
+ "pattern": "^[0-9a-f]{40,64}$"
65
+ },
66
+ "ref": {
67
+ "type": "string"
68
+ }
69
+ },
70
+ "required": [
71
+ "name",
72
+ "nameSource"
73
+ ],
74
+ "additionalProperties": false
75
+ },
76
+ "configuration": {
77
+ "$ref": "#/$defs/configuration"
78
+ },
79
+ "coverage": {
80
+ "$ref": "#/$defs/coverage"
81
+ },
82
+ "evidence": {
83
+ "type": "array",
84
+ "items": {
85
+ "$ref": "#/$defs/evidence"
86
+ }
87
+ },
88
+ "inventory": {
89
+ "$ref": "#/$defs/inventory"
90
+ },
91
+ "candidates": {
92
+ "type": "array",
93
+ "items": {
94
+ "$ref": "#/$defs/candidate"
95
+ }
96
+ },
97
+ "recommendation": {
98
+ "anyOf": [
99
+ {
100
+ "type": "null"
101
+ },
102
+ {
103
+ "$ref": "#/$defs/recommendation"
104
+ }
105
+ ]
106
+ },
107
+ "findings": {
108
+ "type": "array",
109
+ "items": {
110
+ "$ref": "#/$defs/finding"
111
+ }
112
+ },
113
+ "limitations": {
114
+ "type": "array",
115
+ "items": {
116
+ "type": "object",
117
+ "properties": {
118
+ "code": {
119
+ "type": "string"
120
+ },
121
+ "description": {
122
+ "type": "string"
123
+ }
124
+ },
125
+ "required": [
126
+ "code",
127
+ "description"
128
+ ],
129
+ "additionalProperties": false
130
+ }
131
+ },
132
+ "questions": {
133
+ "type": "array",
134
+ "items": {
135
+ "$ref": "#/$defs/question"
136
+ }
137
+ },
138
+ "scope": {
139
+ "type": "object",
140
+ "properties": {
141
+ "grantsAuthority": {
142
+ "const": false
143
+ },
144
+ "verifiesBehavior": {
145
+ "const": false
146
+ },
147
+ "modifiesTarget": {
148
+ "const": false
149
+ }
150
+ },
151
+ "required": [
152
+ "grantsAuthority",
153
+ "verifiesBehavior",
154
+ "modifiesTarget"
155
+ ],
156
+ "additionalProperties": false
157
+ },
158
+ "digest": {
159
+ "type": "string",
160
+ "pattern": "^sha256:[0-9a-f]{64}$"
161
+ }
162
+ },
163
+ "required": [
164
+ "format",
165
+ "assessment",
166
+ "tool",
167
+ "target",
168
+ "configuration",
169
+ "coverage",
170
+ "evidence",
171
+ "inventory",
172
+ "candidates",
173
+ "recommendation",
174
+ "findings",
175
+ "limitations",
176
+ "questions",
177
+ "scope",
178
+ "digest"
179
+ ],
180
+ "additionalProperties": false,
181
+ "$defs": {
182
+ "evidenceId": {
183
+ "type": "string",
184
+ "pattern": "^ev-[0-9a-f]{16}$"
185
+ },
186
+ "location": {
187
+ "type": "object",
188
+ "properties": {
189
+ "path": {
190
+ "type": "string",
191
+ "minLength": 1,
192
+ "pattern": "^(?!/)(?!.*(^|/)\\.\\.(/|$)).+$"
193
+ },
194
+ "startLine": {
195
+ "type": "integer",
196
+ "minimum": 1
197
+ },
198
+ "endLine": {
199
+ "type": "integer",
200
+ "minimum": 1
201
+ }
202
+ },
203
+ "required": [
204
+ "path",
205
+ "startLine",
206
+ "endLine"
207
+ ],
208
+ "additionalProperties": false
209
+ },
210
+ "evidence": {
211
+ "type": "object",
212
+ "properties": {
213
+ "id": {
214
+ "$ref": "#/$defs/evidenceId"
215
+ },
216
+ "class": {
217
+ "enum": [
218
+ "observed",
219
+ "inferred",
220
+ "unknown"
221
+ ]
222
+ },
223
+ "kind": {
224
+ "type": "string",
225
+ "minLength": 1
226
+ },
227
+ "location": {
228
+ "$ref": "#/$defs/location"
229
+ },
230
+ "subject": {
231
+ "type": "string"
232
+ },
233
+ "observation": {
234
+ "type": "string",
235
+ "minLength": 1
236
+ },
237
+ "method": {
238
+ "enum": [
239
+ "scanner",
240
+ "manifest-parse",
241
+ "proto-static",
242
+ "go-static",
243
+ "path-convention",
244
+ "git-metadata",
245
+ "derivation"
246
+ ]
247
+ },
248
+ "basis": {
249
+ "type": "array",
250
+ "items": {
251
+ "$ref": "#/$defs/evidenceId"
252
+ },
253
+ "minItems": 1
254
+ },
255
+ "limitations": {
256
+ "type": "array",
257
+ "items": {
258
+ "type": "string"
259
+ },
260
+ "minItems": 1
261
+ }
262
+ },
263
+ "required": [
264
+ "id",
265
+ "class",
266
+ "kind",
267
+ "observation",
268
+ "method"
269
+ ],
270
+ "additionalProperties": false
271
+ },
272
+ "field": {
273
+ "type": "object",
274
+ "properties": {
275
+ "name": {
276
+ "type": "string"
277
+ },
278
+ "jsonName": {
279
+ "type": "string"
280
+ },
281
+ "type": {
282
+ "type": "string"
283
+ },
284
+ "label": {
285
+ "enum": [
286
+ "singular",
287
+ "optional",
288
+ "repeated",
289
+ "required"
290
+ ]
291
+ },
292
+ "behaviors": {
293
+ "type": "array",
294
+ "items": {
295
+ "type": "string"
296
+ }
297
+ },
298
+ "oneof": {
299
+ "type": "string"
300
+ },
301
+ "evidence": {
302
+ "type": "array",
303
+ "items": {
304
+ "$ref": "#/$defs/evidenceId"
305
+ }
306
+ }
307
+ },
308
+ "required": [
309
+ "name",
310
+ "jsonName",
311
+ "type",
312
+ "label",
313
+ "behaviors",
314
+ "evidence"
315
+ ],
316
+ "additionalProperties": false
317
+ },
318
+ "message": {
319
+ "type": "object",
320
+ "properties": {
321
+ "message": {
322
+ "type": "string"
323
+ },
324
+ "resolved": {
325
+ "type": "boolean"
326
+ },
327
+ "fields": {
328
+ "type": "array",
329
+ "items": {
330
+ "$ref": "#/$defs/field"
331
+ }
332
+ },
333
+ "unresolvedTypes": {
334
+ "type": "array",
335
+ "items": {
336
+ "type": "string"
337
+ }
338
+ },
339
+ "evidence": {
340
+ "type": "array",
341
+ "items": {
342
+ "$ref": "#/$defs/evidenceId"
343
+ }
344
+ }
345
+ },
346
+ "required": [
347
+ "message",
348
+ "resolved",
349
+ "fields",
350
+ "unresolvedTypes",
351
+ "evidence"
352
+ ],
353
+ "additionalProperties": false
354
+ },
355
+ "criterion": {
356
+ "type": "object",
357
+ "properties": {
358
+ "criterion": {
359
+ "enum": [
360
+ "entry-point",
361
+ "implementation",
362
+ "io-schema",
363
+ "validation",
364
+ "authorization",
365
+ "tests",
366
+ "reachability-complete",
367
+ "small-surface"
368
+ ]
369
+ },
370
+ "satisfied": {
371
+ "type": "boolean"
372
+ },
373
+ "reason": {
374
+ "type": "string",
375
+ "minLength": 1
376
+ },
377
+ "evidence": {
378
+ "type": "array",
379
+ "items": {
380
+ "$ref": "#/$defs/evidenceId"
381
+ }
382
+ }
383
+ },
384
+ "required": [
385
+ "criterion",
386
+ "satisfied",
387
+ "reason",
388
+ "evidence"
389
+ ],
390
+ "additionalProperties": false
391
+ },
392
+ "readiness": {
393
+ "type": "object",
394
+ "properties": {
395
+ "class": {
396
+ "enum": [
397
+ "exposure-candidate",
398
+ "investigate",
399
+ "insufficient-evidence"
400
+ ]
401
+ },
402
+ "criteria": {
403
+ "type": "array",
404
+ "items": {
405
+ "$ref": "#/$defs/criterion"
406
+ }
407
+ },
408
+ "concerns": {
409
+ "type": "array",
410
+ "items": {
411
+ "type": "object",
412
+ "properties": {
413
+ "concern": {
414
+ "enum": [
415
+ "outbound-http",
416
+ "async-work",
417
+ "writes-state",
418
+ "unresolved-interface"
419
+ ]
420
+ },
421
+ "evidence": {
422
+ "type": "array",
423
+ "items": {
424
+ "$ref": "#/$defs/evidenceId"
425
+ }
426
+ }
427
+ },
428
+ "required": [
429
+ "concern",
430
+ "evidence"
431
+ ],
432
+ "additionalProperties": false
433
+ }
434
+ }
435
+ },
436
+ "required": [
437
+ "class",
438
+ "criteria",
439
+ "concerns"
440
+ ],
441
+ "additionalProperties": false
442
+ },
443
+ "proposal": {
444
+ "type": "object",
445
+ "properties": {
446
+ "status": {
447
+ "const": "proposed"
448
+ },
449
+ "authoritative": {
450
+ "const": false
451
+ },
452
+ "capability": {
453
+ "type": "object",
454
+ "properties": {
455
+ "name": {
456
+ "type": "string",
457
+ "pattern": "^[a-z][a-z0-9]*(\\.[a-z][a-z0-9]*)+$"
458
+ },
459
+ "version": {
460
+ "type": "integer",
461
+ "minimum": 1
462
+ },
463
+ "kind": {
464
+ "enum": [
465
+ "request",
466
+ "stream"
467
+ ]
468
+ },
469
+ "inputSchema": {
470
+ "type": "object"
471
+ },
472
+ "outputSchema": {
473
+ "type": "object"
474
+ },
475
+ "effect": {
476
+ "enum": [
477
+ "observation",
478
+ "consequential"
479
+ ]
480
+ }
481
+ },
482
+ "required": [
483
+ "name",
484
+ "version",
485
+ "kind",
486
+ "inputSchema",
487
+ "outputSchema",
488
+ "effect"
489
+ ],
490
+ "additionalProperties": false
491
+ },
492
+ "effectBasis": {
493
+ "type": "object",
494
+ "properties": {
495
+ "effect": {
496
+ "enum": [
497
+ "observation",
498
+ "consequential"
499
+ ]
500
+ },
501
+ "reasons": {
502
+ "type": "array",
503
+ "items": {
504
+ "type": "string"
505
+ }
506
+ },
507
+ "evidence": {
508
+ "type": "array",
509
+ "items": {
510
+ "$ref": "#/$defs/evidenceId"
511
+ }
512
+ }
513
+ },
514
+ "required": [
515
+ "effect",
516
+ "reasons",
517
+ "evidence"
518
+ ],
519
+ "additionalProperties": false
520
+ },
521
+ "missing": {
522
+ "type": "array",
523
+ "items": {
524
+ "type": "string"
525
+ }
526
+ }
527
+ },
528
+ "required": [
529
+ "status",
530
+ "authoritative",
531
+ "effectBasis",
532
+ "missing"
533
+ ],
534
+ "additionalProperties": false
535
+ },
536
+ "candidate": {
537
+ "type": "object",
538
+ "properties": {
539
+ "id": {
540
+ "type": "string",
541
+ "pattern": "^cand-"
542
+ },
543
+ "name": {
544
+ "type": "string",
545
+ "minLength": 1
546
+ },
547
+ "description": {
548
+ "type": "string"
549
+ },
550
+ "operation": {
551
+ "type": "object",
552
+ "properties": {
553
+ "kind": {
554
+ "const": "rpc"
555
+ },
556
+ "service": {
557
+ "type": "string"
558
+ },
559
+ "method": {
560
+ "type": "string"
561
+ },
562
+ "fullMethod": {
563
+ "type": "string"
564
+ },
565
+ "streaming": {
566
+ "type": "boolean"
567
+ }
568
+ },
569
+ "required": [
570
+ "kind",
571
+ "service",
572
+ "method",
573
+ "fullMethod",
574
+ "streaming"
575
+ ],
576
+ "additionalProperties": false
577
+ },
578
+ "entryPoints": {
579
+ "type": "array",
580
+ "items": {
581
+ "type": "object",
582
+ "properties": {
583
+ "kind": {
584
+ "enum": [
585
+ "proto-rpc",
586
+ "http-binding"
587
+ ]
588
+ },
589
+ "subject": {
590
+ "type": "string"
591
+ },
592
+ "evidence": {
593
+ "type": "array",
594
+ "items": {
595
+ "$ref": "#/$defs/evidenceId"
596
+ }
597
+ }
598
+ },
599
+ "required": [
600
+ "kind",
601
+ "subject",
602
+ "evidence"
603
+ ],
604
+ "additionalProperties": false
605
+ },
606
+ "minItems": 1
607
+ },
608
+ "implementation": {
609
+ "type": "object",
610
+ "properties": {
611
+ "symbol": {
612
+ "type": "string"
613
+ },
614
+ "location": {
615
+ "$ref": "#/$defs/location"
616
+ },
617
+ "link": {
618
+ "enum": [
619
+ "name-and-request-type",
620
+ "name-only"
621
+ ]
622
+ },
623
+ "evidence": {
624
+ "type": "array",
625
+ "items": {
626
+ "$ref": "#/$defs/evidenceId"
627
+ }
628
+ }
629
+ },
630
+ "required": [
631
+ "symbol",
632
+ "location",
633
+ "link",
634
+ "evidence"
635
+ ],
636
+ "additionalProperties": false
637
+ },
638
+ "inputs": {
639
+ "$ref": "#/$defs/message"
640
+ },
641
+ "outputs": {
642
+ "$ref": "#/$defs/message"
643
+ },
644
+ "dependencies": {
645
+ "type": "object",
646
+ "properties": {
647
+ "reachableFunctions": {
648
+ "type": "array",
649
+ "items": {
650
+ "type": "object",
651
+ "properties": {
652
+ "symbol": {
653
+ "type": "string"
654
+ },
655
+ "path": {
656
+ "type": "string"
657
+ },
658
+ "depth": {
659
+ "type": "integer",
660
+ "minimum": 1
661
+ },
662
+ "evidence": {
663
+ "type": "array",
664
+ "items": {
665
+ "$ref": "#/$defs/evidenceId"
666
+ }
667
+ }
668
+ },
669
+ "required": [
670
+ "symbol",
671
+ "path",
672
+ "depth",
673
+ "evidence"
674
+ ],
675
+ "additionalProperties": false
676
+ }
677
+ },
678
+ "externalPackages": {
679
+ "type": "array",
680
+ "items": {
681
+ "type": "object",
682
+ "properties": {
683
+ "importPath": {
684
+ "type": "string"
685
+ },
686
+ "evidence": {
687
+ "type": "array",
688
+ "items": {
689
+ "$ref": "#/$defs/evidenceId"
690
+ }
691
+ }
692
+ },
693
+ "required": [
694
+ "importPath",
695
+ "evidence"
696
+ ],
697
+ "additionalProperties": false
698
+ }
699
+ },
700
+ "unresolvedCalls": {
701
+ "type": "integer",
702
+ "minimum": 0
703
+ },
704
+ "truncated": {
705
+ "type": "boolean"
706
+ }
707
+ },
708
+ "required": [
709
+ "reachableFunctions",
710
+ "externalPackages",
711
+ "unresolvedCalls",
712
+ "truncated"
713
+ ],
714
+ "additionalProperties": false
715
+ },
716
+ "sideEffects": {
717
+ "type": "object",
718
+ "properties": {
719
+ "persistence": {
720
+ "type": "array",
721
+ "items": {
722
+ "type": "object",
723
+ "properties": {
724
+ "operation": {
725
+ "enum": [
726
+ "read",
727
+ "write",
728
+ "unknown"
729
+ ]
730
+ },
731
+ "statement": {
732
+ "type": "string"
733
+ },
734
+ "evidence": {
735
+ "type": "array",
736
+ "items": {
737
+ "$ref": "#/$defs/evidenceId"
738
+ }
739
+ }
740
+ },
741
+ "required": [
742
+ "operation",
743
+ "statement",
744
+ "evidence"
745
+ ],
746
+ "additionalProperties": false
747
+ }
748
+ },
749
+ "outboundHttp": {
750
+ "type": "array",
751
+ "items": {
752
+ "$ref": "#/$defs/evidenceId"
753
+ }
754
+ },
755
+ "async": {
756
+ "type": "array",
757
+ "items": {
758
+ "$ref": "#/$defs/evidenceId"
759
+ }
760
+ }
761
+ },
762
+ "required": [
763
+ "persistence",
764
+ "outboundHttp",
765
+ "async"
766
+ ],
767
+ "additionalProperties": false
768
+ },
769
+ "authorization": {
770
+ "type": "object",
771
+ "properties": {
772
+ "denials": {
773
+ "type": "array",
774
+ "items": {
775
+ "$ref": "#/$defs/evidenceId"
776
+ }
777
+ },
778
+ "policyReferences": {
779
+ "type": "array",
780
+ "items": {
781
+ "$ref": "#/$defs/evidenceId"
782
+ }
783
+ }
784
+ },
785
+ "required": [
786
+ "denials",
787
+ "policyReferences"
788
+ ],
789
+ "additionalProperties": false
790
+ },
791
+ "validation": {
792
+ "type": "object",
793
+ "properties": {
794
+ "rejections": {
795
+ "type": "array",
796
+ "items": {
797
+ "$ref": "#/$defs/evidenceId"
798
+ }
799
+ }
800
+ },
801
+ "required": [
802
+ "rejections"
803
+ ],
804
+ "additionalProperties": false
805
+ },
806
+ "tests": {
807
+ "type": "array",
808
+ "items": {
809
+ "type": "object",
810
+ "properties": {
811
+ "symbol": {
812
+ "type": "string"
813
+ },
814
+ "path": {
815
+ "type": "string"
816
+ },
817
+ "evidence": {
818
+ "type": "array",
819
+ "items": {
820
+ "$ref": "#/$defs/evidenceId"
821
+ }
822
+ }
823
+ },
824
+ "required": [
825
+ "symbol",
826
+ "path",
827
+ "evidence"
828
+ ],
829
+ "additionalProperties": false
830
+ }
831
+ },
832
+ "evidence": {
833
+ "type": "array",
834
+ "items": {
835
+ "$ref": "#/$defs/evidenceId"
836
+ }
837
+ },
838
+ "confidence": {
839
+ "enum": [
840
+ "linked",
841
+ "weakly-linked",
842
+ "unlinked"
843
+ ]
844
+ },
845
+ "readiness": {
846
+ "$ref": "#/$defs/readiness"
847
+ },
848
+ "unknowns": {
849
+ "type": "array",
850
+ "items": {
851
+ "$ref": "#/$defs/evidenceId"
852
+ }
853
+ },
854
+ "exposure": {
855
+ "$ref": "#/$defs/proposal"
856
+ }
857
+ },
858
+ "required": [
859
+ "id",
860
+ "name",
861
+ "description",
862
+ "operation",
863
+ "entryPoints",
864
+ "dependencies",
865
+ "sideEffects",
866
+ "authorization",
867
+ "validation",
868
+ "tests",
869
+ "evidence",
870
+ "confidence",
871
+ "readiness",
872
+ "unknowns",
873
+ "exposure"
874
+ ],
875
+ "additionalProperties": false
876
+ },
877
+ "finding": {
878
+ "type": "object",
879
+ "properties": {
880
+ "code": {
881
+ "type": "string",
882
+ "pattern": "^[A-Z_]+$"
883
+ },
884
+ "severity": {
885
+ "enum": [
886
+ "info",
887
+ "warning",
888
+ "error"
889
+ ]
890
+ },
891
+ "message": {
892
+ "type": "string"
893
+ },
894
+ "path": {
895
+ "type": "string"
896
+ },
897
+ "evidence": {
898
+ "type": "array",
899
+ "items": {
900
+ "$ref": "#/$defs/evidenceId"
901
+ }
902
+ }
903
+ },
904
+ "required": [
905
+ "code",
906
+ "severity",
907
+ "message"
908
+ ],
909
+ "additionalProperties": false
910
+ },
911
+ "question": {
912
+ "type": "object",
913
+ "properties": {
914
+ "id": {
915
+ "type": "string",
916
+ "pattern": "^q-"
917
+ },
918
+ "candidate": {
919
+ "type": "string"
920
+ },
921
+ "question": {
922
+ "type": "string",
923
+ "minLength": 1
924
+ },
925
+ "evidence": {
926
+ "type": "array",
927
+ "items": {
928
+ "$ref": "#/$defs/evidenceId"
929
+ }
930
+ }
931
+ },
932
+ "required": [
933
+ "id",
934
+ "question",
935
+ "evidence"
936
+ ],
937
+ "additionalProperties": false
938
+ },
939
+ "recommendation": {
940
+ "type": "object",
941
+ "properties": {
942
+ "candidate": {
943
+ "type": "string"
944
+ },
945
+ "readiness": {
946
+ "const": "exposure-candidate"
947
+ },
948
+ "reasons": {
949
+ "type": "array",
950
+ "items": {
951
+ "type": "string"
952
+ },
953
+ "minItems": 1
954
+ },
955
+ "ranking": {
956
+ "type": "object",
957
+ "properties": {
958
+ "rules": {
959
+ "type": "array",
960
+ "items": {
961
+ "type": "string"
962
+ },
963
+ "minItems": 1
964
+ },
965
+ "position": {
966
+ "const": 1
967
+ },
968
+ "of": {
969
+ "type": "integer",
970
+ "minimum": 1
971
+ },
972
+ "alternatives": {
973
+ "type": "array",
974
+ "items": {
975
+ "type": "string"
976
+ }
977
+ }
978
+ },
979
+ "required": [
980
+ "rules",
981
+ "position",
982
+ "of",
983
+ "alternatives"
984
+ ],
985
+ "additionalProperties": false
986
+ },
987
+ "beforeExposure": {
988
+ "type": "array",
989
+ "items": {
990
+ "type": "string"
991
+ }
992
+ }
993
+ },
994
+ "required": [
995
+ "candidate",
996
+ "readiness",
997
+ "reasons",
998
+ "ranking",
999
+ "beforeExposure"
1000
+ ],
1001
+ "additionalProperties": false
1002
+ },
1003
+ "coverage": {
1004
+ "type": "object",
1005
+ "properties": {
1006
+ "filesSeen": {
1007
+ "type": "integer",
1008
+ "minimum": 0
1009
+ },
1010
+ "filesAnalyzed": {
1011
+ "type": "integer",
1012
+ "minimum": 0
1013
+ },
1014
+ "languages": {
1015
+ "type": "array",
1016
+ "items": {
1017
+ "type": "object",
1018
+ "properties": {
1019
+ "language": {
1020
+ "type": "string"
1021
+ },
1022
+ "files": {
1023
+ "type": "integer",
1024
+ "minimum": 0
1025
+ },
1026
+ "supported": {
1027
+ "type": "boolean"
1028
+ }
1029
+ },
1030
+ "required": [
1031
+ "language",
1032
+ "files",
1033
+ "supported"
1034
+ ],
1035
+ "additionalProperties": false
1036
+ }
1037
+ },
1038
+ "skipped": {
1039
+ "type": "array",
1040
+ "items": {
1041
+ "type": "object",
1042
+ "properties": {
1043
+ "path": {
1044
+ "type": "string"
1045
+ },
1046
+ "reason": {
1047
+ "enum": [
1048
+ "symlink",
1049
+ "excluded-directory",
1050
+ "ignored",
1051
+ "generated",
1052
+ "too-large",
1053
+ "unreadable",
1054
+ "binary",
1055
+ "special-file"
1056
+ ]
1057
+ }
1058
+ },
1059
+ "required": [
1060
+ "path",
1061
+ "reason"
1062
+ ],
1063
+ "additionalProperties": false
1064
+ }
1065
+ },
1066
+ "malformed": {
1067
+ "type": "array",
1068
+ "items": {
1069
+ "type": "object",
1070
+ "properties": {
1071
+ "path": {
1072
+ "type": "string"
1073
+ },
1074
+ "line": {
1075
+ "type": "integer",
1076
+ "minimum": 0
1077
+ },
1078
+ "message": {
1079
+ "type": "string"
1080
+ }
1081
+ },
1082
+ "required": [
1083
+ "path",
1084
+ "line",
1085
+ "message"
1086
+ ],
1087
+ "additionalProperties": false
1088
+ }
1089
+ },
1090
+ "unsupportedIgnorePatterns": {
1091
+ "type": "array",
1092
+ "items": {
1093
+ "type": "string"
1094
+ }
1095
+ },
1096
+ "partial": {
1097
+ "type": "boolean"
1098
+ },
1099
+ "partialReasons": {
1100
+ "type": "array",
1101
+ "items": {
1102
+ "type": "string"
1103
+ }
1104
+ }
1105
+ },
1106
+ "required": [
1107
+ "filesSeen",
1108
+ "filesAnalyzed",
1109
+ "languages",
1110
+ "skipped",
1111
+ "malformed",
1112
+ "unsupportedIgnorePatterns",
1113
+ "partial",
1114
+ "partialReasons"
1115
+ ],
1116
+ "additionalProperties": false
1117
+ },
1118
+ "configuration": {
1119
+ "type": "object",
1120
+ "properties": {
1121
+ "scanner": {
1122
+ "const": "appport.assessment-scanner/1"
1123
+ },
1124
+ "maxFileBytes": {
1125
+ "type": "integer",
1126
+ "minimum": 0
1127
+ },
1128
+ "excludedDirectories": {
1129
+ "type": "array",
1130
+ "items": {
1131
+ "type": "string"
1132
+ }
1133
+ },
1134
+ "maxCallDepth": {
1135
+ "type": "integer",
1136
+ "minimum": 0
1137
+ },
1138
+ "maxReachableFunctions": {
1139
+ "type": "integer",
1140
+ "minimum": 0
1141
+ },
1142
+ "smallSurface": {
1143
+ "type": "object",
1144
+ "properties": {
1145
+ "maxHandlerLines": {
1146
+ "type": "integer",
1147
+ "minimum": 0
1148
+ },
1149
+ "maxReachableFunctions": {
1150
+ "type": "integer",
1151
+ "minimum": 0
1152
+ }
1153
+ },
1154
+ "required": [
1155
+ "maxHandlerLines",
1156
+ "maxReachableFunctions"
1157
+ ],
1158
+ "additionalProperties": false
1159
+ }
1160
+ },
1161
+ "required": [
1162
+ "scanner",
1163
+ "maxFileBytes",
1164
+ "excludedDirectories",
1165
+ "maxCallDepth",
1166
+ "maxReachableFunctions",
1167
+ "smallSurface"
1168
+ ],
1169
+ "additionalProperties": false
1170
+ },
1171
+ "inventory": {
1172
+ "type": "object",
1173
+ "properties": {
1174
+ "manifests": {
1175
+ "type": "array",
1176
+ "items": {
1177
+ "type": "object",
1178
+ "properties": {
1179
+ "path": {
1180
+ "type": "string"
1181
+ },
1182
+ "kind": {
1183
+ "enum": [
1184
+ "go.mod",
1185
+ "package.json"
1186
+ ]
1187
+ },
1188
+ "name": {
1189
+ "type": "string"
1190
+ },
1191
+ "evidence": {
1192
+ "type": "array",
1193
+ "items": {
1194
+ "$ref": "#/$defs/evidenceId"
1195
+ }
1196
+ }
1197
+ },
1198
+ "required": [
1199
+ "path",
1200
+ "kind",
1201
+ "evidence"
1202
+ ],
1203
+ "additionalProperties": false
1204
+ }
1205
+ },
1206
+ "constructs": {
1207
+ "type": "object",
1208
+ "properties": {
1209
+ "protoServices": {
1210
+ "type": "integer",
1211
+ "minimum": 0
1212
+ },
1213
+ "protoMethods": {
1214
+ "type": "integer",
1215
+ "minimum": 0
1216
+ },
1217
+ "goPackages": {
1218
+ "type": "integer",
1219
+ "minimum": 0
1220
+ },
1221
+ "goFunctions": {
1222
+ "type": "integer",
1223
+ "minimum": 0
1224
+ },
1225
+ "goTestFunctions": {
1226
+ "type": "integer",
1227
+ "minimum": 0
1228
+ },
1229
+ "httpRoutes": {
1230
+ "type": "integer",
1231
+ "minimum": 0
1232
+ }
1233
+ },
1234
+ "required": [
1235
+ "protoServices",
1236
+ "protoMethods",
1237
+ "goPackages",
1238
+ "goFunctions",
1239
+ "goTestFunctions",
1240
+ "httpRoutes"
1241
+ ],
1242
+ "additionalProperties": false
1243
+ },
1244
+ "entryPoints": {
1245
+ "type": "array",
1246
+ "items": {
1247
+ "type": "object",
1248
+ "properties": {
1249
+ "candidate": {
1250
+ "type": "string"
1251
+ },
1252
+ "kind": {
1253
+ "type": "string"
1254
+ },
1255
+ "subject": {
1256
+ "type": "string"
1257
+ },
1258
+ "evidence": {
1259
+ "type": "array",
1260
+ "items": {
1261
+ "$ref": "#/$defs/evidenceId"
1262
+ }
1263
+ }
1264
+ },
1265
+ "required": [
1266
+ "candidate",
1267
+ "kind",
1268
+ "subject",
1269
+ "evidence"
1270
+ ],
1271
+ "additionalProperties": false
1272
+ }
1273
+ },
1274
+ "persistence": {
1275
+ "type": "array",
1276
+ "items": {
1277
+ "type": "object",
1278
+ "properties": {
1279
+ "operation": {
1280
+ "enum": [
1281
+ "read",
1282
+ "write",
1283
+ "unknown"
1284
+ ]
1285
+ },
1286
+ "path": {
1287
+ "type": "string"
1288
+ },
1289
+ "evidence": {
1290
+ "type": "array",
1291
+ "items": {
1292
+ "$ref": "#/$defs/evidenceId"
1293
+ }
1294
+ }
1295
+ },
1296
+ "required": [
1297
+ "operation",
1298
+ "path",
1299
+ "evidence"
1300
+ ],
1301
+ "additionalProperties": false
1302
+ }
1303
+ },
1304
+ "integrations": {
1305
+ "type": "array",
1306
+ "items": {
1307
+ "type": "object",
1308
+ "properties": {
1309
+ "kind": {
1310
+ "enum": [
1311
+ "outbound-http",
1312
+ "module-dependency"
1313
+ ]
1314
+ },
1315
+ "subject": {
1316
+ "type": "string"
1317
+ },
1318
+ "evidence": {
1319
+ "type": "array",
1320
+ "items": {
1321
+ "$ref": "#/$defs/evidenceId"
1322
+ }
1323
+ }
1324
+ },
1325
+ "required": [
1326
+ "kind",
1327
+ "subject",
1328
+ "evidence"
1329
+ ],
1330
+ "additionalProperties": false
1331
+ }
1332
+ },
1333
+ "configuration": {
1334
+ "type": "array",
1335
+ "items": {
1336
+ "type": "object",
1337
+ "properties": {
1338
+ "source": {
1339
+ "enum": [
1340
+ "env",
1341
+ "flag",
1342
+ "viper"
1343
+ ]
1344
+ },
1345
+ "key": {
1346
+ "type": "string"
1347
+ },
1348
+ "evidence": {
1349
+ "type": "array",
1350
+ "items": {
1351
+ "$ref": "#/$defs/evidenceId"
1352
+ }
1353
+ }
1354
+ },
1355
+ "required": [
1356
+ "source",
1357
+ "key",
1358
+ "evidence"
1359
+ ],
1360
+ "additionalProperties": false
1361
+ }
1362
+ },
1363
+ "authorization": {
1364
+ "type": "array",
1365
+ "items": {
1366
+ "type": "object",
1367
+ "properties": {
1368
+ "kind": {
1369
+ "enum": [
1370
+ "policy-reference",
1371
+ "denial"
1372
+ ]
1373
+ },
1374
+ "subject": {
1375
+ "type": "string"
1376
+ },
1377
+ "evidence": {
1378
+ "type": "array",
1379
+ "items": {
1380
+ "$ref": "#/$defs/evidenceId"
1381
+ }
1382
+ }
1383
+ },
1384
+ "required": [
1385
+ "kind",
1386
+ "subject",
1387
+ "evidence"
1388
+ ],
1389
+ "additionalProperties": false
1390
+ }
1391
+ },
1392
+ "tests": {
1393
+ "type": "object",
1394
+ "properties": {
1395
+ "files": {
1396
+ "type": "integer",
1397
+ "minimum": 0
1398
+ },
1399
+ "functions": {
1400
+ "type": "integer",
1401
+ "minimum": 0
1402
+ }
1403
+ },
1404
+ "required": [
1405
+ "files",
1406
+ "functions"
1407
+ ],
1408
+ "additionalProperties": false
1409
+ }
1410
+ },
1411
+ "required": [
1412
+ "manifests",
1413
+ "constructs",
1414
+ "entryPoints",
1415
+ "persistence",
1416
+ "integrations",
1417
+ "configuration",
1418
+ "authorization",
1419
+ "tests"
1420
+ ],
1421
+ "additionalProperties": false
1422
+ }
1423
+ }
1424
+ }