@sentropic/focus 0.3.0 → 0.5.0-rc.1

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.
Files changed (100) hide show
  1. package/README.md +9 -0
  2. package/dist/cli/index.d.ts +1 -1
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +12 -3
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/editing/anchors.d.ts +14 -0
  7. package/dist/editing/anchors.d.ts.map +1 -0
  8. package/dist/editing/anchors.js +113 -0
  9. package/dist/editing/anchors.js.map +1 -0
  10. package/dist/editing/codec.d.ts +24 -0
  11. package/dist/editing/codec.d.ts.map +1 -0
  12. package/dist/editing/codec.js +143 -0
  13. package/dist/editing/codec.js.map +1 -0
  14. package/dist/editing/contract.d.ts +129 -0
  15. package/dist/editing/contract.d.ts.map +1 -0
  16. package/dist/editing/contract.js +76 -0
  17. package/dist/editing/contract.js.map +1 -0
  18. package/dist/editing/diff.d.ts +12 -0
  19. package/dist/editing/diff.d.ts.map +1 -0
  20. package/dist/editing/diff.js +125 -0
  21. package/dist/editing/diff.js.map +1 -0
  22. package/dist/editing/digest.d.ts +6 -0
  23. package/dist/editing/digest.d.ts.map +1 -0
  24. package/dist/editing/digest.js +56 -0
  25. package/dist/editing/digest.js.map +1 -0
  26. package/dist/editing/index.d.ts +7 -0
  27. package/dist/editing/index.d.ts.map +1 -0
  28. package/dist/editing/index.js +7 -0
  29. package/dist/editing/index.js.map +1 -0
  30. package/dist/editing/reconcile.d.ts +66 -0
  31. package/dist/editing/reconcile.d.ts.map +1 -0
  32. package/dist/editing/reconcile.js +167 -0
  33. package/dist/editing/reconcile.js.map +1 -0
  34. package/dist/editing/structure.d.ts +24 -0
  35. package/dist/editing/structure.d.ts.map +1 -0
  36. package/dist/editing/structure.js +71 -0
  37. package/dist/editing/structure.js.map +1 -0
  38. package/dist/index.d.ts +4 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +2 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/model.d.ts +144 -2
  43. package/dist/model.d.ts.map +1 -1
  44. package/dist/model.js +1 -1
  45. package/dist/model.js.map +1 -1
  46. package/dist/registry/definitions.d.ts +159 -0
  47. package/dist/registry/definitions.d.ts.map +1 -0
  48. package/dist/registry/definitions.js +509 -0
  49. package/dist/registry/definitions.js.map +1 -0
  50. package/dist/render/evidence.d.ts +10 -0
  51. package/dist/render/evidence.d.ts.map +1 -0
  52. package/dist/render/evidence.js +37 -0
  53. package/dist/render/evidence.js.map +1 -0
  54. package/dist/render/html.d.ts.map +1 -1
  55. package/dist/render/html.js +14 -1
  56. package/dist/render/html.js.map +1 -1
  57. package/dist/render/md.d.ts.map +1 -1
  58. package/dist/render/md.js +15 -1
  59. package/dist/render/md.js.map +1 -1
  60. package/dist/render/presentation.d.ts +4 -0
  61. package/dist/render/presentation.d.ts.map +1 -0
  62. package/dist/render/presentation.js +25 -0
  63. package/dist/render/presentation.js.map +1 -0
  64. package/dist/render/terminal.d.ts.map +1 -1
  65. package/dist/render/terminal.js +15 -1
  66. package/dist/render/terminal.js.map +1 -1
  67. package/dist/track/index.d.ts.map +1 -1
  68. package/dist/track/index.js +24 -10
  69. package/dist/track/index.js.map +1 -1
  70. package/dist/validation/evidence-bytes.d.ts +5 -0
  71. package/dist/validation/evidence-bytes.d.ts.map +1 -0
  72. package/dist/validation/evidence-bytes.js +57 -0
  73. package/dist/validation/evidence-bytes.js.map +1 -0
  74. package/dist/validation/evidence-shape.d.ts +12 -0
  75. package/dist/validation/evidence-shape.d.ts.map +1 -0
  76. package/dist/validation/evidence-shape.js +54 -0
  77. package/dist/validation/evidence-shape.js.map +1 -0
  78. package/dist/validation/evidence-sources.d.ts +7 -0
  79. package/dist/validation/evidence-sources.d.ts.map +1 -0
  80. package/dist/validation/evidence-sources.js +56 -0
  81. package/dist/validation/evidence-sources.js.map +1 -0
  82. package/dist/validation/evidence.d.ts +5 -0
  83. package/dist/validation/evidence.d.ts.map +1 -0
  84. package/dist/validation/evidence.js +131 -0
  85. package/dist/validation/evidence.js.map +1 -0
  86. package/dist/validation/index.d.ts +59 -0
  87. package/dist/validation/index.d.ts.map +1 -0
  88. package/dist/validation/index.js +500 -0
  89. package/dist/validation/index.js.map +1 -0
  90. package/dist/validation/readability.d.ts +28 -0
  91. package/dist/validation/readability.d.ts.map +1 -0
  92. package/dist/validation/readability.js +265 -0
  93. package/dist/validation/readability.js.map +1 -0
  94. package/package.json +36 -8
  95. package/registry/entries.v1.json +140 -0
  96. package/schemas/decision-dossier-document.v1.schema.json +193 -0
  97. package/schemas/decision-dossier-document.v2.schema.json +925 -0
  98. package/schemas/focus-edit-return.v1.schema.json +950 -0
  99. package/schemas/focus-editing-manifest.v1.schema.json +167 -0
  100. package/skills/focus/SKILL.md +181 -0
@@ -0,0 +1,925 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:sentropic:focus:DecisionDossierDocument:2.0.0",
4
+ "title": "DecisionDossierDocument v2 — embedded evidence",
5
+ "description": "Breaking evidence envelope. Original bytes, digests, line ranges and reference integrity are additionally checked by the exported runtime validator. Absence of schemaVersion selects unchanged legacy v1.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "ref",
10
+ "subject",
11
+ "title",
12
+ "hash",
13
+ "cursor",
14
+ "sections",
15
+ "interactions",
16
+ "provenance",
17
+ "amendmentTrace",
18
+ "schemaVersion",
19
+ "sources",
20
+ "citations",
21
+ "evidenceGroups",
22
+ "annexes"
23
+ ],
24
+ "properties": {
25
+ "ref": {
26
+ "type": "string"
27
+ },
28
+ "subject": {
29
+ "type": "string"
30
+ },
31
+ "title": {
32
+ "type": "string"
33
+ },
34
+ "hash": {
35
+ "type": "string"
36
+ },
37
+ "cursor": {
38
+ "type": "string"
39
+ },
40
+ "sections": {
41
+ "type": "array",
42
+ "items": {
43
+ "$ref": "#/$defs/section"
44
+ }
45
+ },
46
+ "interactions": {
47
+ "type": "array",
48
+ "items": {
49
+ "$ref": "#/$defs/interaction"
50
+ }
51
+ },
52
+ "provenance": {
53
+ "$ref": "#/$defs/provenance"
54
+ },
55
+ "amendmentTrace": {
56
+ "type": "array",
57
+ "items": {
58
+ "$ref": "#/$defs/amendmentStep"
59
+ }
60
+ },
61
+ "readability": {
62
+ "$ref": "#/$defs/readability"
63
+ },
64
+ "schemaVersion": {
65
+ "const": 2
66
+ },
67
+ "sources": {
68
+ "type": "array",
69
+ "items": {
70
+ "$ref": "#/$defs/evidenceSource"
71
+ }
72
+ },
73
+ "citations": {
74
+ "type": "array",
75
+ "items": {
76
+ "$ref": "#/$defs/evidenceCitation"
77
+ }
78
+ },
79
+ "evidenceGroups": {
80
+ "type": "array",
81
+ "items": {
82
+ "$ref": "#/$defs/evidenceGroup"
83
+ }
84
+ },
85
+ "annexes": {
86
+ "type": "array",
87
+ "items": {
88
+ "$ref": "#/$defs/evidenceAnnex"
89
+ }
90
+ }
91
+ },
92
+ "$defs": {
93
+ "readability": {
94
+ "type": "object",
95
+ "additionalProperties": false,
96
+ "properties": {
97
+ "ownerRequestQuote": {
98
+ "type": "string"
99
+ },
100
+ "noOwnerRequest": {
101
+ "type": "boolean"
102
+ },
103
+ "stakes": {
104
+ "type": "string"
105
+ },
106
+ "stakesLevel": {
107
+ "enum": [
108
+ "low",
109
+ "medium",
110
+ "high"
111
+ ]
112
+ },
113
+ "readingBudgetMinutes": {
114
+ "type": "number"
115
+ },
116
+ "glossary": {
117
+ "type": "array",
118
+ "items": {
119
+ "$ref": "#/$defs/glossaryEntry"
120
+ }
121
+ }
122
+ }
123
+ },
124
+ "glossaryEntry": {
125
+ "type": "object",
126
+ "additionalProperties": false,
127
+ "required": [
128
+ "term",
129
+ "definition"
130
+ ],
131
+ "properties": {
132
+ "term": {
133
+ "type": "string"
134
+ },
135
+ "definition": {
136
+ "type": "string"
137
+ }
138
+ }
139
+ },
140
+ "section": {
141
+ "oneOf": [
142
+ {
143
+ "$ref": "#/$defs/proseNode"
144
+ },
145
+ {
146
+ "$ref": "#/$defs/questionNode"
147
+ },
148
+ {
149
+ "$ref": "#/$defs/optionSetNode"
150
+ },
151
+ {
152
+ "$ref": "#/$defs/outcomeNode"
153
+ },
154
+ {
155
+ "$ref": "#/$defs/amendmentTraceNode"
156
+ },
157
+ {
158
+ "$ref": "#/$defs/diagramNode"
159
+ }
160
+ ]
161
+ },
162
+ "proseNode": {
163
+ "type": "object",
164
+ "additionalProperties": false,
165
+ "required": [
166
+ "kind",
167
+ "id",
168
+ "targetRef",
169
+ "markdown"
170
+ ],
171
+ "properties": {
172
+ "kind": {
173
+ "const": "prose"
174
+ },
175
+ "id": {
176
+ "type": "string"
177
+ },
178
+ "targetRef": {
179
+ "type": "string"
180
+ },
181
+ "markdown": {
182
+ "type": "string"
183
+ },
184
+ "questionId": {
185
+ "type": "string"
186
+ },
187
+ "citationRefs": {
188
+ "type": "array",
189
+ "items": {
190
+ "type": "string",
191
+ "minLength": 1
192
+ }
193
+ }
194
+ }
195
+ },
196
+ "questionNode": {
197
+ "type": "object",
198
+ "additionalProperties": false,
199
+ "required": [
200
+ "kind",
201
+ "id",
202
+ "targetRef",
203
+ "question",
204
+ "state"
205
+ ],
206
+ "properties": {
207
+ "kind": {
208
+ "const": "question"
209
+ },
210
+ "id": {
211
+ "type": "string"
212
+ },
213
+ "targetRef": {
214
+ "type": "string"
215
+ },
216
+ "question": {
217
+ "type": "string"
218
+ },
219
+ "recommendedAnswer": {
220
+ "type": "string"
221
+ },
222
+ "answer": {
223
+ "type": "string"
224
+ },
225
+ "state": {
226
+ "enum": [
227
+ "open",
228
+ "answered",
229
+ "validated"
230
+ ]
231
+ },
232
+ "context": {
233
+ "type": "string"
234
+ },
235
+ "readingTimeMinutes": {
236
+ "type": "number"
237
+ },
238
+ "recommendedOptionId": {
239
+ "type": "string"
240
+ },
241
+ "citationRefs": {
242
+ "type": "array",
243
+ "items": {
244
+ "type": "string",
245
+ "minLength": 1
246
+ }
247
+ }
248
+ }
249
+ },
250
+ "optionNode": {
251
+ "type": "object",
252
+ "additionalProperties": false,
253
+ "required": [
254
+ "kind",
255
+ "id",
256
+ "targetRef",
257
+ "label",
258
+ "annotation"
259
+ ],
260
+ "properties": {
261
+ "kind": {
262
+ "const": "option"
263
+ },
264
+ "id": {
265
+ "type": "string"
266
+ },
267
+ "targetRef": {
268
+ "type": "string"
269
+ },
270
+ "label": {
271
+ "type": "string"
272
+ },
273
+ "body": {
274
+ "type": "string"
275
+ },
276
+ "annotation": {
277
+ "enum": [
278
+ "none",
279
+ "accept",
280
+ "reject",
281
+ "comment"
282
+ ]
283
+ },
284
+ "annotationComment": {
285
+ "type": "string"
286
+ },
287
+ "consequence": {
288
+ "type": "string"
289
+ },
290
+ "citationRefs": {
291
+ "type": "array",
292
+ "items": {
293
+ "type": "string",
294
+ "minLength": 1
295
+ }
296
+ }
297
+ }
298
+ },
299
+ "optionSetNode": {
300
+ "type": "object",
301
+ "additionalProperties": false,
302
+ "required": [
303
+ "kind",
304
+ "id",
305
+ "targetRef",
306
+ "options"
307
+ ],
308
+ "properties": {
309
+ "kind": {
310
+ "const": "optionSet"
311
+ },
312
+ "id": {
313
+ "type": "string"
314
+ },
315
+ "targetRef": {
316
+ "type": "string"
317
+ },
318
+ "title": {
319
+ "type": "string"
320
+ },
321
+ "options": {
322
+ "type": "array",
323
+ "items": {
324
+ "$ref": "#/$defs/optionNode"
325
+ }
326
+ },
327
+ "questionId": {
328
+ "type": "string"
329
+ },
330
+ "citationRefs": {
331
+ "type": "array",
332
+ "items": {
333
+ "type": "string",
334
+ "minLength": 1
335
+ }
336
+ }
337
+ }
338
+ },
339
+ "outcomeNode": {
340
+ "type": "object",
341
+ "additionalProperties": false,
342
+ "required": [
343
+ "kind",
344
+ "id",
345
+ "targetRef",
346
+ "modality",
347
+ "statement"
348
+ ],
349
+ "properties": {
350
+ "kind": {
351
+ "const": "outcome"
352
+ },
353
+ "id": {
354
+ "type": "string"
355
+ },
356
+ "targetRef": {
357
+ "type": "string"
358
+ },
359
+ "modality": {
360
+ "enum": [
361
+ "decision",
362
+ "orientation",
363
+ "amendment",
364
+ "comment"
365
+ ]
366
+ },
367
+ "statement": {
368
+ "type": "string"
369
+ },
370
+ "questionId": {
371
+ "type": "string"
372
+ },
373
+ "citationRefs": {
374
+ "type": "array",
375
+ "items": {
376
+ "type": "string",
377
+ "minLength": 1
378
+ }
379
+ }
380
+ }
381
+ },
382
+ "amendmentTraceNode": {
383
+ "type": "object",
384
+ "additionalProperties": false,
385
+ "required": [
386
+ "kind",
387
+ "id",
388
+ "targetRef",
389
+ "steps"
390
+ ],
391
+ "properties": {
392
+ "kind": {
393
+ "const": "amendmentTrace"
394
+ },
395
+ "id": {
396
+ "type": "string"
397
+ },
398
+ "targetRef": {
399
+ "type": "string"
400
+ },
401
+ "steps": {
402
+ "type": "array",
403
+ "items": {
404
+ "$ref": "#/$defs/amendmentStep"
405
+ }
406
+ },
407
+ "citationRefs": {
408
+ "type": "array",
409
+ "items": {
410
+ "type": "string",
411
+ "minLength": 1
412
+ }
413
+ }
414
+ }
415
+ },
416
+ "diagramNode": {
417
+ "type": "object",
418
+ "additionalProperties": false,
419
+ "required": [
420
+ "kind",
421
+ "id",
422
+ "targetRef",
423
+ "syntax",
424
+ "source",
425
+ "alt"
426
+ ],
427
+ "properties": {
428
+ "kind": {
429
+ "const": "diagram"
430
+ },
431
+ "id": {
432
+ "type": "string"
433
+ },
434
+ "targetRef": {
435
+ "type": "string"
436
+ },
437
+ "syntax": {
438
+ "enum": [
439
+ "mermaid",
440
+ "plantuml"
441
+ ]
442
+ },
443
+ "source": {
444
+ "type": "string"
445
+ },
446
+ "alt": {
447
+ "type": "string"
448
+ },
449
+ "scene": {
450
+ "type": "object",
451
+ "description": "diagram-core SemanticDocument, profile generic@1, without views, geometry or layout hints. Opaque JSON until the design-system publishes its authoritative schema; no Focus-specific scene model."
452
+ },
453
+ "citationRefs": {
454
+ "type": "array",
455
+ "items": {
456
+ "type": "string",
457
+ "minLength": 1
458
+ }
459
+ }
460
+ }
461
+ },
462
+ "interaction": {
463
+ "type": "object",
464
+ "additionalProperties": false,
465
+ "required": [
466
+ "name",
467
+ "targetRef",
468
+ "label",
469
+ "enabled"
470
+ ],
471
+ "properties": {
472
+ "name": {
473
+ "type": "string"
474
+ },
475
+ "targetRef": {
476
+ "type": "string"
477
+ },
478
+ "label": {
479
+ "type": "string"
480
+ },
481
+ "enabled": {
482
+ "const": false
483
+ }
484
+ }
485
+ },
486
+ "comprehensionEvidence": {
487
+ "type": "object",
488
+ "additionalProperties": false,
489
+ "required": [
490
+ "subject",
491
+ "dossierHash"
492
+ ],
493
+ "properties": {
494
+ "subject": {
495
+ "type": "string"
496
+ },
497
+ "dossierHash": {
498
+ "type": "string"
499
+ },
500
+ "signature": {
501
+ "type": "string"
502
+ }
503
+ }
504
+ },
505
+ "provenance": {
506
+ "type": "object",
507
+ "additionalProperties": false,
508
+ "required": [
509
+ "source",
510
+ "readAt"
511
+ ],
512
+ "properties": {
513
+ "source": {
514
+ "type": "string"
515
+ },
516
+ "readAt": {
517
+ "type": "string"
518
+ },
519
+ "comprehensionEvidence": {
520
+ "$ref": "#/$defs/comprehensionEvidence"
521
+ }
522
+ }
523
+ },
524
+ "amendmentStep": {
525
+ "type": "object",
526
+ "additionalProperties": false,
527
+ "required": [
528
+ "at",
529
+ "author",
530
+ "summary"
531
+ ],
532
+ "properties": {
533
+ "at": {
534
+ "type": "string"
535
+ },
536
+ "author": {
537
+ "type": "string"
538
+ },
539
+ "summary": {
540
+ "type": "string"
541
+ }
542
+ }
543
+ },
544
+ "evidenceSource": {
545
+ "type": "object",
546
+ "additionalProperties": false,
547
+ "required": [
548
+ "id",
549
+ "title",
550
+ "origin",
551
+ "mediaType",
552
+ "encoding",
553
+ "data",
554
+ "sha256",
555
+ "size"
556
+ ],
557
+ "properties": {
558
+ "id": {
559
+ "type": "string",
560
+ "minLength": 1
561
+ },
562
+ "title": {
563
+ "type": "string",
564
+ "minLength": 1
565
+ },
566
+ "origin": {
567
+ "oneOf": [
568
+ {
569
+ "type": "object",
570
+ "additionalProperties": false,
571
+ "required": [
572
+ "uri"
573
+ ],
574
+ "properties": {
575
+ "uri": {
576
+ "type": "string",
577
+ "minLength": 1
578
+ }
579
+ }
580
+ },
581
+ {
582
+ "type": "object",
583
+ "additionalProperties": false,
584
+ "required": [
585
+ "repo",
586
+ "revision",
587
+ "path"
588
+ ],
589
+ "properties": {
590
+ "repo": {
591
+ "type": "string",
592
+ "minLength": 1
593
+ },
594
+ "revision": {
595
+ "type": "string",
596
+ "minLength": 1
597
+ },
598
+ "path": {
599
+ "type": "string",
600
+ "minLength": 1
601
+ }
602
+ }
603
+ }
604
+ ]
605
+ },
606
+ "mediaType": {
607
+ "anyOf": [
608
+ {
609
+ "type": "string",
610
+ "pattern": "^text/[a-z0-9.+-]+$"
611
+ },
612
+ {
613
+ "enum": [
614
+ "application/json",
615
+ "application/yaml",
616
+ "application/x-yaml",
617
+ "application/x-ndjson",
618
+ "image/png",
619
+ "image/jpeg"
620
+ ]
621
+ }
622
+ ]
623
+ },
624
+ "encoding": {
625
+ "const": "base64"
626
+ },
627
+ "data": {
628
+ "type": "string"
629
+ },
630
+ "sha256": {
631
+ "type": "string",
632
+ "pattern": "^[a-f0-9]{64}$"
633
+ },
634
+ "size": {
635
+ "type": "integer",
636
+ "minimum": 0
637
+ },
638
+ "width": {
639
+ "type": "integer",
640
+ "minimum": 1
641
+ },
642
+ "height": {
643
+ "type": "integer",
644
+ "minimum": 1
645
+ },
646
+ "alt": {
647
+ "type": "string",
648
+ "minLength": 1
649
+ }
650
+ },
651
+ "allOf": [
652
+ {
653
+ "if": {
654
+ "properties": {
655
+ "mediaType": {
656
+ "enum": [
657
+ "image/png",
658
+ "image/jpeg"
659
+ ]
660
+ }
661
+ },
662
+ "required": [
663
+ "mediaType"
664
+ ]
665
+ },
666
+ "then": {
667
+ "required": [
668
+ "width",
669
+ "height",
670
+ "alt"
671
+ ]
672
+ },
673
+ "else": {
674
+ "not": {
675
+ "anyOf": [
676
+ {
677
+ "required": [
678
+ "width"
679
+ ]
680
+ },
681
+ {
682
+ "required": [
683
+ "height"
684
+ ]
685
+ },
686
+ {
687
+ "required": [
688
+ "alt"
689
+ ]
690
+ }
691
+ ]
692
+ }
693
+ }
694
+ }
695
+ ]
696
+ },
697
+ "evidenceCitation": {
698
+ "type": "object",
699
+ "additionalProperties": false,
700
+ "required": [
701
+ "id",
702
+ "sourceId",
703
+ "label",
704
+ "locator"
705
+ ],
706
+ "properties": {
707
+ "id": {
708
+ "type": "string",
709
+ "minLength": 1
710
+ },
711
+ "sourceId": {
712
+ "type": "string",
713
+ "minLength": 1
714
+ },
715
+ "label": {
716
+ "type": "string",
717
+ "minLength": 1
718
+ },
719
+ "locator": {
720
+ "oneOf": [
721
+ {
722
+ "type": "object",
723
+ "additionalProperties": false,
724
+ "required": [
725
+ "kind",
726
+ "start",
727
+ "end"
728
+ ],
729
+ "properties": {
730
+ "kind": {
731
+ "const": "lines"
732
+ },
733
+ "start": {
734
+ "type": "integer",
735
+ "minimum": 1
736
+ },
737
+ "end": {
738
+ "type": "integer",
739
+ "minimum": 1
740
+ }
741
+ }
742
+ },
743
+ {
744
+ "type": "object",
745
+ "additionalProperties": false,
746
+ "required": [
747
+ "kind",
748
+ "caption"
749
+ ],
750
+ "properties": {
751
+ "kind": {
752
+ "const": "image"
753
+ },
754
+ "caption": {
755
+ "type": "string",
756
+ "minLength": 1
757
+ }
758
+ }
759
+ }
760
+ ]
761
+ }
762
+ }
763
+ },
764
+ "evidenceGroup": {
765
+ "type": "object",
766
+ "additionalProperties": false,
767
+ "required": [
768
+ "id",
769
+ "summary",
770
+ "citationRefs",
771
+ "sourceRefs"
772
+ ],
773
+ "properties": {
774
+ "id": {
775
+ "type": "string",
776
+ "minLength": 1
777
+ },
778
+ "summary": {
779
+ "type": "string",
780
+ "minLength": 1
781
+ },
782
+ "citationRefs": {
783
+ "type": "array",
784
+ "items": {
785
+ "type": "string",
786
+ "minLength": 1
787
+ }
788
+ },
789
+ "sourceRefs": {
790
+ "type": "array",
791
+ "items": {
792
+ "type": "string",
793
+ "minLength": 1
794
+ }
795
+ }
796
+ }
797
+ },
798
+ "evidenceAnnex": {
799
+ "type": "object",
800
+ "additionalProperties": false,
801
+ "required": [
802
+ "id",
803
+ "title",
804
+ "summary",
805
+ "backRefs",
806
+ "blocks"
807
+ ],
808
+ "properties": {
809
+ "id": {
810
+ "type": "string",
811
+ "minLength": 1
812
+ },
813
+ "title": {
814
+ "type": "string",
815
+ "minLength": 1
816
+ },
817
+ "summary": {
818
+ "type": "string",
819
+ "minLength": 1
820
+ },
821
+ "backRefs": {
822
+ "type": "array",
823
+ "items": {
824
+ "type": "string",
825
+ "minLength": 1
826
+ }
827
+ },
828
+ "blocks": {
829
+ "type": "array",
830
+ "items": {
831
+ "oneOf": [
832
+ {
833
+ "type": "object",
834
+ "additionalProperties": false,
835
+ "required": [
836
+ "kind",
837
+ "text"
838
+ ],
839
+ "properties": {
840
+ "kind": {
841
+ "const": "text"
842
+ },
843
+ "text": {
844
+ "type": "string"
845
+ }
846
+ }
847
+ },
848
+ {
849
+ "type": "object",
850
+ "additionalProperties": false,
851
+ "required": [
852
+ "kind",
853
+ "text"
854
+ ],
855
+ "properties": {
856
+ "kind": {
857
+ "const": "code"
858
+ },
859
+ "text": {
860
+ "type": "string"
861
+ },
862
+ "language": {
863
+ "type": "string",
864
+ "minLength": 1
865
+ }
866
+ }
867
+ },
868
+ {
869
+ "type": "object",
870
+ "additionalProperties": false,
871
+ "required": [
872
+ "kind",
873
+ "columns",
874
+ "rows"
875
+ ],
876
+ "properties": {
877
+ "kind": {
878
+ "const": "table"
879
+ },
880
+ "columns": {
881
+ "type": "array",
882
+ "items": {
883
+ "type": "string",
884
+ "minLength": 1
885
+ },
886
+ "minItems": 1
887
+ },
888
+ "rows": {
889
+ "type": "array",
890
+ "items": {
891
+ "type": "array",
892
+ "items": {
893
+ "type": "string"
894
+ }
895
+ }
896
+ }
897
+ }
898
+ },
899
+ {
900
+ "type": "object",
901
+ "additionalProperties": false,
902
+ "required": [
903
+ "kind",
904
+ "citationRefs"
905
+ ],
906
+ "properties": {
907
+ "kind": {
908
+ "const": "references"
909
+ },
910
+ "citationRefs": {
911
+ "type": "array",
912
+ "items": {
913
+ "type": "string",
914
+ "minLength": 1
915
+ }
916
+ }
917
+ }
918
+ }
919
+ ]
920
+ }
921
+ }
922
+ }
923
+ }
924
+ }
925
+ }