@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.
Files changed (67) hide show
  1. package/README.md +14 -2
  2. package/dist/api.d.ts +6 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +5 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/check.d.ts +272 -0
  7. package/dist/check.d.ts.map +1 -0
  8. package/dist/check.js +220 -0
  9. package/dist/check.js.map +1 -0
  10. package/dist/formal-evaluation.d.ts +108 -0
  11. package/dist/formal-evaluation.d.ts.map +1 -0
  12. package/dist/formal-evaluation.js +78 -0
  13. package/dist/formal-evaluation.js.map +1 -0
  14. package/dist/formal-worker.d.ts +2 -0
  15. package/dist/formal-worker.d.ts.map +1 -0
  16. package/dist/formal-worker.js +32 -0
  17. package/dist/formal-worker.js.map +1 -0
  18. package/dist/formal.d.ts +148 -0
  19. package/dist/formal.d.ts.map +1 -0
  20. package/dist/formal.js +99 -0
  21. package/dist/formal.js.map +1 -0
  22. package/dist/impact.d.ts +20 -0
  23. package/dist/impact.d.ts.map +1 -0
  24. package/dist/impact.js +23 -0
  25. package/dist/impact.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +151 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/pipeline.d.ts +38 -0
  31. package/dist/pipeline.d.ts.map +1 -0
  32. package/dist/pipeline.js +46 -0
  33. package/dist/pipeline.js.map +1 -0
  34. package/dist/project.d.ts +97 -0
  35. package/dist/project.d.ts.map +1 -0
  36. package/dist/project.js +101 -0
  37. package/dist/project.js.map +1 -0
  38. package/dist/registration.d.ts +595 -0
  39. package/dist/registration.d.ts.map +1 -0
  40. package/dist/registration.js +112 -0
  41. package/dist/registration.js.map +1 -0
  42. package/dist/report.d.ts +23 -0
  43. package/dist/report.d.ts.map +1 -0
  44. package/dist/report.js +34 -0
  45. package/dist/report.js.map +1 -0
  46. package/dist/scopes.d.ts +48 -0
  47. package/dist/scopes.d.ts.map +1 -0
  48. package/dist/scopes.js +60 -0
  49. package/dist/scopes.js.map +1 -0
  50. package/dist/trust.d.ts +533 -0
  51. package/dist/trust.d.ts.map +1 -0
  52. package/dist/trust.js +130 -0
  53. package/dist/trust.js.map +1 -0
  54. package/package.json +51 -4
  55. package/presets/basic-v1.json +21 -0
  56. package/presets/critical-v1.json +39 -0
  57. package/presets/standard-v1.json +21 -0
  58. package/schemas/config.schema.json +492 -0
  59. package/schemas/evidence.schema.json +3612 -0
  60. package/schemas/manifest.schema.json +225 -0
  61. package/schemas/policy.schema.json +21 -0
  62. package/schemas/registration.schema.json +1065 -0
  63. package/schemas/registry.schema.json +307 -0
  64. package/schemas/trust-root.schema.json +1445 -0
  65. package/templates/audit.yml +28 -0
  66. package/templates/protected-github-producer.yml +58 -0
  67. package/templates/protected-github-publisher.yml +111 -0
@@ -0,0 +1,108 @@
1
+ import { type Config, type RegistrySnapshot, type Approval, type Policy, type EvidenceStatus } from '@behavproof/core';
2
+ type Options = {
3
+ root: string;
4
+ config: Config;
5
+ protectedConfig?: Config;
6
+ baseline?: RegistrySnapshot;
7
+ registry: RegistrySnapshot;
8
+ obligations: RegistrySnapshot;
9
+ approvals: Approval[];
10
+ intentStatus: ReadonlyMap<string, string>;
11
+ policy: Policy;
12
+ inputs: readonly string[];
13
+ trusted: (ref: string | undefined) => boolean;
14
+ readJson: (ref: string) => Promise<unknown>;
15
+ readBytes: (ref: string) => Promise<Uint8Array>;
16
+ };
17
+ export declare function formalEvaluations(o: Options): Promise<{
18
+ enabled: boolean;
19
+ models: {
20
+ modelId: string;
21
+ contractId: string;
22
+ risk: "basic" | "standard" | "critical";
23
+ model: {
24
+ status: "unknown" | "pass" | "fail";
25
+ reasons: string[];
26
+ scope: {
27
+ modelId: string;
28
+ model: string;
29
+ contractId: string;
30
+ properties: string[];
31
+ maxSteps: number;
32
+ maxSamples: number;
33
+ seed: string;
34
+ unbounded: false;
35
+ };
36
+ stages: {
37
+ stage: "parse" | "typecheck" | "test" | "run" | "verify";
38
+ status: "unknown" | "pass" | "fail";
39
+ complete: boolean;
40
+ exitCode: number | null;
41
+ toolVersion: string;
42
+ backend: "quint" | "typescript" | "rust" | "apalache" | "tlc";
43
+ method: "parse" | "typecheck" | "spec_test" | "simulation" | "bounded_model_check" | "finite_state_check";
44
+ properties: string[];
45
+ diagnostics: string[];
46
+ maxSteps?: number | undefined;
47
+ maxSamples?: number | undefined;
48
+ seed?: string | undefined;
49
+ traceSeed?: string | undefined;
50
+ backendVersion?: string | undefined;
51
+ stdoutHash?: string | undefined;
52
+ stderrHash?: string | undefined;
53
+ artifacts?: {
54
+ ref: string;
55
+ sha256: string;
56
+ }[] | undefined;
57
+ }[];
58
+ };
59
+ conformance: {
60
+ status: "unknown" | "pass" | "fail";
61
+ reasons: string[];
62
+ scope: {
63
+ modelId: string;
64
+ model: string;
65
+ contractId: string;
66
+ properties: string[];
67
+ maxSteps: number;
68
+ maxSamples: number;
69
+ seed: string;
70
+ unbounded: false;
71
+ };
72
+ counts: {
73
+ replayedTraces: number;
74
+ replayedSteps: number;
75
+ comparedSteps: number;
76
+ implementationCalls: number;
77
+ actions: Record<string, number>;
78
+ };
79
+ };
80
+ binding: {
81
+ status: "unknown" | "pass";
82
+ reasons: string[];
83
+ };
84
+ }[];
85
+ evaluations: {
86
+ ruleId: string;
87
+ severity: "error" | "off" | "warn";
88
+ status: "unknown" | "pass" | "fail" | "not_applicable";
89
+ evidenceIds: string[];
90
+ scope: string[];
91
+ message: string;
92
+ remediation?: string | undefined;
93
+ notApplicable?: {
94
+ reason: string;
95
+ allowedReasons: string[];
96
+ evidenceIds: string[];
97
+ } | undefined;
98
+ }[];
99
+ states: Map<string, {
100
+ status: EvidenceStatus;
101
+ message: string;
102
+ evidenceIds: string[];
103
+ }>;
104
+ policyChanged: boolean;
105
+ conformanceObserved: "unknown" | "pass" | "fail" | "not_applicable";
106
+ }>;
107
+ export {};
108
+ //# sourceMappingURL=formal-evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-evaluation.d.ts","sourceRoot":"","sources":["../src/formal-evaluation.ts"],"names":[],"mappings":"AAAA,OAAM,EAAoH,KAAK,MAAM,EAAC,KAAK,gBAAgB,EAAC,KAAK,QAAQ,EAAC,KAAK,MAAM,EAAiB,KAAK,cAAc,EAAiD,MAAI,kBAAkB,CAAC;AAIjS,KAAK,OAAO,GAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,eAAe,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,EAAC,gBAAgB,CAAC;IAAA,QAAQ,EAAC,gBAAgB,CAAC;IAAA,WAAW,EAAC,gBAAgB,CAAC;IAAA,SAAS,EAAC,QAAQ,EAAE,CAAC;IAAA,YAAY,EAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,SAAS,MAAM,EAAE,CAAC;IAAA,OAAO,EAAC,CAAC,GAAG,EAAC,MAAM,GAAC,SAAS,KAAG,OAAO,CAAC;IAAA,QAAQ,EAAC,CAAC,GAAG,EAAC,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAAA,SAAS,EAAC,CAAC,GAAG,EAAC,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CAAC,CAAC;AACnX,wBAAsB,iBAAiB,CAAC,CAAC,EAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAgDkgK,CAAC;0BAAwC,CAAC;oBAAkC,CAAC;yBAAuC,CAAC;8BAA4C,CAAC;0BAAwC,CAAC;0BAAwC,CAAC;yBAAuC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAP1yK,cAAc;iBAAS,MAAM;qBAAa,MAAM,EAAE;;;;GAKtF"}
@@ -0,0 +1,78 @@
1
+ import { hash, FormalModelReportSchema, ModelConformanceReportSchema, evaluateFormalModel, evaluateModelConformance, resolveRisk } from '@behavproof/core';
2
+ import { formalAdapters, formalInputIdentity, formalTraceInputs, replayCommandHash, traceReceiptRef } from './formal.js';
3
+ import { exists } from './project.js';
4
+ const worst = (s) => s.includes('fail') ? 'fail' : s.length && s.every(x => x === 'pass') ? 'pass' : 'unknown';
5
+ export async function formalEvaluations(o) {
6
+ const adopted = o.protectedConfig?.formal?.models ?? [], candidate = o.config.formal?.models ?? [];
7
+ const models = [...adopted, ...candidate.filter(m => !adopted.some(p => p.id === m.id))];
8
+ const policyChanged = adopted.some(m => !candidate.some(c => c.id === m.id && hash(c) === hash(m)));
9
+ const evaluations = [], rows = [];
10
+ for (const model of models) {
11
+ const m = FormalModelConfigCopy(model), contract = o.registry.contracts.find(c => c.id === m.contractId), target = { path: m.model, ...(contract ? { contractKind: contract.kind } : {}), ...(contract?.risk ? { declaredRisk: contract.risk } : {}) };
12
+ const risk = resolveRisk(o.config, target, o.protectedConfig ? resolveRisk(o.protectedConfig, target) : undefined);
13
+ const effective = risk === 'critical' ? { ...m, requireCanary: true } : m;
14
+ let identity, problem;
15
+ try {
16
+ await formalAdapters();
17
+ identity = await formalInputIdentity(o.root, m);
18
+ }
19
+ catch (error) {
20
+ if (error.code !== 'ENOENT' && !error.message.startsWith('Optional formal adapters unavailable'))
21
+ throw error;
22
+ problem = error.message;
23
+ }
24
+ const required = [m.model, ...m.modelSources, ...(m.driver ? [m.driver, ...(m.driverSources ?? [])] : []), ...(m.implementation ? [m.implementation, ...m.implementationSources] : []), ...(m.canary ? [m.canary.implementation] : [])];
25
+ if (required.some(ref => !o.inputs.includes(ref)))
26
+ problem = 'Protected input scope omits formal model/Driver/implementation inputs';
27
+ const placeholder = '0'.repeat(64), expectedIdentity = identity?.model ?? { modelHash: placeholder, configHash: hash(m), commandHash: placeholder };
28
+ const current = o.obligations.contracts.find(c => c.id === m.contractId), binding = contract?.formal;
29
+ const approval = !!contract && (o.baseline?.contracts.some(c => c.id === contract.id && c.revisionHash === contract.revisionHash) || o.approvals.some(a => a.status === 'pass' && a.target.kind === 'contract' && a.target.id === contract.id && a.target.contentHash === contract.revisionHash));
30
+ const bindingMatches = !!identity && !!binding && binding.modelId === m.id && binding.modelHash === identity.model.modelHash && hash([...binding.propertyIds].sort()) === hash([...m.properties].sort()) && (!m.driver || binding.driverHash === identity.driverHash) && current?.revisionHash === contract?.revisionHash;
31
+ const bindingStatus = bindingMatches && approval && contract.intentIds.every(id => o.intentStatus.get(id) === 'pass') ? 'pass' : 'unknown';
32
+ const bindingResult = { status: bindingStatus, reasons: bindingStatus === 'pass' ? [] : ['Model/Driver/property mapping must match an independently approved current Contract and Intent'] };
33
+ const modelReport = await exists(o.root, m.report) ? FormalModelReportSchema.parse(await o.readJson(m.report)) : undefined;
34
+ const modelResult = evaluateFormalModel(modelReport, { model: m, identity: expectedIdentity, authenticated: !problem && o.trusted(m.report) });
35
+ let trace, traceProblem;
36
+ if (identity && await exists(o.root, traceReceiptRef(m))) {
37
+ try {
38
+ trace = await formalTraceInputs(o.root, m, o.readJson, o.readBytes);
39
+ }
40
+ catch (error) {
41
+ if (/identity mismatch|digest mismatch/.test(error.message))
42
+ traceProblem = error.message;
43
+ else
44
+ throw error;
45
+ }
46
+ }
47
+ const conformanceReport = m.conformanceReport && await exists(o.root, m.conformanceReport) ? ModelConformanceReportSchema.parse(await o.readJson(m.conformanceReport)) : undefined;
48
+ const conformanceIdentity = { ...expectedIdentity, commandHash: replayCommandHash(m), ...(identity?.driverHash ? { driverHash: identity.driverHash } : {}), ...(identity?.implementationHash ? { implementationHash: identity.implementationHash } : {}), ...(trace ? { traceHash: trace.traceHash } : {}) };
49
+ const conformanceTrusted = !problem && !traceProblem && !!trace && o.trusted(traceReceiptRef(m)) && trace.receipt.traces.every(a => o.trusted(a.ref)) && o.trusted(m.conformanceReport);
50
+ const conformanceResult = evaluateModelConformance(conformanceReport, { model: effective, identity: conformanceIdentity, authenticated: conformanceTrusted, ...(identity?.canaryImplementationHash ? { canaryImplementationHash: identity.canaryImplementationHash } : {}) });
51
+ if (problem) {
52
+ modelResult.reasons.push(problem);
53
+ conformanceResult.reasons.push(problem);
54
+ }
55
+ if (traceProblem)
56
+ conformanceResult.reasons.push(traceProblem);
57
+ const currentModelReport = modelReport?.modelId === m.id && ['modelHash', 'configHash', 'commandHash'].every(key => modelReport.identity[key] === expectedIdentity[key]);
58
+ const stageState = (stage) => { const row = modelReport?.stages.find(s => s.stage === stage); return !problem && currentModelReport && o.trusted(m.report) && row?.complete && row.toolVersion === m.quint.version && row.method === stage && (row.status === 'pass' && row.exitCode === 0 || row.status === 'fail' && row.exitCode === 1) ? row.status : 'unknown'; };
59
+ const facts = { formalSyntax: { status: stageState('parse'), reasons: ['Syntax parsing is separate from model property checking'] }, formalTypecheck: { status: stageState('typecheck'), reasons: ['Typechecking is separate from model property checking'] }, formalModel: modelResult, implementationConformance: conformanceResult, formalBinding: bindingResult };
60
+ for (const [ruleId, fact] of Object.entries(facts)) {
61
+ const required = ruleId === 'formalSyntax' || ruleId === 'formalTypecheck' || ruleId === 'formalBinding' || risk === 'critical';
62
+ const selected = o.policy.rules[ruleId]?.severity;
63
+ const severity = required ? 'error' : selected ?? 'warn';
64
+ const bounds = `model=${m.id}; maxSteps=${m.maxSteps}; maxSamples=${m.maxSamples}; seed=${m.seed}; unbounded=false`;
65
+ const method = ruleId === 'formalModel' ? `; recorded methods: ${modelResult.stages.map(s => `${s.stage}/${s.backend}/${s.method}`).join(', ')}` : ruleId === 'implementationConformance' ? `; traces=${conformanceResult.counts.replayedTraces}; comparedStates=${conformanceResult.counts.comparedSteps}; calls=${conformanceResult.counts.implementationCalls}` : '';
66
+ evaluations.push({ ruleId, severity, status: fact.status, scope: ['model', m.id], evidenceIds: [...(ruleId === 'implementationConformance' && m.conformanceReport ? [m.conformanceReport, traceReceiptRef(m)] : ruleId === 'formalBinding' && contract ? [contract.sourceRef] : [m.report])], message: `${fact.reasons.join('; ') || `Current ${ruleId} evidence within the selected model scope`}; ${bounds}${method}`, remediation: 'Collect current model, trace and observed replay reports with the protected producer; retain configured bounds and obtain model/Driver mapping approval separately.' });
67
+ }
68
+ rows.push({ modelId: m.id, contractId: m.contractId, risk, model: modelResult, conformance: conformanceResult, binding: bindingResult });
69
+ }
70
+ const states = new Map();
71
+ for (const id of ['formalSyntax', 'formalTypecheck', 'formalModel', 'implementationConformance', 'formalBinding']) {
72
+ const selected = evaluations.filter(e => e.ruleId === id);
73
+ states.set(id, { status: worst(selected.map(e => e.status)), message: 'Per-model formal evidence; model properties, observed conformance and approved meaning are independent', evidenceIds: [...new Set(selected.flatMap(e => e.evidenceIds))] });
74
+ }
75
+ return { enabled: models.length > 0, models: rows, evaluations, states, policyChanged, conformanceObserved: worst(rows.map(r => worst([r.conformance.status, r.binding.status]))) };
76
+ }
77
+ const FormalModelConfigCopy = (m) => structuredClone(m);
78
+ //# sourceMappingURL=formal-evaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-evaluation.js","sourceRoot":"","sources":["../src/formal-evaluation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formal-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-worker.d.ts","sourceRoot":"","sources":["../src/formal-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { pathToFileURL } from 'node:url';
2
+ import { join } from 'node:path';
3
+ import { safeRead, hash, canonicalJson, FormalModelConfigSchema, evaluateModelConformance } from '@behavproof/core';
4
+ import { formalInputIdentity, formalTraceInputs, replayCommandHash, formalAdapters } from './formal.js';
5
+ import { writeScoped } from './project.js';
6
+ async function main() {
7
+ const root = process.argv[2];
8
+ if (!root)
9
+ throw Error('Replay root unavailable');
10
+ const m = FormalModelConfigSchema.parse(JSON.parse(process.argv[3] ?? 'null'));
11
+ if (!m.driver || !m.implementation || !m.conformanceReport)
12
+ throw Error('Incomplete replay selection');
13
+ const before = await formalInputIdentity(root, m), trace = await formalTraceInputs(root, m);
14
+ const load = async (ref) => { await safeRead(root, ref); return import(pathToFileURL(join(root, ref)).href); };
15
+ const driver = await load(m.driver), implementation = await load(m.implementation);
16
+ if (typeof driver.createDriver !== 'function')
17
+ throw Error('Driver must export createDriver(implementation)');
18
+ const identity = { ...before.model, commandHash: replayCommandHash(m), driverHash: before.driverHash, implementationHash: before.implementationHash, traceHash: trace.traceHash };
19
+ const { replay } = await formalAdapters();
20
+ const report = await replay.replayTraces({ modelId: m.id, identity, traces: trace.traces, implementation, createDriver: driver.createDriver, ...(m.canary ? { canary: { faultId: m.canary.faultId, implementationHash: before.canaryImplementationHash, implementation: await load(m.canary.implementation) } } : {}) });
21
+ if (hash(before) !== hash(await formalInputIdentity(root, m)) || trace.traceHash !== (await formalTraceInputs(root, m)).traceHash)
22
+ throw Error('Replay inputs changed during execution');
23
+ const output = process.argv[4];
24
+ if (!output)
25
+ throw Error('Fresh replay output required');
26
+ await writeScoped(root, output, canonicalJson(report) + '\n', true);
27
+ const evaluation = evaluateModelConformance(report, { model: m, identity, authenticated: true, ...(before.canaryImplementationHash ? { canaryImplementationHash: before.canaryImplementationHash } : {}) });
28
+ process.stdout.write(canonicalJson({ status: evaluation.status, scope: evaluation.scope, counts: evaluation.counts }) + '\n');
29
+ return evaluation.status === 'pass' ? 0 : 1;
30
+ }
31
+ main().then(code => { process.exitCode = code; }).catch(error => { process.stderr.write(`Formal replay: ${error.message}\n`); process.exitCode = 2; });
32
+ //# sourceMappingURL=formal-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal-worker.js","sourceRoot":"","sources":["../src/formal-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { type FormalModelConfig } from '@behavproof/core';
2
+ export declare const traceReceiptRef: (m: FormalModelConfig) => string;
3
+ export declare const traceDirectory: (m: FormalModelConfig) => string;
4
+ export declare const replayCommandHash: (m: FormalModelConfig) => string;
5
+ export declare function formalAdapters(): Promise<{
6
+ quint: typeof import("@behavproof/adapter-quint");
7
+ replay: typeof import("@behavproof/adapter-model-test");
8
+ }>;
9
+ export declare function formalInputIdentity(root: string, m: FormalModelConfig): Promise<{
10
+ canaryImplementationHash?: string;
11
+ implementationHash?: string;
12
+ driverHash?: string;
13
+ model: {
14
+ modelHash: string;
15
+ configHash: string;
16
+ commandHash: string;
17
+ };
18
+ }>;
19
+ export declare function formalTraceInputs(root: string, m: FormalModelConfig, readJson?: (ref: string) => Promise<unknown>, readBytes?: (ref: string) => Promise<Uint8Array>): Promise<{
20
+ receipt: {
21
+ schemaVersion: 1;
22
+ modelId: string;
23
+ identity: {
24
+ modelHash: string;
25
+ configHash: string;
26
+ commandHash: string;
27
+ driverHash?: string | undefined;
28
+ implementationHash?: string | undefined;
29
+ traceHash?: string | undefined;
30
+ };
31
+ toolVersion: string;
32
+ backend: "typescript" | "rust";
33
+ maxSteps: number;
34
+ maxSamples: number;
35
+ seed: string;
36
+ traces: {
37
+ ref: string;
38
+ sha256: string;
39
+ }[];
40
+ };
41
+ traces: import("@behavproof/adapter-model-test").ReplayInputTrace[];
42
+ traceHash: string;
43
+ }>;
44
+ export declare function executeFormal(root: string, action: string, values: Record<string, unknown>): Promise<{
45
+ exitCode: number;
46
+ report: {
47
+ models: {
48
+ id: string;
49
+ model: string;
50
+ contractId: string;
51
+ properties: string[];
52
+ maxSteps: number;
53
+ seed: string;
54
+ missing: string[];
55
+ }[];
56
+ discovered: string[];
57
+ notice: string;
58
+ };
59
+ } | {
60
+ exitCode: number;
61
+ report: {
62
+ models: ({
63
+ schemaVersion: 1;
64
+ modelId: string;
65
+ identity: {
66
+ modelHash: string;
67
+ configHash: string;
68
+ commandHash: string;
69
+ driverHash?: string | undefined;
70
+ implementationHash?: string | undefined;
71
+ traceHash?: string | undefined;
72
+ };
73
+ stages: {
74
+ stage: "parse" | "typecheck" | "test" | "run" | "verify";
75
+ status: "unknown" | "pass" | "fail";
76
+ complete: boolean;
77
+ exitCode: number | null;
78
+ toolVersion: string;
79
+ backend: "quint" | "typescript" | "rust" | "apalache" | "tlc";
80
+ method: "parse" | "typecheck" | "spec_test" | "simulation" | "bounded_model_check" | "finite_state_check";
81
+ properties: string[];
82
+ diagnostics: string[];
83
+ maxSteps?: number | undefined;
84
+ maxSamples?: number | undefined;
85
+ seed?: string | undefined;
86
+ traceSeed?: string | undefined;
87
+ backendVersion?: string | undefined;
88
+ stdoutHash?: string | undefined;
89
+ stderrHash?: string | undefined;
90
+ artifacts?: {
91
+ ref: string;
92
+ sha256: string;
93
+ }[] | undefined;
94
+ }[];
95
+ } | {
96
+ schemaVersion: 1;
97
+ modelId: string;
98
+ identity: {
99
+ modelHash: string;
100
+ configHash: string;
101
+ commandHash: string;
102
+ driverHash?: string | undefined;
103
+ implementationHash?: string | undefined;
104
+ traceHash?: string | undefined;
105
+ };
106
+ runner: string;
107
+ observation: "module-functions" | "unverified";
108
+ complete: boolean;
109
+ diagnostics: string[];
110
+ traces: {
111
+ id: string;
112
+ complete: boolean;
113
+ steps: {
114
+ index: number;
115
+ action: string;
116
+ status: "unknown" | "pass" | "fail";
117
+ expected: import("zod").JSONType;
118
+ comparisonCount: number;
119
+ implementationCalls: number;
120
+ parameters?: import("zod").JSONType | undefined;
121
+ actual?: import("zod").JSONType | undefined;
122
+ diagnostic?: string | undefined;
123
+ }[];
124
+ }[];
125
+ canary?: {
126
+ faultId: string;
127
+ implementationHash: string;
128
+ originalImplementationHash: string;
129
+ driverHash: string;
130
+ traceHash: string;
131
+ observedCalls: number;
132
+ comparedSteps: number;
133
+ detectedMismatches: number;
134
+ failure?: {
135
+ traceId: string;
136
+ index: number;
137
+ action: string;
138
+ implementationCalls: number;
139
+ expected: import("zod").JSONType;
140
+ actual: import("zod").JSONType;
141
+ } | undefined;
142
+ } | undefined;
143
+ })[];
144
+ notice: string;
145
+ discovered?: never;
146
+ };
147
+ }>;
148
+ //# sourceMappingURL=formal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal.d.ts","sourceRoot":"","sources":["../src/formal.ts"],"names":[],"mappings":"AACA,OAAM,EAA0J,KAAK,iBAAiB,EAA0B,MAAI,kBAAkB,CAAC;AAEvO,eAAO,MAAM,eAAe,GAAE,GAAE,iBAAiB,WAA4C,CAAC;AAC9F,eAAO,MAAM,cAAc,GAAE,GAAE,iBAAiB,WAAyG,CAAC;AAC1J,eAAO,MAAM,iBAAiB,GAAE,GAAE,iBAAiB,WAA0E,CAAC;AAC9H,wBAAsB,cAAc;;;GAGnC;AACD,wBAAsB,mBAAmB,CAAC,IAAI,EAAC,MAAM,EAAC,CAAC,EAAC,iBAAiB;;;;;;;;;GAOxE;AACD,wBAAsB,iBAAiB,CAAC,IAAI,EAAC,MAAM,EAAC,CAAC,EAAC,iBAAiB,EAAC,QAAQ,GAAC,CAAC,GAAG,EAAC,MAAM,KAAG,OAAO,CAAC,OAAO,CAA6B,EAAC,SAAS,GAAC,CAAC,GAAG,EAAC,MAAM,KAAG,OAAO,CAAC,UAAU,CAAyB;;;;;;;;;;;;;;;;;;;;;;;;GAU9M;AACD,wBAAsB,aAAa,CAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,CAAC,MAAM,EAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6B1F"}
package/dist/formal.js ADDED
@@ -0,0 +1,99 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { safeRead, safeReadJson, hash, hashBytes, canonicalJson, FormalModelReportSchema, FormalTraceReceiptSchema, ModelConformanceReportSchema } from '@behavproof/core';
5
+ import { config, fileList, writeScoped } from './project.js';
6
+ export const traceReceiptRef = (m) => m.traceReceipt ?? `${m.report}.traces.json`;
7
+ export const traceDirectory = (m) => m.traceDirectory ?? join(dirname(m.report), `${hash({ id: m.id }).slice(0, 16)}.traces`).replaceAll('\\', '/');
8
+ export const replayCommandHash = (m) => hash({ adapter: '@behavproof/adapter-model-test/1', nodeMajor: 24, model: m });
9
+ export async function formalAdapters() {
10
+ try {
11
+ return { quint: await import('@behavproof/adapter-quint'), replay: await import('@behavproof/adapter-model-test') };
12
+ }
13
+ catch (error) {
14
+ if (error.code === 'ERR_MODULE_NOT_FOUND' || error.code === 'MODULE_NOT_FOUND')
15
+ throw Error('Optional formal adapters unavailable; explicitly install @behavproof/adapter-quint and @behavproof/adapter-model-test');
16
+ throw error;
17
+ }
18
+ }
19
+ export async function formalInputIdentity(root, m) {
20
+ const { quint } = await formalAdapters(), sources = await quint.readModelInputs(root, m);
21
+ const sourceMap = async (paths) => { const out = Object.create(null); for (const ref of [...new Set(paths)].sort())
22
+ out[ref] = hashBytes(await safeRead(root, ref)); return out; };
23
+ const driver = m.driver ? hash(await sourceMap([m.driver, ...(m.driverSources ?? [])])) : undefined;
24
+ const implementation = m.implementation ? hash(await sourceMap([m.implementation, ...m.implementationSources])) : undefined;
25
+ const canary = m.canary ? hash(await sourceMap([m.canary.implementation, ...m.implementationSources, ...(m.implementation ? [m.implementation] : [])])) : undefined;
26
+ return { model: { modelHash: sources.modelHash, configHash: hash(m), commandHash: quint.quintCommandHash(m) }, ...(driver ? { driverHash: driver } : {}), ...(implementation ? { implementationHash: implementation } : {}), ...(canary ? { canaryImplementationHash: canary } : {}) };
27
+ }
28
+ export async function formalTraceInputs(root, m, readJson = ref => safeReadJson(root, ref), readBytes = ref => safeRead(root, ref)) {
29
+ const { replay, quint } = await formalAdapters(), receipt = FormalTraceReceiptSchema.parse(await readJson(traceReceiptRef(m))), current = await quint.readModelInputs(root, m);
30
+ if (receipt.modelId !== m.id || receipt.identity.modelHash !== current.modelHash || receipt.identity.configHash !== hash(m) || receipt.identity.commandHash !== quint.quintCommandHash(m) || receipt.toolVersion !== m.quint.version || receipt.maxSteps !== m.maxSteps || receipt.maxSamples !== m.maxSamples || receipt.seed !== m.seed)
31
+ throw Error('Trace generation/model/config identity mismatch');
32
+ const prefix = traceDirectory(m) + '/', traces = [];
33
+ for (const a of receipt.traces) {
34
+ if (!a.ref.startsWith(prefix) || !/^trace_\d+\.itf\.json$/.test(a.ref.slice(prefix.length)))
35
+ throw Error('Trace artifact outside configured trace directory');
36
+ const bytes = await readBytes(a.ref);
37
+ if (hashBytes(bytes) !== a.sha256)
38
+ throw Error('Trace artifact digest mismatch');
39
+ traces.push(replay.readITF(JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)), { id: a.ref.slice(prefix.length) }));
40
+ }
41
+ return { receipt, traces, traceHash: hash(traces) };
42
+ }
43
+ export async function executeFormal(root, action, values) {
44
+ const cfg = await config(root, values.config, values.profile), files = await fileList(root), models = cfg.formal?.models ?? [];
45
+ if (action === 'discover')
46
+ return { exitCode: 0, report: { models: models.map(m => ({ id: m.id, model: m.model, contractId: m.contractId, properties: m.properties, maxSteps: m.maxSteps, seed: m.seed, missing: [m.model, ...m.modelSources, ...(m.driver ? [m.driver] : []), ...(m.implementation ? [m.implementation] : [])].filter(p => !files.includes(p)) })), discovered: files.filter(p => p.endsWith('.qnt')), notice: 'Static inventory only; no model, Driver or tool was executed.' } };
47
+ if (!['check', 'replay'].includes(action))
48
+ throw Error('Expected formal discover|check|replay');
49
+ const selected = models.filter(m => !values.model || m.model === values.model || m.id === values.model);
50
+ if (!selected.length || values.model && selected.length !== 1)
51
+ throw Error('Select a configured formal model with --model; formal support is opt-in');
52
+ const { quint } = await formalAdapters(), results = [];
53
+ let exitCode = 0;
54
+ for (const m of selected) {
55
+ if (action === 'check') {
56
+ const stages = [], before = await formalInputIdentity(root, m), runId = randomUUID();
57
+ for (const stage of m.checks) {
58
+ const result = await quint.runQuint({ root, model: m, stage, outputDirectory: `.behavproof/formal-runs/${runId}/${stage}` });
59
+ stages.push(result.result);
60
+ if (stage === 'run' && result.result.status === 'pass') {
61
+ const traces = [];
62
+ for (const artifact of result.result.artifacts ?? []) {
63
+ if (!/\/trace_\d+\.itf\.json$/.test(artifact.ref))
64
+ continue;
65
+ const ref = `${traceDirectory(m)}/${artifact.ref.split('/').at(-1)}`, bytes = await safeRead(root, artifact.ref);
66
+ await writeScoped(root, ref, new TextDecoder('utf-8', { fatal: true }).decode(bytes));
67
+ traces.push({ ref, sha256: hashBytes(bytes) });
68
+ }
69
+ await writeScoped(root, traceReceiptRef(m), canonicalJson({ schemaVersion: 1, modelId: m.id, identity: result.identity, toolVersion: m.quint.version, backend: 'typescript', maxSteps: m.maxSteps, maxSamples: m.maxSamples, seed: m.seed, traces }) + '\n');
70
+ }
71
+ }
72
+ if (hash(before) !== hash(await formalInputIdentity(root, m)))
73
+ throw Error('Formal inputs changed during execution');
74
+ const report = FormalModelReportSchema.parse({ schemaVersion: 1, modelId: m.id, identity: before.model, stages });
75
+ await writeScoped(root, m.report, canonicalJson(report) + '\n');
76
+ results.push(report);
77
+ if (stages.some(s => s.status === 'unknown'))
78
+ exitCode = 2;
79
+ else if (exitCode === 0 && stages.some(s => s.status === 'fail'))
80
+ exitCode = 1;
81
+ }
82
+ else {
83
+ if (!m.driver || !m.implementation || !m.conformanceReport)
84
+ throw Error('Model replay requires configured Driver, implementation and conformanceReport');
85
+ const worker = fileURLToPath(new URL('./formal-worker.js', import.meta.url));
86
+ const freshReport = `.behavproof/formal-replays/${randomUUID()}.json`;
87
+ const result = await quint.runBounded(process.execPath, [worker, root, canonicalJson(m), freshReport], { cwd: root, timeoutMs: m.timeoutMs });
88
+ if (!result.completed || result.exitCode !== 0 && result.exitCode !== 1)
89
+ throw Error(`Formal replay infrastructure: ${result.diagnostics.join('; ') || result.stderr || 'worker did not complete'}`);
90
+ const report = ModelConformanceReportSchema.parse(await safeReadJson(root, freshReport));
91
+ await writeScoped(root, m.conformanceReport, canonicalJson(report) + '\n');
92
+ results.push(report);
93
+ if (result.exitCode !== 0 && exitCode === 0)
94
+ exitCode = 1;
95
+ }
96
+ }
97
+ return { exitCode, report: { models: results, notice: 'Explicit local tool/Driver execution. Gate authority and human-approved model meaning require independent authenticated registration.' } };
98
+ }
99
+ //# sourceMappingURL=formal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formal.js","sourceRoot":"","sources":["../src/formal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type RegistrySnapshot, type Risk, type Severity, type RulePolicy } from '@behavproof/core';
2
+ /** Static candidates and explicit unknowns; never behavioral equivalence. */
3
+ export declare function currentImpact(root: string, inputs: readonly string[], files: readonly string[], changed: readonly string[], registry: RegistrySnapshot, diffKnown: boolean, claimScopes?: readonly {
4
+ contractId: string;
5
+ targetRef: string;
6
+ }[]): Promise<{
7
+ status: "unknown" | "pass";
8
+ unknown: string[];
9
+ scope: string[];
10
+ message: string;
11
+ affectedFiles: string[];
12
+ contractIds: string[];
13
+ calls: {
14
+ file: string;
15
+ callee: string;
16
+ }[];
17
+ }>;
18
+ export declare function impactSeverity(risk: Risk, rule?: RulePolicy): Severity;
19
+ export declare const impactRemediation = "Review changed files, affected contracts and unresolved dependencies; complete the hashed source scope or supported mappings, then rerun check. Passing tests alone cannot resolve unknown impact.";
20
+ //# sourceMappingURL=impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.d.ts","sourceRoot":"","sources":["../src/impact.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,gBAAgB,EAAC,KAAK,IAAI,EAAC,KAAK,QAAQ,EAAC,KAAK,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGxG,6EAA6E;AAC7E,wBAAsB,aAAa,CAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,MAAM,EAAE,EAAC,KAAK,EAAC,SAAS,MAAM,EAAE,EAAC,OAAO,EAAC,SAAS,MAAM,EAAE,EAAC,QAAQ,EAAC,gBAAgB,EAAC,SAAS,EAAC,OAAO,EAAC,WAAW,GAAC,SAAS;IAAC,UAAU,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAA;CAAC,EAAK;;;;;;;;;;;GASpO;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAC,IAAI,EAAC,IAAI,CAAC,EAAC,UAAU,GAAE,QAAQ,CAAoF;AACvJ,eAAO,MAAM,iBAAiB,uMAAqM,CAAC"}
package/dist/impact.js ADDED
@@ -0,0 +1,23 @@
1
+ import { analyzeImpact } from '@behavproof/contract-registry';
2
+ import { safeRead } from '@behavproof/core';
3
+ const isCode = (path) => /\.[cm]?[jt]sx?$/.test(path);
4
+ /** Static candidates and explicit unknowns; never behavioral equivalence. */
5
+ export async function currentImpact(root, inputs, files, changed, registry, diffKnown, claimScopes = []) {
6
+ const sources = {}, mappings = {};
7
+ for (const path of inputs.filter(isCode))
8
+ sources[path] = (await safeRead(root, path)).toString('utf8');
9
+ for (const c of registry.contracts) {
10
+ const path = c.sourceRef.replace(/:\d+(?::\d+)?$/, '');
11
+ (mappings[path] ??= []).push(c.id);
12
+ }
13
+ for (const s of claimScopes)
14
+ if (registry.contracts.some(c => c.id === s.contractId))
15
+ (mappings[s.targetRef.split('#')[0]] ??= []).push(s.contractId);
16
+ const result = analyzeImpact(sources, changed.filter(isCode), mappings);
17
+ const unknown = [...result.unknown, ...files.filter(path => isCode(path) && !inputs.includes(path)).map(path => `${path}: source is outside the hashed impact inventory`), ...changed.filter(path => isCode(path) && !Object.hasOwn(sources, path)).map(path => `${path}: changed/deleted source is unavailable to the current graph`), ...(!diffKnown ? ['Git comparison or tested-commit graph is unverified'] : [])].sort();
18
+ const noCodeChange = diffKnown && !changed.some(isCode);
19
+ return { ...result, status: noCodeChange || unknown.length === 0 ? 'pass' : 'unknown', unknown: noCodeChange ? [] : unknown, scope: inputs.filter(isCode), message: noCodeChange ? 'No code changes in the verified Git comparison' : unknown.length ? `Static impact is unresolved: ${unknown.join('; ')}` : 'Static dependency candidates resolved; behavioral equivalence is not established' };
20
+ }
21
+ export function impactSeverity(risk, rule) { return risk === 'critical' ? 'error' : rule?.severity ?? (risk === 'standard' ? 'warn' : 'off'); }
22
+ export const impactRemediation = 'Review changed files, affected contracts and unresolved dependencies; complete the hashed source scope or supported mappings, then rerun check. Passing tests alone cannot resolve unknown impact.';
23
+ //# sourceMappingURL=impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../src/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}