@cleocode/contracts 2026.5.111 → 2026.5.113

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 (118) hide show
  1. package/dist/__tests__/cli-meta-suggested-next.test.d.ts +21 -0
  2. package/dist/__tests__/cli-meta-suggested-next.test.d.ts.map +1 -0
  3. package/dist/__tests__/cli-meta-suggested-next.test.js +70 -0
  4. package/dist/__tests__/cli-meta-suggested-next.test.js.map +1 -0
  5. package/dist/__tests__/evidence-atom-schema.test.d.ts +16 -0
  6. package/dist/__tests__/evidence-atom-schema.test.d.ts.map +1 -0
  7. package/dist/__tests__/evidence-atom-schema.test.js +394 -0
  8. package/dist/__tests__/evidence-atom-schema.test.js.map +1 -0
  9. package/dist/config/__tests__/manifest.test.d.ts +13 -0
  10. package/dist/config/__tests__/manifest.test.d.ts.map +1 -0
  11. package/dist/config/__tests__/manifest.test.js +143 -0
  12. package/dist/config/__tests__/manifest.test.js.map +1 -0
  13. package/dist/config/manifest.d.ts +158 -0
  14. package/dist/config/manifest.d.ts.map +1 -0
  15. package/dist/config/manifest.js +123 -0
  16. package/dist/config/manifest.js.map +1 -0
  17. package/dist/docs/__tests__/provenance.test.d.ts +14 -0
  18. package/dist/docs/__tests__/provenance.test.d.ts.map +1 -0
  19. package/dist/docs/__tests__/provenance.test.js +579 -0
  20. package/dist/docs/__tests__/provenance.test.js.map +1 -0
  21. package/dist/docs/provenance.d.ts +731 -0
  22. package/dist/docs/provenance.d.ts.map +1 -0
  23. package/dist/docs/provenance.js +258 -0
  24. package/dist/docs/provenance.js.map +1 -0
  25. package/dist/docs-taxonomy.d.ts +24 -0
  26. package/dist/docs-taxonomy.d.ts.map +1 -1
  27. package/dist/docs-taxonomy.js +27 -0
  28. package/dist/docs-taxonomy.js.map +1 -1
  29. package/dist/doctor.d.ts +101 -0
  30. package/dist/doctor.d.ts.map +1 -1
  31. package/dist/errors.d.ts +4 -0
  32. package/dist/errors.d.ts.map +1 -1
  33. package/dist/errors.js +4 -0
  34. package/dist/errors.js.map +1 -1
  35. package/dist/evidence-atom-schema.d.ts +407 -0
  36. package/dist/evidence-atom-schema.d.ts.map +1 -0
  37. package/dist/evidence-atom-schema.js +505 -0
  38. package/dist/evidence-atom-schema.js.map +1 -0
  39. package/dist/exit-codes.d.ts +37 -0
  40. package/dist/exit-codes.d.ts.map +1 -1
  41. package/dist/exit-codes.js +37 -0
  42. package/dist/exit-codes.js.map +1 -1
  43. package/dist/index.d.ts +13 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +8 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/invariants/__tests__/adr-056-release.test.d.ts +16 -0
  48. package/dist/invariants/__tests__/adr-056-release.test.d.ts.map +1 -0
  49. package/dist/invariants/__tests__/adr-056-release.test.js +88 -0
  50. package/dist/invariants/__tests__/adr-056-release.test.js.map +1 -0
  51. package/dist/invariants/__tests__/adr-070-orchestration.test.d.ts +22 -0
  52. package/dist/invariants/__tests__/adr-070-orchestration.test.d.ts.map +1 -0
  53. package/dist/invariants/__tests__/adr-070-orchestration.test.js +151 -0
  54. package/dist/invariants/__tests__/adr-070-orchestration.test.js.map +1 -0
  55. package/dist/invariants/__tests__/registry.test.d.ts +14 -0
  56. package/dist/invariants/__tests__/registry.test.d.ts.map +1 -0
  57. package/dist/invariants/__tests__/registry.test.js +113 -0
  58. package/dist/invariants/__tests__/registry.test.js.map +1 -0
  59. package/dist/invariants/adr-056-release.d.ts +42 -0
  60. package/dist/invariants/adr-056-release.d.ts.map +1 -0
  61. package/dist/invariants/adr-056-release.js +143 -0
  62. package/dist/invariants/adr-056-release.js.map +1 -0
  63. package/dist/invariants/adr-070-orchestration.d.ts +73 -0
  64. package/dist/invariants/adr-070-orchestration.d.ts.map +1 -0
  65. package/dist/invariants/adr-070-orchestration.js +290 -0
  66. package/dist/invariants/adr-070-orchestration.js.map +1 -0
  67. package/dist/invariants/adr-073-saga.d.ts +32 -0
  68. package/dist/invariants/adr-073-saga.d.ts.map +1 -0
  69. package/dist/invariants/adr-073-saga.js +155 -0
  70. package/dist/invariants/adr-073-saga.js.map +1 -0
  71. package/dist/invariants/index.d.ts +162 -0
  72. package/dist/invariants/index.d.ts.map +1 -0
  73. package/dist/invariants/index.js +118 -0
  74. package/dist/invariants/index.js.map +1 -0
  75. package/dist/operations/__tests__/input-contract.test.d.ts +20 -0
  76. package/dist/operations/__tests__/input-contract.test.d.ts.map +1 -0
  77. package/dist/operations/__tests__/input-contract.test.js +158 -0
  78. package/dist/operations/__tests__/input-contract.test.js.map +1 -0
  79. package/dist/operations/docs.d.ts +16 -0
  80. package/dist/operations/docs.d.ts.map +1 -1
  81. package/dist/operations/input-contract.d.ts +267 -0
  82. package/dist/operations/input-contract.d.ts.map +1 -0
  83. package/dist/operations/input-contract.js +29 -0
  84. package/dist/operations/input-contract.js.map +1 -0
  85. package/dist/templates/__tests__/manifest.test.d.ts +18 -0
  86. package/dist/templates/__tests__/manifest.test.d.ts.map +1 -0
  87. package/dist/templates/__tests__/manifest.test.js +123 -0
  88. package/dist/templates/__tests__/manifest.test.js.map +1 -0
  89. package/dist/templates/manifest.d.ts +186 -0
  90. package/dist/templates/manifest.d.ts.map +1 -0
  91. package/dist/templates/manifest.js +165 -0
  92. package/dist/templates/manifest.js.map +1 -0
  93. package/package.json +2 -2
  94. package/src/__tests__/cli-meta-suggested-next.test.ts +76 -0
  95. package/src/__tests__/evidence-atom-schema.test.ts +499 -0
  96. package/src/config/__tests__/manifest.test.ts +176 -0
  97. package/src/config/manifest.ts +218 -0
  98. package/src/docs/__tests__/__snapshots__/provenance.test.ts.snap +252 -0
  99. package/src/docs/__tests__/provenance.test.ts +648 -0
  100. package/src/docs/provenance.ts +601 -0
  101. package/src/docs-taxonomy.ts +55 -0
  102. package/src/doctor.ts +111 -0
  103. package/src/errors.ts +4 -0
  104. package/src/evidence-atom-schema.ts +628 -0
  105. package/src/exit-codes.ts +39 -0
  106. package/src/index.ts +129 -0
  107. package/src/invariants/__tests__/adr-056-release.test.ts +102 -0
  108. package/src/invariants/__tests__/adr-070-orchestration.test.ts +186 -0
  109. package/src/invariants/__tests__/registry.test.ts +136 -0
  110. package/src/invariants/adr-056-release.ts +154 -0
  111. package/src/invariants/adr-070-orchestration.ts +317 -0
  112. package/src/invariants/adr-073-saga.ts +167 -0
  113. package/src/invariants/index.ts +222 -0
  114. package/src/operations/__tests__/input-contract.test.ts +188 -0
  115. package/src/operations/docs.ts +16 -0
  116. package/src/operations/input-contract.ts +301 -0
  117. package/src/templates/__tests__/manifest.test.ts +140 -0
  118. package/src/templates/manifest.ts +208 -0
@@ -0,0 +1,579 @@
1
+ /**
2
+ * Unit + snapshot tests for the Docs Provenance Graph contract (T10166).
3
+ *
4
+ * Coverage:
5
+ * - Round-trip Zod parse for each node variant + edge variant + envelope.
6
+ * - Discriminator rejection for unknown `kind` / `relation` / lifecycle values.
7
+ * - Type-guard narrowing for all five node variants.
8
+ * - Snapshot test for a typical-sized graph (5 docs, 8 tasks, 4 decisions,
9
+ * 2 sessions) — locks the wire shape consumed by the renderer.
10
+ *
11
+ * @task T10166
12
+ */
13
+ import { describe, expect, it } from 'vitest';
14
+ import { docLifecycleStatusSchema, docProvenanceResponseSchema, isDocProvenanceResponse, isProvenanceDecisionNode, isProvenanceDocNode, isProvenanceMemoryNode, isProvenanceSessionNode, isProvenanceTaskNode, provenanceDocNodeSchema, provenanceEdgeRelationSchema, provenanceEdgeSchema, provenanceNodeKindSchema, provenanceNodeSchema, } from '../provenance.js';
15
+ // ─── Enum schemas ─────────────────────────────────────────────────────────────
16
+ describe('provenanceNodeKindSchema', () => {
17
+ it('accepts every canonical node kind', () => {
18
+ expect(provenanceNodeKindSchema.parse('doc')).toBe('doc');
19
+ expect(provenanceNodeKindSchema.parse('task')).toBe('task');
20
+ expect(provenanceNodeKindSchema.parse('decision')).toBe('decision');
21
+ expect(provenanceNodeKindSchema.parse('session')).toBe('session');
22
+ expect(provenanceNodeKindSchema.parse('memory')).toBe('memory');
23
+ });
24
+ it('rejects an unknown node kind', () => {
25
+ expect(() => provenanceNodeKindSchema.parse('artifact')).toThrow();
26
+ });
27
+ });
28
+ describe('provenanceEdgeRelationSchema', () => {
29
+ it('accepts every canonical edge relation', () => {
30
+ for (const rel of [
31
+ 'attached-to',
32
+ 'supersedes',
33
+ 'superseded-by',
34
+ 'related-task',
35
+ 'linked-decision',
36
+ 'derived-from',
37
+ ]) {
38
+ expect(provenanceEdgeRelationSchema.parse(rel)).toBe(rel);
39
+ }
40
+ });
41
+ it('rejects an unknown edge relation', () => {
42
+ expect(() => provenanceEdgeRelationSchema.parse('mentions')).toThrow();
43
+ });
44
+ });
45
+ describe('docLifecycleStatusSchema', () => {
46
+ it('accepts every canonical lifecycle status', () => {
47
+ for (const s of ['active', 'superseded', 'archived', 'draft']) {
48
+ expect(docLifecycleStatusSchema.parse(s)).toBe(s);
49
+ }
50
+ });
51
+ it('rejects an unknown lifecycle status', () => {
52
+ expect(() => docLifecycleStatusSchema.parse('retired')).toThrow();
53
+ });
54
+ });
55
+ // ─── Node variants ────────────────────────────────────────────────────────────
56
+ describe('provenanceDocNodeSchema', () => {
57
+ it('round-trips a minimal doc node', () => {
58
+ const node = {
59
+ kind: 'doc',
60
+ id: 'adr-078-docs-provenance-graph',
61
+ slug: 'adr-078-docs-provenance-graph',
62
+ docKind: 'adr',
63
+ title: 'ADR 078 — Docs Provenance Graph',
64
+ lifecycleStatus: 'active',
65
+ publishedAt: '2026-05-22T18:00:00.000Z',
66
+ };
67
+ const parsed = provenanceDocNodeSchema.parse(node);
68
+ expect(parsed).toEqual(node);
69
+ });
70
+ it('round-trips a superseded doc node with optional fields', () => {
71
+ const node = {
72
+ kind: 'doc',
73
+ id: 'adr-066-task-creation-axes',
74
+ slug: 'adr-066-task-creation-axes',
75
+ docKind: 'adr',
76
+ title: 'ADR 066 — Task Creation Axes',
77
+ lifecycleStatus: 'superseded',
78
+ publishedAt: '2026-03-01T00:00:00.000Z',
79
+ supersededAt: '2026-05-22T18:00:00.000Z',
80
+ summary: 'Original 3-axis task creation model',
81
+ metadata: { author: 'cleo-prime' },
82
+ };
83
+ const parsed = provenanceDocNodeSchema.parse(node);
84
+ expect(parsed).toEqual(node);
85
+ });
86
+ it('rejects a doc node with the wrong discriminator', () => {
87
+ expect(() => provenanceDocNodeSchema.parse({
88
+ kind: 'task',
89
+ id: 'T1',
90
+ title: 't',
91
+ slug: 's',
92
+ docKind: 'adr',
93
+ lifecycleStatus: 'active',
94
+ publishedAt: '2026-05-22T18:00:00.000Z',
95
+ })).toThrow();
96
+ });
97
+ });
98
+ describe('provenanceNodeSchema (discriminated union)', () => {
99
+ it('parses a task node', () => {
100
+ const node = {
101
+ kind: 'task',
102
+ id: 'T10166',
103
+ title: 'C9: Provenance graph contract',
104
+ taskType: 'task',
105
+ status: 'in_progress',
106
+ };
107
+ expect(provenanceNodeSchema.parse(node)).toEqual(node);
108
+ });
109
+ it('parses a decision node', () => {
110
+ const node = {
111
+ kind: 'decision',
112
+ id: 'D-arch-001',
113
+ title: 'Adopt evidence-based gate ritual',
114
+ outcome: 'accepted',
115
+ decidedAt: '2026-04-12T14:30:00.000Z',
116
+ };
117
+ expect(provenanceNodeSchema.parse(node)).toEqual(node);
118
+ });
119
+ it('parses a session node', () => {
120
+ const node = {
121
+ kind: 'session',
122
+ id: 'ses_2026-05-22_abc123',
123
+ title: 'Session 2026-05-22 — T10166 implementation',
124
+ startedAt: '2026-05-22T18:00:00.000Z',
125
+ };
126
+ expect(provenanceNodeSchema.parse(node)).toEqual(node);
127
+ });
128
+ it('parses a memory node', () => {
129
+ const node = {
130
+ kind: 'memory',
131
+ id: 'O-2026-05-22-001',
132
+ title: 'Observed spawn contention under parallel sessions',
133
+ memoryType: 'observation',
134
+ recordedAt: '2026-05-22T19:15:00.000Z',
135
+ };
136
+ expect(provenanceNodeSchema.parse(node)).toEqual(node);
137
+ });
138
+ it('rejects an unknown discriminator', () => {
139
+ expect(() => provenanceNodeSchema.parse({
140
+ kind: 'artifact',
141
+ id: 'a-1',
142
+ title: 'unknown',
143
+ })).toThrow();
144
+ });
145
+ });
146
+ // ─── Edges ────────────────────────────────────────────────────────────────────
147
+ describe('provenanceEdgeSchema', () => {
148
+ it('round-trips a minimal edge', () => {
149
+ const edge = {
150
+ relation: 'attached-to',
151
+ from: 'adr-078-docs-provenance-graph',
152
+ fromKind: 'doc',
153
+ to: 'T10157',
154
+ toKind: 'task',
155
+ addedAt: '2026-05-22T18:00:00.000Z',
156
+ };
157
+ expect(provenanceEdgeSchema.parse(edge)).toEqual(edge);
158
+ });
159
+ it('round-trips an edge with optional summary', () => {
160
+ const edge = {
161
+ relation: 'supersedes',
162
+ from: 'adr-078-docs-provenance-graph',
163
+ fromKind: 'doc',
164
+ to: 'adr-066-task-creation-axes',
165
+ toKind: 'doc',
166
+ addedAt: '2026-05-22T18:00:00.000Z',
167
+ summary: 'replaces 3-axis model with full cross-entity graph',
168
+ };
169
+ expect(provenanceEdgeSchema.parse(edge)).toEqual(edge);
170
+ });
171
+ it('rejects an edge with an unknown relation', () => {
172
+ expect(() => provenanceEdgeSchema.parse({
173
+ relation: 'mentions',
174
+ from: 'a',
175
+ fromKind: 'doc',
176
+ to: 'b',
177
+ toKind: 'doc',
178
+ addedAt: '2026-05-22T18:00:00.000Z',
179
+ })).toThrow();
180
+ });
181
+ });
182
+ // ─── Envelope ─────────────────────────────────────────────────────────────────
183
+ describe('docProvenanceResponseSchema', () => {
184
+ it('validates an empty graph', () => {
185
+ const empty = {
186
+ nodes: [],
187
+ edges: [],
188
+ totalNodes: 0,
189
+ totalEdges: 0,
190
+ };
191
+ expect(docProvenanceResponseSchema.parse(empty)).toEqual(empty);
192
+ });
193
+ it('validates a single-node graph', () => {
194
+ const single = {
195
+ nodes: [
196
+ {
197
+ kind: 'doc',
198
+ id: 'adr-078-docs-provenance-graph',
199
+ slug: 'adr-078-docs-provenance-graph',
200
+ docKind: 'adr',
201
+ title: 'ADR 078',
202
+ lifecycleStatus: 'active',
203
+ publishedAt: '2026-05-22T18:00:00.000Z',
204
+ },
205
+ ],
206
+ edges: [],
207
+ totalNodes: 1,
208
+ totalEdges: 0,
209
+ };
210
+ expect(docProvenanceResponseSchema.parse(single)).toEqual(single);
211
+ });
212
+ it('rejects negative totals', () => {
213
+ expect(() => docProvenanceResponseSchema.parse({
214
+ nodes: [],
215
+ edges: [],
216
+ totalNodes: -1,
217
+ totalEdges: 0,
218
+ })).toThrow();
219
+ });
220
+ it('isDocProvenanceResponse narrows a valid envelope', () => {
221
+ const candidate = {
222
+ nodes: [],
223
+ edges: [],
224
+ totalNodes: 0,
225
+ totalEdges: 0,
226
+ };
227
+ expect(isDocProvenanceResponse(candidate)).toBe(true);
228
+ });
229
+ it('isDocProvenanceResponse rejects a non-object', () => {
230
+ expect(isDocProvenanceResponse(null)).toBe(false);
231
+ expect(isDocProvenanceResponse('graph')).toBe(false);
232
+ expect(isDocProvenanceResponse({ nodes: 'oops' })).toBe(false);
233
+ });
234
+ });
235
+ // ─── Type guards ──────────────────────────────────────────────────────────────
236
+ describe('type guards', () => {
237
+ const doc = {
238
+ kind: 'doc',
239
+ id: 'adr-078-docs-provenance-graph',
240
+ slug: 'adr-078-docs-provenance-graph',
241
+ docKind: 'adr',
242
+ title: 'ADR 078',
243
+ lifecycleStatus: 'active',
244
+ publishedAt: '2026-05-22T18:00:00.000Z',
245
+ };
246
+ const task = {
247
+ kind: 'task',
248
+ id: 'T10166',
249
+ title: 'C9',
250
+ taskType: 'task',
251
+ status: 'in_progress',
252
+ };
253
+ const decision = {
254
+ kind: 'decision',
255
+ id: 'D-arch-001',
256
+ title: 'Adopt EBG ritual',
257
+ outcome: 'accepted',
258
+ decidedAt: '2026-04-12T14:30:00.000Z',
259
+ };
260
+ const session = {
261
+ kind: 'session',
262
+ id: 'ses_x',
263
+ title: 's',
264
+ startedAt: '2026-05-22T18:00:00.000Z',
265
+ };
266
+ const memory = {
267
+ kind: 'memory',
268
+ id: 'O-1',
269
+ title: 'm',
270
+ memoryType: 'observation',
271
+ recordedAt: '2026-05-22T18:00:00.000Z',
272
+ };
273
+ it('isProvenanceDocNode narrows correctly', () => {
274
+ expect(isProvenanceDocNode(doc)).toBe(true);
275
+ expect(isProvenanceDocNode(task)).toBe(false);
276
+ expect(isProvenanceDocNode(decision)).toBe(false);
277
+ expect(isProvenanceDocNode(session)).toBe(false);
278
+ expect(isProvenanceDocNode(memory)).toBe(false);
279
+ });
280
+ it('isProvenanceTaskNode narrows correctly', () => {
281
+ expect(isProvenanceTaskNode(task)).toBe(true);
282
+ expect(isProvenanceTaskNode(doc)).toBe(false);
283
+ });
284
+ it('isProvenanceDecisionNode narrows correctly', () => {
285
+ expect(isProvenanceDecisionNode(decision)).toBe(true);
286
+ expect(isProvenanceDecisionNode(doc)).toBe(false);
287
+ });
288
+ it('isProvenanceSessionNode narrows correctly', () => {
289
+ expect(isProvenanceSessionNode(session)).toBe(true);
290
+ expect(isProvenanceSessionNode(doc)).toBe(false);
291
+ });
292
+ it('isProvenanceMemoryNode narrows correctly', () => {
293
+ expect(isProvenanceMemoryNode(memory)).toBe(true);
294
+ expect(isProvenanceMemoryNode(doc)).toBe(false);
295
+ });
296
+ });
297
+ // ─── Snapshot: typical-sized graph (AC4) ──────────────────────────────────────
298
+ describe('typical-sized graph (AC4)', () => {
299
+ /**
300
+ * Build the AC4 fixture: 5 docs, 8 tasks, 4 decisions, 2 sessions.
301
+ * Memory nodes are not part of the AC4 fixture but the contract supports
302
+ * them — see {@link provenanceMemoryNodeSchema} tests above.
303
+ */
304
+ const buildFixture = () => {
305
+ const docs = [
306
+ {
307
+ kind: 'doc',
308
+ id: 'adr-078-docs-provenance-graph',
309
+ slug: 'adr-078-docs-provenance-graph',
310
+ docKind: 'adr',
311
+ title: 'ADR 078 — Docs Provenance Graph',
312
+ lifecycleStatus: 'active',
313
+ publishedAt: '2026-05-22T18:00:00.000Z',
314
+ },
315
+ {
316
+ kind: 'doc',
317
+ id: 'spec-t10157-e12-provenance',
318
+ slug: 'spec-t10157-e12-provenance',
319
+ docKind: 'spec',
320
+ title: 'E12 Docs Provenance Specification',
321
+ lifecycleStatus: 'active',
322
+ publishedAt: '2026-05-22T18:05:00.000Z',
323
+ },
324
+ {
325
+ kind: 'doc',
326
+ id: 'research-provenance-graph-design',
327
+ slug: 'research-provenance-graph-design',
328
+ docKind: 'research',
329
+ title: 'Research — Cross-entity provenance graph design',
330
+ lifecycleStatus: 'active',
331
+ publishedAt: '2026-05-21T10:00:00.000Z',
332
+ },
333
+ {
334
+ kind: 'doc',
335
+ id: 'adr-066-task-creation-axes',
336
+ slug: 'adr-066-task-creation-axes',
337
+ docKind: 'adr',
338
+ title: 'ADR 066 — Task Creation Axes',
339
+ lifecycleStatus: 'superseded',
340
+ publishedAt: '2026-03-01T00:00:00.000Z',
341
+ supersededAt: '2026-05-22T18:00:00.000Z',
342
+ },
343
+ {
344
+ kind: 'doc',
345
+ id: 'handoff-sg-template-config-ssot-session-1',
346
+ slug: 'handoff-sg-template-config-ssot-session-1',
347
+ docKind: 'handoff',
348
+ title: 'SG-TEMPLATE-CONFIG-SSOT handoff — session 1',
349
+ lifecycleStatus: 'active',
350
+ publishedAt: '2026-05-22T19:30:00.000Z',
351
+ },
352
+ ];
353
+ const tasks = [
354
+ { kind: 'task', id: 'T9855', title: 'Saga T9855', taskType: 'saga', status: 'in_progress' },
355
+ {
356
+ kind: 'task',
357
+ id: 'T10157',
358
+ title: 'E12 — Provenance Graph',
359
+ taskType: 'epic',
360
+ status: 'in_progress',
361
+ },
362
+ {
363
+ kind: 'task',
364
+ id: 'T10158',
365
+ title: 'C1 — attachments-table migration',
366
+ taskType: 'task',
367
+ status: 'done',
368
+ },
369
+ {
370
+ kind: 'task',
371
+ id: 'T10162',
372
+ title: 'C5 — supersede verb',
373
+ taskType: 'task',
374
+ status: 'pending',
375
+ },
376
+ { kind: 'task', id: 'T10164', title: 'C7 — graph CLI', taskType: 'task', status: 'pending' },
377
+ {
378
+ kind: 'task',
379
+ id: 'T10166',
380
+ title: 'C9 — provenance graph contract',
381
+ taskType: 'task',
382
+ status: 'in_progress',
383
+ },
384
+ {
385
+ kind: 'task',
386
+ id: 'T10138',
387
+ title: 'TreeResponse contract',
388
+ taskType: 'task',
389
+ status: 'done',
390
+ },
391
+ {
392
+ kind: 'task',
393
+ id: 'T10166-sub1',
394
+ title: 'Snapshot test fixture',
395
+ taskType: 'subtask',
396
+ status: 'in_progress',
397
+ },
398
+ ];
399
+ const decisions = [
400
+ {
401
+ kind: 'decision',
402
+ id: 'D-prov-001',
403
+ title: 'Cross-entity graph (not doc-only)',
404
+ outcome: 'accepted',
405
+ decidedAt: '2026-05-21T12:00:00.000Z',
406
+ },
407
+ {
408
+ kind: 'decision',
409
+ id: 'D-prov-002',
410
+ title: 'Discriminated unions over inheritance',
411
+ outcome: 'accepted',
412
+ decidedAt: '2026-05-21T13:00:00.000Z',
413
+ },
414
+ {
415
+ kind: 'decision',
416
+ id: 'D-prov-003',
417
+ title: 'Edge carries fromKind/toKind for disambiguation',
418
+ outcome: 'accepted',
419
+ decidedAt: '2026-05-21T14:00:00.000Z',
420
+ },
421
+ {
422
+ kind: 'decision',
423
+ id: 'D-prov-004',
424
+ title: 'Compatible with TreeResponse renderer',
425
+ outcome: 'proposed',
426
+ decidedAt: '2026-05-22T18:00:00.000Z',
427
+ },
428
+ ];
429
+ const sessions = [
430
+ {
431
+ kind: 'session',
432
+ id: 'ses_2026-05-21_research',
433
+ title: 'Research session — provenance graph design',
434
+ startedAt: '2026-05-21T10:00:00.000Z',
435
+ endedAt: '2026-05-21T14:30:00.000Z',
436
+ },
437
+ {
438
+ kind: 'session',
439
+ id: 'ses_2026-05-22_impl',
440
+ title: 'Implementation session — T10166',
441
+ startedAt: '2026-05-22T18:00:00.000Z',
442
+ },
443
+ ];
444
+ const nodes = [...docs, ...tasks, ...decisions, ...sessions];
445
+ const edges = [
446
+ // ADR-078 supersedes ADR-066
447
+ {
448
+ relation: 'supersedes',
449
+ from: 'adr-078-docs-provenance-graph',
450
+ fromKind: 'doc',
451
+ to: 'adr-066-task-creation-axes',
452
+ toKind: 'doc',
453
+ addedAt: '2026-05-22T18:00:00.000Z',
454
+ },
455
+ {
456
+ relation: 'superseded-by',
457
+ from: 'adr-066-task-creation-axes',
458
+ fromKind: 'doc',
459
+ to: 'adr-078-docs-provenance-graph',
460
+ toKind: 'doc',
461
+ addedAt: '2026-05-22T18:00:00.000Z',
462
+ },
463
+ // ADR-078 attached-to T10157
464
+ {
465
+ relation: 'attached-to',
466
+ from: 'adr-078-docs-provenance-graph',
467
+ fromKind: 'doc',
468
+ to: 'T10157',
469
+ toKind: 'task',
470
+ addedAt: '2026-05-22T18:00:00.000Z',
471
+ },
472
+ // spec attached-to T10157
473
+ {
474
+ relation: 'attached-to',
475
+ from: 'spec-t10157-e12-provenance',
476
+ fromKind: 'doc',
477
+ to: 'T10157',
478
+ toKind: 'task',
479
+ addedAt: '2026-05-22T18:05:00.000Z',
480
+ },
481
+ // research attached-to T10157
482
+ {
483
+ relation: 'attached-to',
484
+ from: 'research-provenance-graph-design',
485
+ fromKind: 'doc',
486
+ to: 'T10157',
487
+ toKind: 'task',
488
+ addedAt: '2026-05-21T10:00:00.000Z',
489
+ },
490
+ // handoff attached-to T9855
491
+ {
492
+ relation: 'attached-to',
493
+ from: 'handoff-sg-template-config-ssot-session-1',
494
+ fromKind: 'doc',
495
+ to: 'T9855',
496
+ toKind: 'task',
497
+ addedAt: '2026-05-22T19:30:00.000Z',
498
+ },
499
+ // T10157 related-task T9855
500
+ {
501
+ relation: 'related-task',
502
+ from: 'T10157',
503
+ fromKind: 'task',
504
+ to: 'T9855',
505
+ toKind: 'task',
506
+ addedAt: '2026-05-22T18:00:00.000Z',
507
+ },
508
+ // T10166 related-task T10138 (TreeResponse compatibility)
509
+ {
510
+ relation: 'related-task',
511
+ from: 'T10166',
512
+ fromKind: 'task',
513
+ to: 'T10138',
514
+ toKind: 'task',
515
+ addedAt: '2026-05-22T18:00:00.000Z',
516
+ summary: 'Compatible with TreeResponse renderer (AC3)',
517
+ },
518
+ // ADR-078 linked-decision D-prov-001
519
+ {
520
+ relation: 'linked-decision',
521
+ from: 'adr-078-docs-provenance-graph',
522
+ fromKind: 'doc',
523
+ to: 'D-prov-001',
524
+ toKind: 'decision',
525
+ addedAt: '2026-05-21T12:00:00.000Z',
526
+ },
527
+ // spec linked-decision D-prov-002
528
+ {
529
+ relation: 'linked-decision',
530
+ from: 'spec-t10157-e12-provenance',
531
+ fromKind: 'doc',
532
+ to: 'D-prov-002',
533
+ toKind: 'decision',
534
+ addedAt: '2026-05-21T13:00:00.000Z',
535
+ },
536
+ // research derived-from session ses_2026-05-21_research
537
+ {
538
+ relation: 'derived-from',
539
+ from: 'research-provenance-graph-design',
540
+ fromKind: 'doc',
541
+ to: 'ses_2026-05-21_research',
542
+ toKind: 'session',
543
+ addedAt: '2026-05-21T10:00:00.000Z',
544
+ },
545
+ // handoff derived-from session ses_2026-05-22_impl
546
+ {
547
+ relation: 'derived-from',
548
+ from: 'handoff-sg-template-config-ssot-session-1',
549
+ fromKind: 'doc',
550
+ to: 'ses_2026-05-22_impl',
551
+ toKind: 'session',
552
+ addedAt: '2026-05-22T19:30:00.000Z',
553
+ },
554
+ ];
555
+ return {
556
+ nodes,
557
+ edges,
558
+ totalNodes: nodes.length,
559
+ totalEdges: edges.length,
560
+ };
561
+ };
562
+ it('matches the AC4 fixture snapshot (5 docs + 8 tasks + 4 decisions + 2 sessions)', () => {
563
+ const graph = buildFixture();
564
+ // Sanity: AC4 cardinalities exactly.
565
+ expect(graph.nodes.filter((n) => n.kind === 'doc')).toHaveLength(5);
566
+ expect(graph.nodes.filter((n) => n.kind === 'task')).toHaveLength(8);
567
+ expect(graph.nodes.filter((n) => n.kind === 'decision')).toHaveLength(4);
568
+ expect(graph.nodes.filter((n) => n.kind === 'session')).toHaveLength(2);
569
+ expect(graph.totalNodes).toBe(graph.nodes.length);
570
+ expect(graph.totalEdges).toBe(graph.edges.length);
571
+ // Round-trip through the Zod envelope schema — guarantees the snapshot
572
+ // is also wire-valid.
573
+ const parsed = docProvenanceResponseSchema.parse(graph);
574
+ expect(parsed.totalNodes).toBe(graph.totalNodes);
575
+ expect(parsed.totalEdges).toBe(graph.totalEdges);
576
+ expect(graph).toMatchSnapshot();
577
+ });
578
+ });
579
+ //# sourceMappingURL=provenance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.test.js","sourceRoot":"","sources":["../../../src/docs/__tests__/provenance.test.ts"],"names":[],"mappings":"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"}