@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.
- package/README.md +82 -0
- package/agents/design-pattern-reviewer.md +40 -0
- package/agents/modern-typescript-reviewer.md +24 -0
- package/agents/testing-pattern-reviewer.md +23 -0
- package/bin/ai-engineering-gate.mjs +6 -0
- package/contracts/axi/axi-standard.md +273 -0
- package/contracts/axi/pin.json +36 -0
- package/contracts/members.json +58 -0
- package/contracts/schemas/arbitration.schema.json +45 -0
- package/contracts/schemas/decision-envelope.schema.json +215 -0
- package/contracts/schemas/declaration.schema.json +190 -0
- package/contracts/schemas/dispute.schema.json +67 -0
- package/contracts/schemas/evidence-append.schema.json +72 -0
- package/contracts/schemas/gate-output.schema.json +296 -0
- package/contracts/schemas/marker.schema.json +75 -0
- package/contracts/schemas/review-envelope.schema.json +378 -0
- package/contracts/schemas/verdict-record.schema.json +191 -0
- package/contracts/suite-contract.md +270 -0
- package/dist/ai-engineering-gate.mjs +2762 -0
- package/package.json +47 -0
- package/skills/engineering/review-design-patterns/LICENSE +6 -0
- package/skills/engineering/review-design-patterns/SKILL.md +196 -0
- package/skills/engineering/review-design-patterns/agents/openai.yaml +3 -0
- package/skills/engineering/review-design-patterns/references/smell-signatures.md +117 -0
- package/skills/engineering/review-design-patterns/review-design-patterns.yaml +25 -0
- package/skills/engineering/review-modern-typescript/LICENSE +21 -0
- package/skills/engineering/review-modern-typescript/SKILL.md +88 -0
- package/skills/engineering/review-modern-typescript/agents/openai.yaml +3 -0
- package/skills/engineering/review-modern-typescript/references/smell-signatures.md +36 -0
- package/skills/engineering/review-modern-typescript/review-modern-typescript.yaml +22 -0
- package/skills/engineering/review-testing-patterns/SKILL.md +108 -0
- package/skills/engineering/review-testing-patterns/agents/openai.yaml +4 -0
- package/skills/engineering/review-testing-patterns/references/compiler-profile.mjs +103 -0
- package/skills/engineering/review-testing-patterns/references/smell-signatures.md +30 -0
- package/skills/engineering/review-testing-patterns/review-testing-patterns.yaml +23 -0
- package/skills/engineering/transpose-design-patterns/LICENSE +6 -0
- package/skills/engineering/transpose-design-patterns/SKILL.md +231 -0
- package/skills/engineering/transpose-design-patterns/agents/openai.yaml +3 -0
- package/skills/engineering/transpose-design-patterns/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-design-patterns/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-design-patterns/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-design-patterns/references/design-decision-record.schema.json +731 -0
- package/skills/engineering/transpose-design-patterns/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-design-patterns/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-design-patterns/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-design-patterns/references/pattern-catalog.md +305 -0
- package/skills/engineering/transpose-design-patterns/references/record.example.json +120 -0
- package/skills/engineering/transpose-design-patterns/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-design-patterns/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-angular.md +224 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-php.md +561 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-quarkus.md +283 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-react.md +256 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-vanilla.md +204 -0
- package/skills/engineering/transpose-design-patterns/references/transpose-vue.md +234 -0
- package/skills/engineering/transpose-design-patterns/transpose-design-patterns.yaml +24 -0
- package/skills/engineering/transpose-modern-typescript/LICENSE +21 -0
- package/skills/engineering/transpose-modern-typescript/SKILL.md +90 -0
- package/skills/engineering/transpose-modern-typescript/agents/openai.yaml +3 -0
- package/skills/engineering/transpose-modern-typescript/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-modern-typescript/references/catalog.md +38 -0
- package/skills/engineering/transpose-modern-typescript/references/collections.md +50 -0
- package/skills/engineering/transpose-modern-typescript/references/compatibility.md +61 -0
- package/skills/engineering/transpose-modern-typescript/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-modern-typescript/references/decision-record.schema.json +830 -0
- package/skills/engineering/transpose-modern-typescript/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-modern-typescript/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-modern-typescript/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-modern-typescript/references/idioms.md +74 -0
- package/skills/engineering/transpose-modern-typescript/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-modern-typescript/references/platform.md +147 -0
- package/skills/engineering/transpose-modern-typescript/references/record.example.json +172 -0
- package/skills/engineering/transpose-modern-typescript/references/record.md +37 -0
- package/skills/engineering/transpose-modern-typescript/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-modern-typescript/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-modern-typescript/references/types.md +97 -0
- package/skills/engineering/transpose-modern-typescript/transpose-modern-typescript.yaml +22 -0
- package/skills/engineering/transpose-testing-patterns/SKILL.md +96 -0
- package/skills/engineering/transpose-testing-patterns/agents/openai.yaml +4 -0
- package/skills/engineering/transpose-testing-patterns/references/arbitration.schema.json +45 -0
- package/skills/engineering/transpose-testing-patterns/references/catalog.md +218 -0
- package/skills/engineering/transpose-testing-patterns/references/decision-envelope.schema.json +215 -0
- package/skills/engineering/transpose-testing-patterns/references/decision-record.schema.json +857 -0
- package/skills/engineering/transpose-testing-patterns/references/declaration.schema.json +190 -0
- package/skills/engineering/transpose-testing-patterns/references/detect-adapter.mjs +98 -0
- package/skills/engineering/transpose-testing-patterns/references/dispute.schema.json +67 -0
- package/skills/engineering/transpose-testing-patterns/references/doubles-data.md +45 -0
- package/skills/engineering/transpose-testing-patterns/references/evidence-append.schema.json +72 -0
- package/skills/engineering/transpose-testing-patterns/references/journal-event.schema.json +115 -0
- package/skills/engineering/transpose-testing-patterns/references/marker.schema.json +75 -0
- package/skills/engineering/transpose-testing-patterns/references/record.example.json +230 -0
- package/skills/engineering/transpose-testing-patterns/references/record.md +25 -0
- package/skills/engineering/transpose-testing-patterns/references/review-envelope.schema.json +378 -0
- package/skills/engineering/transpose-testing-patterns/references/suite-contract.md +270 -0
- package/skills/engineering/transpose-testing-patterns/references/tdd.md +62 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-codeception.md +84 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-karma-jasmine-angular.md +73 -0
- package/skills/engineering/transpose-testing-patterns/references/transpose-vitest.md +111 -0
- package/skills/engineering/transpose-testing-patterns/references/typescript.md +42 -0
- package/skills/engineering/transpose-testing-patterns/transpose-testing-patterns.yaml +23 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dimension": "modern-typescript",
|
|
3
|
+
"schemaVersion": "2.0.0",
|
|
4
|
+
"catalogVersion": "1.1.0",
|
|
5
|
+
"contractVersions": [
|
|
6
|
+
"1.0.0",
|
|
7
|
+
"1.1.0"
|
|
8
|
+
],
|
|
9
|
+
"need": "Group already validated rows by their string category without changing order.",
|
|
10
|
+
"scope": [
|
|
11
|
+
"src/group.ts"
|
|
12
|
+
],
|
|
13
|
+
"base": "origin/main",
|
|
14
|
+
"revision": {
|
|
15
|
+
"number": 1,
|
|
16
|
+
"previous": null,
|
|
17
|
+
"reason": "Illustrative initial decision; replace all facts for a real execution."
|
|
18
|
+
},
|
|
19
|
+
"cites": [
|
|
20
|
+
{
|
|
21
|
+
"path": "src/group.ts",
|
|
22
|
+
"checkedAt": "2026-09-16",
|
|
23
|
+
"claim": "The manual grouping loop this record replaces, read before deciding.",
|
|
24
|
+
"covers": [
|
|
25
|
+
"src/group.ts:groupRows"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"plans": [
|
|
30
|
+
{
|
|
31
|
+
"path": "src/group.ts",
|
|
32
|
+
"role": "implementation"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"inventory": {
|
|
36
|
+
"idioms": {
|
|
37
|
+
"applicable": true,
|
|
38
|
+
"reason": "Grouping a typed finite collection in a runtime module.",
|
|
39
|
+
"sites": [
|
|
40
|
+
"src/group.ts:groupRows"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"data-access": {
|
|
44
|
+
"applicable": true,
|
|
45
|
+
"reason": "Grouping a typed finite collection in a runtime module.",
|
|
46
|
+
"sites": [
|
|
47
|
+
"src/group.ts:groupRows"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"consumption": {
|
|
51
|
+
"applicable": false,
|
|
52
|
+
"reason": "No related operation in this scoped pure function.",
|
|
53
|
+
"sites": []
|
|
54
|
+
},
|
|
55
|
+
"lifetime": {
|
|
56
|
+
"applicable": false,
|
|
57
|
+
"reason": "No related operation in this scoped pure function.",
|
|
58
|
+
"sites": []
|
|
59
|
+
},
|
|
60
|
+
"async": {
|
|
61
|
+
"applicable": false,
|
|
62
|
+
"reason": "No related operation in this scoped pure function.",
|
|
63
|
+
"sites": []
|
|
64
|
+
},
|
|
65
|
+
"platform": {
|
|
66
|
+
"applicable": false,
|
|
67
|
+
"reason": "No related operation in this scoped pure function.",
|
|
68
|
+
"sites": []
|
|
69
|
+
},
|
|
70
|
+
"types": {
|
|
71
|
+
"applicable": true,
|
|
72
|
+
"reason": "Grouping a typed finite collection in a runtime module.",
|
|
73
|
+
"sites": [
|
|
74
|
+
"src/group.ts:groupRows"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"modules": {
|
|
78
|
+
"applicable": true,
|
|
79
|
+
"reason": "Grouping a typed finite collection in a runtime module.",
|
|
80
|
+
"sites": [
|
|
81
|
+
"src/group.ts:groupRows"
|
|
82
|
+
]
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"profile": {
|
|
86
|
+
"language": "typescript",
|
|
87
|
+
"compiler": "Illustrative fixture compiler; read the real lockfile.",
|
|
88
|
+
"declarations": "ES2024",
|
|
89
|
+
"build": "ESM emitted without API polyfills",
|
|
90
|
+
"targets": [
|
|
91
|
+
"Node 24"
|
|
92
|
+
],
|
|
93
|
+
"evidence": [
|
|
94
|
+
{
|
|
95
|
+
"source": "Runtime probe: typeof Object.groupBy",
|
|
96
|
+
"checkedAt": "2026-09-16",
|
|
97
|
+
"claim": "function in the explicitly tested Node 24 fixture runtime",
|
|
98
|
+
"covers": [
|
|
99
|
+
"Node 24"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"sites": [
|
|
105
|
+
{
|
|
106
|
+
"site": "src/group.ts:groupRows",
|
|
107
|
+
"ruleIds": [
|
|
108
|
+
"MT-05",
|
|
109
|
+
"MT-19",
|
|
110
|
+
"MT-23",
|
|
111
|
+
"MT-24"
|
|
112
|
+
],
|
|
113
|
+
"alternatives": [
|
|
114
|
+
{
|
|
115
|
+
"kind": "current",
|
|
116
|
+
"description": "Manual null-prototype string grouping loop",
|
|
117
|
+
"assessment": "Correct but repeats native semantics without extra contract."
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"kind": "native",
|
|
121
|
+
"description": "Object.groupBy",
|
|
122
|
+
"assessment": "Same key conversion and group order on the declared target."
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"decision": {
|
|
126
|
+
"choice": "idioms",
|
|
127
|
+
"idioms": [
|
|
128
|
+
"MT-05"
|
|
129
|
+
],
|
|
130
|
+
"mechanism": "native",
|
|
131
|
+
"action": "apply",
|
|
132
|
+
"reason": "The native expresses the existing grouping contract.",
|
|
133
|
+
"tradeoffs": [
|
|
134
|
+
"Result remains a null-prototype object; callers must not assume inherited methods."
|
|
135
|
+
],
|
|
136
|
+
"reconsiderWhen": "A required runtime lacks the API or keys need object identity."
|
|
137
|
+
},
|
|
138
|
+
"benefits": [
|
|
139
|
+
{
|
|
140
|
+
"kind": "maintenance",
|
|
141
|
+
"claim": "Remove one duplicate grouping loop.",
|
|
142
|
+
"evidence": "The helper adds no validation, normalization or domain rule."
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"artifacts": [
|
|
146
|
+
{
|
|
147
|
+
"file": "src/group.ts",
|
|
148
|
+
"symbol": "groupRows"
|
|
149
|
+
}
|
|
150
|
+
],
|
|
151
|
+
"invariants": [
|
|
152
|
+
"Preserve row identity and order within each category.",
|
|
153
|
+
"Empty input produces no groups; __proto__ remains a data key.",
|
|
154
|
+
"The returned record keeps the literal key type the helper exposed (MT-24)."
|
|
155
|
+
],
|
|
156
|
+
"semanticDelta": {
|
|
157
|
+
"expected": "none",
|
|
158
|
+
"preserved": [
|
|
159
|
+
"ordering",
|
|
160
|
+
"duplicate-behavior",
|
|
161
|
+
"key-semantics"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
"consumption": {
|
|
165
|
+
"applicable": true,
|
|
166
|
+
"reason": "The function walks the whole input once and returns every group.",
|
|
167
|
+
"mode": "eager",
|
|
168
|
+
"cardinality": "bounded"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Decision records
|
|
2
|
+
|
|
3
|
+
Schema/catalog/contract version: 1.0.0. [Example](record.example.json) is illustrative, not
|
|
4
|
+
evidence for a real project. Use a JSON Schema 2020-12 validator such as Ajv 2020 or
|
|
5
|
+
python-jsonschema; validation is not semantic approval.
|
|
6
|
+
|
|
7
|
+
Write outside the repository before the first affected implementation write. Keep original
|
|
8
|
+
revisions, with previous path and the reason for revision. Date/source claims must come
|
|
9
|
+
from actual evidence. Record every inventory axis; applicable axes identify sites, excluded
|
|
10
|
+
axes explain why they are irrelevant. A coherent site group can share a decision.
|
|
11
|
+
|
|
12
|
+
Every site carries rule IDs, alternatives (including current), choice, mechanism, action,
|
|
13
|
+
reason/trade-offs/reconsider trigger, benefits with evidence, artifacts and invariants.
|
|
14
|
+
Use rule IDs as idiom IDs, naming the actual operation in the reason/artifact. An explicit
|
|
15
|
+
none has an empty idiom list and a substantive reason/reconsider trigger. It may apply
|
|
16
|
+
straightforward new code or retain an existing helper. Retaining a suitable native choice
|
|
17
|
+
can use choice idioms plus action retain. Non-applicable dimensions have no sites and are
|
|
18
|
+
reported separately, not by manufacturing an empty valid record.
|
|
19
|
+
|
|
20
|
+
Benefits distinguish readability/maintenance/safety, algorithmic work, allocations and
|
|
21
|
+
measured timing. A measurement needs its workload, command and result; a structural benefit
|
|
22
|
+
does not become a timing claim. Record evaluation effects, data identity, error behavior,
|
|
23
|
+
resource lifetime and other observable semantic differences.
|
|
24
|
+
|
|
25
|
+
The schema verifies structure and known IDs. The builder/reviewer still verify meaningful
|
|
26
|
+
alternatives, honest exclusions, actual dates/targets, consistency of rules with choices
|
|
27
|
+
and implementation, and that decisions preceded code. A JSON file cannot prove chronology.
|
|
28
|
+
|
|
29
|
+
Portable example validation, with a suitable installed validator:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
python -m jsonschema -i /absolute/path/decision.json /installed/transpose-modern-typescript/references/decision-record.schema.json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Follow the shared contract for records, briefs, report capture and state expiry. If a gate
|
|
36
|
+
exists, inspect its actual interface and dimension support before use. Required unsupported
|
|
37
|
+
attestation remains incomplete; no command is invented by this pair.
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/hellraisercenobit/skills/blob/main/contracts/schemas/review-envelope.schema.json",
|
|
4
|
+
"title": "Review envelope 1.0.0",
|
|
5
|
+
"description": "Emitted by a review beside its prose report and piped to `attest` for `SOUND` or to `report` for `SMELLS` and `VIOLATIONS`. It carries no fingerprint: the gate alone adds the state a verdict binds to.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"document",
|
|
10
|
+
"documentVersion",
|
|
11
|
+
"dimension",
|
|
12
|
+
"contractVersion",
|
|
13
|
+
"verdict",
|
|
14
|
+
"records",
|
|
15
|
+
"checks",
|
|
16
|
+
"reviewer",
|
|
17
|
+
"findings",
|
|
18
|
+
"challengedSurvived"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"document": {
|
|
22
|
+
"const": "review-envelope"
|
|
23
|
+
},
|
|
24
|
+
"documentVersion": {
|
|
25
|
+
"const": "1.0.0"
|
|
26
|
+
},
|
|
27
|
+
"dimension": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"minLength": 1
|
|
30
|
+
},
|
|
31
|
+
"contractVersion": {
|
|
32
|
+
"description": "The contract version this review ran under.",
|
|
33
|
+
"type": "string",
|
|
34
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
35
|
+
},
|
|
36
|
+
"verdict": {
|
|
37
|
+
"enum": [
|
|
38
|
+
"SOUND",
|
|
39
|
+
"SMELLS",
|
|
40
|
+
"VIOLATIONS"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"records": {
|
|
44
|
+
"description": "The record identifiers or paths the review examined.",
|
|
45
|
+
"type": "array",
|
|
46
|
+
"minItems": 1,
|
|
47
|
+
"items": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"minLength": 1
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"checks": {
|
|
53
|
+
"description": "The deterministic checks the reviewer saw executed. Enforcement validates their presence, never their result.",
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"additionalProperties": false,
|
|
58
|
+
"required": [
|
|
59
|
+
"command",
|
|
60
|
+
"outcome",
|
|
61
|
+
"guarantee"
|
|
62
|
+
],
|
|
63
|
+
"properties": {
|
|
64
|
+
"command": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"minLength": 1
|
|
67
|
+
},
|
|
68
|
+
"outcome": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"minLength": 1
|
|
71
|
+
},
|
|
72
|
+
"guarantee": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"minLength": 1
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"reviewer": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"additionalProperties": false,
|
|
82
|
+
"required": [
|
|
83
|
+
"independence",
|
|
84
|
+
"identity"
|
|
85
|
+
],
|
|
86
|
+
"properties": {
|
|
87
|
+
"independence": {
|
|
88
|
+
"description": "The reviewer's own claim about its brief: a fresh context with no builder history or rationale, or the exposure it must state.",
|
|
89
|
+
"type": "string",
|
|
90
|
+
"minLength": 1
|
|
91
|
+
},
|
|
92
|
+
"identity": {
|
|
93
|
+
"description": "The reviewer's declared identity. Enforcement compares it with the identity the harness reported and never takes it as proof.",
|
|
94
|
+
"type": "string",
|
|
95
|
+
"minLength": 1
|
|
96
|
+
},
|
|
97
|
+
"agentType": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"minLength": 1
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"findings": {
|
|
104
|
+
"type": "array",
|
|
105
|
+
"items": {
|
|
106
|
+
"$ref": "#/$defs/finding"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"challengedSurvived": {
|
|
110
|
+
"description": "Candidates whose strongest defense held, and the defense.",
|
|
111
|
+
"type": "array",
|
|
112
|
+
"items": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"minLength": 1
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"gaps": {
|
|
118
|
+
"description": "Catalog gaps, reported without severity or verdict impact.",
|
|
119
|
+
"type": "array",
|
|
120
|
+
"items": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"minLength": 1
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"$defs": {
|
|
127
|
+
"finding": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"additionalProperties": false,
|
|
130
|
+
"required": [
|
|
131
|
+
"id",
|
|
132
|
+
"kind",
|
|
133
|
+
"severity",
|
|
134
|
+
"location",
|
|
135
|
+
"rule",
|
|
136
|
+
"expected",
|
|
137
|
+
"recorded",
|
|
138
|
+
"actual",
|
|
139
|
+
"impact",
|
|
140
|
+
"defense",
|
|
141
|
+
"refutation"
|
|
142
|
+
],
|
|
143
|
+
"properties": {
|
|
144
|
+
"id": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"minLength": 1
|
|
147
|
+
},
|
|
148
|
+
"kind": {
|
|
149
|
+
"description": "`evidence` when an artifact is not on file, `judgment` when a decision is wrong against the catalog.",
|
|
150
|
+
"enum": [
|
|
151
|
+
"evidence",
|
|
152
|
+
"judgment"
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
"severity": {
|
|
156
|
+
"description": "The contract's severity clause owns these tiers.",
|
|
157
|
+
"enum": [
|
|
158
|
+
"Blocker",
|
|
159
|
+
"Major",
|
|
160
|
+
"Minor"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"location": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"minLength": 1
|
|
166
|
+
},
|
|
167
|
+
"rule": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"minLength": 1
|
|
170
|
+
},
|
|
171
|
+
"expected": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"minLength": 1
|
|
174
|
+
},
|
|
175
|
+
"recorded": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"minLength": 1
|
|
178
|
+
},
|
|
179
|
+
"actual": {
|
|
180
|
+
"type": "string",
|
|
181
|
+
"minLength": 1
|
|
182
|
+
},
|
|
183
|
+
"impact": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"minLength": 1
|
|
186
|
+
},
|
|
187
|
+
"defense": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"minLength": 1
|
|
190
|
+
},
|
|
191
|
+
"refutation": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"minLength": 1
|
|
194
|
+
},
|
|
195
|
+
"correction": {
|
|
196
|
+
"description": "The proposed correction C08 requires. Required for a judgment finding.",
|
|
197
|
+
"type": "string",
|
|
198
|
+
"minLength": 1
|
|
199
|
+
},
|
|
200
|
+
"remedy": {
|
|
201
|
+
"description": "Required for an evidence finding: an action the builder can execute.",
|
|
202
|
+
"$ref": "#/$defs/remedy"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"allOf": [
|
|
206
|
+
{
|
|
207
|
+
"if": {
|
|
208
|
+
"properties": {
|
|
209
|
+
"kind": {
|
|
210
|
+
"const": "evidence"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"required": [
|
|
214
|
+
"kind"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
"then": {
|
|
218
|
+
"required": [
|
|
219
|
+
"remedy"
|
|
220
|
+
],
|
|
221
|
+
"properties": {
|
|
222
|
+
"remedy": {
|
|
223
|
+
"$ref": "#/$defs/remedy"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
"else": {
|
|
228
|
+
"required": [
|
|
229
|
+
"correction"
|
|
230
|
+
],
|
|
231
|
+
"properties": {
|
|
232
|
+
"correction": {
|
|
233
|
+
"description": "The proposed correction C08 requires. Required for a judgment finding.",
|
|
234
|
+
"type": "string",
|
|
235
|
+
"minLength": 1
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
},
|
|
242
|
+
"remedy": {
|
|
243
|
+
"type": "object",
|
|
244
|
+
"additionalProperties": false,
|
|
245
|
+
"required": [
|
|
246
|
+
"kind"
|
|
247
|
+
],
|
|
248
|
+
"properties": {
|
|
249
|
+
"kind": {
|
|
250
|
+
"enum": [
|
|
251
|
+
"produce",
|
|
252
|
+
"rerun",
|
|
253
|
+
"replay",
|
|
254
|
+
"dispute"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"artifact": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"minLength": 1
|
|
260
|
+
},
|
|
261
|
+
"command": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"minLength": 1
|
|
264
|
+
},
|
|
265
|
+
"scenario": {
|
|
266
|
+
"type": "string",
|
|
267
|
+
"minLength": 1
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
"allOf": [
|
|
271
|
+
{
|
|
272
|
+
"if": {
|
|
273
|
+
"properties": {
|
|
274
|
+
"kind": {
|
|
275
|
+
"const": "produce"
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
"required": [
|
|
279
|
+
"kind"
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
"then": {
|
|
283
|
+
"required": [
|
|
284
|
+
"artifact"
|
|
285
|
+
],
|
|
286
|
+
"properties": {
|
|
287
|
+
"artifact": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"minLength": 1
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"if": {
|
|
296
|
+
"properties": {
|
|
297
|
+
"kind": {
|
|
298
|
+
"const": "rerun"
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
"required": [
|
|
302
|
+
"kind"
|
|
303
|
+
]
|
|
304
|
+
},
|
|
305
|
+
"then": {
|
|
306
|
+
"required": [
|
|
307
|
+
"command"
|
|
308
|
+
],
|
|
309
|
+
"properties": {
|
|
310
|
+
"command": {
|
|
311
|
+
"type": "string",
|
|
312
|
+
"minLength": 1
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"if": {
|
|
319
|
+
"properties": {
|
|
320
|
+
"kind": {
|
|
321
|
+
"const": "replay"
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"required": [
|
|
325
|
+
"kind"
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
"then": {
|
|
329
|
+
"required": [
|
|
330
|
+
"scenario",
|
|
331
|
+
"command"
|
|
332
|
+
],
|
|
333
|
+
"properties": {
|
|
334
|
+
"scenario": {
|
|
335
|
+
"type": "string",
|
|
336
|
+
"minLength": 1
|
|
337
|
+
},
|
|
338
|
+
"command": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"minLength": 1
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
]
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"allOf": [
|
|
349
|
+
{
|
|
350
|
+
"if": {
|
|
351
|
+
"properties": {
|
|
352
|
+
"verdict": {
|
|
353
|
+
"const": "SOUND"
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"required": [
|
|
357
|
+
"verdict"
|
|
358
|
+
]
|
|
359
|
+
},
|
|
360
|
+
"then": {
|
|
361
|
+
"properties": {
|
|
362
|
+
"findings": {
|
|
363
|
+
"type": "array",
|
|
364
|
+
"maxItems": 0
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
"else": {
|
|
369
|
+
"properties": {
|
|
370
|
+
"findings": {
|
|
371
|
+
"type": "array",
|
|
372
|
+
"minItems": 1
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
]
|
|
378
|
+
}
|