@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,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
|
+
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Transpose/review contract 1.1.0
|
|
2
|
+
|
|
3
|
+
Canonical source: `contracts/suite-contract.md` in hellraisercenobit/skills. Copies in
|
|
4
|
+
transpose bundles are generated by `npm run sync:contract`; never edit them by hand.
|
|
5
|
+
The repository maintainer owns this contract. Domain catalogs and record schemas remain
|
|
6
|
+
owned by their transpose skill. Read this contract once per execution.
|
|
7
|
+
|
|
8
|
+
1.1.0 adds clauses to 1.0.0 and changes none of its guarantees. Each member declares the
|
|
9
|
+
contract versions it supports in the member manifest. A workflow that runs on records,
|
|
10
|
+
checks and independent reports without any gate stays valid under 1.1.0: the clauses below
|
|
11
|
+
describe what enforcement derives, never a new obligation on prose.
|
|
12
|
+
|
|
13
|
+
## Guarantees
|
|
14
|
+
|
|
15
|
+
| ID | Requirement | Evidence |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| C01 | One normative catalog per dimension, owned by transpose and read by review. | Resolved local references and identified versions or content hashes. |
|
|
18
|
+
| C02 | Explicit scope and comparison base. | Files and sites, including relevant uncommitted and untracked files. |
|
|
19
|
+
| C03 | Inventory every relevant site, including retained choices. | Domain criteria, alternatives and observable invariants. |
|
|
20
|
+
| C04 | Record each decision before the first affected implementation write. | Schema-valid records outside the repository; preserve previous revisions and reasons. |
|
|
21
|
+
| C05 | Separate deterministic checks from semantic judgment. | Schema/catalog membership and applicable type, runtime, lint and build checks. |
|
|
22
|
+
| C06 | Independent reviewer with a neutral brief. | Fresh context without builder history or rationale; original request and factual constraints only. |
|
|
23
|
+
| C07 | Freeze expectations before reading records or author justification. | Immutable expected matrix in the review transcript; no `git log`, PR rationale or author analysis. |
|
|
24
|
+
| C08 | Compare every site; steelman every candidate finding. | Expected/recorded/actual, exact rule, evidence, strongest defense and refutation. |
|
|
25
|
+
| C09 | Reviewer changes no files and delegates no review. | Report in its response; the builder fixes and dispatches a new fresh reviewer. |
|
|
26
|
+
| C10 | Only a current `SOUND` completes transposition. | Complete audit, zero confirmed findings, passing applicable checks and no unresolved dispute. |
|
|
27
|
+
| C11 | Only the reviewer attests; scope changes invalidate its verdict. | Examined state identified; the gate computes the fingerprints a verdict binds to. |
|
|
28
|
+
| C12 | Missing prerequisites and limits are explicit. | No invented rules, support, independence or attestation. |
|
|
29
|
+
|
|
30
|
+
## Shared execution rules
|
|
31
|
+
|
|
32
|
+
Resolve companions, schema, catalog, this contract and any **required** guides first. Pin
|
|
33
|
+
their versions or hashes for the execution. A missing optional guide is acceptable only
|
|
34
|
+
when the domain permits catalog-only decisions. Conflicting installed contract/catalog
|
|
35
|
+
versions are an incomplete prerequisite; do not silently download another version.
|
|
36
|
+
|
|
37
|
+
The builder inventories scope, compares alternatives including the current implementation,
|
|
38
|
+
records, then writes and checks. Coherent local choices can share a record if every site
|
|
39
|
+
remains identifiable. `none` has the domain's explicit meaning; it is not a shortcut around
|
|
40
|
+
evaluation. No applicable site is a justified non-applicable dimension, not an artificial
|
|
41
|
+
`SOUND`. Do not add common fields to a domain schema that forbids them: coordination
|
|
42
|
+
metadata belongs in an external execution index.
|
|
43
|
+
|
|
44
|
+
The reviewer reads independent requirements and factual constraints, inventories the scope
|
|
45
|
+
and freezes a matrix of expected acceptable choices, rules and invariants **in its response
|
|
46
|
+
before the next tool call that opens records**. It then compares expected, recorded and
|
|
47
|
+
actual. Record absence is not a retrospective code defect in a standalone audit; a claimed
|
|
48
|
+
completed transposition requires its records. State significant exposure to author
|
|
49
|
+
justification. A contaminated brief requires a new reviewer before completion; do not
|
|
50
|
+
rewrite the frozen matrix to match the builder. Verified new facts that change premises
|
|
51
|
+
require a new framing and fresh review, retaining the old matrix.
|
|
52
|
+
|
|
53
|
+
For each candidate, construct the strongest defense (compatibility, public contract, domain
|
|
54
|
+
meaning, framework semantics, proven cost or legitimate simplicity). Drop it if that defense
|
|
55
|
+
holds. Confirm only with an applicable catalog rule and evidence. Report catalog gaps
|
|
56
|
+
separately, without severity or verdict impact. A gap is not permission to invent a rule.
|
|
57
|
+
|
|
58
|
+
Reports identify scope/base/state, reference versions, coverage, frozen matrix, comparison,
|
|
59
|
+
confirmed findings, defended choices, gaps and check evidence. Each finding identifies
|
|
60
|
+
location, rule, expected/recorded/actual, impact, defense, refutation and proposed correction.
|
|
61
|
+
Severity: `Blocker` for concrete correctness/support failures, `Major` for demonstrated
|
|
62
|
+
structural costs or missing guarantees, `Minor` for evidenced idiomatic drift after defense.
|
|
63
|
+
Age or taste alone is never evidence. This clause owns the severity tiers; a domain skill
|
|
64
|
+
references it instead of restating them.
|
|
65
|
+
|
|
66
|
+
| Verdict | Meaning |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| SOUND | Complete audit, zero confirmed findings. |
|
|
69
|
+
| SMELLS | Confirmed findings, no Blocker. |
|
|
70
|
+
| VIOLATIONS | At least one Blocker. |
|
|
71
|
+
|
|
72
|
+
An incomplete execution reports the missing prerequisite and has no attestable quality
|
|
73
|
+
verdict; it is not a fourth verdict. The reviewer edits neither code, records, catalogs nor
|
|
74
|
+
fixtures. Its report is a response that the harness can save externally. Its sole permitted
|
|
75
|
+
external mutations are the gate's attestation and report operations, when supported;
|
|
76
|
+
attestation accepts `SOUND` only. A dispute goes to the user and remains unresolved until
|
|
77
|
+
decided; it is not a fix.
|
|
78
|
+
|
|
79
|
+
## Dimension registry
|
|
80
|
+
|
|
81
|
+
The member manifest `contracts/members.json` is the registry. It owns, per member: the
|
|
82
|
+
dimension identifier, the transpose and review skill locations, the reviewer agent, the
|
|
83
|
+
decision schema, the evidence schemas the dimension owns, the reference bundle, the contract
|
|
84
|
+
versions the member supports, and a status, `implemented` or `qualified`. Nothing else
|
|
85
|
+
defines a dimension identifier, and no other file lists the dimensions.
|
|
86
|
+
|
|
87
|
+
The registry holds orchestration metadata and schema locations only: never a rule, a pattern
|
|
88
|
+
name, an idiom or a test form. Adding a dimension is a registration plus a qualification. It
|
|
89
|
+
never changes enforcement logic and never adds a hook.
|
|
90
|
+
|
|
91
|
+
## State and evidence
|
|
92
|
+
|
|
93
|
+
Store evidence, derive state. Every durable fact is a schema-valid document on disk: a
|
|
94
|
+
declaration, a decision record, an evidence append, an attestation, a report, a dispute or
|
|
95
|
+
an arbitration. No implementation persists a workflow boolean such as "reviewed" or
|
|
96
|
+
"fresh"; state is recomputed from those documents and from the code they cover.
|
|
97
|
+
|
|
98
|
+
A project opts in with one committed marker at its repository root, which also carries the
|
|
99
|
+
project's dimension selection and its evidence and export locations. Without that marker,
|
|
100
|
+
enforcement is silent and every workflow stays portable. Evidence lives outside the
|
|
101
|
+
checkout, under a task key derived from the branch.
|
|
102
|
+
|
|
103
|
+
### Declaration
|
|
104
|
+
|
|
105
|
+
Before the first record, a task declares each registered dimension applicable or
|
|
106
|
+
non-applicable, with a reason, the requester's wording of the request and the factual
|
|
107
|
+
constraints. An applicable declaration also names its scope, as repository-relative file
|
|
108
|
+
paths or directory prefixes, and the relevant configuration files. A non-applicable
|
|
109
|
+
dimension has a declaration and nothing else: skipping a dimension is a recorded decision,
|
|
110
|
+
never a default, and an undeclared registered dimension is an incomplete task.
|
|
111
|
+
|
|
112
|
+
The declaration is what protects the scope and what a neutral brief is rendered from. It is
|
|
113
|
+
revisioned like a record, and it locks once a record, report, review window or dispute
|
|
114
|
+
depends on it, unless the revision only widens scope or adds constraints.
|
|
115
|
+
|
|
116
|
+
### Fingerprints
|
|
117
|
+
|
|
118
|
+
"Current" means three fingerprints.
|
|
119
|
+
|
|
120
|
+
- **Source**: the content hashes of the union of the declared scope paths, the declared
|
|
121
|
+
configuration files and the change set. The change set is the tracked diff between the
|
|
122
|
+
merge-base of the recorded base and HEAD, plus staged, unstaged and untracked files, minus
|
|
123
|
+
the export directory, the gate-owned paths and the marker's ignore patterns. Content
|
|
124
|
+
hashes only: the base revision is recorded and not hashed, so a content-neutral rebase
|
|
125
|
+
does not expire a verdict, and a clean HEAD never identifies a dirty worktree. Change-set
|
|
126
|
+
paths outside every applicable declaration are reported as undeclared changes.
|
|
127
|
+
- **Reference**: the content hashes of the dimension's reference bundle as distributed —
|
|
128
|
+
catalog, decision schema, evidence schemas, guides, the review skill's references and the
|
|
129
|
+
generated copy of this contract — plus the contract version and the gate version.
|
|
130
|
+
- **Decision**: the ordered hash of the dimension's declaration and of every decision record
|
|
131
|
+
of the dimension for the task, each with its revision number.
|
|
132
|
+
|
|
133
|
+
A verdict is current only while all three fingerprints it was bound to still match. Any
|
|
134
|
+
mismatch is stale. Eager marking by a PostToolUse hook is an optimization and is never
|
|
135
|
+
authoritative: a skipped hook, a crash or an editor outside the harness must never leave a
|
|
136
|
+
stale verdict looking current, so expiry is always derived from the fingerprints.
|
|
137
|
+
|
|
138
|
+
### Envelopes
|
|
139
|
+
|
|
140
|
+
Every decision record carries a common outer envelope: dimension, schema version, catalog
|
|
141
|
+
version, the contract versions it supports, need, scope as an array of paths, base, revision
|
|
142
|
+
as number, previous and reason, and two typed lists — `cites`, artifacts and evidence
|
|
143
|
+
sources that exist when the record is validated, and `plans`, artifacts the record commits
|
|
144
|
+
to produce, each with its dimension-defined role. The dimension-specific body stays owned by
|
|
145
|
+
the dimension schema. Applicability is not a record field; it lives in the declaration.
|
|
146
|
+
|
|
147
|
+
`cites` carries referential integrity. A cited path that does not exist refuses the record.
|
|
148
|
+
A claim of unknown about a checkable fact — targets, runtimes, environments, configuration —
|
|
149
|
+
is accepted only with the sources consulted cited, or with the paths searched and not found.
|
|
150
|
+
A revision that announces a correction is refused when no cited artifact changed: a record
|
|
151
|
+
describes what was done, not what should have been. `plans` are not checked when the record
|
|
152
|
+
is written, so a record that precedes the first affected write stays valid under C04; every
|
|
153
|
+
planned artifact must exist before a review begins, is filed or is dispatched.
|
|
154
|
+
|
|
155
|
+
Every review emits a common review envelope: dimension, the supported contract version, the
|
|
156
|
+
verdict, the records examined, the checks it saw executed, a reviewer object with an
|
|
157
|
+
independence claim and a declared identity, the confirmed findings and the
|
|
158
|
+
challenged-survived list. Each finding has an identifier and a kind, `evidence` or
|
|
159
|
+
`judgment`; an evidence finding carries a typed remedy, a judgment finding the proposed
|
|
160
|
+
correction C08 already requires. The envelope carries no fingerprint: a fingerprint a
|
|
161
|
+
builder or a reviewer writes anywhere is ignored.
|
|
162
|
+
|
|
163
|
+
### Attestation and report
|
|
164
|
+
|
|
165
|
+
The gate writes both, and they are the reviewer's only permitted external mutations. An
|
|
166
|
+
attestation stores a `SOUND` envelope together with the three fingerprints of the reviewer's
|
|
167
|
+
window and its captured identity. A report stores a `SMELLS` or `VIOLATIONS` envelope bound
|
|
168
|
+
the same way; it blocks completion until a `SOUND` attestation on a later state, or an
|
|
169
|
+
arbitration closing its last open finding, supersedes it. No other verdict is attestable and
|
|
170
|
+
no verdict is a score.
|
|
171
|
+
|
|
172
|
+
### Findings, disputes and arbitration
|
|
173
|
+
|
|
174
|
+
A finding admits two responses: address it — the remedy executed and the artifact appended,
|
|
175
|
+
or the record revised and the state moved — or dispute it with a pointer to existing
|
|
176
|
+
counter-evidence. An answer in prose is neither, and a changed fingerprint alone addresses
|
|
177
|
+
nothing. Findings about evidence say evidence not on file, never false claim: the builder is
|
|
178
|
+
asked to file, not to confess.
|
|
179
|
+
|
|
180
|
+
While any finding of the last report is pending, no new review of that dimension begins, so
|
|
181
|
+
the same finding is never re-litigated with a fresh reviewer. A valid dispute blocks
|
|
182
|
+
completion and goes to the user; it never goes to another reviewer on the same state. Its
|
|
183
|
+
only exit is an arbitration that only a human hand writes: `uphold` closes the finding,
|
|
184
|
+
`reject` puts its remedy or correction back to pending.
|
|
185
|
+
|
|
186
|
+
### Reviewer identity
|
|
187
|
+
|
|
188
|
+
Every gate call carries the harness session identifier. A reviewer's calls carry an agent
|
|
189
|
+
identifier that must differ from the builder's. This checks consistency, not independence.
|
|
190
|
+
Where a harness provides no agent identifier, the attestation is stored unverified, the state
|
|
191
|
+
says so, and a pipeline may require verified identity.
|
|
192
|
+
|
|
193
|
+
### Completion
|
|
194
|
+
|
|
195
|
+
For each registered dimension: a non-applicable declaration needs its reason; an applicable
|
|
196
|
+
one needs at least one validated record, every planned artifact produced, a current `SOUND`
|
|
197
|
+
attestation, no current report with an open finding and no unresolved dispute. An undeclared
|
|
198
|
+
registered dimension is incomplete. Any incomplete dimension blocks completion whatever the
|
|
199
|
+
others say. Requirements combine; they never average, and there is no score.
|
|
200
|
+
|
|
201
|
+
Deterministic checks stay the reviewer's responsibility under C10 and appear in the review
|
|
202
|
+
envelope as the checks it saw executed. Enforcement validates their presence, never their
|
|
203
|
+
result.
|
|
204
|
+
|
|
205
|
+
## Neutral brief
|
|
206
|
+
|
|
207
|
+
Send only the filled fields below to the named reviewer or a fresh general subagent with
|
|
208
|
+
no inherited conversation. Keep test expectations and other reviewers' conclusions out.
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
You are the fresh <dimension> reviewer. Run /<review-skill> yourself; do not delegate.
|
|
212
|
+
Read-only: do not modify any file, including code, records, catalogs or fixtures.
|
|
213
|
+
Scope: <exact paths/symbols>; repository: <absolute path>.
|
|
214
|
+
Base: <ref/commit or standalone>; include relevant uncommitted and new files.
|
|
215
|
+
Use git diff and file reads, never git log or PR descriptions.
|
|
216
|
+
Original request: <requester wording, without builder choices or rationale>.
|
|
217
|
+
Factual constraints: <project targets, public contracts, independent sources>.
|
|
218
|
+
Records: <paths; check existence only until the expected matrix is frozen>.
|
|
219
|
+
Check evidence: <paths; read results after freezing, not implementation rationale>.
|
|
220
|
+
Undeclared changes: <change-set paths outside every declaration>.
|
|
221
|
+
Report your frozen matrix before opening the records. End with the domain report
|
|
222
|
+
and one verdict, or explain incomplete execution without attestation.
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Composition and expiry
|
|
226
|
+
|
|
227
|
+
One builder coordinates all applicable dimensions. Keep their records and verdicts distinct.
|
|
228
|
+
Historical transforming reviews run before final reviews. Independent reviewers can run in
|
|
229
|
+
parallel on one frozen final state, without exchanging rationale. Completion requires all
|
|
230
|
+
applicable dimensions `SOUND` on that same state; one verdict cannot compensate for another.
|
|
231
|
+
|
|
232
|
+
Any change to a file in a review's scope invalidates it, including prose. Shared files
|
|
233
|
+
invalidate all covering reviews. Without precise scope tracking, invalidate the whole
|
|
234
|
+
change's reviews. Identify the state with a commit plus the staged/unstaged diff and
|
|
235
|
+
untracked file contents or hashes; a clean HEAD alone does not identify a dirty worktree.
|
|
236
|
+
Record/schema/catalog changes also reopen the affected review. No generic orchestrator
|
|
237
|
+
is implied. An external index of scopes, hashes, record paths, checks and responses is enough.
|
|
238
|
+
|
|
239
|
+
A correction for one dimension moves the change set and therefore expires every verdict of
|
|
240
|
+
the task, because every reviewer's brief covers the whole diff. Corrections are therefore
|
|
241
|
+
batched: address every pending finding of every dimension, then reopen all applicable
|
|
242
|
+
reviews together on one state, frozen while they are in flight so no verdict binds to code
|
|
243
|
+
its reviewer never read. A review filed on a state that moved since it began is void.
|
|
244
|
+
|
|
245
|
+
If domain requests conflict, identify the incompatible invariants and reopen decisions
|
|
246
|
+
before writing. A dimension that turns non-`SOUND` on a state produced by correcting another
|
|
247
|
+
is a cross-dimension conflict, which the next briefs carry. Stop a repeating conflict for
|
|
248
|
+
user arbitration; never force a verdict. Bound the conflict rounds and the total rounds, and
|
|
249
|
+
send a task that reaches either bound to the user rather than looping.
|
|
250
|
+
|
|
251
|
+
## Gate and portable execution
|
|
252
|
+
|
|
253
|
+
Inspect the installed gate's help/capabilities before using a dimension. Never invent CLI
|
|
254
|
+
flags, reuse a different dimension or treat a refused record as an absent gate. A gate
|
|
255
|
+
validates shape, membership and referential integrity; the reviewer owns semantic judgment
|
|
256
|
+
and only attests SOUND. The gate computes its own fingerprints and accepts none. Fix a
|
|
257
|
+
refused record before continuing that workflow.
|
|
258
|
+
|
|
259
|
+
The suite's own gate is `ai-engineering-gate`, generic by construction: it derives state from
|
|
260
|
+
evidence and holds no domain rule. Enforcement it applies covers omission, drift and stale
|
|
261
|
+
evidence, not a deliberately forged evidence index. A harness Stop hook is advisory by design
|
|
262
|
+
of the harnesses; the lock on publication is the gate's exit code, consumed by a delivery
|
|
263
|
+
pipeline gate or a CI check.
|
|
264
|
+
|
|
265
|
+
Without a compatible gate, portable completion consists of validated records, successful
|
|
266
|
+
checks and an independent report tied to the examined state. It provides no automatic
|
|
267
|
+
enforcement or lock. If the project's workflow requires gate attestation, an absent or
|
|
268
|
+
unsupported gate leaves that workflow incomplete; portable evidence cannot replace it.
|
|
269
|
+
Keep evidence available through review/correction; do not reconstruct missing historical
|
|
270
|
+
decisions as if they preceded implementation.
|