@peasant-labs/schema 0.1.0-rc6

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 (37) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +56 -0
  3. package/dist/fixtures/quality.d.ts +81 -0
  4. package/dist/fixtures/quality.js +36 -0
  5. package/dist/fixtures/timeline.d.ts +22 -0
  6. package/dist/fixtures/timeline.js +2 -0
  7. package/dist/fixtures.d.ts +2 -0
  8. package/dist/fixtures.js +2 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.js +36 -0
  11. package/dist/internal/generated/contract/zod.gen.d.ts +2740 -0
  12. package/dist/internal/generated/contract/zod.gen.js +1196 -0
  13. package/dist/internal/generated/enums.gen.d.ts +318 -0
  14. package/dist/internal/generated/enums.gen.js +348 -0
  15. package/dist/internal/generated/local-api.d.ts +946 -0
  16. package/dist/internal/generated/local-api.js +1 -0
  17. package/dist/internal/generated/public-contract.gen.d.ts +2 -0
  18. package/dist/internal/generated/public-contract.gen.js +2 -0
  19. package/dist/internal/generated/quality-fixtures.gen.d.ts +2 -0
  20. package/dist/internal/generated/quality-fixtures.gen.js +367 -0
  21. package/dist/internal/generated/testcase.gen.d.ts +17 -0
  22. package/dist/internal/generated/testcase.gen.js +20 -0
  23. package/dist/internal/generated/timeline-fixtures.gen.d.ts +2 -0
  24. package/dist/internal/generated/timeline-fixtures.gen.js +542 -0
  25. package/dist/internal/generated/versions.gen.d.ts +4 -0
  26. package/dist/internal/generated/versions.gen.js +5 -0
  27. package/dist/internal/generated/village-api.d.ts +585 -0
  28. package/dist/internal/generated/village-api.js +1 -0
  29. package/dist/local-api.d.ts +4 -0
  30. package/dist/local-api.js +1 -0
  31. package/dist/testcase.d.ts +32 -0
  32. package/dist/testcase.js +144 -0
  33. package/dist/types.d.ts +2 -0
  34. package/dist/types.js +2 -0
  35. package/dist/village-api.d.ts +4 -0
  36. package/dist/village-api.js +1 -0
  37. package/package.json +71 -0
@@ -0,0 +1,542 @@
1
+ export const canonicalTimelineFixtures = {
2
+ "cases": [
3
+ {
4
+ "family": "many-to-many-bindings",
5
+ "name": "many_to_many_bindings",
6
+ "input": {
7
+ "sessions": [
8
+ {
9
+ "sessionId": "session-a",
10
+ "title": "first task",
11
+ "harness": "claude-code",
12
+ "startMs": 2000,
13
+ "hasCommitBinding": true
14
+ },
15
+ {
16
+ "sessionId": "session-b",
17
+ "title": "second task",
18
+ "harness": "codex",
19
+ "startMs": 1000,
20
+ "hasCommitBinding": true
21
+ }
22
+ ],
23
+ "commits": [
24
+ {
25
+ "hash": "commit-2",
26
+ "subject": "follow-up",
27
+ "hasSession": true,
28
+ "sessionIds": [
29
+ "session-a",
30
+ "session-b"
31
+ ]
32
+ },
33
+ {
34
+ "hash": "commit-1",
35
+ "subject": "setup",
36
+ "hasSession": true,
37
+ "sessionIds": [
38
+ "session-a"
39
+ ]
40
+ }
41
+ ]
42
+ },
43
+ "expected": {},
44
+ "classification": "must-pass",
45
+ "provenance": {
46
+ "source": "requirement",
47
+ "ref": "authoritative many-to-many commit bindings"
48
+ },
49
+ "mutation": {
50
+ "description": "binds two sessions to one commit and one session to two commits"
51
+ }
52
+ },
53
+ {
54
+ "family": "unattached-session",
55
+ "name": "session_not_linked_to_commit",
56
+ "input": {
57
+ "sessions": [
58
+ {
59
+ "sessionId": "session-unlinked",
60
+ "title": "exploration",
61
+ "harness": "opencode",
62
+ "startMs": 3000,
63
+ "hasCommitBinding": false
64
+ }
65
+ ],
66
+ "commits": [
67
+ {
68
+ "hash": "commit-empty",
69
+ "subject": "manual change",
70
+ "hasSession": false,
71
+ "sessionIds": []
72
+ }
73
+ ]
74
+ },
75
+ "expected": {},
76
+ "classification": "must-pass",
77
+ "provenance": {
78
+ "source": "requirement",
79
+ "ref": "unattached sessions remain discoverable"
80
+ },
81
+ "mutation": {
82
+ "description": "includes a visible session with no commit association"
83
+ }
84
+ },
85
+ {
86
+ "family": "binding-outside-window",
87
+ "name": "binding_outside_default_branch_window",
88
+ "input": {
89
+ "sessions": [
90
+ {
91
+ "sessionId": "session-old",
92
+ "title": "older recorded work",
93
+ "harness": "claude-code",
94
+ "hasCommitBinding": true
95
+ }
96
+ ],
97
+ "commits": [
98
+ {
99
+ "hash": "commit-recent",
100
+ "subject": "recent manual change",
101
+ "hasSession": false,
102
+ "sessionIds": []
103
+ }
104
+ ]
105
+ },
106
+ "expected": {},
107
+ "classification": "must-pass",
108
+ "provenance": {
109
+ "source": "requirement",
110
+ "ref": "complete binding truth exceeds bounded commit window"
111
+ },
112
+ "mutation": {
113
+ "description": "keeps binding truth when the associated commit is outside the returned window"
114
+ }
115
+ },
116
+ {
117
+ "family": "non-default-branch-binding",
118
+ "name": "binding_on_non_default_branch",
119
+ "input": {
120
+ "sessions": [
121
+ {
122
+ "sessionId": "session-branch",
123
+ "title": "branch work",
124
+ "harness": "codex",
125
+ "hasCommitBinding": true
126
+ }
127
+ ],
128
+ "commits": []
129
+ },
130
+ "expected": {},
131
+ "classification": "must-pass",
132
+ "provenance": {
133
+ "source": "requirement",
134
+ "ref": "branch bindings are authoritative without inference"
135
+ },
136
+ "mutation": {
137
+ "description": "keeps binding truth when no default-branch commit is visible"
138
+ }
139
+ },
140
+ {
141
+ "family": "stable-session-order",
142
+ "name": "stable_equal_timestamp_and_missing_timestamp_order",
143
+ "input": {
144
+ "sessions": [
145
+ {
146
+ "sessionId": "session-a",
147
+ "title": "first tie",
148
+ "harness": "claude-code",
149
+ "startMs": 4000,
150
+ "hasCommitBinding": false
151
+ },
152
+ {
153
+ "sessionId": "session-b",
154
+ "title": "second tie",
155
+ "harness": "codex",
156
+ "startMs": 4000,
157
+ "hasCommitBinding": false
158
+ },
159
+ {
160
+ "sessionId": "session-c",
161
+ "title": "unknown time",
162
+ "harness": "opencode",
163
+ "hasCommitBinding": false
164
+ }
165
+ ],
166
+ "commits": []
167
+ },
168
+ "expected": {},
169
+ "classification": "must-pass",
170
+ "provenance": {
171
+ "source": "requirement",
172
+ "ref": "deterministic session timeline ordering"
173
+ },
174
+ "mutation": {
175
+ "description": "combines timestamp ties and a missing timestamp in canonical order"
176
+ }
177
+ },
178
+ {
179
+ "family": "descending-timestamp-order",
180
+ "name": "newer_timestamp_must_precede_older",
181
+ "input": {
182
+ "sessions": [
183
+ {
184
+ "sessionId": "session-old",
185
+ "title": "older",
186
+ "harness": "claude-code",
187
+ "startMs": 1000,
188
+ "hasCommitBinding": false
189
+ },
190
+ {
191
+ "sessionId": "session-new",
192
+ "title": "newer",
193
+ "harness": "codex",
194
+ "startMs": 2000,
195
+ "hasCommitBinding": false
196
+ }
197
+ ],
198
+ "commits": []
199
+ },
200
+ "expected": {
201
+ "errorContains": "violate canonical ordering"
202
+ },
203
+ "classification": "must-fail",
204
+ "provenance": {
205
+ "source": "boundary",
206
+ "ref": "descending known start timestamp order"
207
+ },
208
+ "mutation": {
209
+ "description": "places a newer timestamp after an older timestamp"
210
+ }
211
+ },
212
+ {
213
+ "family": "equal-timestamp-tiebreak",
214
+ "name": "equal_timestamp_uses_session_identity_tiebreak",
215
+ "input": {
216
+ "sessions": [
217
+ {
218
+ "sessionId": "session-b",
219
+ "title": "second",
220
+ "harness": "codex",
221
+ "startMs": 3000,
222
+ "hasCommitBinding": false
223
+ },
224
+ {
225
+ "sessionId": "session-a",
226
+ "title": "first",
227
+ "harness": "claude-code",
228
+ "startMs": 3000,
229
+ "hasCommitBinding": false
230
+ }
231
+ ],
232
+ "commits": []
233
+ },
234
+ "expected": {
235
+ "errorContains": "violate canonical ordering"
236
+ },
237
+ "classification": "must-fail",
238
+ "provenance": {
239
+ "source": "boundary",
240
+ "ref": "stable equal-timestamp tie break"
241
+ },
242
+ "mutation": {
243
+ "description": "reverses session identity order for equal timestamps"
244
+ }
245
+ },
246
+ {
247
+ "family": "missing-timestamp-order",
248
+ "name": "missing_timestamp_follows_known_timestamp",
249
+ "input": {
250
+ "sessions": [
251
+ {
252
+ "sessionId": "session-unknown",
253
+ "title": "unknown",
254
+ "harness": "opencode",
255
+ "hasCommitBinding": false
256
+ },
257
+ {
258
+ "sessionId": "session-known",
259
+ "title": "known",
260
+ "harness": "claude-code",
261
+ "startMs": 3000,
262
+ "hasCommitBinding": false
263
+ }
264
+ ],
265
+ "commits": []
266
+ },
267
+ "expected": {
268
+ "errorContains": "violate canonical ordering"
269
+ },
270
+ "classification": "must-fail",
271
+ "provenance": {
272
+ "source": "boundary",
273
+ "ref": "missing timestamps sort after known timestamps"
274
+ },
275
+ "mutation": {
276
+ "description": "places a missing timestamp before a known timestamp"
277
+ }
278
+ },
279
+ {
280
+ "family": "compatibility-boolean",
281
+ "name": "boolean_mirror_mismatch",
282
+ "input": {
283
+ "sessions": [
284
+ {
285
+ "sessionId": "session-a",
286
+ "title": "work",
287
+ "harness": "claude-code",
288
+ "hasCommitBinding": true
289
+ }
290
+ ],
291
+ "commits": [
292
+ {
293
+ "hash": "commit-a",
294
+ "subject": "work",
295
+ "hasSession": false,
296
+ "sessionIds": [
297
+ "session-a"
298
+ ]
299
+ }
300
+ ]
301
+ },
302
+ "expected": {
303
+ "errorContains": "hasSession must mirror"
304
+ },
305
+ "classification": "must-fail",
306
+ "provenance": {
307
+ "source": "requirement",
308
+ "ref": "compatibility boolean mirrors authoritative bindings"
309
+ },
310
+ "mutation": {
311
+ "description": "clears hasSession while retaining a session binding"
312
+ }
313
+ },
314
+ {
315
+ "family": "complete-binding-truth",
316
+ "name": "visible_reference_requires_complete_binding_truth",
317
+ "input": {
318
+ "sessions": [
319
+ {
320
+ "sessionId": "session-a",
321
+ "title": "work",
322
+ "harness": "claude-code",
323
+ "hasCommitBinding": false
324
+ }
325
+ ],
326
+ "commits": [
327
+ {
328
+ "hash": "commit-a",
329
+ "subject": "work",
330
+ "hasSession": true,
331
+ "sessionIds": [
332
+ "session-a"
333
+ ]
334
+ }
335
+ ]
336
+ },
337
+ "expected": {
338
+ "errorContains": "hasCommitBinding=false"
339
+ },
340
+ "classification": "must-fail",
341
+ "provenance": {
342
+ "source": "requirement",
343
+ "ref": "visible binding proves complete session binding truth"
344
+ },
345
+ "mutation": {
346
+ "description": "marks a visibly bound session as having no authoritative binding"
347
+ }
348
+ },
349
+ {
350
+ "family": "known-session-reference",
351
+ "name": "unknown_session_reference",
352
+ "input": {
353
+ "sessions": [],
354
+ "commits": [
355
+ {
356
+ "hash": "commit-a",
357
+ "subject": "work",
358
+ "hasSession": true,
359
+ "sessionIds": [
360
+ "session-missing"
361
+ ]
362
+ }
363
+ ]
364
+ },
365
+ "expected": {
366
+ "errorContains": "references unknown sessionId"
367
+ },
368
+ "classification": "must-fail",
369
+ "provenance": {
370
+ "source": "requirement",
371
+ "ref": "commit bindings reference normalized session identities"
372
+ },
373
+ "mutation": {
374
+ "description": "points a commit binding at a session absent from the session catalog"
375
+ }
376
+ },
377
+ {
378
+ "family": "unique-session-identity",
379
+ "name": "duplicate_session_identity",
380
+ "input": {
381
+ "sessions": [
382
+ {
383
+ "sessionId": "session-a",
384
+ "title": "first",
385
+ "harness": "claude-code",
386
+ "hasCommitBinding": false
387
+ },
388
+ {
389
+ "sessionId": "session-a",
390
+ "title": "duplicate",
391
+ "harness": "claude-code",
392
+ "hasCommitBinding": false
393
+ }
394
+ ],
395
+ "commits": []
396
+ },
397
+ "expected": {
398
+ "errorContains": "duplicate timeline session"
399
+ },
400
+ "classification": "must-fail",
401
+ "provenance": {
402
+ "source": "boundary",
403
+ "ref": "normalized session identity uniqueness"
404
+ },
405
+ "mutation": {
406
+ "description": "repeats one session identity in the session catalog"
407
+ }
408
+ },
409
+ {
410
+ "family": "unique-commit-binding",
411
+ "name": "duplicate_binding",
412
+ "input": {
413
+ "sessions": [
414
+ {
415
+ "sessionId": "session-a",
416
+ "title": "work",
417
+ "harness": "claude-code",
418
+ "hasCommitBinding": true
419
+ }
420
+ ],
421
+ "commits": [
422
+ {
423
+ "hash": "commit-a",
424
+ "subject": "work",
425
+ "hasSession": true,
426
+ "sessionIds": [
427
+ "session-a",
428
+ "session-a"
429
+ ]
430
+ }
431
+ ]
432
+ },
433
+ "expected": {
434
+ "errorContains": "repeats sessionId"
435
+ },
436
+ "classification": "must-fail",
437
+ "provenance": {
438
+ "source": "boundary",
439
+ "ref": "commit binding set uniqueness"
440
+ },
441
+ "mutation": {
442
+ "description": "repeats one session identity in a commit binding list"
443
+ }
444
+ },
445
+ {
446
+ "family": "non-null-commit-bindings",
447
+ "name": "null_commit_bindings",
448
+ "input": {
449
+ "sessions": [],
450
+ "commits": [
451
+ {
452
+ "hash": "commit-a",
453
+ "subject": "work",
454
+ "hasSession": false,
455
+ "sessionIds": null
456
+ }
457
+ ]
458
+ },
459
+ "expected": {
460
+ "errorContains": "null sessionIds"
461
+ },
462
+ "classification": "must-fail",
463
+ "provenance": {
464
+ "source": "boundary",
465
+ "ref": "non-null commit binding arrays"
466
+ },
467
+ "mutation": {
468
+ "description": "omits the required sessionIds array from a commit"
469
+ }
470
+ },
471
+ {
472
+ "family": "known-harness",
473
+ "name": "unknown_timeline_harness",
474
+ "input": {
475
+ "sessions": [
476
+ {
477
+ "sessionId": "session-a",
478
+ "title": "work",
479
+ "harness": "unknown-harness",
480
+ "hasCommitBinding": false
481
+ }
482
+ ],
483
+ "commits": []
484
+ },
485
+ "expected": {
486
+ "errorContains": "unknown harness"
487
+ },
488
+ "classification": "must-fail",
489
+ "provenance": {
490
+ "source": "boundary",
491
+ "ref": "timeline sessions use the canonical harness closed set"
492
+ },
493
+ "mutation": {
494
+ "description": "replaces a known harness with an unknown harness token"
495
+ }
496
+ },
497
+ {
498
+ "family": "canonical-binding-order",
499
+ "name": "noncanonical_binding_order",
500
+ "input": {
501
+ "sessions": [
502
+ {
503
+ "sessionId": "session-a",
504
+ "title": "first",
505
+ "harness": "claude-code",
506
+ "startMs": 2000,
507
+ "hasCommitBinding": true
508
+ },
509
+ {
510
+ "sessionId": "session-b",
511
+ "title": "second",
512
+ "harness": "codex",
513
+ "startMs": 1000,
514
+ "hasCommitBinding": true
515
+ }
516
+ ],
517
+ "commits": [
518
+ {
519
+ "hash": "commit-a",
520
+ "subject": "work",
521
+ "hasSession": true,
522
+ "sessionIds": [
523
+ "session-b",
524
+ "session-a"
525
+ ]
526
+ }
527
+ ]
528
+ },
529
+ "expected": {
530
+ "errorContains": "noncanonical sessionIds order"
531
+ },
532
+ "classification": "must-fail",
533
+ "provenance": {
534
+ "source": "boundary",
535
+ "ref": "commit bindings follow normalized timeline session rank"
536
+ },
537
+ "mutation": {
538
+ "description": "reverses two valid bindings relative to the canonical session order"
539
+ }
540
+ }
541
+ ]
542
+ };
@@ -0,0 +1,4 @@
1
+ export declare const VillageAPIVersion: "0.6.0";
2
+ export declare const PeasantLocalAPIVersion: "0.4.0";
3
+ export declare const TypesVersion: "0.3.0";
4
+ export declare const MetadataSchemaVersion: 9;
@@ -0,0 +1,5 @@
1
+ // Code generated from the canonical Go/OpenAPI contract. DO NOT EDIT.
2
+ export const VillageAPIVersion = "0.6.0";
3
+ export const PeasantLocalAPIVersion = "0.4.0";
4
+ export const TypesVersion = "0.3.0";
5
+ export const MetadataSchemaVersion = 9;