@hellraisercenobit/ai-engineering-gate 0.8.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.
Files changed (100) hide show
  1. package/README.md +82 -0
  2. package/agents/design-pattern-reviewer.md +40 -0
  3. package/agents/modern-typescript-reviewer.md +24 -0
  4. package/agents/testing-pattern-reviewer.md +23 -0
  5. package/bin/ai-engineering-gate.mjs +6 -0
  6. package/contracts/axi/axi-standard.md +273 -0
  7. package/contracts/axi/pin.json +36 -0
  8. package/contracts/members.json +58 -0
  9. package/contracts/schemas/arbitration.schema.json +45 -0
  10. package/contracts/schemas/decision-envelope.schema.json +215 -0
  11. package/contracts/schemas/declaration.schema.json +190 -0
  12. package/contracts/schemas/dispute.schema.json +67 -0
  13. package/contracts/schemas/evidence-append.schema.json +72 -0
  14. package/contracts/schemas/gate-output.schema.json +296 -0
  15. package/contracts/schemas/marker.schema.json +75 -0
  16. package/contracts/schemas/review-envelope.schema.json +378 -0
  17. package/contracts/schemas/verdict-record.schema.json +191 -0
  18. package/contracts/suite-contract.md +270 -0
  19. package/dist/ai-engineering-gate.mjs +2762 -0
  20. package/package.json +47 -0
  21. package/skills/engineering/review-design-patterns/LICENSE +6 -0
  22. package/skills/engineering/review-design-patterns/SKILL.md +196 -0
  23. package/skills/engineering/review-design-patterns/agents/openai.yaml +3 -0
  24. package/skills/engineering/review-design-patterns/references/smell-signatures.md +117 -0
  25. package/skills/engineering/review-design-patterns/review-design-patterns.yaml +25 -0
  26. package/skills/engineering/review-modern-typescript/LICENSE +21 -0
  27. package/skills/engineering/review-modern-typescript/SKILL.md +88 -0
  28. package/skills/engineering/review-modern-typescript/agents/openai.yaml +3 -0
  29. package/skills/engineering/review-modern-typescript/references/smell-signatures.md +36 -0
  30. package/skills/engineering/review-modern-typescript/review-modern-typescript.yaml +22 -0
  31. package/skills/engineering/review-testing-patterns/SKILL.md +108 -0
  32. package/skills/engineering/review-testing-patterns/agents/openai.yaml +4 -0
  33. package/skills/engineering/review-testing-patterns/references/compiler-profile.mjs +103 -0
  34. package/skills/engineering/review-testing-patterns/references/smell-signatures.md +30 -0
  35. package/skills/engineering/review-testing-patterns/review-testing-patterns.yaml +23 -0
  36. package/skills/engineering/transpose-design-patterns/LICENSE +6 -0
  37. package/skills/engineering/transpose-design-patterns/SKILL.md +231 -0
  38. package/skills/engineering/transpose-design-patterns/agents/openai.yaml +3 -0
  39. package/skills/engineering/transpose-design-patterns/references/arbitration.schema.json +45 -0
  40. package/skills/engineering/transpose-design-patterns/references/decision-envelope.schema.json +215 -0
  41. package/skills/engineering/transpose-design-patterns/references/declaration.schema.json +190 -0
  42. package/skills/engineering/transpose-design-patterns/references/design-decision-record.schema.json +731 -0
  43. package/skills/engineering/transpose-design-patterns/references/dispute.schema.json +67 -0
  44. package/skills/engineering/transpose-design-patterns/references/evidence-append.schema.json +72 -0
  45. package/skills/engineering/transpose-design-patterns/references/marker.schema.json +75 -0
  46. package/skills/engineering/transpose-design-patterns/references/pattern-catalog.md +305 -0
  47. package/skills/engineering/transpose-design-patterns/references/record.example.json +120 -0
  48. package/skills/engineering/transpose-design-patterns/references/review-envelope.schema.json +378 -0
  49. package/skills/engineering/transpose-design-patterns/references/suite-contract.md +270 -0
  50. package/skills/engineering/transpose-design-patterns/references/transpose-angular.md +224 -0
  51. package/skills/engineering/transpose-design-patterns/references/transpose-php.md +561 -0
  52. package/skills/engineering/transpose-design-patterns/references/transpose-quarkus.md +283 -0
  53. package/skills/engineering/transpose-design-patterns/references/transpose-react.md +256 -0
  54. package/skills/engineering/transpose-design-patterns/references/transpose-vanilla.md +204 -0
  55. package/skills/engineering/transpose-design-patterns/references/transpose-vue.md +234 -0
  56. package/skills/engineering/transpose-design-patterns/transpose-design-patterns.yaml +24 -0
  57. package/skills/engineering/transpose-modern-typescript/LICENSE +21 -0
  58. package/skills/engineering/transpose-modern-typescript/SKILL.md +90 -0
  59. package/skills/engineering/transpose-modern-typescript/agents/openai.yaml +3 -0
  60. package/skills/engineering/transpose-modern-typescript/references/arbitration.schema.json +45 -0
  61. package/skills/engineering/transpose-modern-typescript/references/catalog.md +38 -0
  62. package/skills/engineering/transpose-modern-typescript/references/collections.md +50 -0
  63. package/skills/engineering/transpose-modern-typescript/references/compatibility.md +61 -0
  64. package/skills/engineering/transpose-modern-typescript/references/decision-envelope.schema.json +215 -0
  65. package/skills/engineering/transpose-modern-typescript/references/decision-record.schema.json +830 -0
  66. package/skills/engineering/transpose-modern-typescript/references/declaration.schema.json +190 -0
  67. package/skills/engineering/transpose-modern-typescript/references/dispute.schema.json +67 -0
  68. package/skills/engineering/transpose-modern-typescript/references/evidence-append.schema.json +72 -0
  69. package/skills/engineering/transpose-modern-typescript/references/idioms.md +74 -0
  70. package/skills/engineering/transpose-modern-typescript/references/marker.schema.json +75 -0
  71. package/skills/engineering/transpose-modern-typescript/references/platform.md +147 -0
  72. package/skills/engineering/transpose-modern-typescript/references/record.example.json +172 -0
  73. package/skills/engineering/transpose-modern-typescript/references/record.md +37 -0
  74. package/skills/engineering/transpose-modern-typescript/references/review-envelope.schema.json +378 -0
  75. package/skills/engineering/transpose-modern-typescript/references/suite-contract.md +270 -0
  76. package/skills/engineering/transpose-modern-typescript/references/types.md +97 -0
  77. package/skills/engineering/transpose-modern-typescript/transpose-modern-typescript.yaml +22 -0
  78. package/skills/engineering/transpose-testing-patterns/SKILL.md +96 -0
  79. package/skills/engineering/transpose-testing-patterns/agents/openai.yaml +4 -0
  80. package/skills/engineering/transpose-testing-patterns/references/arbitration.schema.json +45 -0
  81. package/skills/engineering/transpose-testing-patterns/references/catalog.md +218 -0
  82. package/skills/engineering/transpose-testing-patterns/references/decision-envelope.schema.json +215 -0
  83. package/skills/engineering/transpose-testing-patterns/references/decision-record.schema.json +857 -0
  84. package/skills/engineering/transpose-testing-patterns/references/declaration.schema.json +190 -0
  85. package/skills/engineering/transpose-testing-patterns/references/detect-adapter.mjs +98 -0
  86. package/skills/engineering/transpose-testing-patterns/references/dispute.schema.json +67 -0
  87. package/skills/engineering/transpose-testing-patterns/references/doubles-data.md +45 -0
  88. package/skills/engineering/transpose-testing-patterns/references/evidence-append.schema.json +72 -0
  89. package/skills/engineering/transpose-testing-patterns/references/journal-event.schema.json +115 -0
  90. package/skills/engineering/transpose-testing-patterns/references/marker.schema.json +75 -0
  91. package/skills/engineering/transpose-testing-patterns/references/record.example.json +230 -0
  92. package/skills/engineering/transpose-testing-patterns/references/record.md +25 -0
  93. package/skills/engineering/transpose-testing-patterns/references/review-envelope.schema.json +378 -0
  94. package/skills/engineering/transpose-testing-patterns/references/suite-contract.md +270 -0
  95. package/skills/engineering/transpose-testing-patterns/references/tdd.md +62 -0
  96. package/skills/engineering/transpose-testing-patterns/references/transpose-codeception.md +84 -0
  97. package/skills/engineering/transpose-testing-patterns/references/transpose-karma-jasmine-angular.md +73 -0
  98. package/skills/engineering/transpose-testing-patterns/references/transpose-vitest.md +111 -0
  99. package/skills/engineering/transpose-testing-patterns/references/typescript.md +42 -0
  100. package/skills/engineering/transpose-testing-patterns/transpose-testing-patterns.yaml +23 -0
@@ -0,0 +1,830 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/hellraisercenobit/skills/blob/main/skills/engineering/transpose-modern-typescript/references/decision-record.schema.json",
4
+ "title": "Modern TypeScript decision record 2.0.0",
5
+ "description": "Shape and catalog membership only, on the suite's common decision envelope. Validation does not establish compatibility, correctness or decision timing.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "dimension",
10
+ "schemaVersion",
11
+ "catalogVersion",
12
+ "contractVersions",
13
+ "need",
14
+ "scope",
15
+ "base",
16
+ "revision",
17
+ "cites",
18
+ "plans",
19
+ "inventory",
20
+ "profile",
21
+ "sites"
22
+ ],
23
+ "properties": {
24
+ "dimension": {
25
+ "const": "modern-typescript"
26
+ },
27
+ "schemaVersion": {
28
+ "const": "2.0.0"
29
+ },
30
+ "catalogVersion": {
31
+ "const": "1.1.0"
32
+ },
33
+ "contractVersions": {
34
+ "type": "array",
35
+ "minItems": 1,
36
+ "uniqueItems": true,
37
+ "items": {
38
+ "enum": [
39
+ "1.0.0",
40
+ "1.1.0"
41
+ ]
42
+ }
43
+ },
44
+ "need": {
45
+ "type": "string",
46
+ "minLength": 1
47
+ },
48
+ "scope": {
49
+ "type": "array",
50
+ "minItems": 1,
51
+ "items": {
52
+ "type": "string",
53
+ "minLength": 1
54
+ }
55
+ },
56
+ "base": {
57
+ "type": "string",
58
+ "minLength": 1
59
+ },
60
+ "cites": {
61
+ "description": "Artifacts and evidence sources that exist when the record is validated. A dangling path refuses the record.",
62
+ "type": "array",
63
+ "items": {
64
+ "$ref": "#/$defs/citation"
65
+ }
66
+ },
67
+ "plans": {
68
+ "description": "Artifacts this record commits to produce, with this dimension's roles.",
69
+ "type": "array",
70
+ "items": {
71
+ "type": "object",
72
+ "additionalProperties": false,
73
+ "required": [
74
+ "path",
75
+ "role"
76
+ ],
77
+ "properties": {
78
+ "path": {
79
+ "type": "string",
80
+ "minLength": 1
81
+ },
82
+ "role": {
83
+ "enum": [
84
+ "implementation",
85
+ "check-output",
86
+ "consumer-types"
87
+ ]
88
+ }
89
+ }
90
+ }
91
+ },
92
+ "revision": {
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": [
96
+ "number",
97
+ "previous",
98
+ "reason"
99
+ ],
100
+ "properties": {
101
+ "number": {
102
+ "type": "integer",
103
+ "minimum": 1
104
+ },
105
+ "previous": {
106
+ "type": [
107
+ "string",
108
+ "null"
109
+ ],
110
+ "minLength": 1
111
+ },
112
+ "reason": {
113
+ "type": "string",
114
+ "minLength": 1
115
+ },
116
+ "changed": {
117
+ "description": "The cited paths this revision changed. Enforcement verifies their hashes differ from the previous revision's snapshot.",
118
+ "type": "array",
119
+ "minItems": 1,
120
+ "uniqueItems": true,
121
+ "items": {
122
+ "type": "string",
123
+ "minLength": 1
124
+ }
125
+ },
126
+ "addresses": {
127
+ "description": "Finding identifiers this revision closes.",
128
+ "type": "array",
129
+ "minItems": 1,
130
+ "uniqueItems": true,
131
+ "items": {
132
+ "type": "string",
133
+ "minLength": 1
134
+ }
135
+ }
136
+ },
137
+ "allOf": [
138
+ {
139
+ "if": {
140
+ "properties": {
141
+ "number": {
142
+ "type": "integer",
143
+ "minimum": 2
144
+ }
145
+ },
146
+ "required": [
147
+ "number"
148
+ ]
149
+ },
150
+ "then": {
151
+ "properties": {
152
+ "previous": {
153
+ "type": "string",
154
+ "minLength": 1
155
+ }
156
+ }
157
+ },
158
+ "else": {
159
+ "properties": {
160
+ "previous": {
161
+ "type": "null"
162
+ }
163
+ }
164
+ }
165
+ }
166
+ ]
167
+ },
168
+ "inventory": {
169
+ "type": "object",
170
+ "additionalProperties": false,
171
+ "required": [
172
+ "idioms",
173
+ "data-access",
174
+ "consumption",
175
+ "lifetime",
176
+ "async",
177
+ "platform",
178
+ "types",
179
+ "modules"
180
+ ],
181
+ "properties": {
182
+ "idioms": {
183
+ "$ref": "#/$defs/inventoryAxis"
184
+ },
185
+ "data-access": {
186
+ "$ref": "#/$defs/inventoryAxis"
187
+ },
188
+ "consumption": {
189
+ "$ref": "#/$defs/inventoryAxis"
190
+ },
191
+ "lifetime": {
192
+ "$ref": "#/$defs/inventoryAxis"
193
+ },
194
+ "async": {
195
+ "$ref": "#/$defs/inventoryAxis"
196
+ },
197
+ "platform": {
198
+ "$ref": "#/$defs/inventoryAxis"
199
+ },
200
+ "types": {
201
+ "$ref": "#/$defs/inventoryAxis"
202
+ },
203
+ "modules": {
204
+ "$ref": "#/$defs/inventoryAxis"
205
+ }
206
+ }
207
+ },
208
+ "profile": {
209
+ "type": "object",
210
+ "additionalProperties": false,
211
+ "required": [
212
+ "language",
213
+ "compiler",
214
+ "declarations",
215
+ "build",
216
+ "targets",
217
+ "evidence"
218
+ ],
219
+ "properties": {
220
+ "language": {
221
+ "enum": [
222
+ "typescript",
223
+ "javascript"
224
+ ]
225
+ },
226
+ "compiler": {
227
+ "type": "string",
228
+ "minLength": 1
229
+ },
230
+ "declarations": {
231
+ "type": "string",
232
+ "minLength": 1
233
+ },
234
+ "build": {
235
+ "type": "string",
236
+ "minLength": 1
237
+ },
238
+ "targets": {
239
+ "type": "array",
240
+ "minItems": 1,
241
+ "items": {
242
+ "type": "string",
243
+ "minLength": 1
244
+ }
245
+ },
246
+ "evidence": {
247
+ "type": "array",
248
+ "minItems": 1,
249
+ "items": {
250
+ "type": "object",
251
+ "additionalProperties": false,
252
+ "required": [
253
+ "source",
254
+ "checkedAt",
255
+ "claim",
256
+ "covers"
257
+ ],
258
+ "properties": {
259
+ "source": {
260
+ "type": "string",
261
+ "minLength": 1
262
+ },
263
+ "checkedAt": {
264
+ "type": "string",
265
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
266
+ },
267
+ "claim": {
268
+ "type": "string",
269
+ "minLength": 1
270
+ },
271
+ "covers": {
272
+ "type": "array",
273
+ "minItems": 1,
274
+ "items": {
275
+ "type": "string",
276
+ "minLength": 1
277
+ }
278
+ }
279
+ }
280
+ }
281
+ }
282
+ }
283
+ },
284
+ "sites": {
285
+ "type": "array",
286
+ "minItems": 1,
287
+ "items": {
288
+ "type": "object",
289
+ "additionalProperties": false,
290
+ "required": [
291
+ "site",
292
+ "ruleIds",
293
+ "alternatives",
294
+ "decision",
295
+ "consumption",
296
+ "benefits",
297
+ "artifacts",
298
+ "invariants"
299
+ ],
300
+ "properties": {
301
+ "site": {
302
+ "type": "string",
303
+ "minLength": 1
304
+ },
305
+ "ruleIds": {
306
+ "type": "array",
307
+ "minItems": 1,
308
+ "uniqueItems": true,
309
+ "items": {
310
+ "$ref": "#/$defs/ruleId"
311
+ }
312
+ },
313
+ "alternatives": {
314
+ "type": "array",
315
+ "minItems": 1,
316
+ "items": {
317
+ "type": "object",
318
+ "additionalProperties": false,
319
+ "required": [
320
+ "kind",
321
+ "description",
322
+ "assessment"
323
+ ],
324
+ "properties": {
325
+ "kind": {
326
+ "enum": [
327
+ "current",
328
+ "native",
329
+ "library",
330
+ "custom"
331
+ ]
332
+ },
333
+ "description": {
334
+ "type": "string",
335
+ "minLength": 1
336
+ },
337
+ "assessment": {
338
+ "type": "string",
339
+ "minLength": 1
340
+ }
341
+ }
342
+ },
343
+ "contains": {
344
+ "type": "object",
345
+ "properties": {
346
+ "kind": {
347
+ "const": "current"
348
+ }
349
+ },
350
+ "required": [
351
+ "kind"
352
+ ]
353
+ }
354
+ },
355
+ "decision": {
356
+ "type": "object",
357
+ "additionalProperties": false,
358
+ "required": [
359
+ "choice",
360
+ "idioms",
361
+ "mechanism",
362
+ "action",
363
+ "reason",
364
+ "tradeoffs",
365
+ "reconsiderWhen"
366
+ ],
367
+ "properties": {
368
+ "choice": {
369
+ "enum": [
370
+ "idioms",
371
+ "none"
372
+ ]
373
+ },
374
+ "idioms": {
375
+ "type": "array",
376
+ "minItems": 0,
377
+ "uniqueItems": true,
378
+ "items": {
379
+ "$ref": "#/$defs/ruleId"
380
+ }
381
+ },
382
+ "mechanism": {
383
+ "enum": [
384
+ "native",
385
+ "library",
386
+ "custom"
387
+ ]
388
+ },
389
+ "action": {
390
+ "enum": [
391
+ "apply",
392
+ "retain"
393
+ ]
394
+ },
395
+ "reason": {
396
+ "type": "string",
397
+ "minLength": 1
398
+ },
399
+ "tradeoffs": {
400
+ "type": "array",
401
+ "minItems": 1,
402
+ "items": {
403
+ "type": "string",
404
+ "minLength": 1
405
+ }
406
+ },
407
+ "reconsiderWhen": {
408
+ "type": "string",
409
+ "minLength": 1
410
+ }
411
+ },
412
+ "allOf": [
413
+ {
414
+ "if": {
415
+ "properties": {
416
+ "choice": {
417
+ "const": "none"
418
+ }
419
+ },
420
+ "required": [
421
+ "choice"
422
+ ]
423
+ },
424
+ "then": {
425
+ "properties": {
426
+ "idioms": {
427
+ "type": "array",
428
+ "maxItems": 0
429
+ }
430
+ }
431
+ },
432
+ "else": {
433
+ "properties": {
434
+ "idioms": {
435
+ "type": "array",
436
+ "minItems": 1
437
+ }
438
+ }
439
+ }
440
+ }
441
+ ]
442
+ },
443
+ "semanticDelta": {
444
+ "$ref": "#/$defs/semanticDelta"
445
+ },
446
+ "consumption": {
447
+ "$ref": "#/$defs/consumption"
448
+ },
449
+ "benefits": {
450
+ "type": "array",
451
+ "minItems": 1,
452
+ "items": {
453
+ "type": "object",
454
+ "additionalProperties": false,
455
+ "required": [
456
+ "kind",
457
+ "claim",
458
+ "evidence"
459
+ ],
460
+ "properties": {
461
+ "kind": {
462
+ "enum": [
463
+ "readability",
464
+ "maintenance",
465
+ "safety",
466
+ "algorithmic",
467
+ "allocation",
468
+ "measured"
469
+ ]
470
+ },
471
+ "claim": {
472
+ "type": "string",
473
+ "minLength": 1
474
+ },
475
+ "evidence": {
476
+ "type": "string",
477
+ "minLength": 1
478
+ }
479
+ }
480
+ }
481
+ },
482
+ "artifacts": {
483
+ "type": "array",
484
+ "minItems": 1,
485
+ "items": {
486
+ "type": "object",
487
+ "additionalProperties": false,
488
+ "required": [
489
+ "file",
490
+ "symbol"
491
+ ],
492
+ "properties": {
493
+ "file": {
494
+ "type": "string",
495
+ "minLength": 1
496
+ },
497
+ "symbol": {
498
+ "type": "string",
499
+ "minLength": 1
500
+ }
501
+ }
502
+ }
503
+ },
504
+ "invariants": {
505
+ "type": "array",
506
+ "minItems": 1,
507
+ "items": {
508
+ "type": "string",
509
+ "minLength": 1
510
+ }
511
+ }
512
+ },
513
+ "allOf": [
514
+ {
515
+ "if": {
516
+ "properties": {
517
+ "decision": {
518
+ "type": "object",
519
+ "properties": {
520
+ "action": {
521
+ "const": "apply"
522
+ }
523
+ },
524
+ "required": [
525
+ "action"
526
+ ]
527
+ }
528
+ },
529
+ "required": [
530
+ "decision"
531
+ ]
532
+ },
533
+ "then": {
534
+ "required": [
535
+ "semanticDelta"
536
+ ],
537
+ "properties": {
538
+ "semanticDelta": {
539
+ "$ref": "#/$defs/semanticDelta"
540
+ }
541
+ }
542
+ }
543
+ }
544
+ ]
545
+ }
546
+ }
547
+ },
548
+ "$defs": {
549
+ "citation": {
550
+ "type": "object",
551
+ "additionalProperties": false,
552
+ "required": [
553
+ "path",
554
+ "checkedAt",
555
+ "claim",
556
+ "covers"
557
+ ],
558
+ "properties": {
559
+ "path": {
560
+ "type": "string",
561
+ "minLength": 1
562
+ },
563
+ "checkedAt": {
564
+ "type": "string",
565
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
566
+ },
567
+ "claim": {
568
+ "type": "string",
569
+ "minLength": 1
570
+ },
571
+ "covers": {
572
+ "type": "array",
573
+ "minItems": 1,
574
+ "items": {
575
+ "type": "string",
576
+ "minLength": 1
577
+ }
578
+ },
579
+ "searched": {
580
+ "description": "Paths consulted and not found, for a claim of unknown about a checkable fact.",
581
+ "type": "array",
582
+ "minItems": 1,
583
+ "items": {
584
+ "type": "string",
585
+ "minLength": 1
586
+ }
587
+ }
588
+ }
589
+ },
590
+ "inventoryAxis": {
591
+ "type": "object",
592
+ "additionalProperties": false,
593
+ "required": [
594
+ "applicable",
595
+ "reason",
596
+ "sites"
597
+ ],
598
+ "properties": {
599
+ "applicable": {
600
+ "type": "boolean"
601
+ },
602
+ "reason": {
603
+ "type": "string",
604
+ "minLength": 1
605
+ },
606
+ "sites": {
607
+ "type": "array",
608
+ "items": {
609
+ "type": "string",
610
+ "minLength": 1
611
+ }
612
+ }
613
+ },
614
+ "allOf": [
615
+ {
616
+ "if": {
617
+ "properties": {
618
+ "applicable": {
619
+ "const": true
620
+ }
621
+ },
622
+ "required": [
623
+ "applicable"
624
+ ]
625
+ },
626
+ "then": {
627
+ "properties": {
628
+ "sites": {
629
+ "type": "array",
630
+ "minItems": 1
631
+ }
632
+ }
633
+ }
634
+ }
635
+ ]
636
+ },
637
+ "ruleId": {
638
+ "enum": [
639
+ "MT-01",
640
+ "MT-02",
641
+ "MT-03",
642
+ "MT-04",
643
+ "MT-05",
644
+ "MT-06",
645
+ "MT-07",
646
+ "MT-08",
647
+ "MT-09",
648
+ "MT-10",
649
+ "MT-11",
650
+ "MT-12",
651
+ "MT-13",
652
+ "MT-14",
653
+ "MT-15",
654
+ "MT-16",
655
+ "MT-17",
656
+ "MT-18",
657
+ "MT-19",
658
+ "MT-20",
659
+ "MT-21",
660
+ "MT-22",
661
+ "MT-23",
662
+ "MT-24",
663
+ "MT-25"
664
+ ]
665
+ },
666
+ "semanticDelta": {
667
+ "description": "Required when the decision's action is `apply`: what observably survives the change and what deliberately does not. MT-24 covers the static half of the same question.",
668
+ "type": "object",
669
+ "additionalProperties": false,
670
+ "required": [
671
+ "expected",
672
+ "preserved"
673
+ ],
674
+ "properties": {
675
+ "expected": {
676
+ "enum": [
677
+ "none",
678
+ "intended"
679
+ ]
680
+ },
681
+ "preserved": {
682
+ "description": "The observable properties this change keeps. Name every one considered; an empty list means none of them applies and the reason says so.",
683
+ "type": "array",
684
+ "uniqueItems": true,
685
+ "items": {
686
+ "enum": [
687
+ "ordering",
688
+ "duplicate-behavior",
689
+ "key-semantics",
690
+ "laziness",
691
+ "error-behavior",
692
+ "mutation-behavior"
693
+ ]
694
+ }
695
+ },
696
+ "intended": {
697
+ "description": "The changes this decision means to make. Required and non-empty when `expected` is `intended`.",
698
+ "type": "array",
699
+ "items": {
700
+ "type": "object",
701
+ "additionalProperties": false,
702
+ "required": [
703
+ "property",
704
+ "change",
705
+ "reason"
706
+ ],
707
+ "properties": {
708
+ "property": {
709
+ "enum": [
710
+ "ordering",
711
+ "duplicate-behavior",
712
+ "key-semantics",
713
+ "laziness",
714
+ "error-behavior",
715
+ "mutation-behavior",
716
+ "type-information"
717
+ ]
718
+ },
719
+ "change": {
720
+ "type": "string",
721
+ "minLength": 1
722
+ },
723
+ "reason": {
724
+ "type": "string",
725
+ "minLength": 1
726
+ }
727
+ }
728
+ }
729
+ }
730
+ },
731
+ "allOf": [
732
+ {
733
+ "if": {
734
+ "properties": {
735
+ "expected": {
736
+ "const": "intended"
737
+ }
738
+ },
739
+ "required": [
740
+ "expected"
741
+ ]
742
+ },
743
+ "then": {
744
+ "required": [
745
+ "intended"
746
+ ],
747
+ "properties": {
748
+ "intended": {
749
+ "type": "array",
750
+ "minItems": 1
751
+ }
752
+ }
753
+ }
754
+ }
755
+ ]
756
+ },
757
+ "consumption": {
758
+ "description": "How this site consumes its sequence. Declared applicable with its values, or excluded with a reason, so eager materialization of an unbounded sequence is never a silent omission.",
759
+ "type": "object",
760
+ "additionalProperties": false,
761
+ "required": [
762
+ "applicable",
763
+ "reason"
764
+ ],
765
+ "properties": {
766
+ "applicable": {
767
+ "type": "boolean"
768
+ },
769
+ "reason": {
770
+ "type": "string",
771
+ "minLength": 1
772
+ },
773
+ "mode": {
774
+ "enum": [
775
+ "eager",
776
+ "lazy",
777
+ "partial"
778
+ ]
779
+ },
780
+ "cardinality": {
781
+ "enum": [
782
+ "bounded",
783
+ "potentially-unbounded"
784
+ ]
785
+ }
786
+ },
787
+ "allOf": [
788
+ {
789
+ "if": {
790
+ "properties": {
791
+ "applicable": {
792
+ "const": true
793
+ }
794
+ },
795
+ "required": [
796
+ "applicable"
797
+ ]
798
+ },
799
+ "then": {
800
+ "required": [
801
+ "mode",
802
+ "cardinality"
803
+ ],
804
+ "properties": {
805
+ "mode": {
806
+ "enum": [
807
+ "eager",
808
+ "lazy",
809
+ "partial"
810
+ ]
811
+ },
812
+ "cardinality": {
813
+ "enum": [
814
+ "bounded",
815
+ "potentially-unbounded"
816
+ ]
817
+ }
818
+ }
819
+ },
820
+ "else": {
821
+ "properties": {
822
+ "mode": false,
823
+ "cardinality": false
824
+ }
825
+ }
826
+ }
827
+ ]
828
+ }
829
+ }
830
+ }