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.
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/dist/adapters/vitest/capture.d.ts +50 -0
- package/dist/adapters/vitest/capture.js +7 -0
- package/dist/adapters/vitest/capture.js.map +1 -0
- package/dist/adapters/vitest/recorder.d.ts +31 -0
- package/dist/adapters/vitest/recorder.js +214 -0
- package/dist/adapters/vitest/recorder.js.map +1 -0
- package/dist/adapters/vitest/reporter.d.ts +15 -0
- package/dist/adapters/vitest/reporter.js +97 -0
- package/dist/adapters/vitest/reporter.js.map +1 -0
- package/dist/canonical.d.ts +9 -0
- package/dist/canonical.js +45 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +264 -0
- package/dist/cli.js.map +1 -0
- package/dist/compare.d.ts +37 -0
- package/dist/compare.js +476 -0
- package/dist/compare.js.map +1 -0
- package/dist/digest.d.ts +5 -0
- package/dist/digest.js +14 -0
- package/dist/digest.js.map +1 -0
- package/dist/gate.d.ts +11 -0
- package/dist/gate.js +135 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/redact.d.ts +10 -0
- package/dist/redact.js +49 -0
- package/dist/redact.js.map +1 -0
- package/dist/render.d.ts +6 -0
- package/dist/render.js +53 -0
- package/dist/render.js.map +1 -0
- package/dist/run.d.ts +19 -0
- package/dist/run.js +158 -0
- package/dist/run.js.map +1 -0
- package/dist/schema.d.ts +236 -0
- package/dist/schema.js +395 -0
- package/dist/schema.js.map +1 -0
- package/dist/store.d.ts +38 -0
- package/dist/store.js +161 -0
- package/dist/store.js.map +1 -0
- package/dist/tree-digest.d.ts +11 -0
- package/dist/tree-digest.js +103 -0
- package/dist/tree-digest.js.map +1 -0
- package/package.json +53 -0
- package/spec/veridelta-1.md +1093 -0
package/dist/schema.d.ts
ADDED
|
@@ -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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"}
|