configproof 0.3.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 +217 -0
- package/dist/adapters/dotenv.d.ts +3 -0
- package/dist/adapters/dotenv.js +277 -0
- package/dist/adapters/dotenv.js.map +1 -0
- package/dist/adapters/native-env.d.ts +7 -0
- package/dist/adapters/native-env.js +196 -0
- package/dist/adapters/native-env.js.map +1 -0
- package/dist/adapters/registry.d.ts +7 -0
- package/dist/adapters/registry.js +30 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/agent/server.d.ts +15 -0
- package/dist/agent/server.js +254 -0
- package/dist/agent/server.js.map +1 -0
- package/dist/analysis/diagnose.d.ts +64 -0
- package/dist/analysis/diagnose.js +142 -0
- package/dist/analysis/diagnose.js.map +1 -0
- package/dist/analysis/history.d.ts +52 -0
- package/dist/analysis/history.js +119 -0
- package/dist/analysis/history.js.map +1 -0
- package/dist/analysis/policy.d.ts +161 -0
- package/dist/analysis/policy.js +192 -0
- package/dist/analysis/policy.js.map +1 -0
- package/dist/analysis/provenance.d.ts +45 -0
- package/dist/analysis/provenance.js +144 -0
- package/dist/analysis/provenance.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +286 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/analyze.d.ts +46 -0
- package/dist/core/analyze.js +168 -0
- package/dist/core/analyze.js.map +1 -0
- package/dist/core/collect.d.ts +5 -0
- package/dist/core/collect.js +147 -0
- package/dist/core/collect.js.map +1 -0
- package/dist/core/export.d.ts +53 -0
- package/dist/core/export.js +155 -0
- package/dist/core/export.js.map +1 -0
- package/dist/core/io.d.ts +13 -0
- package/dist/core/io.js +100 -0
- package/dist/core/io.js.map +1 -0
- package/dist/core/privacy.d.ts +25 -0
- package/dist/core/privacy.js +113 -0
- package/dist/core/privacy.js.map +1 -0
- package/dist/core/schema.d.ts +2149 -0
- package/dist/core/schema.js +181 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/demo.d.ts +1 -0
- package/dist/demo.js +45 -0
- package/dist/demo.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/launcher.d.ts +27 -0
- package/dist/launcher.js +122 -0
- package/dist/launcher.js.map +1 -0
- package/dist/report/html.d.ts +5 -0
- package/dist/report/html.js +109 -0
- package/dist/report/html.js.map +1 -0
- package/dist/runtime/api.d.ts +44 -0
- package/dist/runtime/api.js +29 -0
- package/dist/runtime/api.js.map +1 -0
- package/dist/runtime/callsite.d.ts +3 -0
- package/dist/runtime/callsite.js +61 -0
- package/dist/runtime/callsite.js.map +1 -0
- package/dist/runtime/children.d.ts +8 -0
- package/dist/runtime/children.js +69 -0
- package/dist/runtime/children.js.map +1 -0
- package/dist/runtime/environment.d.ts +3 -0
- package/dist/runtime/environment.js +53 -0
- package/dist/runtime/environment.js.map +1 -0
- package/dist/runtime/preload.d.ts +1 -0
- package/dist/runtime/preload.js +117 -0
- package/dist/runtime/preload.js.map +1 -0
- package/dist/runtime/recorder.d.ts +59 -0
- package/dist/runtime/recorder.js +254 -0
- package/dist/runtime/recorder.js.map +1 -0
- package/dist/runtime/workers.d.ts +12 -0
- package/dist/runtime/workers.js +127 -0
- package/dist/runtime/workers.js.map +1 -0
- package/docs/ARCHITECTURE.md +54 -0
- package/docs/COMPATIBILITY.md +24 -0
- package/docs/PRIVACY.md +17 -0
- package/docs/VALIDATION.md +42 -0
- package/fixtures/bypass/app.cjs +6 -0
- package/fixtures/bypass/early.cjs +2 -0
- package/fixtures/child-process/child.cjs +2 -0
- package/fixtures/child-process/parent.cjs +5 -0
- package/fixtures/custom-target/app.cjs +4 -0
- package/fixtures/custom-target/sample.env +1 -0
- package/fixtures/esm/app.mjs +5 -0
- package/fixtures/exit-code/app.cjs +4 -0
- package/fixtures/failure-boundary/app.cjs +7 -0
- package/fixtures/load-order/app.cjs +9 -0
- package/fixtures/load-order/first.env +1 -0
- package/fixtures/load-order/second.env +1 -0
- package/fixtures/manifest.json +16 -0
- package/fixtures/native-env/app.cjs +6 -0
- package/fixtures/native-env/failure.cjs +4 -0
- package/fixtures/native-env/sample.env +1 -0
- package/fixtures/native-env/startup.cjs +2 -0
- package/fixtures/runtime-mutation/app.cjs +12 -0
- package/fixtures/source-map/input.ts +5 -0
- package/fixtures/source-map/tsconfig.json +7 -0
- package/fixtures/stale-inheritance/app.cjs +4 -0
- package/fixtures/stale-inheritance/sample.env +1 -0
- package/fixtures/v03-manifest.json +32 -0
- package/fixtures/worker/parent.cjs +3 -0
- package/fixtures/worker/worker.cjs +2 -0
- package/fixtures/worker-modes/parent.cjs +17 -0
- package/fixtures/worker-modes/worker.cjs +4 -0
- package/package.json +64 -0
- package/policies/configtrace-policy.yaml +23 -0
- package/policies/issue-share.yaml +12 -0
- package/policies/minimal.yaml +8 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VerificationPolicySchema = void 0;
|
|
4
|
+
exports.readVerificationPolicy = readVerificationPolicy;
|
|
5
|
+
exports.verifyTrace = verifyTrace;
|
|
6
|
+
exports.verificationText = verificationText;
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const yaml_1 = require("yaml");
|
|
9
|
+
const schema_1 = require("../core/schema");
|
|
10
|
+
const analyze_1 = require("../core/analyze");
|
|
11
|
+
const privacy_1 = require("../core/privacy");
|
|
12
|
+
const io_1 = require("../core/io");
|
|
13
|
+
const feature = zod_1.z.enum(['environment', 'startup', 'dotenv', 'source-maps', 'children', 'native', 'native-env', 'workers', 'adapters']);
|
|
14
|
+
const RuleSchema = zod_1.z.object({
|
|
15
|
+
required: zod_1.z.boolean().optional(), missing: zod_1.z.boolean().optional(),
|
|
16
|
+
read: zod_1.z.enum(['required', 'forbidden', 'any']).optional(),
|
|
17
|
+
immutableAfterFirstRead: zod_1.z.boolean().optional(),
|
|
18
|
+
allowedOrigins: zod_1.z.array(zod_1.z.string().min(1).max(512)).min(1).max(32).optional(),
|
|
19
|
+
forbiddenOrigins: zod_1.z.array(zod_1.z.string().min(1).max(512)).min(1).max(32).optional(),
|
|
20
|
+
consistentProvenance: zod_1.z.boolean().optional(), noLoaderSkip: zod_1.z.boolean().optional(),
|
|
21
|
+
minimumConfidence: zod_1.z.enum(['observed', 'derived', 'inferred']).default('inferred'),
|
|
22
|
+
}).strict().superRefine((rule, ctx) => {
|
|
23
|
+
if (rule.required && rule.missing)
|
|
24
|
+
ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: 'A key cannot be required and required missing.' });
|
|
25
|
+
});
|
|
26
|
+
exports.VerificationPolicySchema = zod_1.z.object({
|
|
27
|
+
version: zod_1.z.literal(1).default(1),
|
|
28
|
+
rules: zod_1.z.record(zod_1.z.string().regex(/^[A-Za-z_*?][A-Za-z0-9_.*?-]{0,127}$/), RuleSchema)
|
|
29
|
+
.refine(rules => Object.keys(rules).length <= 64, 'At most 64 rules are allowed.').default({}),
|
|
30
|
+
coverage: zod_1.z.object({
|
|
31
|
+
requireComplete: zod_1.z.boolean().default(true), maxDroppedEvents: zod_1.z.number().int().nonnegative().max(100000).default(0),
|
|
32
|
+
requireFeatures: zod_1.z.array(feature).max(16).default(['environment']),
|
|
33
|
+
forbidNotices: zod_1.z.array(schema_1.NoticeSchema).max(64).default([]),
|
|
34
|
+
}).strict().default({}),
|
|
35
|
+
}).strict();
|
|
36
|
+
function readVerificationPolicy(file) {
|
|
37
|
+
try {
|
|
38
|
+
const doc = (0, yaml_1.parseDocument)((0, io_1.readBounded)(file, 65536), { uniqueKeys: true, schema: 'core', strict: true });
|
|
39
|
+
if (doc.errors.length)
|
|
40
|
+
throw new Error('Invalid document');
|
|
41
|
+
return exports.VerificationPolicySchema.parse(doc.toJS({ maxAliasCount: 0 }));
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof io_1.UserError)
|
|
45
|
+
throw error;
|
|
46
|
+
throw new io_1.UserError('Invalid configuration contract. Unknown fields, duplicate keys, and YAML aliases are rejected.', 65);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const level = { unknown: 0, inferred: 1, derived: 2, observed: 3 };
|
|
50
|
+
function originIdentity(e) {
|
|
51
|
+
const o = e.origin;
|
|
52
|
+
if (!o || o.kind === 'unknown' || o.confidence === 'unknown')
|
|
53
|
+
return undefined;
|
|
54
|
+
if (['dotenv', 'native-env'].includes(o.kind) && !o.file)
|
|
55
|
+
return undefined;
|
|
56
|
+
return `${o.kind}${o.kind === 'adapter' && o.adapterId ? ':' + o.adapterId : o.file ? ':' + o.file : ''}`;
|
|
57
|
+
}
|
|
58
|
+
/** Policies are evaluated over captured evidence. Absence under inadequate coverage is not a pass. */
|
|
59
|
+
function verifyTrace(trace, supplied, options = {}) {
|
|
60
|
+
let policy;
|
|
61
|
+
try {
|
|
62
|
+
policy = exports.VerificationPolicySchema.parse(supplied);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new io_1.UserError('Invalid configuration verification policy.', 65);
|
|
66
|
+
}
|
|
67
|
+
const processId = (0, analyze_1.processFor)(trace, options.processId);
|
|
68
|
+
const info = trace.processes.find(p => p.id === processId);
|
|
69
|
+
const complete = trace.capture.status === 'complete' && !!info?.ended;
|
|
70
|
+
const insensitive = (info?.caseMode || trace.capture.caseMode) === 'insensitive';
|
|
71
|
+
const events = trace.events.filter(e => e.processId === processId);
|
|
72
|
+
const keys = [...new Set([...events.flatMap(e => e.key ? [e.key] : []), ...trace.capture.watch.filter(k => !/[*?]/.test(k)).map(k => insensitive ? k.toUpperCase() : k)])].sort();
|
|
73
|
+
const checks = [];
|
|
74
|
+
const evidenceCache = new Map();
|
|
75
|
+
const referenceCache = new Map();
|
|
76
|
+
const add = (rule, status, reason, key, evidence = []) => checks.push({ key, rule, status, reason, evidenceIds: evidence.slice(0, 12).map(e => e.id) });
|
|
77
|
+
if (!processId || !info)
|
|
78
|
+
add('process', 'inconclusive', 'No selected execution context was captured.');
|
|
79
|
+
if (policy.coverage.requireComplete)
|
|
80
|
+
add('coverage.complete', complete ? 'pass' : 'inconclusive', complete ? 'The selected stream and artifact are complete within their declarations.' : 'The artifact or selected stream is incomplete.');
|
|
81
|
+
const dropped = trace.processes.reduce((n, p) => n + p.eventsDropped, 0);
|
|
82
|
+
add('coverage.maxDroppedEvents', dropped <= policy.coverage.maxDroppedEvents ? 'pass' : 'inconclusive', `${dropped} recorded dropped events; evidence cannot prove omitted operations.`);
|
|
83
|
+
for (const expected of policy.coverage.requireFeatures) {
|
|
84
|
+
const declaration = trace.coverage.find(c => c.feature === expected);
|
|
85
|
+
const present = declaration && ['active', 'limited'].includes(declaration.status);
|
|
86
|
+
add(`coverage.${expected}`, present ? 'pass' : 'inconclusive', present ? 'Requested feature has an active/limited coverage declaration; its listed bypasses still apply.' : 'Requested feature has no usable coverage declaration.');
|
|
87
|
+
}
|
|
88
|
+
for (const notice of policy.coverage.forbidNotices)
|
|
89
|
+
add('coverage.forbidNotices', trace.capture.notices.includes(notice) ? 'violation' : complete ? 'pass' : 'inconclusive', trace.capture.notices.includes(notice) ? `Forbidden capture notice: ${notice}.` : `Notice ${notice} was not captured.`);
|
|
90
|
+
const loadersRemoved = trace.capture.notices.includes('loader_details_removed');
|
|
91
|
+
for (const [pattern, rule] of Object.entries(policy.rules)) {
|
|
92
|
+
const matching = keys.filter(key => (0, privacy_1.globToRegex)(pattern, insensitive).test(key));
|
|
93
|
+
if (!matching.length) {
|
|
94
|
+
add('selector', 'inconclusive', 'Rule matched no captured key. Add a literal --watch selector before asserting absence.', pattern);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
for (const key of matching) {
|
|
98
|
+
let evidence = evidenceCache.get(key);
|
|
99
|
+
if (!evidence) {
|
|
100
|
+
evidence = (0, analyze_1.evidenceFor)(trace, key, processId);
|
|
101
|
+
evidenceCache.set(key, evidence);
|
|
102
|
+
}
|
|
103
|
+
const actual = evidence.events.filter(e => ['baseline', 'read', 'write', 'delete'].includes(e.operation));
|
|
104
|
+
const consumed = evidence.reads.length ? evidence.reads : actual.length ? [actual.at(-1)] : [];
|
|
105
|
+
const usable = complete && actual.length > 0;
|
|
106
|
+
if (rule.required || rule.missing) {
|
|
107
|
+
const expected = rule.missing ? 'missing' : 'present';
|
|
108
|
+
const violating = consumed.filter(e => e.value?.state !== 'omitted' && e.value?.state !== expected);
|
|
109
|
+
const unknown = !consumed.length || consumed.some(e => !e.value || e.value.state === 'omitted');
|
|
110
|
+
add(rule.missing ? 'missing' : 'required', violating.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', violating.length ? `Captured consumption/final state contradicts required state ${expected}.` : unknown ? 'No comparable consumption/final state was observed.' : `Captured application reads (or final captured state when unread) satisfy ${expected}.`, key, violating.length ? violating : consumed);
|
|
111
|
+
}
|
|
112
|
+
if (rule.read && rule.read !== 'any') {
|
|
113
|
+
const exists = evidence.reads.length > 0;
|
|
114
|
+
const passes = rule.read === 'required' ? exists : !exists;
|
|
115
|
+
add('read', exists ? passes ? 'pass' : 'violation' : usable ? passes ? 'pass' : 'violation' : 'inconclusive', exists ? `${evidence.reads.length} application reads were captured.` : 'No application read was captured in the selected context.', key, evidence.reads);
|
|
116
|
+
}
|
|
117
|
+
if (rule.immutableAfterFirstRead) {
|
|
118
|
+
const first = evidence.reads[0];
|
|
119
|
+
let prior = first?.value;
|
|
120
|
+
const changes = [];
|
|
121
|
+
let unknown = !first || prior?.state === 'omitted';
|
|
122
|
+
for (const e of actual.filter(e => first && e.seq > first.seq)) {
|
|
123
|
+
if (e.operation === 'baseline')
|
|
124
|
+
continue;
|
|
125
|
+
const equality = (0, analyze_1.compareValue)(prior, e.value, trace.comparison.mode !== 'none');
|
|
126
|
+
if (equality === 'different')
|
|
127
|
+
changes.push(e);
|
|
128
|
+
if (equality === 'incomparable' || equality === 'not-observed')
|
|
129
|
+
unknown = true;
|
|
130
|
+
prior = e.value;
|
|
131
|
+
}
|
|
132
|
+
add('immutableAfterFirstRead', changes.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', changes.length ? 'A value/state transition was captured after the first application read.' : unknown ? 'No comparable first-read sequence is available.' : 'No value/state transition was captured after the first application read.', key, first ? [first, ...changes] : []);
|
|
133
|
+
}
|
|
134
|
+
for (const kind of ['allowedOrigins', 'forbiddenOrigins']) {
|
|
135
|
+
const patterns = rule[kind];
|
|
136
|
+
if (!patterns)
|
|
137
|
+
continue;
|
|
138
|
+
let unknown = !consumed.length || loadersRemoved || trace.exported;
|
|
139
|
+
const violating = [];
|
|
140
|
+
for (const e of consumed) {
|
|
141
|
+
const origin = originIdentity(e);
|
|
142
|
+
if (!origin || level[e.origin?.confidence || 'unknown'] < level[rule.minimumConfidence] || e.value?.state !== 'present') {
|
|
143
|
+
unknown = true;
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const matches = patterns.some(p => (0, privacy_1.globToRegex)(p).test(origin));
|
|
147
|
+
if (kind === 'allowedOrigins' ? !matches : matches)
|
|
148
|
+
violating.push(e);
|
|
149
|
+
}
|
|
150
|
+
add(kind, trace.exported ? 'inconclusive' : violating.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', trace.exported ? 'Export can alter source identities; source contracts require original local evidence.' : violating.length ? 'Captured origin contradicts the configured source rule.' : unknown ? 'Origin identity/confidence is insufficient for this rule.' : 'Captured origins satisfy this source rule at the requested confidence threshold.', key, violating.length ? violating : consumed);
|
|
151
|
+
}
|
|
152
|
+
const loaderCoverage = trace.coverage.some(c => ['dotenv', 'native-env'].includes(c.feature) && ['active', 'limited'].includes(c.status));
|
|
153
|
+
if (rule.noLoaderSkip)
|
|
154
|
+
add('noLoaderSkip', evidence.skips.length ? 'violation' : !usable || loadersRemoved || !loaderCoverage ? 'inconclusive' : 'pass', evidence.skips.length ? 'A loader candidate skip was captured.' : 'No loader skip was captured for this key.', key, evidence.skips);
|
|
155
|
+
if (rule.consistentProvenance) {
|
|
156
|
+
if (!options.reference) {
|
|
157
|
+
add('consistentProvenance', 'inconclusive', 'A reference trace is required for paired provenance verification.', key);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
let other = referenceCache.get(key);
|
|
161
|
+
if (!other) {
|
|
162
|
+
other = (0, analyze_1.evidenceFor)(options.reference, key, options.referenceProcess);
|
|
163
|
+
referenceCache.set(key, other);
|
|
164
|
+
}
|
|
165
|
+
const a = evidence.reads.map(originIdentity), b = other.reads.map(originIdentity);
|
|
166
|
+
const unknown = !a.length || !b.length || a.some(x => !x) || b.some(x => !x)
|
|
167
|
+
|| [...evidence.reads, ...other.reads].some(e => level[e.origin?.confidence || 'unknown'] < level[rule.minimumConfidence])
|
|
168
|
+
|| !options.reference.processes.find(p => p.id === other.processId)?.ended
|
|
169
|
+
|| !complete || options.reference.capture.status !== 'complete' || trace.exported || options.reference.exported;
|
|
170
|
+
const same = JSON.stringify(a) === JSON.stringify(b);
|
|
171
|
+
add('consistentProvenance', unknown ? 'inconclusive' : same ? 'pass' : 'violation', unknown ? 'Paired source evidence is absent, incomplete, or transformed.' : same ? 'Ordered captured read-origin identities match.' : 'Ordered captured read-origin identities differ.', key, evidence.reads);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const counts = { pass: checks.filter(c => c.status === 'pass').length, violation: checks.filter(c => c.status === 'violation').length,
|
|
176
|
+
inconclusive: checks.filter(c => c.status === 'inconclusive').length };
|
|
177
|
+
const status = counts.violation ? 'violation' : counts.inconclusive ? 'inconclusive' : 'pass';
|
|
178
|
+
return { schemaVersion: 'configtrace-verification/1', traceId: trace.id, processId, status, exitCode: status === 'pass' ? 0 : status === 'violation' ? 2 : 3,
|
|
179
|
+
counts, checks, rawValuesAvailable: false, caveats: [
|
|
180
|
+
'A pass applies only to the watched keys, selected context, captured operations, and declared coverage. It is not universal program verification.',
|
|
181
|
+
'Source rules accept inferred origins by default. Raise minimumConfidence when an inferred match is insufficient.',
|
|
182
|
+
'An observed violation takes precedence over unrelated incomplete evidence; both remain in the check results.',
|
|
183
|
+
'Presence allows an empty string. Contracts do not read or compare raw configuration values.',
|
|
184
|
+
] };
|
|
185
|
+
}
|
|
186
|
+
function verificationText(result) {
|
|
187
|
+
return (0, io_1.terminalSafe)([`CONFIGTRACE / VERIFY — ${result.status.toUpperCase()}`,
|
|
188
|
+
`${result.counts.pass} pass · ${result.counts.violation} violation · ${result.counts.inconclusive} inconclusive`,
|
|
189
|
+
...result.checks.map(c => `[${c.status}] ${c.key ? c.key + ' / ' : ''}${c.rule}: ${c.reason}`),
|
|
190
|
+
...result.caveats.map(c => `Note: ${c}`)].join('\n'), true) + '\n';
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/analysis/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Trace, Origin } from '../core/schema';
|
|
2
|
+
export type EvidenceConfidence = Origin['confidence'];
|
|
3
|
+
export type ProvenanceNodeKind = 'process' | 'worker' | 'key' | 'startup' | 'candidate' | 'application' | 'mutation' | 'read' | 'loader' | 'source' | 'read-site' | 'adapter' | 'boundary' | 'unknown';
|
|
4
|
+
export type ProvenanceRelation = 'contains' | 'proposed' | 'applied' | 'skipped' | 'overwrote' | 'inherited' | 'read-by' | 'spawned-with' | 'copied-to' | 'shared-with' | 'evidence-linked-to' | 'declared-source';
|
|
5
|
+
export interface ProvenanceNode {
|
|
6
|
+
id: string;
|
|
7
|
+
kind: ProvenanceNodeKind;
|
|
8
|
+
label: string;
|
|
9
|
+
processId?: string;
|
|
10
|
+
key?: string;
|
|
11
|
+
eventId?: string;
|
|
12
|
+
seq?: number;
|
|
13
|
+
at?: number;
|
|
14
|
+
confidence: EvidenceConfidence;
|
|
15
|
+
state?: 'present' | 'missing' | 'omitted';
|
|
16
|
+
empty?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ProvenanceEdge {
|
|
19
|
+
id: string;
|
|
20
|
+
from: string;
|
|
21
|
+
to: string;
|
|
22
|
+
relation: ProvenanceRelation;
|
|
23
|
+
confidence: EvidenceConfidence;
|
|
24
|
+
evidenceIds: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ProvenanceGraph {
|
|
27
|
+
schemaVersion: 'configtrace-provenance/1';
|
|
28
|
+
traceId: string;
|
|
29
|
+
rawValuesAvailable: false;
|
|
30
|
+
nodes: ProvenanceNode[];
|
|
31
|
+
edges: ProvenanceEdge[];
|
|
32
|
+
truncated: boolean;
|
|
33
|
+
coverage: Trace['coverage'];
|
|
34
|
+
captureStatus: Trace['capture']['status'];
|
|
35
|
+
caveats: string[];
|
|
36
|
+
}
|
|
37
|
+
export interface ProvenanceOptions {
|
|
38
|
+
key?: string;
|
|
39
|
+
processId?: string;
|
|
40
|
+
allProcesses?: boolean;
|
|
41
|
+
maxNodes?: number;
|
|
42
|
+
maxEdges?: number;
|
|
43
|
+
}
|
|
44
|
+
/** A directed acyclic evidence graph, not a claim of full causal reconstruction. */
|
|
45
|
+
export declare function buildProvenance(trace: Trace, options?: ProvenanceOptions): ProvenanceGraph;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildProvenance = buildProvenance;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const privacy_1 = require("../core/privacy");
|
|
6
|
+
const analyze_1 = require("../core/analyze");
|
|
7
|
+
const io_1 = require("../core/io");
|
|
8
|
+
const identity = (...parts) => (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(parts)).digest('hex').slice(0, 24);
|
|
9
|
+
const eventKind = (e) => e.operation === 'baseline' ? 'startup'
|
|
10
|
+
: e.operation === 'candidate' ? 'candidate' : e.operation === 'read' ? 'read'
|
|
11
|
+
: e.operation === 'write' && ['dotenv', 'native-env'].includes(e.origin?.kind || '') ? 'application'
|
|
12
|
+
: ['write', 'delete'].includes(e.operation) ? 'mutation' : e.operation === 'boundary' ? 'boundary' : 'loader';
|
|
13
|
+
/** A directed acyclic evidence graph, not a claim of full causal reconstruction. */
|
|
14
|
+
function buildProvenance(trace, options = {}) {
|
|
15
|
+
const maxNodes = options.maxNodes ?? 20000, maxEdges = options.maxEdges ?? 60000;
|
|
16
|
+
if (!Number.isInteger(maxNodes) || maxNodes < 10 || maxNodes > 250000 || !Number.isInteger(maxEdges) || maxEdges < 10 || maxEdges > 1000000)
|
|
17
|
+
throw new io_1.UserError('Invalid provenance display limits.');
|
|
18
|
+
const chosen = options.allProcesses ? undefined : (0, analyze_1.processFor)(trace, options.processId);
|
|
19
|
+
const contexts = new Map(trace.processes.map(p => [p.id, p]));
|
|
20
|
+
const caseFor = (pid) => contexts.get(pid)?.caseMode || trace.capture.caseMode;
|
|
21
|
+
const keyMatches = (e) => !options.key || e.key === (caseFor(e.processId) === 'insensitive' ? options.key.toUpperCase() : options.key);
|
|
22
|
+
const selected = trace.events.filter(e => (!chosen || e.processId === chosen) && (keyMatches(e) || !e.key && ['child-spawn', 'worker-spawn', 'boundary'].includes(e.operation)));
|
|
23
|
+
const nodes = new Map();
|
|
24
|
+
const edges = [];
|
|
25
|
+
const edgeIds = new Set();
|
|
26
|
+
let truncated = false;
|
|
27
|
+
const add = (node) => {
|
|
28
|
+
if (nodes.has(node.id))
|
|
29
|
+
return true;
|
|
30
|
+
if (nodes.size >= maxNodes) {
|
|
31
|
+
truncated = true;
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
nodes.set(node.id, node);
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
const link = (from, to, relation, confidence, evidenceIds = []) => {
|
|
38
|
+
if (!nodes.has(from) || !nodes.has(to) || from === to)
|
|
39
|
+
return;
|
|
40
|
+
const id = identity(from, to, relation);
|
|
41
|
+
if (edgeIds.has(id))
|
|
42
|
+
return;
|
|
43
|
+
if (edges.length >= maxEdges) {
|
|
44
|
+
truncated = true;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
edgeIds.add(id);
|
|
48
|
+
edges.push({ id, from, to, relation, confidence, evidenceIds });
|
|
49
|
+
};
|
|
50
|
+
for (const p of trace.processes)
|
|
51
|
+
add({ id: `process:${p.id}`, kind: p.role === 'worker' ? 'worker' : 'process', label: `${p.role} ${p.id}`, processId: p.id, confidence: 'observed' });
|
|
52
|
+
const state = new Map();
|
|
53
|
+
const candidate = new Map();
|
|
54
|
+
const fileLoads = new Map();
|
|
55
|
+
for (const e of selected) {
|
|
56
|
+
const eid = `event:${e.id}`, pid = `process:${e.processId}`;
|
|
57
|
+
const slot = JSON.stringify([e.processId, e.key]);
|
|
58
|
+
const confidence = e.origin?.confidence || 'observed';
|
|
59
|
+
if (!add({ id: eid, kind: eventKind(e), label: `${e.operation}${e.key ? ' ' + e.key : e.loaderMethod ? ' ' + e.loaderMethod : ''}`,
|
|
60
|
+
processId: e.processId, key: e.key, eventId: e.id, seq: e.seq, at: e.at, confidence,
|
|
61
|
+
state: e.value?.state, empty: e.value?.state === 'present' ? e.value.empty : undefined }))
|
|
62
|
+
break;
|
|
63
|
+
link(pid, eid, 'contains', 'observed', [e.id]);
|
|
64
|
+
if (e.key) {
|
|
65
|
+
const kid = `key:${identity(e.processId, e.key)}`;
|
|
66
|
+
add({ id: kid, kind: 'key', label: e.key, processId: e.processId, key: e.key, confidence: 'derived' });
|
|
67
|
+
link(pid, kid, 'contains', 'derived');
|
|
68
|
+
link(kid, eid, 'contains', 'derived', [e.id]);
|
|
69
|
+
}
|
|
70
|
+
if (e.origin?.file) {
|
|
71
|
+
const sid = `source:${identity(e.processId, e.origin.kind, e.origin.file)}`;
|
|
72
|
+
add({ id: sid, kind: 'source', label: e.origin.file, processId: e.processId, confidence });
|
|
73
|
+
// Read-origin files are annotations, not direct proof of a new file load at read time.
|
|
74
|
+
if (e.operation !== 'read')
|
|
75
|
+
link(sid, eid, e.outcome === 'declared' ? 'declared-source' : 'evidence-linked-to', confidence, [e.id]);
|
|
76
|
+
const loaderSlot = JSON.stringify([e.processId, e.origin.kind, e.origin.file]);
|
|
77
|
+
if (e.operation === 'load')
|
|
78
|
+
fileLoads.set(loaderSlot, e);
|
|
79
|
+
else if (e.operation === 'candidate') {
|
|
80
|
+
const load = fileLoads.get(loaderSlot);
|
|
81
|
+
if (load && load.seq < e.seq)
|
|
82
|
+
link(`event:${load.id}`, eid, 'proposed', 'inferred', [load.id, e.id]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (e.origin?.adapterId) {
|
|
86
|
+
const aid = `adapter:${identity(e.processId, e.origin.adapterId)}`;
|
|
87
|
+
add({ id: aid, kind: 'adapter', label: e.origin.adapterId, processId: e.processId, confidence });
|
|
88
|
+
link(aid, eid, 'evidence-linked-to', confidence, [e.id]);
|
|
89
|
+
}
|
|
90
|
+
if (e.operation === 'baseline') {
|
|
91
|
+
const unknown = `unknown-before:${e.id}`;
|
|
92
|
+
add({ id: unknown, kind: 'unknown', label: 'Before preload: provenance unavailable', processId: e.processId, key: e.key, confidence: 'unknown' });
|
|
93
|
+
link(unknown, eid, 'inherited', 'unknown', [e.id]);
|
|
94
|
+
}
|
|
95
|
+
if (e.operation === 'candidate')
|
|
96
|
+
candidate.set(slot, e);
|
|
97
|
+
if (e.operation === 'skip' || e.operation === 'write') {
|
|
98
|
+
const prior = candidate.get(slot);
|
|
99
|
+
const compared = e.operation === 'skip' ? e.candidate : e.value;
|
|
100
|
+
if (prior && (0, privacy_1.sameValue)(prior.value, compared) && prior.origin?.kind === e.origin?.kind && prior.origin?.file === e.origin?.file) {
|
|
101
|
+
link(`event:${prior.id}`, eid, e.operation === 'skip' ? 'skipped' : 'applied', 'inferred', [prior.id, e.id]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (['write', 'delete'].includes(e.operation)) {
|
|
105
|
+
const prior = state.get(slot);
|
|
106
|
+
if (prior && prior.value?.state === 'present' && !(0, privacy_1.sameValue)(prior.value, e.value))
|
|
107
|
+
link(`event:${prior.id}`, eid, 'overwrote', 'derived', [prior.id, e.id]);
|
|
108
|
+
}
|
|
109
|
+
if (e.causedBy)
|
|
110
|
+
link(`event:${e.causedBy}`, eid, 'evidence-linked-to', 'inferred', [e.causedBy, e.id]);
|
|
111
|
+
if (e.operation === 'read') {
|
|
112
|
+
if (!e.causedBy || e.origin?.kind === 'unknown') {
|
|
113
|
+
const uid = `unknown:${e.id}`;
|
|
114
|
+
add({ id: uid, kind: 'unknown', label: 'Prior origin unavailable', processId: e.processId, key: e.key, confidence: 'unknown' });
|
|
115
|
+
link(uid, eid, 'evidence-linked-to', 'unknown', [e.id]);
|
|
116
|
+
}
|
|
117
|
+
if (e.site) {
|
|
118
|
+
// Read sites are sinks distinct from source-file nodes: no synthetic file cycles.
|
|
119
|
+
const sid = `read-site:${identity(e.processId, (0, analyze_1.siteLabel)(e))}`;
|
|
120
|
+
add({ id: sid, kind: 'read-site', label: (0, analyze_1.siteLabel)(e), processId: e.processId, confidence: 'observed' });
|
|
121
|
+
link(eid, sid, 'read-by', 'observed', [e.id]);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (['baseline', 'write', 'delete'].includes(e.operation))
|
|
125
|
+
state.set(slot, e);
|
|
126
|
+
if (['child-spawn', 'worker-spawn'].includes(e.operation) && e.childId && e.outcome === 'spawned') {
|
|
127
|
+
const relation = e.environmentMode === 'shared' ? 'shared-with' : e.environmentMode === 'copied' ? 'copied-to' : 'spawned-with';
|
|
128
|
+
const child = contexts.get(e.childId);
|
|
129
|
+
// Only a confirmed child of this context can receive a creation edge.
|
|
130
|
+
if (child?.parentId === e.processId && child.role === (e.operation === 'worker-spawn' ? 'worker' : 'child'))
|
|
131
|
+
link(eid, `process:${e.childId}`, relation, 'observed', [e.id]);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { schemaVersion: 'configtrace-provenance/1', traceId: trace.id, rawValuesAvailable: false,
|
|
135
|
+
nodes: [...nodes.values()], edges, truncated, coverage: trace.coverage, captureStatus: trace.capture.status,
|
|
136
|
+
caveats: [
|
|
137
|
+
'Observed nodes and inferred causal links are different claims. Matching fingerprints do not rule out unobserved mutations.',
|
|
138
|
+
'The graph is ordered per execution context. Timestamps from different processes or Workers are not a shared causal clock.',
|
|
139
|
+
'Startup presence does not identify a shell or an early env file. A declared startup flag is only a source hint.',
|
|
140
|
+
'A SHARE_ENV relationship does not identify which concurrent write supplied another thread\'s read.',
|
|
141
|
+
...(truncated ? ['Graph limits were reached. Some nodes or links are omitted; use a key/process filter.'] : []),
|
|
142
|
+
] };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/analysis/provenance.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED