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,236 @@
1
+ /**
2
+ * veridelta/1 data model: closed enums, report/run-record types, and the
3
+ * consumer-side parsers. Per spec §9.4/§14 an unknown value in any closed
4
+ * enum is a hard error (throw), and unknown fields are rejected — no
5
+ * backward-compatibility scaffolding.
6
+ */
7
+ export declare const SCHEMA_VERSION = "veridelta/1";
8
+ export declare const VERDICTS: readonly ["pass", "fail", "error", "skip", "xfail", "xpass", "not_run"];
9
+ export type Verdict = (typeof VERDICTS)[number];
10
+ export declare const RED_SET: readonly Verdict[];
11
+ export declare const COMPARABILITIES: readonly ["exact", "scope_changed", "subset", "partial", "none"];
12
+ export type Comparability = (typeof COMPARABILITIES)[number];
13
+ export declare const NONE_REASONS: readonly ["baseline-missing", "stream-mismatch", "instrument-changed", "selector-relation-unknown", "store-corrupt", "adapter-crashed", "record-integrity-failed"];
14
+ export type NoneReason = (typeof NONE_REASONS)[number];
15
+ export declare const DETAIL_KINDS: readonly ["determined", "failed"];
16
+ export type DetailKind = (typeof DETAIL_KINDS)[number];
17
+ export declare const OUTCOME_VERDICTS: readonly ["regressed", "improved", "unchanged", "inconclusive"];
18
+ export type OutcomeVerdict = (typeof OUTCOME_VERDICTS)[number];
19
+ export declare const SURFACE_STATUSES: readonly ["intact", "changed", "reduced", "inconclusive"];
20
+ export type SurfaceStatus = (typeof SURFACE_STATUSES)[number];
21
+ export declare const SURFACE_EVENT_KINDS: readonly ["test-added", "test-removed", "test-renamed", "fail-to-skip", "fail-to-xfail", "selector-changed", "runner-config-changed", "adapter-capability-changed", "selector-subset", "test-source-changed", "config-source-changed"];
22
+ export type SurfaceEventKind = (typeof SURFACE_EVENT_KINDS)[number];
23
+ export declare const BASELINE_MODES: readonly ["previous-comparable", "git-ref", "explicit-run-id", "previous-superset"];
24
+ export type BaselineMode = (typeof BASELINE_MODES)[number];
25
+ export declare const COMPLETENESS_STATUSES: readonly ["complete", "partial", "crashed"];
26
+ export type CompletenessStatus = (typeof COMPLETENESS_STATUSES)[number];
27
+ export declare const RECORD_INTEGRITIES: readonly ["advisory", "tamper-evident", "trusted-environment"];
28
+ export type RecordIntegrity = (typeof RECORD_INTEGRITIES)[number];
29
+ export declare const GATE_POLICIES: readonly ["report-only", "advisory", "blocking"];
30
+ export type GatePolicy = (typeof GATE_POLICIES)[number];
31
+ export declare const GATE_VERDICTS: readonly ["pass", "fail", "inconclusive"];
32
+ export type GateVerdict = (typeof GATE_VERDICTS)[number];
33
+ export declare const GATE_TARGET_KINDS: readonly ["head", "merge"];
34
+ export declare const TRANSITION_KEYS: readonly ["new_fail", "still_fail_unchanged", "updated_fail", "repaired_same_surface", "repaired_with_test_change", "fail_to_skip", "fail_to_xfail", "removed", "not_observed", "out_of_scope", "verification_inconclusive"];
35
+ export interface ComparabilityDetail {
36
+ reason: NoneReason;
37
+ kind: DetailKind;
38
+ }
39
+ export interface StillFailEntry {
40
+ test_id: string;
41
+ degraded_capabilities?: string[];
42
+ context_changed?: boolean;
43
+ }
44
+ export interface UpdatedFailEntry {
45
+ test_id: string;
46
+ evidence_digest_before: string;
47
+ evidence_digest_after: string;
48
+ failure_mode_changed: boolean;
49
+ degraded_capabilities?: string[];
50
+ }
51
+ export interface SurfaceEvent {
52
+ kind: SurfaceEventKind;
53
+ test_id?: string;
54
+ path?: string;
55
+ from?: string;
56
+ to?: string;
57
+ }
58
+ export interface Transitions {
59
+ new_fail: string[];
60
+ still_fail_unchanged: (string | StillFailEntry)[];
61
+ updated_fail: UpdatedFailEntry[];
62
+ repaired_same_surface: string[];
63
+ repaired_with_test_change: string[];
64
+ fail_to_skip: string[];
65
+ fail_to_xfail: string[];
66
+ removed: string[];
67
+ not_observed: string[];
68
+ out_of_scope?: string[];
69
+ verification_inconclusive?: string[];
70
+ }
71
+ export interface ComparisonReport {
72
+ schema_version: typeof SCHEMA_VERSION;
73
+ outcome_verdict: OutcomeVerdict;
74
+ comparability: Comparability;
75
+ comparability_detail?: ComparabilityDetail;
76
+ baseline: {
77
+ run_id: string;
78
+ mode: BaselineMode;
79
+ selection_reason: string;
80
+ superset_candidates?: number;
81
+ } | null;
82
+ current: {
83
+ run_id: string;
84
+ complete: boolean;
85
+ child_exit_code: number;
86
+ red?: string[];
87
+ };
88
+ observation_coverage: {
89
+ baseline?: string;
90
+ current: string;
91
+ };
92
+ verification_surface?: {
93
+ status: SurfaceStatus;
94
+ events: SurfaceEvent[];
95
+ };
96
+ transitions?: Transitions;
97
+ failure_evidence: {
98
+ composition_id: string;
99
+ degraded_capabilities: string[];
100
+ };
101
+ trust: {
102
+ record_integrity: RecordIntegrity;
103
+ };
104
+ anchors: Record<string, string>;
105
+ budget_exceeded_for_safety?: boolean;
106
+ masking_applied?: {
107
+ count: number;
108
+ example: string;
109
+ };
110
+ gate?: GateReport;
111
+ }
112
+ export interface GateReport {
113
+ policy: GatePolicy;
114
+ verdict: GateVerdict;
115
+ triggered: string[];
116
+ target: {
117
+ kind: (typeof GATE_TARGET_KINDS)[number];
118
+ head_sha: string;
119
+ base_sha: string;
120
+ merge_sha?: string;
121
+ };
122
+ staleness: {
123
+ run_tree_digest: string;
124
+ target_tree_digest: string;
125
+ match: boolean;
126
+ unverified_submodules: string[];
127
+ };
128
+ record_integrity: RecordIntegrity;
129
+ }
130
+ export interface EvidenceError {
131
+ exception_type: string;
132
+ message: string;
133
+ expected?: string;
134
+ actual?: string;
135
+ operator?: string;
136
+ rel_offsets: number[];
137
+ }
138
+ export interface FailureFinding {
139
+ evidence_digest: string;
140
+ structural_fingerprint: string;
141
+ evidence: {
142
+ errors: EvidenceError[];
143
+ };
144
+ context_digest: string;
145
+ annex: {
146
+ frames: {
147
+ file: string;
148
+ line: number;
149
+ column: number;
150
+ }[];
151
+ console: {
152
+ type: string;
153
+ content: string;
154
+ }[];
155
+ location_line: number | null;
156
+ };
157
+ }
158
+ export interface TestObservation {
159
+ test_id: string;
160
+ verdict: Verdict;
161
+ suppression?: {
162
+ marker: string;
163
+ note?: string;
164
+ };
165
+ source_ref?: {
166
+ file: string;
167
+ line: number;
168
+ };
169
+ finding?: FailureFinding;
170
+ }
171
+ export interface RunRecord {
172
+ schema_version: typeof SCHEMA_VERSION;
173
+ repo: {
174
+ identity: string;
175
+ worktree: string;
176
+ branch: string;
177
+ cwd: string;
178
+ };
179
+ invocation: {
180
+ command: string[];
181
+ selector: string[];
182
+ };
183
+ instrument: {
184
+ adapter: string;
185
+ adapter_version: string;
186
+ composition_id: string;
187
+ config_digest: string;
188
+ };
189
+ environment: {
190
+ runner: string;
191
+ runner_version: string;
192
+ runtime: string;
193
+ os: string;
194
+ env_fingerprint: string;
195
+ };
196
+ provenance: {
197
+ head: string | null;
198
+ dirty_diff_digest: string;
199
+ tree_digest: string;
200
+ };
201
+ surface: {
202
+ inventory_digest: string;
203
+ test_sources: Record<string, string>;
204
+ config_sources: Record<string, string>;
205
+ suppressed: string[];
206
+ };
207
+ completeness: {
208
+ status: CompletenessStatus;
209
+ child_exit_code: number;
210
+ };
211
+ observations: TestObservation[];
212
+ recording: {
213
+ recorder: string;
214
+ recorded_at_ms: number;
215
+ durations_us: Record<string, number>;
216
+ raw_stdout: string;
217
+ raw_stderr: string;
218
+ capture_reason: string;
219
+ unhandled_errors: number;
220
+ };
221
+ }
222
+ export declare class SchemaViolationError extends Error {
223
+ constructor(message: string);
224
+ }
225
+ /**
226
+ * Consumer entry point (§9.4): parse and validate a veridelta/1 comparison
227
+ * (or gate) report. Throws SchemaViolationError on any unknown enum value or
228
+ * unknown field.
229
+ */
230
+ export declare function parseReport(value: unknown): ComparisonReport;
231
+ /**
232
+ * Consumer entry point for stored run records; same hard-error discipline
233
+ * as parseReport.
234
+ */
235
+ export declare function parseRunRecord(value: unknown): RunRecord;
236
+ export declare function isRed(verdict: Verdict): boolean;
package/dist/schema.js ADDED
@@ -0,0 +1,395 @@
1
+ /**
2
+ * veridelta/1 data model: closed enums, report/run-record types, and the
3
+ * consumer-side parsers. Per spec §9.4/§14 an unknown value in any closed
4
+ * enum is a hard error (throw), and unknown fields are rejected — no
5
+ * backward-compatibility scaffolding.
6
+ */
7
+ export const SCHEMA_VERSION = 'veridelta/1';
8
+ export const VERDICTS = ['pass', 'fail', 'error', 'skip', 'xfail', 'xpass', 'not_run'];
9
+ export const RED_SET = ['fail', 'error'];
10
+ export const COMPARABILITIES = ['exact', 'scope_changed', 'subset', 'partial', 'none'];
11
+ export const NONE_REASONS = [
12
+ 'baseline-missing',
13
+ 'stream-mismatch',
14
+ 'instrument-changed',
15
+ 'selector-relation-unknown',
16
+ 'store-corrupt',
17
+ 'adapter-crashed',
18
+ 'record-integrity-failed',
19
+ ];
20
+ export const DETAIL_KINDS = ['determined', 'failed'];
21
+ export const OUTCOME_VERDICTS = ['regressed', 'improved', 'unchanged', 'inconclusive'];
22
+ export const SURFACE_STATUSES = ['intact', 'changed', 'reduced', 'inconclusive'];
23
+ export const SURFACE_EVENT_KINDS = [
24
+ 'test-added',
25
+ 'test-removed',
26
+ 'test-renamed',
27
+ 'fail-to-skip',
28
+ 'fail-to-xfail',
29
+ 'selector-changed',
30
+ 'runner-config-changed',
31
+ 'adapter-capability-changed',
32
+ 'selector-subset',
33
+ 'test-source-changed',
34
+ 'config-source-changed',
35
+ ];
36
+ export const BASELINE_MODES = [
37
+ 'previous-comparable',
38
+ 'git-ref',
39
+ 'explicit-run-id',
40
+ 'previous-superset',
41
+ ];
42
+ export const COMPLETENESS_STATUSES = ['complete', 'partial', 'crashed'];
43
+ export const RECORD_INTEGRITIES = ['advisory', 'tamper-evident', 'trusted-environment'];
44
+ export const GATE_POLICIES = ['report-only', 'advisory', 'blocking'];
45
+ export const GATE_VERDICTS = ['pass', 'fail', 'inconclusive'];
46
+ export const GATE_TARGET_KINDS = ['head', 'merge'];
47
+ export const TRANSITION_KEYS = [
48
+ 'new_fail',
49
+ 'still_fail_unchanged',
50
+ 'updated_fail',
51
+ 'repaired_same_surface',
52
+ 'repaired_with_test_change',
53
+ 'fail_to_skip',
54
+ 'fail_to_xfail',
55
+ 'removed',
56
+ 'not_observed',
57
+ 'out_of_scope',
58
+ 'verification_inconclusive',
59
+ ];
60
+ // ---------------------------------------------------------------------------
61
+ // Consumer-side validation
62
+ export class SchemaViolationError extends Error {
63
+ constructor(message) {
64
+ super(message);
65
+ this.name = 'SchemaViolationError';
66
+ }
67
+ }
68
+ function fail(path, message) {
69
+ throw new SchemaViolationError(`${path}: ${message}`);
70
+ }
71
+ function asObject(v, path) {
72
+ if (v === null || typeof v !== 'object' || Array.isArray(v))
73
+ fail(path, 'expected object');
74
+ return v;
75
+ }
76
+ function checkKeys(o, path, required, optional = []) {
77
+ const allowed = new Set([...required, ...optional]);
78
+ for (const k of Object.keys(o)) {
79
+ if (!allowed.has(k))
80
+ fail(path, `unknown field "${k}" (unknown fields are rejected, §14)`);
81
+ }
82
+ for (const k of required) {
83
+ if (!(k in o))
84
+ fail(path, `missing required field "${k}"`);
85
+ }
86
+ }
87
+ function asString(v, path) {
88
+ if (typeof v !== 'string')
89
+ fail(path, 'expected string');
90
+ return v;
91
+ }
92
+ function asBoolean(v, path) {
93
+ if (typeof v !== 'boolean')
94
+ fail(path, 'expected boolean');
95
+ return v;
96
+ }
97
+ function asInteger(v, path) {
98
+ if (typeof v !== 'number' || !Number.isInteger(v))
99
+ fail(path, 'expected integer');
100
+ return v;
101
+ }
102
+ function asStringArray(v, path) {
103
+ if (!Array.isArray(v))
104
+ fail(path, 'expected array');
105
+ return v.map((e, i) => asString(e, `${path}[${i}]`));
106
+ }
107
+ function asEnum(v, values, path) {
108
+ const s = asString(v, path);
109
+ if (!values.includes(s)) {
110
+ fail(path, `unknown closed-enum value "${s}" (hard error, §9.4)`);
111
+ }
112
+ return s;
113
+ }
114
+ function validateStringMap(v, path) {
115
+ const o = asObject(v, path);
116
+ for (const [k, val] of Object.entries(o))
117
+ asString(val, `${path}.${k}`);
118
+ }
119
+ function validateStillFailEntry(v, path) {
120
+ if (typeof v === 'string')
121
+ return;
122
+ const o = asObject(v, path);
123
+ checkKeys(o, path, ['test_id'], ['degraded_capabilities', 'context_changed']);
124
+ asString(o.test_id, `${path}.test_id`);
125
+ if ('degraded_capabilities' in o)
126
+ asStringArray(o.degraded_capabilities, `${path}.degraded_capabilities`);
127
+ if ('context_changed' in o)
128
+ asBoolean(o.context_changed, `${path}.context_changed`);
129
+ }
130
+ function validateUpdatedFailEntry(v, path) {
131
+ const o = asObject(v, path);
132
+ checkKeys(o, path, ['test_id', 'evidence_digest_before', 'evidence_digest_after', 'failure_mode_changed'], ['degraded_capabilities']);
133
+ asString(o.test_id, `${path}.test_id`);
134
+ asString(o.evidence_digest_before, `${path}.evidence_digest_before`);
135
+ asString(o.evidence_digest_after, `${path}.evidence_digest_after`);
136
+ asBoolean(o.failure_mode_changed, `${path}.failure_mode_changed`);
137
+ if ('degraded_capabilities' in o)
138
+ asStringArray(o.degraded_capabilities, `${path}.degraded_capabilities`);
139
+ }
140
+ function validateTransitions(v, path) {
141
+ const o = asObject(v, path);
142
+ checkKeys(o, path, [
143
+ 'new_fail',
144
+ 'still_fail_unchanged',
145
+ 'updated_fail',
146
+ 'repaired_same_surface',
147
+ 'repaired_with_test_change',
148
+ 'fail_to_skip',
149
+ 'fail_to_xfail',
150
+ 'removed',
151
+ 'not_observed',
152
+ ], ['out_of_scope', 'verification_inconclusive']);
153
+ for (const key of TRANSITION_KEYS) {
154
+ if (!(key in o))
155
+ continue;
156
+ const arr = o[key];
157
+ if (!Array.isArray(arr))
158
+ fail(`${path}.${key}`, 'expected array');
159
+ if (key === 'still_fail_unchanged') {
160
+ arr.forEach((e, i) => validateStillFailEntry(e, `${path}.${key}[${i}]`));
161
+ }
162
+ else if (key === 'updated_fail') {
163
+ arr.forEach((e, i) => validateUpdatedFailEntry(e, `${path}.${key}[${i}]`));
164
+ }
165
+ else {
166
+ arr.forEach((e, i) => asString(e, `${path}.${key}[${i}]`));
167
+ }
168
+ }
169
+ }
170
+ function validateSurfaceEvent(v, path) {
171
+ const o = asObject(v, path);
172
+ checkKeys(o, path, ['kind'], ['test_id', 'path', 'from', 'to']);
173
+ asEnum(o.kind, SURFACE_EVENT_KINDS, `${path}.kind`);
174
+ for (const k of ['test_id', 'path', 'from', 'to']) {
175
+ if (k in o)
176
+ asString(o[k], `${path}.${k}`);
177
+ }
178
+ }
179
+ function validateGate(v, path) {
180
+ const o = asObject(v, path);
181
+ checkKeys(o, path, ['policy', 'verdict', 'triggered', 'target', 'staleness', 'record_integrity']);
182
+ asEnum(o.policy, GATE_POLICIES, `${path}.policy`);
183
+ asEnum(o.verdict, GATE_VERDICTS, `${path}.verdict`);
184
+ asStringArray(o.triggered, `${path}.triggered`);
185
+ const target = asObject(o.target, `${path}.target`);
186
+ checkKeys(target, `${path}.target`, ['kind', 'head_sha', 'base_sha'], ['merge_sha']);
187
+ asEnum(target.kind, GATE_TARGET_KINDS, `${path}.target.kind`);
188
+ asString(target.head_sha, `${path}.target.head_sha`);
189
+ asString(target.base_sha, `${path}.target.base_sha`);
190
+ const staleness = asObject(o.staleness, `${path}.staleness`);
191
+ checkKeys(staleness, `${path}.staleness`, [
192
+ 'run_tree_digest',
193
+ 'target_tree_digest',
194
+ 'match',
195
+ 'unverified_submodules',
196
+ ]);
197
+ asString(staleness.run_tree_digest, `${path}.staleness.run_tree_digest`);
198
+ asString(staleness.target_tree_digest, `${path}.staleness.target_tree_digest`);
199
+ asBoolean(staleness.match, `${path}.staleness.match`);
200
+ asStringArray(staleness.unverified_submodules, `${path}.staleness.unverified_submodules`);
201
+ asEnum(o.record_integrity, RECORD_INTEGRITIES, `${path}.record_integrity`);
202
+ }
203
+ /**
204
+ * Consumer entry point (§9.4): parse and validate a veridelta/1 comparison
205
+ * (or gate) report. Throws SchemaViolationError on any unknown enum value or
206
+ * unknown field.
207
+ */
208
+ export function parseReport(value) {
209
+ const o = asObject(value, 'report');
210
+ checkKeys(o, 'report', [
211
+ 'schema_version',
212
+ 'outcome_verdict',
213
+ 'comparability',
214
+ 'baseline',
215
+ 'current',
216
+ 'observation_coverage',
217
+ 'failure_evidence',
218
+ 'trust',
219
+ 'anchors',
220
+ ], [
221
+ 'comparability_detail',
222
+ 'verification_surface',
223
+ 'transitions',
224
+ 'budget_exceeded_for_safety',
225
+ 'masking_applied',
226
+ 'gate',
227
+ ]);
228
+ if (o.schema_version !== SCHEMA_VERSION) {
229
+ fail('report.schema_version', `expected "${SCHEMA_VERSION}"`);
230
+ }
231
+ asEnum(o.outcome_verdict, OUTCOME_VERDICTS, 'report.outcome_verdict');
232
+ const comparability = asEnum(o.comparability, COMPARABILITIES, 'report.comparability');
233
+ if (o.baseline !== null) {
234
+ const b = asObject(o.baseline, 'report.baseline');
235
+ checkKeys(b, 'report.baseline', ['run_id', 'mode', 'selection_reason'], ['superset_candidates']);
236
+ asString(b.run_id, 'report.baseline.run_id');
237
+ asEnum(b.mode, BASELINE_MODES, 'report.baseline.mode');
238
+ asString(b.selection_reason, 'report.baseline.selection_reason');
239
+ if ('superset_candidates' in b)
240
+ asInteger(b.superset_candidates, 'report.baseline.superset_candidates');
241
+ }
242
+ const cur = asObject(o.current, 'report.current');
243
+ checkKeys(cur, 'report.current', ['run_id', 'complete', 'child_exit_code'], ['red']);
244
+ asString(cur.run_id, 'report.current.run_id');
245
+ asBoolean(cur.complete, 'report.current.complete');
246
+ asInteger(cur.child_exit_code, 'report.current.child_exit_code');
247
+ if ('red' in cur)
248
+ asStringArray(cur.red, 'report.current.red');
249
+ const cov = asObject(o.observation_coverage, 'report.observation_coverage');
250
+ checkKeys(cov, 'report.observation_coverage', ['current'], ['baseline']);
251
+ asString(cov.current, 'report.observation_coverage.current');
252
+ if ('baseline' in cov)
253
+ asString(cov.baseline, 'report.observation_coverage.baseline');
254
+ if ('comparability_detail' in o) {
255
+ const d = asObject(o.comparability_detail, 'report.comparability_detail');
256
+ checkKeys(d, 'report.comparability_detail', ['reason', 'kind']);
257
+ asEnum(d.reason, NONE_REASONS, 'report.comparability_detail.reason');
258
+ asEnum(d.kind, DETAIL_KINDS, 'report.comparability_detail.kind');
259
+ }
260
+ else if (comparability === 'none') {
261
+ fail('report.comparability_detail', 'required when comparability is "none" (§6.3)');
262
+ }
263
+ if ('verification_surface' in o) {
264
+ const s = asObject(o.verification_surface, 'report.verification_surface');
265
+ checkKeys(s, 'report.verification_surface', ['status', 'events']);
266
+ asEnum(s.status, SURFACE_STATUSES, 'report.verification_surface.status');
267
+ if (!Array.isArray(s.events))
268
+ fail('report.verification_surface.events', 'expected array');
269
+ s.events.forEach((e, i) => validateSurfaceEvent(e, `report.verification_surface.events[${i}]`));
270
+ }
271
+ if ('transitions' in o)
272
+ validateTransitions(o.transitions, 'report.transitions');
273
+ const fe = asObject(o.failure_evidence, 'report.failure_evidence');
274
+ checkKeys(fe, 'report.failure_evidence', ['composition_id', 'degraded_capabilities']);
275
+ asString(fe.composition_id, 'report.failure_evidence.composition_id');
276
+ asStringArray(fe.degraded_capabilities, 'report.failure_evidence.degraded_capabilities');
277
+ const trust = asObject(o.trust, 'report.trust');
278
+ checkKeys(trust, 'report.trust', ['record_integrity']);
279
+ asEnum(trust.record_integrity, RECORD_INTEGRITIES, 'report.trust.record_integrity');
280
+ validateStringMap(o.anchors, 'report.anchors');
281
+ if ('budget_exceeded_for_safety' in o)
282
+ asBoolean(o.budget_exceeded_for_safety, 'report.budget_exceeded_for_safety');
283
+ if ('masking_applied' in o) {
284
+ const m = asObject(o.masking_applied, 'report.masking_applied');
285
+ checkKeys(m, 'report.masking_applied', ['count', 'example']);
286
+ asInteger(m.count, 'report.masking_applied.count');
287
+ asString(m.example, 'report.masking_applied.example');
288
+ }
289
+ if ('gate' in o)
290
+ validateGate(o.gate, 'report.gate');
291
+ return o;
292
+ }
293
+ function validateFinding(v, path) {
294
+ const o = asObject(v, path);
295
+ checkKeys(o, path, ['evidence_digest', 'structural_fingerprint', 'evidence', 'context_digest', 'annex']);
296
+ asString(o.evidence_digest, `${path}.evidence_digest`);
297
+ asString(o.structural_fingerprint, `${path}.structural_fingerprint`);
298
+ const ev = asObject(o.evidence, `${path}.evidence`);
299
+ checkKeys(ev, `${path}.evidence`, ['errors']);
300
+ if (!Array.isArray(ev.errors))
301
+ fail(`${path}.evidence.errors`, 'expected array');
302
+ ev.errors.forEach((e, i) => {
303
+ const eo = asObject(e, `${path}.evidence.errors[${i}]`);
304
+ checkKeys(eo, `${path}.evidence.errors[${i}]`, ['exception_type', 'message', 'rel_offsets'], ['expected', 'actual', 'operator']);
305
+ asString(eo.exception_type, `${path}.evidence.errors[${i}].exception_type`);
306
+ asString(eo.message, `${path}.evidence.errors[${i}].message`);
307
+ if (!Array.isArray(eo.rel_offsets))
308
+ fail(`${path}.evidence.errors[${i}].rel_offsets`, 'expected array');
309
+ eo.rel_offsets.forEach((n, j) => asInteger(n, `${path}.evidence.errors[${i}].rel_offsets[${j}]`));
310
+ });
311
+ asString(o.context_digest, `${path}.context_digest`);
312
+ const annex = asObject(o.annex, `${path}.annex`);
313
+ checkKeys(annex, `${path}.annex`, ['frames', 'console', 'location_line']);
314
+ }
315
+ /**
316
+ * Consumer entry point for stored run records; same hard-error discipline
317
+ * as parseReport.
318
+ */
319
+ export function parseRunRecord(value) {
320
+ const o = asObject(value, 'record');
321
+ checkKeys(o, 'record', [
322
+ 'schema_version',
323
+ 'repo',
324
+ 'invocation',
325
+ 'instrument',
326
+ 'environment',
327
+ 'provenance',
328
+ 'surface',
329
+ 'completeness',
330
+ 'observations',
331
+ 'recording',
332
+ ]);
333
+ if (o.schema_version !== SCHEMA_VERSION)
334
+ fail('record.schema_version', `expected "${SCHEMA_VERSION}"`);
335
+ const repo = asObject(o.repo, 'record.repo');
336
+ checkKeys(repo, 'record.repo', ['identity', 'worktree', 'branch', 'cwd']);
337
+ const invocation = asObject(o.invocation, 'record.invocation');
338
+ checkKeys(invocation, 'record.invocation', ['command', 'selector']);
339
+ asStringArray(invocation.command, 'record.invocation.command');
340
+ asStringArray(invocation.selector, 'record.invocation.selector');
341
+ const instrument = asObject(o.instrument, 'record.instrument');
342
+ checkKeys(instrument, 'record.instrument', ['adapter', 'adapter_version', 'composition_id', 'config_digest']);
343
+ const environment = asObject(o.environment, 'record.environment');
344
+ checkKeys(environment, 'record.environment', ['runner', 'runner_version', 'runtime', 'os', 'env_fingerprint']);
345
+ const provenance = asObject(o.provenance, 'record.provenance');
346
+ checkKeys(provenance, 'record.provenance', ['head', 'dirty_diff_digest', 'tree_digest']);
347
+ if (provenance.head !== null)
348
+ asString(provenance.head, 'record.provenance.head');
349
+ asString(provenance.tree_digest, 'record.provenance.tree_digest');
350
+ const surface = asObject(o.surface, 'record.surface');
351
+ checkKeys(surface, 'record.surface', ['inventory_digest', 'test_sources', 'config_sources', 'suppressed']);
352
+ validateStringMap(surface.test_sources, 'record.surface.test_sources');
353
+ validateStringMap(surface.config_sources, 'record.surface.config_sources');
354
+ asStringArray(surface.suppressed, 'record.surface.suppressed');
355
+ const completeness = asObject(o.completeness, 'record.completeness');
356
+ checkKeys(completeness, 'record.completeness', ['status', 'child_exit_code']);
357
+ asEnum(completeness.status, COMPLETENESS_STATUSES, 'record.completeness.status');
358
+ asInteger(completeness.child_exit_code, 'record.completeness.child_exit_code');
359
+ if (!Array.isArray(o.observations))
360
+ fail('record.observations', 'expected array');
361
+ o.observations.forEach((obs, i) => {
362
+ const oo = asObject(obs, `record.observations[${i}]`);
363
+ checkKeys(oo, `record.observations[${i}]`, ['test_id', 'verdict'], ['suppression', 'source_ref', 'finding']);
364
+ asString(oo.test_id, `record.observations[${i}].test_id`);
365
+ asEnum(oo.verdict, VERDICTS, `record.observations[${i}].verdict`);
366
+ if ('suppression' in oo) {
367
+ const sup = asObject(oo.suppression, `record.observations[${i}].suppression`);
368
+ checkKeys(sup, `record.observations[${i}].suppression`, ['marker'], ['note']);
369
+ asString(sup.marker, `record.observations[${i}].suppression.marker`);
370
+ }
371
+ if ('source_ref' in oo) {
372
+ const sr = asObject(oo.source_ref, `record.observations[${i}].source_ref`);
373
+ checkKeys(sr, `record.observations[${i}].source_ref`, ['file', 'line']);
374
+ asString(sr.file, `record.observations[${i}].source_ref.file`);
375
+ asInteger(sr.line, `record.observations[${i}].source_ref.line`);
376
+ }
377
+ if ('finding' in oo)
378
+ validateFinding(oo.finding, `record.observations[${i}].finding`);
379
+ });
380
+ const recording = asObject(o.recording, 'record.recording');
381
+ checkKeys(recording, 'record.recording', [
382
+ 'recorder',
383
+ 'recorded_at_ms',
384
+ 'durations_us',
385
+ 'raw_stdout',
386
+ 'raw_stderr',
387
+ 'capture_reason',
388
+ 'unhandled_errors',
389
+ ]);
390
+ return o;
391
+ }
392
+ export function isRed(verdict) {
393
+ return RED_SET.includes(verdict);
394
+ }
395
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}