@cleocode/contracts 2026.4.70 → 2026.4.72

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 (46) hide show
  1. package/dist/__tests__/evidence-record.test.d.ts +14 -0
  2. package/dist/__tests__/evidence-record.test.d.ts.map +1 -0
  3. package/dist/__tests__/evidence-record.test.js +362 -0
  4. package/dist/__tests__/evidence-record.test.js.map +1 -0
  5. package/dist/__tests__/invariants.test.d.ts +19 -0
  6. package/dist/__tests__/invariants.test.d.ts.map +1 -0
  7. package/dist/__tests__/invariants.test.js +351 -0
  8. package/dist/__tests__/invariants.test.js.map +1 -0
  9. package/dist/acceptance-gate-schema.d.ts +81 -4
  10. package/dist/acceptance-gate-schema.d.ts.map +1 -1
  11. package/dist/acceptance-gate-schema.js +60 -1
  12. package/dist/acceptance-gate-schema.js.map +1 -1
  13. package/dist/acceptance-gate.d.ts +99 -2
  14. package/dist/acceptance-gate.d.ts.map +1 -1
  15. package/dist/evidence-record-schema.d.ts +202 -0
  16. package/dist/evidence-record-schema.d.ts.map +1 -0
  17. package/dist/evidence-record-schema.js +130 -0
  18. package/dist/evidence-record-schema.js.map +1 -0
  19. package/dist/evidence-record.d.ts +167 -0
  20. package/dist/evidence-record.d.ts.map +1 -0
  21. package/dist/evidence-record.js +21 -0
  22. package/dist/evidence-record.js.map +1 -0
  23. package/dist/index.d.ts +10 -3
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +5 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/task-evidence.d.ts +251 -0
  28. package/dist/task-evidence.d.ts.map +1 -0
  29. package/dist/task-evidence.js +89 -0
  30. package/dist/task-evidence.js.map +1 -0
  31. package/package.json +8 -2
  32. package/schemas/acceptance-gate.schema.json +9 -0
  33. package/schemas/attachment.schema.json +9 -0
  34. package/schemas/gate-result-details.schema.json +9 -0
  35. package/schemas/gate-result.schema.json +9 -0
  36. package/schemas/manifest-v1.json +176 -0
  37. package/schemas/task-evidence.schema.json +9 -0
  38. package/schemas/task.schema.json +9 -0
  39. package/src/__tests__/evidence-record.test.ts +412 -0
  40. package/src/__tests__/invariants.test.ts +445 -0
  41. package/src/acceptance-gate-schema.ts +65 -1
  42. package/src/acceptance-gate.ts +108 -2
  43. package/src/evidence-record-schema.ts +158 -0
  44. package/src/evidence-record.ts +182 -0
  45. package/src/index.ts +65 -1
  46. package/src/task-evidence.ts +239 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Round-trip Zod parse tests for `EvidenceRecord` variants.
3
+ *
4
+ * Each variant is exercised with two cases:
5
+ * 1. A minimal (required-fields-only) input.
6
+ * 2. A maximal (all-fields populated) input with a structural type-check.
7
+ *
8
+ * Five variants × 2 cases = 10 core tests, plus union-routing and rejection tests.
9
+ *
10
+ * @epic T810
11
+ * @task T816
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=evidence-record.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-record.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/evidence-record.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Round-trip Zod parse tests for `EvidenceRecord` variants.
3
+ *
4
+ * Each variant is exercised with two cases:
5
+ * 1. A minimal (required-fields-only) input.
6
+ * 2. A maximal (all-fields populated) input with a structural type-check.
7
+ *
8
+ * Five variants × 2 cases = 10 core tests, plus union-routing and rejection tests.
9
+ *
10
+ * @epic T810
11
+ * @task T816
12
+ */
13
+ import { describe, expect, it } from 'vitest';
14
+ import { commandOutputRecordSchema, evidenceRecordSchema, implDiffRecordSchema, lintReportRecordSchema, testOutputRecordSchema, validateSpecCheckRecordSchema, } from '../evidence-record-schema.js';
15
+ // ─── Shared fixture helpers ───────────────────────────────────────────────────
16
+ const SHA256 = 'a'.repeat(64);
17
+ const AGENT = 'T816-worker';
18
+ const TIMESTAMP = '2026-04-16T00:00:00.000Z';
19
+ // ─── impl-diff ────────────────────────────────────────────────────────────────
20
+ describe('implDiffRecordSchema', () => {
21
+ it('round-trips a minimal impl-diff record', () => {
22
+ const input = {
23
+ kind: 'impl-diff',
24
+ phase: 'implement',
25
+ agentIdentity: AGENT,
26
+ attachmentSha256: SHA256,
27
+ filesChanged: ['packages/contracts/src/evidence-record.ts'],
28
+ linesAdded: 120,
29
+ linesRemoved: 0,
30
+ ranAt: TIMESTAMP,
31
+ durationMs: 850,
32
+ };
33
+ const result = implDiffRecordSchema.parse(input);
34
+ expect(result.kind).toBe('impl-diff');
35
+ expect(result.phase).toBe('implement');
36
+ expect(result.filesChanged).toHaveLength(1);
37
+ expect(result.linesAdded).toBe(120);
38
+ expect(result.linesRemoved).toBe(0);
39
+ expect(result.durationMs).toBe(850);
40
+ });
41
+ it('round-trips a maximal impl-diff record and type-checks as EvidenceRecord', () => {
42
+ const input = {
43
+ kind: 'impl-diff',
44
+ phase: 'implement',
45
+ agentIdentity: AGENT,
46
+ attachmentSha256: SHA256,
47
+ filesChanged: [
48
+ 'packages/contracts/src/evidence-record.ts',
49
+ 'packages/contracts/src/evidence-record-schema.ts',
50
+ 'packages/contracts/src/index.ts',
51
+ ],
52
+ linesAdded: 300,
53
+ linesRemoved: 5,
54
+ ranAt: TIMESTAMP,
55
+ durationMs: 1200,
56
+ };
57
+ const result = implDiffRecordSchema.parse(input);
58
+ expect(result.filesChanged).toHaveLength(3);
59
+ expect(result.linesRemoved).toBe(5);
60
+ // Structural compatibility with canonical interface
61
+ const typed = result;
62
+ expect(typed.kind).toBe('impl-diff');
63
+ // Assignable to the union
64
+ const unionTyped = result;
65
+ expect(unionTyped.kind).toBe('impl-diff');
66
+ });
67
+ });
68
+ // ─── validate-spec-check ─────────────────────────────────────────────────────
69
+ describe('validateSpecCheckRecordSchema', () => {
70
+ it('round-trips a minimal validate-spec-check record', () => {
71
+ const input = {
72
+ kind: 'validate-spec-check',
73
+ phase: 'validate',
74
+ agentIdentity: AGENT,
75
+ attachmentSha256: SHA256,
76
+ reqIdsChecked: ['IVTR-01'],
77
+ passed: true,
78
+ details: 'All checked REQ-IDs satisfied.',
79
+ ranAt: TIMESTAMP,
80
+ durationMs: 300,
81
+ };
82
+ const result = validateSpecCheckRecordSchema.parse(input);
83
+ expect(result.kind).toBe('validate-spec-check');
84
+ expect(result.phase).toBe('validate');
85
+ expect(result.passed).toBe(true);
86
+ expect(result.reqIdsChecked).toEqual(['IVTR-01']);
87
+ });
88
+ it('round-trips a maximal validate-spec-check record with failure', () => {
89
+ const input = {
90
+ kind: 'validate-spec-check',
91
+ phase: 'validate',
92
+ agentIdentity: AGENT,
93
+ attachmentSha256: SHA256,
94
+ reqIdsChecked: ['IVTR-01', 'IVTR-02', 'IVTR-06'],
95
+ passed: false,
96
+ details: 'IVTR-06: EvidenceRecord schema missing lint-report variant.',
97
+ ranAt: TIMESTAMP,
98
+ durationMs: 550,
99
+ };
100
+ const result = validateSpecCheckRecordSchema.parse(input);
101
+ expect(result.reqIdsChecked).toHaveLength(3);
102
+ expect(result.passed).toBe(false);
103
+ expect(result.details).toContain('lint-report');
104
+ // Structural compatibility with canonical interface
105
+ const typed = result;
106
+ expect(typed.kind).toBe('validate-spec-check');
107
+ });
108
+ });
109
+ // ─── test-output ─────────────────────────────────────────────────────────────
110
+ describe('testOutputRecordSchema', () => {
111
+ it('round-trips a minimal test-output record', () => {
112
+ const input = {
113
+ kind: 'test-output',
114
+ phase: 'test',
115
+ agentIdentity: AGENT,
116
+ attachmentSha256: SHA256,
117
+ command: 'pnpm --filter @cleocode/contracts run test',
118
+ exitCode: 0,
119
+ testsPassed: 10,
120
+ testsFailed: 0,
121
+ ranAt: TIMESTAMP,
122
+ durationMs: 4200,
123
+ };
124
+ const result = testOutputRecordSchema.parse(input);
125
+ expect(result.kind).toBe('test-output');
126
+ expect(result.phase).toBe('test');
127
+ expect(result.exitCode).toBe(0);
128
+ expect(result.testsPassed).toBe(10);
129
+ expect(result.testsFailed).toBe(0);
130
+ });
131
+ it('round-trips a test-output record with failures and type-checks as EvidenceRecord', () => {
132
+ const input = {
133
+ kind: 'test-output',
134
+ phase: 'test',
135
+ agentIdentity: AGENT,
136
+ attachmentSha256: SHA256,
137
+ command: 'pnpm run test',
138
+ exitCode: 1,
139
+ testsPassed: 8,
140
+ testsFailed: 2,
141
+ ranAt: TIMESTAMP,
142
+ durationMs: 3100,
143
+ };
144
+ const result = testOutputRecordSchema.parse(input);
145
+ expect(result.exitCode).toBe(1);
146
+ expect(result.testsFailed).toBe(2);
147
+ // Structural compatibility
148
+ const typed = result;
149
+ expect(typed.command).toBe('pnpm run test');
150
+ const unionTyped = result;
151
+ expect(unionTyped.kind).toBe('test-output');
152
+ });
153
+ });
154
+ // ─── lint-report ─────────────────────────────────────────────────────────────
155
+ describe('lintReportRecordSchema', () => {
156
+ it('round-trips a minimal lint-report record (implement phase)', () => {
157
+ const input = {
158
+ kind: 'lint-report',
159
+ phase: 'implement',
160
+ agentIdentity: AGENT,
161
+ attachmentSha256: SHA256,
162
+ tool: 'biome',
163
+ passed: true,
164
+ warnings: 0,
165
+ errors: 0,
166
+ ranAt: TIMESTAMP,
167
+ durationMs: 620,
168
+ };
169
+ const result = lintReportRecordSchema.parse(input);
170
+ expect(result.kind).toBe('lint-report');
171
+ expect(result.phase).toBe('implement');
172
+ expect(result.tool).toBe('biome');
173
+ expect(result.passed).toBe(true);
174
+ expect(result.warnings).toBe(0);
175
+ expect(result.errors).toBe(0);
176
+ });
177
+ it('round-trips a lint-report record with warnings (test phase) and type-checks', () => {
178
+ const input = {
179
+ kind: 'lint-report',
180
+ phase: 'test',
181
+ agentIdentity: AGENT,
182
+ attachmentSha256: SHA256,
183
+ tool: 'tsc',
184
+ passed: false,
185
+ warnings: 3,
186
+ errors: 2,
187
+ ranAt: TIMESTAMP,
188
+ durationMs: 800,
189
+ };
190
+ const result = lintReportRecordSchema.parse(input);
191
+ expect(result.phase).toBe('test');
192
+ expect(result.warnings).toBe(3);
193
+ expect(result.errors).toBe(2);
194
+ expect(result.passed).toBe(false);
195
+ // Structural compatibility
196
+ const typed = result;
197
+ expect(typed.tool).toBe('tsc');
198
+ const unionTyped = result;
199
+ expect(unionTyped.kind).toBe('lint-report');
200
+ });
201
+ });
202
+ // ─── command-output ───────────────────────────────────────────────────────────
203
+ describe('commandOutputRecordSchema', () => {
204
+ it('round-trips a minimal command-output record (implement phase)', () => {
205
+ const input = {
206
+ kind: 'command-output',
207
+ phase: 'implement',
208
+ agentIdentity: AGENT,
209
+ attachmentSha256: SHA256,
210
+ cmd: 'git diff --stat HEAD',
211
+ exitCode: 0,
212
+ ranAt: TIMESTAMP,
213
+ durationMs: 120,
214
+ };
215
+ const result = commandOutputRecordSchema.parse(input);
216
+ expect(result.kind).toBe('command-output');
217
+ expect(result.phase).toBe('implement');
218
+ expect(result.cmd).toBe('git diff --stat HEAD');
219
+ expect(result.exitCode).toBe(0);
220
+ });
221
+ it('round-trips a command-output record (validate phase) and type-checks as EvidenceRecord', () => {
222
+ const input = {
223
+ kind: 'command-output',
224
+ phase: 'validate',
225
+ agentIdentity: AGENT,
226
+ attachmentSha256: SHA256,
227
+ cmd: 'cleo check --task T816',
228
+ exitCode: 0,
229
+ ranAt: TIMESTAMP,
230
+ durationMs: 250,
231
+ };
232
+ const result = commandOutputRecordSchema.parse(input);
233
+ expect(result.phase).toBe('validate');
234
+ // Structural compatibility
235
+ const typed = result;
236
+ expect(typed.cmd).toBe('cleo check --task T816');
237
+ const unionTyped = result;
238
+ expect(unionTyped.kind).toBe('command-output');
239
+ });
240
+ });
241
+ // ─── evidenceRecordSchema (discriminated union routing) ──────────────────────
242
+ describe('evidenceRecordSchema (discriminated union)', () => {
243
+ it('routes impl-diff by kind', () => {
244
+ const result = evidenceRecordSchema.parse({
245
+ kind: 'impl-diff',
246
+ phase: 'implement',
247
+ agentIdentity: AGENT,
248
+ attachmentSha256: SHA256,
249
+ filesChanged: ['src/x.ts'],
250
+ linesAdded: 10,
251
+ linesRemoved: 2,
252
+ ranAt: TIMESTAMP,
253
+ durationMs: 100,
254
+ });
255
+ expect(result.kind).toBe('impl-diff');
256
+ });
257
+ it('routes validate-spec-check by kind', () => {
258
+ const result = evidenceRecordSchema.parse({
259
+ kind: 'validate-spec-check',
260
+ phase: 'validate',
261
+ agentIdentity: AGENT,
262
+ attachmentSha256: SHA256,
263
+ reqIdsChecked: ['REQ-01'],
264
+ passed: true,
265
+ details: 'ok',
266
+ ranAt: TIMESTAMP,
267
+ durationMs: 100,
268
+ });
269
+ expect(result.kind).toBe('validate-spec-check');
270
+ });
271
+ it('routes test-output by kind', () => {
272
+ const result = evidenceRecordSchema.parse({
273
+ kind: 'test-output',
274
+ phase: 'test',
275
+ agentIdentity: AGENT,
276
+ attachmentSha256: SHA256,
277
+ command: 'pnpm test',
278
+ exitCode: 0,
279
+ testsPassed: 5,
280
+ testsFailed: 0,
281
+ ranAt: TIMESTAMP,
282
+ durationMs: 100,
283
+ });
284
+ expect(result.kind).toBe('test-output');
285
+ });
286
+ it('routes lint-report by kind', () => {
287
+ const result = evidenceRecordSchema.parse({
288
+ kind: 'lint-report',
289
+ phase: 'implement',
290
+ agentIdentity: AGENT,
291
+ attachmentSha256: SHA256,
292
+ tool: 'biome',
293
+ passed: true,
294
+ warnings: 0,
295
+ errors: 0,
296
+ ranAt: TIMESTAMP,
297
+ durationMs: 100,
298
+ });
299
+ expect(result.kind).toBe('lint-report');
300
+ });
301
+ it('routes command-output by kind', () => {
302
+ const result = evidenceRecordSchema.parse({
303
+ kind: 'command-output',
304
+ phase: 'test',
305
+ agentIdentity: AGENT,
306
+ attachmentSha256: SHA256,
307
+ cmd: 'cleo doctor',
308
+ exitCode: 0,
309
+ ranAt: TIMESTAMP,
310
+ durationMs: 100,
311
+ });
312
+ expect(result.kind).toBe('command-output');
313
+ });
314
+ it('rejects an unknown kind', () => {
315
+ expect(() => evidenceRecordSchema.parse({
316
+ kind: 'unknown-kind',
317
+ agentIdentity: AGENT,
318
+ attachmentSha256: SHA256,
319
+ ranAt: TIMESTAMP,
320
+ durationMs: 0,
321
+ })).toThrow();
322
+ });
323
+ it('rejects an invalid attachmentSha256 (wrong length)', () => {
324
+ expect(() => evidenceRecordSchema.parse({
325
+ kind: 'command-output',
326
+ phase: 'test',
327
+ agentIdentity: AGENT,
328
+ attachmentSha256: 'tooshort',
329
+ cmd: 'cleo doctor',
330
+ exitCode: 0,
331
+ ranAt: TIMESTAMP,
332
+ durationMs: 0,
333
+ })).toThrow();
334
+ });
335
+ it('rejects an invalid ranAt (non-datetime string)', () => {
336
+ expect(() => evidenceRecordSchema.parse({
337
+ kind: 'test-output',
338
+ phase: 'test',
339
+ agentIdentity: AGENT,
340
+ attachmentSha256: SHA256,
341
+ command: 'pnpm test',
342
+ exitCode: 0,
343
+ testsPassed: 1,
344
+ testsFailed: 0,
345
+ ranAt: 'not-a-timestamp',
346
+ durationMs: 0,
347
+ })).toThrow();
348
+ });
349
+ it('rejects negative durationMs', () => {
350
+ expect(() => evidenceRecordSchema.parse({
351
+ kind: 'command-output',
352
+ phase: 'implement',
353
+ agentIdentity: AGENT,
354
+ attachmentSha256: SHA256,
355
+ cmd: 'cleo doctor',
356
+ exitCode: 0,
357
+ ranAt: TIMESTAMP,
358
+ durationMs: -1,
359
+ })).toThrow();
360
+ });
361
+ });
362
+ //# sourceMappingURL=evidence-record.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-record.test.js","sourceRoot":"","sources":["../../src/__tests__/evidence-record.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAS9C,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AAEtC,iFAAiF;AAEjF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B,MAAM,KAAK,GAAG,aAAa,CAAC;AAC5B,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAE7C,iFAAiF;AAEjF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,WAAoB;YAC1B,KAAK,EAAE,WAAoB;YAC3B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,YAAY,EAAE,CAAC,2CAA2C,CAAC;YAC3D,UAAU,EAAE,GAAG;YACf,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,WAAoB;YAC1B,KAAK,EAAE,WAAoB;YAC3B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,YAAY,EAAE;gBACZ,2CAA2C;gBAC3C,kDAAkD;gBAClD,iCAAiC;aAClC;YACD,UAAU,EAAE,GAAG;YACf,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,oDAAoD;QACpD,MAAM,KAAK,GAAmB,MAAM,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,0BAA0B;QAC1B,MAAM,UAAU,GAAmB,MAAM,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,qBAA8B;YACpC,KAAK,EAAE,UAAmB;YAC1B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,aAAa,EAAE,CAAC,SAAS,CAAC;YAC1B,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,gCAAgC;YACzC,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,qBAA8B;YACpC,KAAK,EAAE,UAAmB;YAC1B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;YAChD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,6DAA6D;YACtE,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAChD,oDAAoD;QACpD,MAAM,KAAK,GAA4B,MAAM,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,aAAsB;YAC5B,KAAK,EAAE,MAAe;YACtB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,OAAO,EAAE,4CAA4C;YACrD,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,aAAsB;YAC5B,KAAK,EAAE,MAAe;YACtB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,2BAA2B;QAC3B,MAAM,KAAK,GAAqB,MAAM,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAmB,MAAM,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,aAAsB;YAC5B,KAAK,EAAE,WAAoB;YAC3B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,aAAsB;YAC5B,KAAK,EAAE,MAAe;YACtB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,2BAA2B;QAC3B,MAAM,KAAK,GAAqB,MAAM,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAmB,MAAM,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,gBAAyB;YAC/B,KAAK,EAAE,WAAoB;YAC3B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,GAAG,EAAE,sBAAsB;YAC3B,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,GAAG,EAAE;QAChG,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,gBAAyB;YAC/B,KAAK,EAAE,UAAmB;YAC1B,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,GAAG,EAAE,wBAAwB;YAC7B,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,2BAA2B;QAC3B,MAAM,KAAK,GAAwB,MAAM,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACjD,MAAM,UAAU,GAAmB,MAAM,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,WAAW;YAClB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,YAAY,EAAE,CAAC,UAAU,CAAC;YAC1B,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,UAAU;YACjB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,MAAM;YACb,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,WAAW;YAClB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACxC,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,MAAM;YACb,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,EAAE,CACV,oBAAoB,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,cAAc;YACpB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,CAAC;SACd,CAAC,CACH,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,EAAE,CACV,oBAAoB,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,MAAM;YACb,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,UAAU;YAC5B,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,CAAC;SACd,CAAC,CACH,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,GAAG,EAAE,CACV,oBAAoB,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,MAAM;YACb,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,iBAAiB;YACxB,UAAU,EAAE,CAAC;SACd,CAAC,CACH,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CACV,oBAAoB,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,WAAW;YAClB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,MAAM;YACxB,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,CAAC,CAAC;SACf,CAAC,CACH,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Contract invariant tests for @cleocode/contracts.
3
+ *
4
+ * Asserts structural rules that must hold across ALL contracts:
5
+ *
6
+ * 1. No contract field named `notes`, `details`, or `text` is typed as bare
7
+ * `string` when a structured shape is possible.
8
+ * Whitelisted exceptions are documented with inline rationale.
9
+ *
10
+ * 2. All discriminated unions use `kind` as the discriminant — NOT `type`.
11
+ * Convention: `type` is reserved for FileAssertion variants only (legacy).
12
+ *
13
+ * 3. Zod schemas for each major contract type are exported from the index.
14
+ *
15
+ * @epic T760
16
+ * @task T804
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=invariants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariants.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/invariants.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}