vdelta 0.1.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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/dist/adapters/vitest/capture.d.ts +50 -0
  4. package/dist/adapters/vitest/capture.js +7 -0
  5. package/dist/adapters/vitest/capture.js.map +1 -0
  6. package/dist/adapters/vitest/recorder.d.ts +31 -0
  7. package/dist/adapters/vitest/recorder.js +214 -0
  8. package/dist/adapters/vitest/recorder.js.map +1 -0
  9. package/dist/adapters/vitest/reporter.d.ts +15 -0
  10. package/dist/adapters/vitest/reporter.js +97 -0
  11. package/dist/adapters/vitest/reporter.js.map +1 -0
  12. package/dist/canonical.d.ts +9 -0
  13. package/dist/canonical.js +45 -0
  14. package/dist/canonical.js.map +1 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +264 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/compare.d.ts +37 -0
  19. package/dist/compare.js +476 -0
  20. package/dist/compare.js.map +1 -0
  21. package/dist/digest.d.ts +5 -0
  22. package/dist/digest.js +14 -0
  23. package/dist/digest.js.map +1 -0
  24. package/dist/gate.d.ts +11 -0
  25. package/dist/gate.js +135 -0
  26. package/dist/gate.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.js +16 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/redact.d.ts +10 -0
  31. package/dist/redact.js +49 -0
  32. package/dist/redact.js.map +1 -0
  33. package/dist/render.d.ts +6 -0
  34. package/dist/render.js +53 -0
  35. package/dist/render.js.map +1 -0
  36. package/dist/run.d.ts +19 -0
  37. package/dist/run.js +158 -0
  38. package/dist/run.js.map +1 -0
  39. package/dist/schema.d.ts +236 -0
  40. package/dist/schema.js +395 -0
  41. package/dist/schema.js.map +1 -0
  42. package/dist/store.d.ts +38 -0
  43. package/dist/store.js +161 -0
  44. package/dist/store.js.map +1 -0
  45. package/dist/tree-digest.d.ts +11 -0
  46. package/dist/tree-digest.js +103 -0
  47. package/dist/tree-digest.js.map +1 -0
  48. package/package.json +53 -0
  49. package/spec/veridelta-1.md +1093 -0
@@ -0,0 +1,476 @@
1
+ /**
2
+ * Comparator (spec §5–§9): baseline selection, comparability judgment,
3
+ * the three delta axes, and comparison-report construction. Deterministic:
4
+ * no timestamps, stable sort orders, recency = store insertion order.
5
+ */
6
+ import { DEGRADED_CAPABILITIES, COMPOSITION_ID } from './adapters/vitest/recorder.js';
7
+ import { StoreCorruptError } from './store.js';
8
+ import { SCHEMA_VERSION, isRed, } from './schema.js';
9
+ export class CompareOperationError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = 'CompareOperationError';
13
+ }
14
+ }
15
+ /** Stream key (§5.1): repo + worktree + branch + cwd + command + selector + instrument. */
16
+ export function streamKey(r) {
17
+ return JSON.stringify([
18
+ r.repo.identity,
19
+ r.repo.worktree,
20
+ r.repo.branch,
21
+ r.repo.cwd,
22
+ r.invocation.command,
23
+ r.invocation.selector,
24
+ r.instrument.adapter,
25
+ r.instrument.adapter_version,
26
+ r.instrument.config_digest,
27
+ ]);
28
+ }
29
+ function sameInstrument(a, b) {
30
+ return (a.instrument.adapter === b.instrument.adapter &&
31
+ a.instrument.adapter_version === b.instrument.adapter_version &&
32
+ a.instrument.composition_id === b.instrument.composition_id &&
33
+ a.instrument.config_digest === b.instrument.config_digest);
34
+ }
35
+ function sameSelector(a, b) {
36
+ return JSON.stringify(a.invocation.selector) === JSON.stringify(b.invocation.selector);
37
+ }
38
+ function sameStreamScope(a, b) {
39
+ return (a.repo.identity === b.repo.identity &&
40
+ a.repo.worktree === b.repo.worktree &&
41
+ a.repo.branch === b.repo.branch &&
42
+ a.repo.cwd === b.repo.cwd &&
43
+ JSON.stringify(a.invocation.command) === JSON.stringify(b.invocation.command));
44
+ }
45
+ /**
46
+ * Resolve the baseline per §5.2. Selection is content-addressed and
47
+ * explainable; recency is index insertion order, never timestamps (§7.8).
48
+ */
49
+ export function resolveBaseline(store, current, currentId, spec) {
50
+ switch (spec.mode) {
51
+ case 'explicit-run-id': {
52
+ const resolved = store.resolveRunId(spec.runId);
53
+ if (resolved === null) {
54
+ throw new CompareOperationError(`unknown run id: ${spec.runId}`);
55
+ }
56
+ return {
57
+ record: store.readRun(resolved),
58
+ runId: resolved,
59
+ mode: 'explicit-run-id',
60
+ selectionReason: 'caller-specified-run-id',
61
+ };
62
+ }
63
+ case 'previous-comparable': {
64
+ const ids = store.listRunIds();
65
+ const key = streamKey(current);
66
+ for (let i = ids.length - 1; i >= 0; i--) {
67
+ const id = ids[i];
68
+ if (id === currentId)
69
+ continue;
70
+ const record = store.readRun(id);
71
+ if (record.completeness.status !== 'complete')
72
+ continue;
73
+ if (streamKey(record) !== key)
74
+ continue;
75
+ return {
76
+ record,
77
+ runId: id,
78
+ mode: 'previous-comparable',
79
+ selectionReason: 'same-worktree-command-config-scope',
80
+ };
81
+ }
82
+ return {
83
+ record: null,
84
+ runId: null,
85
+ mode: 'previous-comparable',
86
+ selectionReason: 'no-complete-run-in-stream',
87
+ failure: { reason: 'baseline-missing', kind: 'determined' },
88
+ };
89
+ }
90
+ case 'git-ref': {
91
+ const ids = store.listRunIds();
92
+ for (let i = ids.length - 1; i >= 0; i--) {
93
+ const id = ids[i];
94
+ const record = store.readRun(id);
95
+ if (record.completeness.status !== 'complete')
96
+ continue;
97
+ if (record.provenance.head !== spec.commit)
98
+ continue;
99
+ if (record.provenance.tree_digest !== spec.tree)
100
+ continue;
101
+ return {
102
+ record,
103
+ runId: id,
104
+ mode: 'git-ref',
105
+ selectionReason: `complete-run-recorded-at-${spec.ref}`,
106
+ };
107
+ }
108
+ return {
109
+ record: null,
110
+ runId: null,
111
+ mode: 'git-ref',
112
+ selectionReason: `no-complete-run-recorded-at-${spec.ref}`,
113
+ failure: { reason: 'baseline-missing', kind: 'determined' },
114
+ };
115
+ }
116
+ }
117
+ }
118
+ function judgeComparability(baseline, current) {
119
+ if (baseline === null) {
120
+ return { comparability: 'none', events: [] };
121
+ }
122
+ if (!sameInstrument(baseline, current)) {
123
+ const events = [
124
+ {
125
+ kind: 'runner-config-changed',
126
+ from: baseline.instrument.config_digest,
127
+ to: current.instrument.config_digest,
128
+ },
129
+ ];
130
+ if (baseline.instrument.adapter !== current.instrument.adapter ||
131
+ baseline.instrument.adapter_version !== current.instrument.adapter_version ||
132
+ baseline.instrument.composition_id !== current.instrument.composition_id) {
133
+ events.push({
134
+ kind: 'adapter-capability-changed',
135
+ from: `${baseline.instrument.adapter}@${baseline.instrument.adapter_version}/${baseline.instrument.composition_id}`,
136
+ to: `${current.instrument.adapter}@${current.instrument.adapter_version}/${current.instrument.composition_id}`,
137
+ });
138
+ }
139
+ events.push(...configSourceEvents(baseline, current));
140
+ return {
141
+ comparability: 'none',
142
+ detail: { reason: 'instrument-changed', kind: 'determined' },
143
+ events,
144
+ };
145
+ }
146
+ if (!sameSelector(baseline, current)) {
147
+ // No selector-relation capability in the MVP adapter: containment is
148
+ // unproven, and unproven never means contained (§6.4).
149
+ return {
150
+ comparability: 'none',
151
+ detail: { reason: 'selector-relation-unknown', kind: 'determined' },
152
+ events: [
153
+ {
154
+ kind: 'selector-changed',
155
+ from: baseline.invocation.selector.join(' '),
156
+ to: current.invocation.selector.join(' '),
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ if (!sameStreamScope(baseline, current)) {
162
+ return {
163
+ comparability: 'none',
164
+ detail: { reason: 'stream-mismatch', kind: 'determined' },
165
+ events: [],
166
+ };
167
+ }
168
+ if (baseline.completeness.status !== 'complete' ||
169
+ current.completeness.status !== 'complete') {
170
+ return { comparability: 'partial', events: [] };
171
+ }
172
+ const bInventory = baseline.observations.map((o) => o.test_id).join('\n');
173
+ const cInventory = current.observations.map((o) => o.test_id).join('\n');
174
+ return { comparability: bInventory === cInventory ? 'exact' : 'scope_changed', events: [] };
175
+ }
176
+ function configSourceEvents(baseline, current) {
177
+ const events = [];
178
+ const paths = new Set([
179
+ ...Object.keys(baseline.surface.config_sources),
180
+ ...Object.keys(current.surface.config_sources),
181
+ ]);
182
+ for (const path of [...paths].sort()) {
183
+ if (baseline.surface.config_sources[path] !== current.surface.config_sources[path]) {
184
+ events.push({ kind: 'config-source-changed', path });
185
+ }
186
+ }
187
+ return events;
188
+ }
189
+ function emptyTransitions() {
190
+ return {
191
+ new_fail: [],
192
+ still_fail_unchanged: [],
193
+ updated_fail: [],
194
+ repaired_same_surface: [],
195
+ repaired_with_test_change: [],
196
+ fail_to_skip: [],
197
+ fail_to_xfail: [],
198
+ removed: [],
199
+ not_observed: [],
200
+ };
201
+ }
202
+ function coverage(record) {
203
+ const declared = record.observations.length;
204
+ const observed = record.observations.filter((o) => o.verdict !== 'not_run').length;
205
+ return `${observed}/${declared}`;
206
+ }
207
+ function redIds(record) {
208
+ return record.observations.filter((o) => isRed(o.verdict)).map((o) => o.test_id);
209
+ }
210
+ function shortId(runId) {
211
+ return runId.slice(0, 12);
212
+ }
213
+ function showAnchor(runId, testId) {
214
+ return `vdelta show ${shortId(runId)} --test '${testId}'`;
215
+ }
216
+ /**
217
+ * Build the full comparison report for a current run against a baseline spec.
218
+ * Store-level corruption during baseline resolution degrades to a
219
+ * `store-corrupt`/`failed` abstention (fail-closed comparison, §6.3) — the
220
+ * report is still produced.
221
+ */
222
+ export function buildComparisonReport(store, currentId, spec) {
223
+ const current = store.readRun(currentId);
224
+ let resolution;
225
+ try {
226
+ resolution = resolveBaseline(store, current, currentId, spec);
227
+ }
228
+ catch (err) {
229
+ if (err instanceof StoreCorruptError) {
230
+ return abstentionReport(current, currentId, { reason: 'store-corrupt', kind: 'failed' }, []);
231
+ }
232
+ throw err;
233
+ }
234
+ const baseline = resolution.record;
235
+ const judged = judgeComparability(baseline, current);
236
+ if (judged.comparability === 'none') {
237
+ const detail = judged.detail ?? resolution.failure ?? {
238
+ reason: 'baseline-missing',
239
+ kind: 'determined',
240
+ };
241
+ return abstentionReport(current, currentId, detail, judged.events, baseline, resolution);
242
+ }
243
+ return claimsReport(baseline, resolution, current, currentId, judged.comparability);
244
+ }
245
+ /** comparability `none`: structured current-run results only (contract §5.7, finding F-1). */
246
+ function abstentionReport(current, currentId, detail, events, baseline, resolution) {
247
+ const red = redIds(current);
248
+ const anchors = {};
249
+ for (const id of red)
250
+ anchors[`red:${id}`] = showAnchor(currentId, id);
251
+ anchors.raw = `vdelta show ${shortId(currentId)} --raw`;
252
+ const report = {
253
+ schema_version: SCHEMA_VERSION,
254
+ outcome_verdict: 'inconclusive',
255
+ comparability: 'none',
256
+ comparability_detail: detail,
257
+ baseline: baseline && resolution && resolution.runId !== null
258
+ ? {
259
+ run_id: resolution.runId,
260
+ mode: resolution.mode,
261
+ selection_reason: resolution.selectionReason,
262
+ }
263
+ : null,
264
+ current: {
265
+ run_id: currentId,
266
+ complete: current.completeness.status === 'complete',
267
+ child_exit_code: current.completeness.child_exit_code,
268
+ red,
269
+ },
270
+ observation_coverage: { current: coverage(current) },
271
+ failure_evidence: {
272
+ composition_id: COMPOSITION_ID,
273
+ degraded_capabilities: [...DEGRADED_CAPABILITIES],
274
+ },
275
+ trust: { record_integrity: 'advisory' },
276
+ anchors,
277
+ };
278
+ if (events.length > 0) {
279
+ report.verification_surface = { status: 'changed', events: sortEvents(events) };
280
+ }
281
+ return report;
282
+ }
283
+ function sortEvents(events) {
284
+ return [...events].sort((a, b) => {
285
+ const ka = `${a.kind}\n${a.test_id ?? ''}\n${a.path ?? ''}`;
286
+ const kb = `${b.kind}\n${b.test_id ?? ''}\n${b.path ?? ''}`;
287
+ return ka < kb ? -1 : ka > kb ? 1 : 0;
288
+ });
289
+ }
290
+ function claimsReport(baseline, resolution, current, currentId, comparability) {
291
+ const partial = comparability === 'partial';
292
+ const bByid = new Map(baseline.observations.map((o) => [o.test_id, o]));
293
+ const cById = new Map(current.observations.map((o) => [o.test_id, o]));
294
+ const allIds = [...new Set([...bByid.keys(), ...cById.keys()])].sort();
295
+ const transitions = emptyTransitions();
296
+ const events = [];
297
+ const contextChanged = new Set();
298
+ const testSourceChanged = (rel) => baseline.surface.test_sources[rel] !== current.surface.test_sources[rel];
299
+ const anyConfigChanged = configSourceEvents(baseline, current).length > 0;
300
+ for (const id of allIds) {
301
+ const b = bByid.get(id);
302
+ const c = cById.get(id);
303
+ if (b && !c) {
304
+ events.push({ kind: 'test-removed', test_id: id });
305
+ if (!partial && isRed(b.verdict))
306
+ transitions.removed.push(id);
307
+ continue;
308
+ }
309
+ if (!b && c) {
310
+ events.push({ kind: 'test-added', test_id: id });
311
+ if (isRed(c.verdict))
312
+ transitions.new_fail.push(id);
313
+ continue;
314
+ }
315
+ if (!b || !c)
316
+ continue;
317
+ const bRed = isRed(b.verdict);
318
+ const cRed = isRed(c.verdict);
319
+ if (cRed && !bRed) {
320
+ transitions.new_fail.push(id);
321
+ }
322
+ else if (cRed && bRed) {
323
+ const bDigest = b.finding?.evidence_digest;
324
+ const cDigest = c.finding?.evidence_digest;
325
+ if (bDigest === cDigest) {
326
+ if (!partial) {
327
+ const entry = {
328
+ test_id: id,
329
+ degraded_capabilities: [...DEGRADED_CAPABILITIES],
330
+ };
331
+ if (b.finding !== undefined &&
332
+ c.finding !== undefined &&
333
+ b.finding.context_digest !== c.finding.context_digest) {
334
+ entry.context_changed = true;
335
+ contextChanged.add(id);
336
+ }
337
+ transitions.still_fail_unchanged.push(entry);
338
+ }
339
+ // Under partial, a red-in-both same-evidence test cannot be claimed
340
+ // unchanged (§6.1); it is disclosed via current.red (contract §5.7).
341
+ }
342
+ else {
343
+ const entry = {
344
+ test_id: id,
345
+ evidence_digest_before: bDigest ?? '',
346
+ evidence_digest_after: cDigest ?? '',
347
+ failure_mode_changed: b.finding?.structural_fingerprint !== c.finding?.structural_fingerprint,
348
+ degraded_capabilities: [...DEGRADED_CAPABILITIES],
349
+ };
350
+ transitions.updated_fail.push(entry);
351
+ }
352
+ }
353
+ else if (bRed && !cRed) {
354
+ if (c.verdict === 'skip') {
355
+ events.push({ kind: 'fail-to-skip', test_id: id });
356
+ if (!partial)
357
+ transitions.fail_to_skip.push(id);
358
+ }
359
+ else if (c.verdict === 'xfail') {
360
+ events.push({ kind: 'fail-to-xfail', test_id: id });
361
+ if (!partial)
362
+ transitions.fail_to_xfail.push(id);
363
+ }
364
+ else if (c.verdict === 'not_run') {
365
+ transitions.not_observed.push(id);
366
+ }
367
+ else if (c.verdict === 'pass' || c.verdict === 'xpass') {
368
+ if (!partial) {
369
+ const rel = relOf(id);
370
+ if (!testSourceChanged(rel) && !anyConfigChanged) {
371
+ transitions.repaired_same_surface.push(id);
372
+ }
373
+ else {
374
+ transitions.repaired_with_test_change.push(id);
375
+ }
376
+ }
377
+ }
378
+ }
379
+ }
380
+ // Source/config drift events (observed facts on every comparability level).
381
+ const changedModules = new Set([...new Set([...allIds.map(relOf)])].filter((rel) => testSourceChanged(rel)));
382
+ for (const id of allIds) {
383
+ if (!bByid.has(id) || !cById.has(id))
384
+ continue;
385
+ if (changedModules.has(relOf(id))) {
386
+ events.push({ kind: 'test-source-changed', test_id: id });
387
+ }
388
+ }
389
+ events.push(...configSourceEvents(baseline, current));
390
+ const lostObservation = transitions.not_observed.length > 0 || (partial && hasLostObservation(baseline, current));
391
+ const reduced = transitions.fail_to_skip.length > 0 ||
392
+ transitions.fail_to_xfail.length > 0 ||
393
+ events.some((e) => e.kind === 'test-removed' || e.kind === 'fail-to-skip' || e.kind === 'fail-to-xfail') ||
394
+ lostObservation;
395
+ const status = reduced ? 'reduced' : events.length > 0 ? 'changed' : 'intact';
396
+ const outcome = deriveOutcome(transitions, partial);
397
+ const anchors = {};
398
+ for (const id of transitions.new_fail)
399
+ anchors[`new_fail:${id}`] = showAnchor(currentId, id);
400
+ for (const e of transitions.still_fail_unchanged) {
401
+ const id = typeof e === 'string' ? e : e.test_id;
402
+ anchors[`still_fail_unchanged:${id}`] = showAnchor(currentId, id);
403
+ }
404
+ for (const e of transitions.updated_fail) {
405
+ anchors[`updated_fail:${e.test_id}`] = showAnchor(currentId, e.test_id);
406
+ }
407
+ const currentRed = partial ? redIds(current) : undefined;
408
+ if (currentRed) {
409
+ for (const id of currentRed)
410
+ anchors[`red:${id}`] = showAnchor(currentId, id);
411
+ }
412
+ anchors.raw = `vdelta show ${shortId(currentId)} --raw`;
413
+ sortTransitions(transitions);
414
+ return {
415
+ schema_version: SCHEMA_VERSION,
416
+ outcome_verdict: outcome,
417
+ comparability,
418
+ baseline: {
419
+ run_id: resolution.runId,
420
+ mode: resolution.mode,
421
+ selection_reason: resolution.selectionReason,
422
+ },
423
+ current: {
424
+ run_id: currentId,
425
+ complete: current.completeness.status === 'complete',
426
+ child_exit_code: current.completeness.child_exit_code,
427
+ ...(currentRed ? { red: currentRed } : {}),
428
+ },
429
+ observation_coverage: {
430
+ baseline: coverage(baseline),
431
+ current: coverage(current),
432
+ },
433
+ verification_surface: { status, events: sortEvents(events) },
434
+ transitions,
435
+ failure_evidence: {
436
+ composition_id: COMPOSITION_ID,
437
+ degraded_capabilities: [...DEGRADED_CAPABILITIES],
438
+ },
439
+ trust: { record_integrity: 'advisory' },
440
+ anchors,
441
+ };
442
+ }
443
+ function hasLostObservation(baseline, current) {
444
+ const observedNow = new Set(current.observations.filter((o) => o.verdict !== 'not_run').map((o) => o.test_id));
445
+ return baseline.observations.some((o) => o.verdict !== 'not_run' && !observedNow.has(o.test_id));
446
+ }
447
+ function relOf(testId) {
448
+ const sep = testId.indexOf('::');
449
+ return sep === -1 ? testId : testId.slice(0, sep);
450
+ }
451
+ function deriveOutcome(t, partial) {
452
+ if (t.new_fail.length > 0 || t.updated_fail.length > 0)
453
+ return 'regressed';
454
+ if (partial)
455
+ return 'inconclusive';
456
+ if (t.repaired_same_surface.length > 0 || t.repaired_with_test_change.length > 0) {
457
+ return 'improved';
458
+ }
459
+ return 'unchanged';
460
+ }
461
+ function sortTransitions(t) {
462
+ t.new_fail.sort();
463
+ t.repaired_same_surface.sort();
464
+ t.repaired_with_test_change.sort();
465
+ t.fail_to_skip.sort();
466
+ t.fail_to_xfail.sort();
467
+ t.removed.sort();
468
+ t.not_observed.sort();
469
+ t.still_fail_unchanged.sort((a, b) => {
470
+ const ka = typeof a === 'string' ? a : a.test_id;
471
+ const kb = typeof b === 'string' ? b : b.test_id;
472
+ return ka < kb ? -1 : ka > kb ? 1 : 0;
473
+ });
474
+ t.updated_fail.sort((a, b) => (a.test_id < b.test_id ? -1 : a.test_id > b.test_id ? 1 : 0));
475
+ }
476
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function sha256Hex(input: string | Buffer): string;
2
+ /** Digest rendering per spec §3: `sha256:<64-hex>`. */
3
+ export declare function sha256Digest(input: string | Buffer): string;
4
+ /** Canonical-JSON digest of a structured value. */
5
+ export declare function canonicalDigest(value: unknown): string;
package/dist/digest.js ADDED
@@ -0,0 +1,14 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalJson } from './canonical.js';
3
+ export function sha256Hex(input) {
4
+ return createHash('sha256').update(input).digest('hex');
5
+ }
6
+ /** Digest rendering per spec §3: `sha256:<64-hex>`. */
7
+ export function sha256Digest(input) {
8
+ return `sha256:${sha256Hex(input)}`;
9
+ }
10
+ /** Canonical-JSON digest of a structured value. */
11
+ export function canonicalDigest(value) {
12
+ return sha256Digest(canonicalJson(value));
13
+ }
14
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../src/digest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,KAAsB;IACjD,OAAO,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;AACrC,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3C,CAAC"}
package/dist/gate.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { RunStore } from './store.js';
2
+ import { type ComparisonReport } from './schema.js';
3
+ export declare class GateOperationError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ export interface GateOptions {
7
+ worktree: string;
8
+ ref: string;
9
+ runId?: string;
10
+ }
11
+ export declare function buildGateReport(store: RunStore, opts: GateOptions): Promise<ComparisonReport>;