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