@behavproof/cli 0.0.0-stage → 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/README.md +14 -2
- package/dist/api.d.ts +6 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +5 -0
- package/dist/api.js.map +1 -0
- package/dist/check.d.ts +272 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +220 -0
- package/dist/check.js.map +1 -0
- package/dist/formal-evaluation.d.ts +108 -0
- package/dist/formal-evaluation.d.ts.map +1 -0
- package/dist/formal-evaluation.js +78 -0
- package/dist/formal-evaluation.js.map +1 -0
- package/dist/formal-worker.d.ts +2 -0
- package/dist/formal-worker.d.ts.map +1 -0
- package/dist/formal-worker.js +32 -0
- package/dist/formal-worker.js.map +1 -0
- package/dist/formal.d.ts +148 -0
- package/dist/formal.d.ts.map +1 -0
- package/dist/formal.js +99 -0
- package/dist/formal.js.map +1 -0
- package/dist/impact.d.ts +20 -0
- package/dist/impact.d.ts.map +1 -0
- package/dist/impact.js +23 -0
- package/dist/impact.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +151 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline.d.ts +38 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +46 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/project.d.ts +97 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +101 -0
- package/dist/project.js.map +1 -0
- package/dist/registration.d.ts +595 -0
- package/dist/registration.d.ts.map +1 -0
- package/dist/registration.js +112 -0
- package/dist/registration.js.map +1 -0
- package/dist/report.d.ts +23 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +34 -0
- package/dist/report.js.map +1 -0
- package/dist/scopes.d.ts +48 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +60 -0
- package/dist/scopes.js.map +1 -0
- package/dist/trust.d.ts +533 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +130 -0
- package/dist/trust.js.map +1 -0
- package/package.json +51 -4
- package/presets/basic-v1.json +21 -0
- package/presets/critical-v1.json +39 -0
- package/presets/standard-v1.json +21 -0
- package/schemas/config.schema.json +492 -0
- package/schemas/evidence.schema.json +3612 -0
- package/schemas/manifest.schema.json +225 -0
- package/schemas/policy.schema.json +21 -0
- package/schemas/registration.schema.json +1065 -0
- package/schemas/registry.schema.json +307 -0
- package/schemas/trust-root.schema.json +1445 -0
- package/templates/audit.yml +28 -0
- package/templates/protected-github-producer.yml +58 -0
- package/templates/protected-github-publisher.yml +111 -0
package/README.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @behavproof/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
BehavProof 0.1.0 initial public preview distribution. Requires Node.js 24.x.
|
|
4
|
+
|
|
5
|
+
After publication, install from the public npm registry:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install --ignore-scripts @behavproof/cli@0.1.0
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
See the [Japanese deployment guide](https://github.com/kanoi-y/BehavProof/blob/main/docs/protected-github-deployment.ja.md) and [security boundaries](https://github.com/kanoi-y/BehavProof/blob/main/docs/security.md).
|
|
12
|
+
|
|
13
|
+
Passing evidence applies only to its authenticated source, approved obligations and bounded execution scope. Execute candidate tests and optional model Drivers only in credential-free isolated workers. Keep publishing credentials in a separate trusted host.
|
|
14
|
+
|
|
15
|
+
No open-source license is granted (UNLICENSED). Source is public; npm packages will be public after publication. The next dist-tag identifies the preview channel; it does not restrict access.
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { check } from './check.js';
|
|
2
|
+
export { TrustRootSchema, loadTrust } from './trust.js';
|
|
3
|
+
export { registry, writeScoped } from './project.js';
|
|
4
|
+
export { RegistrationSchema, createRegistration, persistRegistration, loadRegistration, registrationProjectData } from './registration.js';
|
|
5
|
+
export type { Registration, RegistrationAuthority, VerifiedRegistration } from './registration.js';
|
|
6
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC3I,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { check } from './check.js';
|
|
2
|
+
export { TrustRootSchema, loadTrust } from './trust.js';
|
|
3
|
+
export { registry, writeScoped } from './project.js';
|
|
4
|
+
export { RegistrationSchema, createRegistration, persistRegistration, loadRegistration, registrationProjectData } from './registration.js';
|
|
5
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/check.d.ts
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { type PolicyDiff } from './report.js';
|
|
2
|
+
import { type EvidenceStatus, type Approval } from '@behavproof/core';
|
|
3
|
+
import { type ExecutionRow, type ReportBinding } from '@behavproof/contract-registry';
|
|
4
|
+
export type CheckOptions = {
|
|
5
|
+
config?: string;
|
|
6
|
+
profile?: string;
|
|
7
|
+
mode?: string;
|
|
8
|
+
base?: string;
|
|
9
|
+
head?: string;
|
|
10
|
+
'trust-root'?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function check(root: string, options: CheckOptions): Promise<{
|
|
13
|
+
assurance: {
|
|
14
|
+
model_conformance_observed: "unknown" | "pass" | "fail" | "not_applicable";
|
|
15
|
+
production_target_observed: "unknown" | "pass" | "fail" | "not_applicable";
|
|
16
|
+
mutation_sensitivity_observed: "unknown" | "pass" | "fail" | "not_applicable";
|
|
17
|
+
contract_declared: "pass" | "unknown";
|
|
18
|
+
binding_verified: "pass" | "unknown";
|
|
19
|
+
cases_executed: "pass" | "fail" | "unknown";
|
|
20
|
+
};
|
|
21
|
+
drift: import("@behavproof/contract-registry").Change[];
|
|
22
|
+
approvals: {
|
|
23
|
+
schemaVersion: 1;
|
|
24
|
+
id: string;
|
|
25
|
+
target: {
|
|
26
|
+
kind: "intent" | "contract" | "policy" | "registry";
|
|
27
|
+
id: string;
|
|
28
|
+
contentHash: string;
|
|
29
|
+
};
|
|
30
|
+
status: "unknown" | "pass" | "fail" | "not_applicable";
|
|
31
|
+
source: {
|
|
32
|
+
provider: string;
|
|
33
|
+
ref: string;
|
|
34
|
+
};
|
|
35
|
+
approvedBy: string[];
|
|
36
|
+
reasons: string[];
|
|
37
|
+
subjectCommitSha?: string | undefined;
|
|
38
|
+
}[];
|
|
39
|
+
formal?: {
|
|
40
|
+
models: {
|
|
41
|
+
modelId: string;
|
|
42
|
+
contractId: string;
|
|
43
|
+
risk: "basic" | "standard" | "critical";
|
|
44
|
+
model: {
|
|
45
|
+
status: "unknown" | "pass" | "fail";
|
|
46
|
+
reasons: string[];
|
|
47
|
+
scope: {
|
|
48
|
+
modelId: string;
|
|
49
|
+
model: string;
|
|
50
|
+
contractId: string;
|
|
51
|
+
properties: string[];
|
|
52
|
+
maxSteps: number;
|
|
53
|
+
maxSamples: number;
|
|
54
|
+
seed: string;
|
|
55
|
+
unbounded: false;
|
|
56
|
+
};
|
|
57
|
+
stages: {
|
|
58
|
+
stage: "parse" | "typecheck" | "test" | "run" | "verify";
|
|
59
|
+
status: "unknown" | "pass" | "fail";
|
|
60
|
+
complete: boolean;
|
|
61
|
+
exitCode: number | null;
|
|
62
|
+
toolVersion: string;
|
|
63
|
+
backend: "quint" | "typescript" | "rust" | "apalache" | "tlc";
|
|
64
|
+
method: "parse" | "typecheck" | "spec_test" | "simulation" | "bounded_model_check" | "finite_state_check";
|
|
65
|
+
properties: string[];
|
|
66
|
+
diagnostics: string[];
|
|
67
|
+
maxSteps?: number | undefined;
|
|
68
|
+
maxSamples?: number | undefined;
|
|
69
|
+
seed?: string | undefined;
|
|
70
|
+
traceSeed?: string | undefined;
|
|
71
|
+
backendVersion?: string | undefined;
|
|
72
|
+
stdoutHash?: string | undefined;
|
|
73
|
+
stderrHash?: string | undefined;
|
|
74
|
+
artifacts?: {
|
|
75
|
+
ref: string;
|
|
76
|
+
sha256: string;
|
|
77
|
+
}[] | undefined;
|
|
78
|
+
}[];
|
|
79
|
+
};
|
|
80
|
+
conformance: {
|
|
81
|
+
status: "unknown" | "pass" | "fail";
|
|
82
|
+
reasons: string[];
|
|
83
|
+
scope: {
|
|
84
|
+
modelId: string;
|
|
85
|
+
model: string;
|
|
86
|
+
contractId: string;
|
|
87
|
+
properties: string[];
|
|
88
|
+
maxSteps: number;
|
|
89
|
+
maxSamples: number;
|
|
90
|
+
seed: string;
|
|
91
|
+
unbounded: false;
|
|
92
|
+
};
|
|
93
|
+
counts: {
|
|
94
|
+
replayedTraces: number;
|
|
95
|
+
replayedSteps: number;
|
|
96
|
+
comparedSteps: number;
|
|
97
|
+
implementationCalls: number;
|
|
98
|
+
actions: Record<string, number>;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
binding: {
|
|
102
|
+
status: "unknown" | "pass";
|
|
103
|
+
reasons: string[];
|
|
104
|
+
};
|
|
105
|
+
}[];
|
|
106
|
+
policyChanged: boolean;
|
|
107
|
+
};
|
|
108
|
+
authoritySnapshots: {
|
|
109
|
+
trustRootHash: string | null;
|
|
110
|
+
policyHash: string | null;
|
|
111
|
+
baselineHash: string | null;
|
|
112
|
+
approvals: {
|
|
113
|
+
target: Approval["target"];
|
|
114
|
+
observation: import("@behavproof/adapter-github").Observation;
|
|
115
|
+
}[];
|
|
116
|
+
producers: {
|
|
117
|
+
manifestRef: string;
|
|
118
|
+
observation: import("@behavproof/adapter-github").Observation;
|
|
119
|
+
}[];
|
|
120
|
+
pipeline: {
|
|
121
|
+
upstream?: import("@behavproof/adapter-github").Observation;
|
|
122
|
+
protection?: import("@behavproof/adapter-github").Observation;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
qualityScope: {
|
|
126
|
+
patterns: string[] | null;
|
|
127
|
+
excludedPaths: string[];
|
|
128
|
+
};
|
|
129
|
+
detection: {
|
|
130
|
+
support: "single-package" | "monorepo" | "unsupported";
|
|
131
|
+
evidence: string[];
|
|
132
|
+
reasons: string[];
|
|
133
|
+
};
|
|
134
|
+
effectivePolicyHash: string;
|
|
135
|
+
pipelineObservation: {
|
|
136
|
+
status: EvidenceStatus;
|
|
137
|
+
jobs: {};
|
|
138
|
+
artifacts: string[];
|
|
139
|
+
observations: {
|
|
140
|
+
upstream?: import("@behavproof/adapter-github").Observation;
|
|
141
|
+
protection?: import("@behavproof/adapter-github").Observation;
|
|
142
|
+
};
|
|
143
|
+
workflow?: never;
|
|
144
|
+
} | {
|
|
145
|
+
status: "unknown" | "pass" | "fail" | "not_applicable";
|
|
146
|
+
jobs: Record<string, string>;
|
|
147
|
+
artifacts: string[];
|
|
148
|
+
observations: {
|
|
149
|
+
upstream?: import("@behavproof/adapter-github").Observation;
|
|
150
|
+
protection?: import("@behavproof/adapter-github").Observation;
|
|
151
|
+
};
|
|
152
|
+
workflow: {
|
|
153
|
+
ref: string;
|
|
154
|
+
sha256: string;
|
|
155
|
+
sourceStatus: string;
|
|
156
|
+
diagnosis: {
|
|
157
|
+
internal: import("@behavproof/adapter-github").Observation<unknown>;
|
|
158
|
+
protection: import("@behavproof/adapter-github").Observation<unknown>;
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
} | null;
|
|
162
|
+
provenance: {
|
|
163
|
+
manifests: {
|
|
164
|
+
ref: string;
|
|
165
|
+
validation: import("@behavproof/core").ManifestValidation;
|
|
166
|
+
}[];
|
|
167
|
+
reasons: string[];
|
|
168
|
+
};
|
|
169
|
+
protectedPolicySha?: string;
|
|
170
|
+
documentEvidence: {
|
|
171
|
+
registry: {
|
|
172
|
+
contracts: {
|
|
173
|
+
id: string;
|
|
174
|
+
kind: "external" | "examples" | "invariant" | "state_machine" | "api_contract";
|
|
175
|
+
intentIds: string[];
|
|
176
|
+
revisionHash: string;
|
|
177
|
+
sourceRef: string;
|
|
178
|
+
formal?: {
|
|
179
|
+
modelId: string;
|
|
180
|
+
modelHash: string;
|
|
181
|
+
propertyIds: string[];
|
|
182
|
+
driverHash?: string | undefined;
|
|
183
|
+
} | undefined;
|
|
184
|
+
caseIds?: string[] | undefined;
|
|
185
|
+
risk?: "basic" | "standard" | "critical" | undefined;
|
|
186
|
+
cases?: {
|
|
187
|
+
id: string;
|
|
188
|
+
input: import("zod").JSONType;
|
|
189
|
+
expected: import("zod").JSONType;
|
|
190
|
+
negative?: boolean | undefined;
|
|
191
|
+
}[] | undefined;
|
|
192
|
+
}[];
|
|
193
|
+
intents: {
|
|
194
|
+
id: string;
|
|
195
|
+
statement: string;
|
|
196
|
+
risk: "basic" | "standard" | "critical";
|
|
197
|
+
contentHash: string;
|
|
198
|
+
origin: {
|
|
199
|
+
kind: "external" | "inline" | "manifest";
|
|
200
|
+
ref: string;
|
|
201
|
+
};
|
|
202
|
+
}[];
|
|
203
|
+
schemaVersion: 1;
|
|
204
|
+
commitSha: string;
|
|
205
|
+
repositoryId?: string | undefined;
|
|
206
|
+
policyHash?: string | undefined;
|
|
207
|
+
extractorVersion?: string | undefined;
|
|
208
|
+
scope?: string[] | undefined;
|
|
209
|
+
discoveryDiagnostics?: {
|
|
210
|
+
code: string;
|
|
211
|
+
sourceRef: string;
|
|
212
|
+
message: string;
|
|
213
|
+
}[] | undefined;
|
|
214
|
+
};
|
|
215
|
+
rows: (ExecutionRow & ReportBinding)[];
|
|
216
|
+
bindings: Record<string, string>;
|
|
217
|
+
authenticatedRows: string[];
|
|
218
|
+
authenticatedApprovals: string[];
|
|
219
|
+
};
|
|
220
|
+
subject: {
|
|
221
|
+
testedCommitSha: string;
|
|
222
|
+
sourceTreeHash: string;
|
|
223
|
+
dirty: boolean;
|
|
224
|
+
repositoryId?: string | undefined;
|
|
225
|
+
prHeadSha?: string | undefined;
|
|
226
|
+
testedCommitParents?: string[] | undefined;
|
|
227
|
+
baseSha?: string | undefined;
|
|
228
|
+
diffBaseSha?: string | undefined;
|
|
229
|
+
};
|
|
230
|
+
diff: import("@behavproof/adapter-reports").GitDiff;
|
|
231
|
+
impact: {
|
|
232
|
+
status: "unknown" | "pass";
|
|
233
|
+
unknown: string[];
|
|
234
|
+
scope: string[];
|
|
235
|
+
message: string;
|
|
236
|
+
affectedFiles: string[];
|
|
237
|
+
contractIds: string[];
|
|
238
|
+
calls: {
|
|
239
|
+
file: string;
|
|
240
|
+
callee: string;
|
|
241
|
+
}[];
|
|
242
|
+
};
|
|
243
|
+
policyDiff: PolicyDiff | null;
|
|
244
|
+
policySource: {
|
|
245
|
+
repository: string;
|
|
246
|
+
commitSha: string;
|
|
247
|
+
ref: string;
|
|
248
|
+
fileHash: string;
|
|
249
|
+
policyHash: string;
|
|
250
|
+
} | null;
|
|
251
|
+
schemaVersion: 1;
|
|
252
|
+
mode: "audit" | "gate";
|
|
253
|
+
status: "pass" | "fail" | "incomplete";
|
|
254
|
+
exitCode: 0 | 1 | 2;
|
|
255
|
+
mandatoryCount: number;
|
|
256
|
+
evaluations: {
|
|
257
|
+
ruleId: string;
|
|
258
|
+
severity: "error" | "off" | "warn";
|
|
259
|
+
status: "unknown" | "pass" | "fail" | "not_applicable";
|
|
260
|
+
evidenceIds: string[];
|
|
261
|
+
scope: string[];
|
|
262
|
+
message: string;
|
|
263
|
+
remediation?: string | undefined;
|
|
264
|
+
notApplicable?: {
|
|
265
|
+
reason: string;
|
|
266
|
+
allowedReasons: string[];
|
|
267
|
+
evidenceIds: string[];
|
|
268
|
+
} | undefined;
|
|
269
|
+
}[];
|
|
270
|
+
reasons: string[];
|
|
271
|
+
}>;
|
|
272
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,UAAU,EAAC,MAAM,aAAa,CAAC;AAE3D,OAAO,EAA0H,KAAK,cAAc,EAAE,KAAK,QAAQ,EAA+B,MAAM,kBAAkB,CAAC;AAE3N,OAAO,EAAyE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAI7J,MAAM,MAAM,YAAY,GAAC;IAAC,MAAM,CAAC,EAAC,MAAM,CAAC;IAAA,OAAO,CAAC,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,MAAM,CAAC;IAAA,YAAY,CAAC,EAAC,MAAM,CAAA;CAAC,CAAC;AAEtH,wBAAsB,KAAK,CAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAgGgD,CAAC;8BAAwC,CAAC;wBAAkC,CAAC;6BAAuC,CAAC;kCAA4C,CAAC;8BAAwC,CAAC;8BACpS,CAAC;6BAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA7E2B,QAAQ,CAAC,QAAQ,CAAC;yBAAa,OAAO,4BAA4B,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAtB5E,CAAC;;;;;;;;4BAG/B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+H5D"}
|
package/dist/check.js
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { formalEvaluations } from './formal-evaluation.js';
|
|
2
|
+
import { scopedEvaluations } from './scopes.js';
|
|
3
|
+
import { currentImpact, impactSeverity, impactRemediation } from './impact.js';
|
|
4
|
+
import { remediationFor } from './report.js';
|
|
5
|
+
import { pipelineEvaluation } from './pipeline.js';
|
|
6
|
+
import { safeRead, safeReadJson, parseConfig, hashBytes, mergeProtectedPolicy, evaluateGate, hash, resolveRisk, EvidenceSchema } from '@behavproof/core';
|
|
7
|
+
import { detectProject, gitDiff, gitSubject, normalizeVitest, normalizeLcov, normalizeStryker, evaluateCoverage, evaluateMutation, lineMapping, verifyMergeSubject } from '@behavproof/adapter-reports';
|
|
8
|
+
import { reconcile, evaluateAssurance, bindRegistrations, evaluateScopedClaims } from '@behavproof/contract-registry';
|
|
9
|
+
import { GitHubAuthority } from '@behavproof/adapter-github';
|
|
10
|
+
import { fileList, select, registry, registryAtGit, ref, exists } from './project.js';
|
|
11
|
+
import { authenticate, selectedRunner, isCurrentClaim, loadTrust, approvalKey } from './trust.js';
|
|
12
|
+
const worst = (states) => states.includes('fail') ? 'fail' : states.length && states.every(x => x === 'pass') ? 'pass' : 'unknown';
|
|
13
|
+
export async function check(root, options) {
|
|
14
|
+
const configPath = options.config ?? 'behavproof.config.json', configBytes = await exists(root, configPath) ? await safeRead(root, configPath) : undefined;
|
|
15
|
+
const rawConfig = configBytes ? JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(configBytes)) : { schemaVersion: 1 };
|
|
16
|
+
const cfg = parseConfig({ ...rawConfig, ...(options.profile ? { profile: options.profile } : {}) }), mode = options.mode ?? cfg.mode;
|
|
17
|
+
if (mode !== 'gate' && mode !== 'audit')
|
|
18
|
+
throw Error('Invalid mode');
|
|
19
|
+
if (mode === 'gate' && !options['trust-root'])
|
|
20
|
+
throw Error('Gate mode requires --trust-root outside project authority');
|
|
21
|
+
const trust = options['trust-root'] ? await loadTrust(root, options['trust-root']) : undefined;
|
|
22
|
+
const policy = trust ? mergeProtectedPolicy({ schemaVersion: 1, profileVersion: '1', rules: cfg.rules }, trust.policy) : { schemaVersion: 1, profileVersion: '1', rules: cfg.rules };
|
|
23
|
+
const files = await fileList(root);
|
|
24
|
+
let detection = await detectProject(root);
|
|
25
|
+
const diff = await gitDiff(root, ref(options.base ?? cfg.git.base), ref(options.head ?? 'HEAD'));
|
|
26
|
+
const inputPaths = trust ? select(files, trust.inputs) : files.filter(p => !p.startsWith('.behavproof/') && !Object.values(cfg.reports).includes(p));
|
|
27
|
+
if (!inputPaths.length)
|
|
28
|
+
throw Error('No source inputs in evaluation scope');
|
|
29
|
+
const subject = await gitSubject(root, inputPaths, diff.headSha, diff.baseSha);
|
|
30
|
+
const testedRelationship = await verifyMergeSubject(root, subject);
|
|
31
|
+
for (const path of select(files, cfg.executionManifests))
|
|
32
|
+
(await import('@behavproof/core')).ExecutionManifestSchema.parse(await safeReadJson(root, path));
|
|
33
|
+
const auth = await authenticate(root, trust, subject);
|
|
34
|
+
const runner = selectedRunner(trust, auth, cfg.reports.vitest ?? trust?.config.reports.vitest, inputPaths);
|
|
35
|
+
if (runner)
|
|
36
|
+
detection = await detectProject(root, runner);
|
|
37
|
+
const readArtifact = async (path) => auth.artifactBytes.get(path) ?? await safeRead(root, path);
|
|
38
|
+
const readArtifactJson = async (path) => JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(await readArtifact(path)));
|
|
39
|
+
const head = await registry(root, cfg, files, subject.testedCommitSha, trust?.config.contracts.sources ?? []);
|
|
40
|
+
const approvals = [], approved = new Set(), approvalObservations = [];
|
|
41
|
+
let drift = reconcile(trust?.baseline ?? { contracts: [], intents: [] }, head);
|
|
42
|
+
if (trust?.github) {
|
|
43
|
+
const targetsFor = (head, drift) => [...head.intents.map(i => ({ kind: 'intent', id: i.id, contentHash: i.contentHash })), ...head.contracts.map(c => ({ kind: 'contract', id: c.id, contentHash: c.revisionHash })), ...drift.changes.filter(c => c.contractId || c.intentId).map(c => ({ kind: c.intentId ? 'intent' : 'contract', id: (c.intentId ?? c.contractId), contentHash: c.transitionHash }))];
|
|
44
|
+
const reviewedHead = await registryAtGit(root, cfg, diff.headSha, trust.config.contracts.sources);
|
|
45
|
+
const reviewedDrift = reconcile(trust.baseline, reviewedHead);
|
|
46
|
+
const permitted = new Set((reviewedHead.discoveryDiagnostics?.length === 0 ? targetsFor(reviewedHead, reviewedDrift) : []).map(t => hash(t)));
|
|
47
|
+
const targets = targetsFor(head, drift).filter(target => permitted.has(hash(target)));
|
|
48
|
+
const unique = [...new Map(targets.map(t => [hash(t), t])).values()];
|
|
49
|
+
if (unique.length > 200)
|
|
50
|
+
throw Error('Approval target limit exceeded');
|
|
51
|
+
const g = trust.github, provider = new GitHubAuthority({ repository: g.repository, ...(process.env.GITHUB_TOKEN ? { token: process.env.GITHUB_TOKEN } : {}) });
|
|
52
|
+
for (const target of unique) {
|
|
53
|
+
const result = await provider.approval(g.pr, target, { headSha: diff.headSha, baseSha: diff.baseSha, reviewers: g.reviewers, requiredChecks: g.requiredChecks });
|
|
54
|
+
approvalObservations.push({ target, observation: result });
|
|
55
|
+
if (result.approval && result.status === 'pass') {
|
|
56
|
+
approvals.push(result.approval);
|
|
57
|
+
approved.add(approvalKey(result.approval));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
drift = reconcile(trust.baseline, head, approvals, a => approved.has(approvalKey(a)));
|
|
61
|
+
}
|
|
62
|
+
const obligations = { ...head, contracts: drift.obligations, intents: drift.intentObligations };
|
|
63
|
+
const states = new Map();
|
|
64
|
+
const set = (id, status, message, evidenceIds = []) => states.set(id, { status, message, evidenceIds });
|
|
65
|
+
const impact = await currentImpact(root, inputPaths, files, diff.files.map(f => f.path), obligations, diff.status === 'known' && testedRelationship === 'known' && subject.testedCommitSha === diff.headSha, trust?.claimScopes ?? []);
|
|
66
|
+
states.set('changeImpact', { status: impact.status, message: impact.message, evidenceIds: [], remediation: impactRemediation });
|
|
67
|
+
const trusted = (path) => !!path && auth.verified.has(path) && auth.failures.length === 0 && detection.support === 'single-package';
|
|
68
|
+
// Parse configured artifacts even when unauthenticated so malformed input is exit2, not unknown.
|
|
69
|
+
let contractData, contractPath;
|
|
70
|
+
for (const spec of trust?.manifests ?? [])
|
|
71
|
+
for (const a of spec.expected.artifacts)
|
|
72
|
+
if (a.kind === 'contract_report' && auth.verified.has(a.ref)) {
|
|
73
|
+
if (contractData)
|
|
74
|
+
throw Error('Multiple contract reports are ambiguous');
|
|
75
|
+
contractData = await readArtifactJson(a.ref);
|
|
76
|
+
contractPath = a.ref;
|
|
77
|
+
if (!contractData || contractData.schemaVersion !== 1 || !Array.isArray(contractData.contracts) || !Array.isArray(contractData.registrations) || !contractData.inventory)
|
|
78
|
+
throw Error('Malformed contract report');
|
|
79
|
+
}
|
|
80
|
+
const vitestPath = cfg.reports.vitest ?? trust?.config.reports.vitest;
|
|
81
|
+
if (vitestPath && await exists(root, vitestPath)) {
|
|
82
|
+
const result = normalizeVitest(await readArtifactJson(vitestPath), contractData?.inventory);
|
|
83
|
+
set('testResult', result.status === 'fail' ? 'fail' : trusted(vitestPath) ? result.status : 'unknown', `Vitest ${JSON.stringify(result.payload)}; ${trusted(vitestPath) ? 'verified current producer' : 'producer/subject unverified'}`, [vitestPath]);
|
|
84
|
+
}
|
|
85
|
+
const qualityPaths = trust?.qualitySources ? select(files, trust.qualitySources) : undefined;
|
|
86
|
+
if (qualityPaths && (!qualityPaths.length || qualityPaths.some(path => !inputPaths.includes(path))))
|
|
87
|
+
throw Error('Protected quality sources must be present within the hashed input scope');
|
|
88
|
+
const qualityFiles = diff.files.filter(f => !qualityPaths || qualityPaths.includes(f.path));
|
|
89
|
+
const qualityScope = { patterns: trust?.qualitySources ?? null, excludedPaths: diff.files.filter(f => /\.[cm]?[jt]sx?$/.test(f.path) && qualityPaths && !qualityPaths.includes(f.path)).map(f => f.path).sort() };
|
|
90
|
+
const scope = Object.fromEntries(qualityFiles.filter(f => !f.kind.startsWith('D') && /\.[cm]?[jt]sx?$/.test(f.path)).map(f => [f.path, f.lines]));
|
|
91
|
+
const mapping = diff.status === 'known' && !diff.files.some(f => f.ambiguous) && await lineMapping(root, diff.headSha, subject.testedCommitSha, Object.keys(scope)) === 'known';
|
|
92
|
+
let normalizedCoverage, normalizedMutation;
|
|
93
|
+
const mutationSources = {};
|
|
94
|
+
const coveragePath = cfg.reports.coverage ?? trust?.config.reports.coverage;
|
|
95
|
+
if (coveragePath && await exists(root, coveragePath)) {
|
|
96
|
+
const report = normalizeLcov((await readArtifact(coveragePath)).toString('utf8'));
|
|
97
|
+
normalizedCoverage = report;
|
|
98
|
+
const result = evaluateCoverage(report, scope, policy.rules.changedLineCoverage?.min ?? 80, {}, mapping);
|
|
99
|
+
set('changedLineCoverage', trusted(coveragePath) ? result.status : 'unknown', `Changed executable line counts ${JSON.stringify(result.payload)}; score ${result.score ?? 'unknown'}`, [coveragePath]);
|
|
100
|
+
}
|
|
101
|
+
const mutationPath = cfg.reports.mutation ?? trust?.config.reports.mutation;
|
|
102
|
+
if (mutationPath && await exists(root, mutationPath)) {
|
|
103
|
+
const report = normalizeStryker(await readArtifactJson(mutationPath)), sources = {};
|
|
104
|
+
for (const path of Object.keys(scope))
|
|
105
|
+
sources[path] = (await safeRead(root, path)).toString('utf8');
|
|
106
|
+
normalizedMutation = report;
|
|
107
|
+
Object.assign(mutationSources, sources);
|
|
108
|
+
const rule = policy.rules.mutationScore, result = evaluateMutation(report, scope, rule?.min ?? 70, rule?.minMutants ?? 10, sources, mapping);
|
|
109
|
+
set('mutationScore', trusted(mutationPath) ? result.status : 'unknown', `Mutant counts ${JSON.stringify(result.payload)}; score ${result.score ?? 'unknown'}`, [mutationPath]);
|
|
110
|
+
}
|
|
111
|
+
const rows = (contractData?.contracts ?? []), registrations = (contractData?.registrations ?? []);
|
|
112
|
+
const bindings = bindRegistrations(registrations, rows, () => !!contractPath && trusted(contractPath)).bindings;
|
|
113
|
+
const assurance = evaluateAssurance(obligations, rows, bindings, () => !!contractPath && trusted(contractPath));
|
|
114
|
+
set('contractExecution', assurance.cases_executed, `Declared: ${assurance.contract_declared}; binding: ${assurance.binding_verified}; cases: ${assurance.cases_executed}`, contractPath ? [contractPath] : []);
|
|
115
|
+
const intentStatus = new Map(obligations.intents.map(i => [i.id, trust?.baseline.intents.some(b => b.id === i.id && b.contentHash === i.contentHash) || approvals.some(a => a.target.kind === 'intent' && a.target.id === i.id && a.target.contentHash === i.contentHash) ? 'pass' : 'unknown']));
|
|
116
|
+
const approvalStates = [...intentStatus.values()];
|
|
117
|
+
const unresolved = drift.changes.some(c => c.type === 'UNSUPPORTED_SEMANTIC_DIFF' || !approvals.some(a => a.target.kind === (c.intentId ? 'intent' : 'contract') && a.target.id === (c.intentId ?? c.contractId) && a.target.contentHash === c.transitionHash));
|
|
118
|
+
for (const change of drift.changes) {
|
|
119
|
+
if (!approvals.some(a => a.target.kind === (change.intentId ? 'intent' : 'contract') && a.target.id === (change.intentId ?? change.contractId) && a.target.contentHash === change.transitionHash)) {
|
|
120
|
+
if (change.intentId)
|
|
121
|
+
intentStatus.set(change.intentId, 'fail');
|
|
122
|
+
if (change.contractId)
|
|
123
|
+
for (const id of obligations.contracts.find(c => c.id === change.contractId)?.intentIds ?? [])
|
|
124
|
+
intentStatus.set(id, 'fail');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
set('intentApproval', !trust ? 'unknown' : unresolved ? 'fail' : worst(approvalStates), 'Intent content and transitions require independently verified human approval');
|
|
128
|
+
const formal = await formalEvaluations({ root, config: cfg, ...(trust ? { protectedConfig: trust.config, baseline: trust.baseline } : {}), registry: head, obligations, approvals, intentStatus, policy, inputs: inputPaths, trusted, readJson: readArtifactJson, readBytes: readArtifact });
|
|
129
|
+
if (formal.enabled)
|
|
130
|
+
for (const [id, state] of formal.states)
|
|
131
|
+
states.set(id, state);
|
|
132
|
+
const observations = [], canaries = [];
|
|
133
|
+
for (const spec of trust?.manifests ?? [])
|
|
134
|
+
for (const a of spec.expected.artifacts)
|
|
135
|
+
if (a.kind === 'claims' && trusted(a.ref)) {
|
|
136
|
+
const raw = await readArtifactJson(a.ref);
|
|
137
|
+
if (!Array.isArray(raw) || raw.length > 10000)
|
|
138
|
+
throw Error('Malformed scoped claim inventory');
|
|
139
|
+
for (const item of raw) {
|
|
140
|
+
const evidence = EvidenceSchema.parse(item);
|
|
141
|
+
if (!isCurrentClaim(evidence, a.ref, subject, hash(policy), obligations.contracts))
|
|
142
|
+
continue;
|
|
143
|
+
if (evidence.kind === 'target_observation')
|
|
144
|
+
observations.push(evidence.payload);
|
|
145
|
+
if (evidence.kind === 'canary')
|
|
146
|
+
canaries.push(evidence.payload);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const scoped = obligations.contracts.map(contract => {
|
|
150
|
+
const s = trust?.claimScopes.find(s => s.contractId === contract.id);
|
|
151
|
+
if (!s || hash([...s.caseIds].sort()) !== hash([...(contract.caseIds ?? [])].sort()))
|
|
152
|
+
return { negativeCases: 'unknown', productionTargetObserved: 'unknown', mutationSensitivityObserved: 'unknown' };
|
|
153
|
+
return evaluateScopedClaims(contract, s, observations, canaries, rows, bindings, row => rows.includes(row) ? !!contractPath && trusted(contractPath) : observations.includes(row) || canaries.includes(row));
|
|
154
|
+
});
|
|
155
|
+
const scopedClaims = new Map(obligations.contracts.map((c, i) => [c.id, scoped[i]]));
|
|
156
|
+
for (const [rule, key] of [['negativeCases', 'negative_cases'], ['productionTargetObserved', 'production_target_observed'], ['mutationSensitivityObserved', 'mutation_sensitivity_observed']])
|
|
157
|
+
set(rule, worst(scoped.map((s) => s[key] ?? s[rule] ?? 'unknown')), 'Requires case-scoped authenticated evidence; aggregate scores do not establish this claim');
|
|
158
|
+
let policyDiff = null;
|
|
159
|
+
if (trust) {
|
|
160
|
+
const sourceWeakened = trust.config.contracts.enabled && !cfg.contracts.enabled || trust.config.contracts.sources.some(s => s.include.some(p => !cfg.contracts.sources.some(c => c.type === s.type && c.include.includes(p))));
|
|
161
|
+
const weakened = sourceWeakened || formal.policyChanged || Object.entries(trust.policy.rules).some(([id, r]) => { const local = cfg.rules[id], levels = { off: 0, warn: 1, error: 2 }; return !local || levels[local.severity] < levels[r.severity] || (r.min !== undefined && (local.min ?? -1) < r.min) || (r.minMutants !== undefined && (local.minMutants ?? -1) < r.minMutants); });
|
|
162
|
+
set('policyProtection', weakened ? 'fail' : 'pass', weakened ? 'Project policy weakens protected obligations; effective evaluation retains protected thresholds' : 'Policy supplied outside project authority');
|
|
163
|
+
const configuration = [{ field: 'contracts.enabled', protected: trust.config.contracts.enabled, project: cfg.contracts.enabled, effective: trust.config.contracts.enabled || cfg.contracts.enabled }, { field: 'contracts.sources', protected: trust.config.contracts.sources, project: cfg.contracts.sources, effective: [...new Map([...trust.config.contracts.sources, ...cfg.contracts.sources].map(s => [hash(s), s])).values()] }, { field: 'riskOverrides', protected: trust.config.riskOverrides, project: cfg.riskOverrides, effective: { protectedFloors: trust.config.riskOverrides, projectRequests: cfg.riskOverrides, selection: 'Maximum project/protected/declaration risk' } }].filter(row => hash(row.protected) !== hash(row.project));
|
|
164
|
+
if (formal.policyChanged)
|
|
165
|
+
configuration.push({ field: 'formal', protected: trust.config.formal ?? null, project: cfg.formal ?? null, effective: formal.models.map(m => m.modelId) });
|
|
166
|
+
policyDiff = { weakened, configuration, rules: [...new Set([...Object.keys(trust.policy.rules), ...Object.keys(cfg.rules)])].sort().filter(id => hash(trust.policy.rules[id] ?? null) !== hash(cfg.rules[id] ?? null)).map(ruleId => ({ ruleId, protected: trust.policy.rules[ruleId] ?? null, project: cfg.rules[ruleId] ?? null, effective: policy.rules[ruleId] ?? null })) };
|
|
167
|
+
}
|
|
168
|
+
const pipelineObservation = trust?.pipeline ? await pipelineEvaluation(root, trust, auth) : undefined;
|
|
169
|
+
if (pipelineObservation)
|
|
170
|
+
set('pipelineIntegrity', pipelineObservation.status, 'Workflow health, authenticated artifacts, upstream outcomes and issuer-bound external protection evaluated separately');
|
|
171
|
+
if (auth.failures.length)
|
|
172
|
+
set('evidenceIntegrity', 'fail', auth.failures.join('; '));
|
|
173
|
+
const evaluations = Object.entries(policy.rules).map(([ruleId, rule]) => {
|
|
174
|
+
const exemption = trust?.notApplicable.find(n => n.ruleId === ruleId && states.get(ruleId)?.status !== 'fail' && rule.allowNotApplicable?.includes(n.reason) && trusted(n.evidenceRef));
|
|
175
|
+
if (exemption)
|
|
176
|
+
return { ruleId, severity: rule.severity, status: 'not_applicable', scope: [], evidenceIds: [exemption.evidenceRef], message: exemption.reason, notApplicable: { reason: exemption.reason, allowedReasons: rule.allowNotApplicable, evidenceIds: [exemption.evidenceRef] } };
|
|
177
|
+
return { ruleId, severity: rule.severity, status: states.get(ruleId)?.status ?? 'unknown', scope: [], evidenceIds: states.get(ruleId)?.evidenceIds ?? [], message: states.get(ruleId)?.message ?? 'Required evidence unavailable; collect and authenticate current evidence', ...(states.get(ruleId)?.remediation ? { remediation: states.get(ruleId).remediation } : {}) };
|
|
178
|
+
});
|
|
179
|
+
const impactRisk = resolveRisk({ profile: cfg.profile, riskOverrides: [] }, { path: 'package.json' }, trust?.config.profile), impactRow = evaluations.find(e => e.ruleId === 'changeImpact');
|
|
180
|
+
if (impactRow)
|
|
181
|
+
impactRow.severity = impactSeverity(impactRisk, policy.rules.changeImpact);
|
|
182
|
+
else
|
|
183
|
+
evaluations.push({ ruleId: 'changeImpact', severity: impactSeverity(impactRisk), status: impact.status, scope: [], evidenceIds: [], message: impact.message, remediation: impactRemediation });
|
|
184
|
+
evaluations.push(...scopedEvaluations({ config: cfg, ...(trust ? { protectedConfig: trust.config } : {}), policy, registry: obligations, files: inputPaths, states, rows, bindings, verifyRow: () => !!contractPath && trusted(contractPath), claims: scopedClaims, claimScopes: trust?.claimScopes ?? [], intentStatus, ...(normalizedCoverage ? { coverage: normalizedCoverage } : {}), ...(normalizedMutation ? { mutation: normalizedMutation } : {}), coverageTrusted: trusted(coveragePath), mutationTrusted: trusted(mutationPath), mapping, changed: scope, sources: mutationSources }));
|
|
185
|
+
for (const evaluation of evaluations) {
|
|
186
|
+
const allowed = policy.rules[evaluation.ruleId]?.allowNotApplicable;
|
|
187
|
+
const exemption = trust?.notApplicable.find(n => n.ruleId === evaluation.ruleId && allowed?.includes(n.reason) && trusted(n.evidenceRef));
|
|
188
|
+
if (exemption && evaluation.status === 'unknown') {
|
|
189
|
+
evaluation.status = 'not_applicable';
|
|
190
|
+
evaluation.evidenceIds = [exemption.evidenceRef];
|
|
191
|
+
evaluation.message = exemption.reason;
|
|
192
|
+
evaluation.notApplicable = { reason: exemption.reason, allowedReasons: allowed, evidenceIds: [exemption.evidenceRef] };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
evaluations.push(...formal.evaluations);
|
|
196
|
+
if (auth.failures.length)
|
|
197
|
+
evaluations.push({ ruleId: 'evidenceIntegrity', severity: 'error', status: 'fail', scope: [], evidenceIds: [], message: auth.failures.join('; ') });
|
|
198
|
+
if (testedRelationship !== 'known')
|
|
199
|
+
evaluations.push({ ruleId: 'testedCommitRelationship', severity: 'error', status: 'unknown', scope: [], evidenceIds: [], message: 'Tested commit is neither PR head nor a verified base/head synthetic merge' });
|
|
200
|
+
if (detection.support !== 'single-package' || subject.dirty)
|
|
201
|
+
evaluations.push({ ruleId: 'evaluationEnvironment', severity: 'error', status: 'unknown', scope: [], evidenceIds: [], message: subject.dirty ? 'Source inputs contain uncommitted or untracked changes' : detection.reasons.join('; ') });
|
|
202
|
+
const finalFiles = await fileList(root), finalPaths = trust ? select(finalFiles, trust.inputs) : finalFiles.filter(p => !p.startsWith('.behavproof/') && !Object.values(cfg.reports).includes(p));
|
|
203
|
+
const finalSubject = await gitSubject(root, finalPaths, diff.headSha, diff.baseSha);
|
|
204
|
+
let configsChanged = false;
|
|
205
|
+
for (const [path, digest] of Object.entries(auth.configHashes))
|
|
206
|
+
if (hashBytes(await safeRead(root, path)) !== digest)
|
|
207
|
+
configsChanged = true;
|
|
208
|
+
if (trust?.dependencyLockPath && hashBytes(await safeRead(root, trust.dependencyLockPath)) !== auth.dependencyLockHash)
|
|
209
|
+
configsChanged = true;
|
|
210
|
+
const finalConfig = await exists(root, configPath) ? await safeRead(root, configPath) : undefined;
|
|
211
|
+
const qualityChanged = !!qualityPaths && hash(select(finalFiles, trust.qualitySources)) !== hash(qualityPaths);
|
|
212
|
+
if (qualityChanged || configsChanged || hash(finalSubject) !== hash(subject) || (configBytes ? hashBytes(configBytes) : null) !== (finalConfig ? hashBytes(finalConfig) : null))
|
|
213
|
+
evaluations.push({ ruleId: 'evaluationSnapshot', severity: 'error', status: 'fail', scope: [], evidenceIds: [], message: 'Source, configuration or HEAD changed during evaluation' });
|
|
214
|
+
for (const e of evaluations)
|
|
215
|
+
if (e.status === 'fail' || e.status === 'unknown')
|
|
216
|
+
e.remediation = remediationFor(e);
|
|
217
|
+
const stable = !evaluations.some(e => e.ruleId === 'evaluationSnapshot' || e.ruleId === 'testedCommitRelationship') && !subject.dirty;
|
|
218
|
+
return { ...evaluateGate(evaluations, mode), documentEvidence: { registry: obligations, rows, bindings, authenticatedRows: stable && contractPath && trusted(contractPath) ? rows.map(row => hash(row)) : [], authenticatedApprovals: stable ? [...approved].sort() : [] }, subject, diff, impact, policyDiff, policySource: trust?.policySource ?? null, ...(trust?.policySource ? { protectedPolicySha: trust.policySource.commitSha } : {}), authoritySnapshots: { trustRootHash: trust ? hash(trust) : null, policyHash: trust ? hash(trust.policy) : null, baselineHash: trust ? hash(trust.baseline) : null, approvals: approvalObservations, producers: auth.observations, pipeline: pipelineObservation?.observations ?? {} }, qualityScope, detection, effectivePolicyHash: hash(policy), pipelineObservation: pipelineObservation ?? null, provenance: { manifests: auth.manifests, reasons: auth.unknowns }, ...(formal.enabled ? { formal: { models: formal.models, policyChanged: formal.policyChanged } } : {}), assurance: { ...assurance, model_conformance_observed: formal.conformanceObserved, production_target_observed: states.get('productionTargetObserved')?.status ?? 'unknown', mutation_sensitivity_observed: states.get('mutationSensitivityObserved')?.status ?? 'unknown' }, drift: drift.changes, approvals };
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
|