@gate-forge/core 0.4.0 → 0.6.1
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/dist/baselines/index.js +1 -1
- package/dist/baselines/index.js.map +1 -1
- package/dist/classifier/classify.d.ts +1 -0
- package/dist/classifier/classify.d.ts.map +1 -1
- package/dist/classifier/classify.js +66 -10
- package/dist/classifier/classify.js.map +1 -1
- package/dist/config/index.d.ts +3 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +16 -0
- package/dist/config/index.js.map +1 -1
- package/dist/fingerprints.d.ts +35 -4
- package/dist/fingerprints.d.ts.map +1 -1
- package/dist/fingerprints.js +58 -5
- package/dist/fingerprints.js.map +1 -1
- package/dist/index.d.ts +46 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -12
- package/dist/index.js.map +1 -1
- package/dist/mapping/resolve.d.ts +6 -2
- package/dist/mapping/resolve.d.ts.map +1 -1
- package/dist/mapping/resolve.js +122 -17
- package/dist/mapping/resolve.js.map +1 -1
- package/dist/policy/behavior.d.ts +44 -0
- package/dist/policy/behavior.d.ts.map +1 -0
- package/dist/policy/behavior.js +373 -0
- package/dist/policy/behavior.js.map +1 -0
- package/dist/policy/coverage.d.ts +4 -3
- package/dist/policy/coverage.d.ts.map +1 -1
- package/dist/policy/coverage.js +12 -6
- package/dist/policy/coverage.js.map +1 -1
- package/dist/policy/evaluate.d.ts +23 -0
- package/dist/policy/evaluate.d.ts.map +1 -1
- package/dist/policy/index.d.ts +1 -0
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -0
- package/dist/policy/index.js.map +1 -1
- package/dist/receipt/index.d.ts +56 -4
- package/dist/receipt/index.d.ts.map +1 -1
- package/dist/receipt/index.js +139 -5
- package/dist/receipt/index.js.map +1 -1
- package/dist/report/index.js +4 -19
- package/dist/report/index.js.map +1 -1
- package/dist/schemas/behavior-catalog.d.ts +2868 -0
- package/dist/schemas/behavior-catalog.d.ts.map +1 -0
- package/dist/schemas/behavior-catalog.js +103 -0
- package/dist/schemas/behavior-catalog.js.map +1 -0
- package/dist/schemas/behavior-evidence.d.ts +174 -0
- package/dist/schemas/behavior-evidence.d.ts.map +1 -0
- package/dist/schemas/behavior-evidence.js +157 -0
- package/dist/schemas/behavior-evidence.js.map +1 -0
- package/dist/schemas/behavior-policy.d.ts +6214 -0
- package/dist/schemas/behavior-policy.d.ts.map +1 -0
- package/dist/schemas/behavior-policy.js +896 -0
- package/dist/schemas/behavior-policy.js.map +1 -0
- package/dist/schemas/classification-policy.d.ts +52 -0
- package/dist/schemas/classification-policy.d.ts.map +1 -1
- package/dist/schemas/classification-policy.js +93 -0
- package/dist/schemas/classification-policy.js.map +1 -1
- package/dist/schemas/execution-result.d.ts +4 -4
- package/dist/schemas/gate-receipt.d.ts +10 -3
- package/dist/schemas/gate-receipt.d.ts.map +1 -1
- package/dist/schemas/gate-receipt.js +46 -3
- package/dist/schemas/gate-receipt.js.map +1 -1
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/obligation.d.ts +1 -0
- package/dist/schemas/obligation.d.ts.map +1 -1
- package/dist/schemas/obligation.js +9 -0
- package/dist/schemas/obligation.js.map +1 -1
- package/dist/schemas/runtime-config.d.ts +103 -0
- package/dist/schemas/runtime-config.d.ts.map +1 -0
- package/dist/schemas/runtime-config.js +168 -0
- package/dist/schemas/runtime-config.js.map +1 -0
- package/dist/schemas/test-catalog.d.ts +20 -2
- package/dist/schemas/test-catalog.d.ts.map +1 -1
- package/dist/schemas/test-catalog.js +13 -0
- package/dist/schemas/test-catalog.js.map +1 -1
- package/dist/schemas/test-map.d.ts +4 -0
- package/dist/schemas/test-map.d.ts.map +1 -1
- package/dist/schemas/test-map.js +24 -1
- package/dist/schemas/test-map.js.map +1 -1
- package/dist/schemas/verdict.d.ts +11 -0
- package/dist/schemas/verdict.d.ts.map +1 -1
- package/dist/schemas/verdict.js +33 -6
- package/dist/schemas/verdict.js.map +1 -1
- package/dist/testing/gate-runner.d.ts.map +1 -1
- package/dist/testing/gate-runner.js +2 -7
- package/dist/testing/gate-runner.js.map +1 -1
- package/dist/verdict/behavior.d.ts +87 -0
- package/dist/verdict/behavior.d.ts.map +1 -0
- package/dist/verdict/behavior.js +1328 -0
- package/dist/verdict/behavior.js.map +1 -0
- package/dist/verdict/evaluate.d.ts +10 -0
- package/dist/verdict/evaluate.d.ts.map +1 -1
- package/dist/verdict/evaluate.js +188 -27
- package/dist/verdict/evaluate.js.map +1 -1
- package/dist/verdict/index.d.ts +6 -0
- package/dist/verdict/index.d.ts.map +1 -1
- package/dist/verdict/index.js +6 -0
- package/dist/verdict/index.js.map +1 -1
- package/dist/verdict/pack-verifiers.d.ts.map +1 -1
- package/dist/verdict/pack-verifiers.js +124 -33
- package/dist/verdict/pack-verifiers.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behavior-policy compiler (plan 2026-09-19 §4.1/§4.7): turns a
|
|
3
|
+
* validated behavior document plus the current resource graph into a
|
|
4
|
+
* deterministic catalog, obligations, and blocking entries.
|
|
5
|
+
*
|
|
6
|
+
* Core accepts validated data only. YAML loading stays in the CLI.
|
|
7
|
+
* Duplicate/contradictory documents fail as PolicyEvaluationError
|
|
8
|
+
* (exit 2). Missing/stale graph references become BlockingEntry values
|
|
9
|
+
* with ENDPOINT_BEHAVIOR_MISSING / BEHAVIOR_REFERENCE_STALE.
|
|
10
|
+
*/
|
|
11
|
+
import { sha256Canonical } from '../canonical-json.js';
|
|
12
|
+
import { HTTP_ENDPOINT_RESOURCE_KIND } from '../graph/schema.js';
|
|
13
|
+
import { compareStrings } from '../graph/util.js';
|
|
14
|
+
import { BEHAVIOR_CATALOG_DOMAIN, BEHAVIOR_REQUIREMENTS_DOMAIN, BehaviorCatalogSchema, } from '../schemas/behavior-catalog.js';
|
|
15
|
+
import { BEHAVIOR_CASE_DOMAIN, BEHAVIOR_HTTP_METHODS, BehaviorPolicySchema, HTTP_REQUEST_OBSERVED, TRANSPORT_ONLY_CONTRACTS, } from '../schemas/behavior-policy.js';
|
|
16
|
+
import { ObligationSchema } from '../schemas/obligation.js';
|
|
17
|
+
import { CAUSE_NEXT_ACTIONS } from '../schemas/verdict.js';
|
|
18
|
+
import { BlockingEntrySchema, PolicyEvaluationError, } from './evaluate.js';
|
|
19
|
+
/** Policy id stamped on every obligation compiled from a behavior document. */
|
|
20
|
+
export const BEHAVIOR_POLICY_ID = 'behavior-policy';
|
|
21
|
+
/** Canonical empty-catalog digest (never an omitted field). */
|
|
22
|
+
export const EMPTY_BEHAVIOR_CATALOG_DIGEST = sha256Canonical({
|
|
23
|
+
domain: BEHAVIOR_CATALOG_DOMAIN,
|
|
24
|
+
schemaVersion: 1,
|
|
25
|
+
cases: [],
|
|
26
|
+
requirements: {},
|
|
27
|
+
dependencies: {},
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Parses unknown input as a behavior policy. Unknown versions, extra
|
|
31
|
+
* keys, and semantic schema failures are config errors (exit 2).
|
|
32
|
+
*
|
|
33
|
+
* Args:
|
|
34
|
+
* input (unknown): decoded YAML/JSON document.
|
|
35
|
+
*
|
|
36
|
+
* Returns:
|
|
37
|
+
* BehaviorPolicy: the validated document.
|
|
38
|
+
*/
|
|
39
|
+
export function parseBehaviorPolicy(input) {
|
|
40
|
+
const parsed = BehaviorPolicySchema.safeParse(input);
|
|
41
|
+
if (!parsed.success) {
|
|
42
|
+
const issue = parsed.error.issues[0];
|
|
43
|
+
const path = issue?.path.length ? issue.path.join('.') : '<root>';
|
|
44
|
+
throw new PolicyEvaluationError(`behavior policy is invalid at ${path}: ${issue?.message ?? parsed.error.message}`);
|
|
45
|
+
}
|
|
46
|
+
return parsed.data;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compiles a validated behavior policy against the current graph.
|
|
50
|
+
*
|
|
51
|
+
* Args:
|
|
52
|
+
* input (CompileBehaviorPolicyInput): graph plus validated policy.
|
|
53
|
+
*
|
|
54
|
+
* Returns:
|
|
55
|
+
* CompileBehaviorPolicyResult: catalog, obligations, blocking entries.
|
|
56
|
+
*/
|
|
57
|
+
export function compileBehaviorPolicy(input) {
|
|
58
|
+
const policy = BehaviorPolicySchema.parse(input.policy);
|
|
59
|
+
const endpointsById = new Map();
|
|
60
|
+
const resourcesById = new Map();
|
|
61
|
+
for (const resource of input.graph.resources) {
|
|
62
|
+
if (resource.id === null)
|
|
63
|
+
continue;
|
|
64
|
+
resourcesById.set(resource.id, resource);
|
|
65
|
+
if (resource.kind === HTTP_ENDPOINT_RESOURCE_KIND) {
|
|
66
|
+
endpointsById.set(resource.id, resource);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const declaredEndpoints = new Map();
|
|
70
|
+
for (const endpoint of policy.endpoints) {
|
|
71
|
+
declaredEndpoints.set(endpoint.resourceId, endpoint);
|
|
72
|
+
}
|
|
73
|
+
const declaredResources = new Map();
|
|
74
|
+
for (const resource of policy.resources) {
|
|
75
|
+
declaredResources.set(resource.resourceId, resource);
|
|
76
|
+
}
|
|
77
|
+
const blocking = [];
|
|
78
|
+
const compiled = [];
|
|
79
|
+
const obligationCases = new Map();
|
|
80
|
+
for (const [resourceId, resource] of [...endpointsById.entries()].sort((a, b) => compareStrings(a[0], b[0]))) {
|
|
81
|
+
const declared = declaredEndpoints.get(resourceId);
|
|
82
|
+
if (declared === undefined) {
|
|
83
|
+
blocking.push(block('finding', resourceId, resource.name, `discovered endpoint '${resourceId}' has no approved behavioral declaration`, resource.location, 'ENDPOINT_BEHAVIOR_MISSING'));
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const operational = isHealthOperations(resource);
|
|
87
|
+
if (declared.disposition?.kind === 'operational-only' && !operational) {
|
|
88
|
+
throw new PolicyEvaluationError(`operational-only disposition on '${resourceId}' is illegal: the route is not positively classified health-operations`);
|
|
89
|
+
}
|
|
90
|
+
const staleEffect = declared.effects.find((effect) => !resourcesById.has(effect.resourceId));
|
|
91
|
+
if (staleEffect !== undefined) {
|
|
92
|
+
blocking.push(block('stale-reference', resourceId, resource.name, `behavior policy declares effect '${staleEffect.resourceId}' for endpoint '${resourceId}' which is not in the current graph`, resource.location, 'BEHAVIOR_REFERENCE_STALE'));
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const linkedError = linkedResourceConflict(resource, declared.effects);
|
|
96
|
+
if (linkedError !== null) {
|
|
97
|
+
blocking.push(block('finding', resourceId, resource.name, linkedError, resource.location, 'BEHAVIOR_BINDING_MISMATCH'));
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const sourceFiles = sortedUnique([
|
|
101
|
+
resource.source,
|
|
102
|
+
...declared.effects.flatMap((effect) => {
|
|
103
|
+
const target = resourcesById.get(effect.resourceId);
|
|
104
|
+
return target === undefined ? [] : [target.source];
|
|
105
|
+
}),
|
|
106
|
+
]);
|
|
107
|
+
if (declared.disposition?.kind === 'out-of-scope') {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const effects = sortEffects(declared.effects);
|
|
111
|
+
if (declared.disposition?.kind === 'operational-only') {
|
|
112
|
+
const hasTransport = declared.cases.some((item) => TRANSPORT_ONLY_CONTRACTS.has(item.contract));
|
|
113
|
+
collectSubject({
|
|
114
|
+
resourceId,
|
|
115
|
+
endpointResourceId: resourceId,
|
|
116
|
+
resource,
|
|
117
|
+
effects,
|
|
118
|
+
cases: hasTransport ? declared.cases : [...declared.cases, operationalTransportCase(resource)],
|
|
119
|
+
sourceFiles,
|
|
120
|
+
compiled,
|
|
121
|
+
obligationCases,
|
|
122
|
+
});
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
collectSubject({
|
|
126
|
+
resourceId,
|
|
127
|
+
endpointResourceId: resourceId,
|
|
128
|
+
resource,
|
|
129
|
+
effects,
|
|
130
|
+
cases: declared.cases,
|
|
131
|
+
sourceFiles,
|
|
132
|
+
compiled,
|
|
133
|
+
obligationCases,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
for (const declared of policy.endpoints) {
|
|
137
|
+
if (endpointsById.has(declared.resourceId))
|
|
138
|
+
continue;
|
|
139
|
+
blocking.push(block('stale-reference', declared.resourceId, declared.resourceId, `behavior policy references endpoint '${declared.resourceId}' which is not in the current graph`, null, 'BEHAVIOR_REFERENCE_STALE'));
|
|
140
|
+
}
|
|
141
|
+
for (const declared of policy.resources) {
|
|
142
|
+
const resource = resourcesById.get(declared.resourceId);
|
|
143
|
+
if (resource === undefined) {
|
|
144
|
+
blocking.push(block('stale-reference', declared.resourceId, declared.resourceId, `behavior policy references resource '${declared.resourceId}' which is not in the current graph`, null, 'BEHAVIOR_REFERENCE_STALE'));
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const staleEffect = declared.effects.find((effect) => !resourcesById.has(effect.resourceId));
|
|
148
|
+
if (staleEffect !== undefined) {
|
|
149
|
+
blocking.push(block('stale-reference', declared.resourceId, declared.resourceId, `behavior policy declares effect '${staleEffect.resourceId}' for resource '${declared.resourceId}' which is not in the current graph`, resource.location, 'BEHAVIOR_REFERENCE_STALE'));
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
collectSubject({
|
|
153
|
+
resourceId: declared.resourceId,
|
|
154
|
+
endpointResourceId: null,
|
|
155
|
+
resource,
|
|
156
|
+
effects: sortEffects(declared.effects),
|
|
157
|
+
cases: declared.cases,
|
|
158
|
+
sourceFiles: sortedUnique([resource.source]),
|
|
159
|
+
compiled,
|
|
160
|
+
obligationCases,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
compiled.sort((a, b) => compareStrings(a.caseId, b.caseId));
|
|
164
|
+
const requirements = {};
|
|
165
|
+
const obligations = [];
|
|
166
|
+
for (const [obligationId, entry] of [...obligationCases.entries()].sort((a, b) => compareStrings(a[0], b[0]))) {
|
|
167
|
+
const caseIds = compiled
|
|
168
|
+
.filter((item) => item.obligationIds.includes(obligationId))
|
|
169
|
+
.map((item) => item.caseId)
|
|
170
|
+
.sort(compareStrings);
|
|
171
|
+
requirements[obligationId] = caseIds;
|
|
172
|
+
const requirementsDigest = sha256Canonical({
|
|
173
|
+
domain: BEHAVIOR_REQUIREMENTS_DOMAIN,
|
|
174
|
+
obligationId,
|
|
175
|
+
specifications: [...entry.specs].sort((a, b) => compareStrings(canonicalKey(a), canonicalKey(b))),
|
|
176
|
+
});
|
|
177
|
+
obligations.push(ObligationSchema.parse({
|
|
178
|
+
...entry.obligation,
|
|
179
|
+
requirementsDigest,
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
const dependencies = {};
|
|
183
|
+
for (const item of compiled) {
|
|
184
|
+
const ids = sortedUnique(item.effects.map((effect) => effect.resourceId));
|
|
185
|
+
dependencies[item.resourceId] = ids;
|
|
186
|
+
}
|
|
187
|
+
const catalogBody = {
|
|
188
|
+
schemaVersion: 1,
|
|
189
|
+
cases: compiled,
|
|
190
|
+
requirements,
|
|
191
|
+
dependencies,
|
|
192
|
+
};
|
|
193
|
+
const catalogDigest = compiled.length === 0
|
|
194
|
+
? EMPTY_BEHAVIOR_CATALOG_DIGEST
|
|
195
|
+
: sha256Canonical({ domain: BEHAVIOR_CATALOG_DOMAIN, ...catalogBody });
|
|
196
|
+
const catalog = BehaviorCatalogSchema.parse({ ...catalogBody, catalogDigest });
|
|
197
|
+
return {
|
|
198
|
+
catalog,
|
|
199
|
+
obligations: obligations.sort((a, b) => compareStrings(a.id, b.id)),
|
|
200
|
+
blocking: blocking.sort((a, b) => {
|
|
201
|
+
const byKind = compareStrings(a.kind, b.kind);
|
|
202
|
+
if (byKind !== 0)
|
|
203
|
+
return byKind;
|
|
204
|
+
return compareStrings(a.resourceId ?? '', b.resourceId ?? '');
|
|
205
|
+
}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Compiles every case of one subject into catalog entries and obligation drafts.
|
|
210
|
+
*
|
|
211
|
+
* Args:
|
|
212
|
+
* input (CollectInput): subject, cases, and accumulators.
|
|
213
|
+
*/
|
|
214
|
+
function collectSubject(input) {
|
|
215
|
+
const lifecycle = input.resource.classification?.lifecycle ?? {
|
|
216
|
+
create: true,
|
|
217
|
+
read: true,
|
|
218
|
+
update: true,
|
|
219
|
+
delete: true,
|
|
220
|
+
deleteSemantics: 'hard',
|
|
221
|
+
};
|
|
222
|
+
for (const definition of input.cases) {
|
|
223
|
+
const spec = canonicalizeCase(definition);
|
|
224
|
+
const specDigest = sha256Canonical(spec);
|
|
225
|
+
const caseId = sha256Canonical({
|
|
226
|
+
domain: BEHAVIOR_CASE_DOMAIN,
|
|
227
|
+
resourceId: input.resourceId,
|
|
228
|
+
id: definition.id,
|
|
229
|
+
});
|
|
230
|
+
const obligationId = `${input.resourceId}:${definition.contract}`;
|
|
231
|
+
const compiled = {
|
|
232
|
+
caseId,
|
|
233
|
+
specDigest,
|
|
234
|
+
resourceId: input.resourceId,
|
|
235
|
+
endpointResourceId: input.endpointResourceId,
|
|
236
|
+
obligationIds: [obligationId],
|
|
237
|
+
definition,
|
|
238
|
+
effects: input.effects,
|
|
239
|
+
sourceFiles: input.sourceFiles,
|
|
240
|
+
};
|
|
241
|
+
input.compiled.push(compiled);
|
|
242
|
+
const existing = input.obligationCases.get(obligationId);
|
|
243
|
+
if (existing === undefined) {
|
|
244
|
+
input.obligationCases.set(obligationId, {
|
|
245
|
+
obligation: ObligationSchema.parse({
|
|
246
|
+
schemaVersion: 1,
|
|
247
|
+
id: obligationId,
|
|
248
|
+
resourceId: input.resourceId,
|
|
249
|
+
contract: definition.contract,
|
|
250
|
+
policyId: BEHAVIOR_POLICY_ID,
|
|
251
|
+
lifecycle,
|
|
252
|
+
}),
|
|
253
|
+
specs: [spec],
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
existing.specs.push(spec);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Builds the synthetic transport-only case for an operational-only route
|
|
263
|
+
* from the endpoint's own method and canonical path.
|
|
264
|
+
*
|
|
265
|
+
* Args:
|
|
266
|
+
* resource (GraphResource): classified health-operations endpoint.
|
|
267
|
+
*
|
|
268
|
+
* Returns:
|
|
269
|
+
* BehaviorCase: request-observed case with empty state.
|
|
270
|
+
*/
|
|
271
|
+
function operationalTransportCase(resource) {
|
|
272
|
+
const methodRaw = resource.attributes['method'];
|
|
273
|
+
const method = typeof methodRaw === 'string' && BEHAVIOR_HTTP_METHODS.includes(methodRaw)
|
|
274
|
+
? methodRaw
|
|
275
|
+
: 'GET';
|
|
276
|
+
const pathRaw = resource.attributes['canonicalPath'];
|
|
277
|
+
const pathTemplate = typeof pathRaw === 'string' && pathRaw.startsWith('/') ? pathRaw : '/';
|
|
278
|
+
return {
|
|
279
|
+
id: 'operational-transport',
|
|
280
|
+
contract: HTTP_REQUEST_OBSERVED,
|
|
281
|
+
channel: 'engine-http',
|
|
282
|
+
fixture: 'operational',
|
|
283
|
+
actor: 'anonymous',
|
|
284
|
+
action: {
|
|
285
|
+
kind: 'request',
|
|
286
|
+
method,
|
|
287
|
+
pathTemplate,
|
|
288
|
+
path: {},
|
|
289
|
+
query: {},
|
|
290
|
+
body: { encoding: 'json', fields: {} },
|
|
291
|
+
credentialVariant: 'valid',
|
|
292
|
+
},
|
|
293
|
+
expect: {
|
|
294
|
+
statuses: [200],
|
|
295
|
+
response: [],
|
|
296
|
+
state: [],
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* True when detector attributes positively classify health-operations only.
|
|
302
|
+
*
|
|
303
|
+
* Args:
|
|
304
|
+
* resource (GraphResource): discovered endpoint.
|
|
305
|
+
*
|
|
306
|
+
* Returns:
|
|
307
|
+
* boolean: true only for a single health-operations capability and no business link.
|
|
308
|
+
*/
|
|
309
|
+
function isHealthOperations(resource) {
|
|
310
|
+
const linked = resource.attributes['linkedResourceName'];
|
|
311
|
+
if (typeof linked === 'string' && linked.length > 0)
|
|
312
|
+
return false;
|
|
313
|
+
const capabilities = resource.attributes['capabilities'];
|
|
314
|
+
return Array.isArray(capabilities) && capabilities.length === 1 && capabilities[0] === 'health-operations';
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Detects a conflict between source-derived linkedResourceName and declared effects.
|
|
318
|
+
*
|
|
319
|
+
* Args:
|
|
320
|
+
* resource (GraphResource): discovered endpoint.
|
|
321
|
+
* effects (EffectScope[]): owner-declared effects.
|
|
322
|
+
*
|
|
323
|
+
* Returns:
|
|
324
|
+
* string | null: blocking detail, or null when consistent.
|
|
325
|
+
*/
|
|
326
|
+
function linkedResourceConflict(resource, effects) {
|
|
327
|
+
const linked = resource.attributes['linkedResourceName'];
|
|
328
|
+
if (typeof linked !== 'string' || linked.length === 0)
|
|
329
|
+
return null;
|
|
330
|
+
const matches = effects.some((effect) => {
|
|
331
|
+
const name = effect.resourceId.includes('.')
|
|
332
|
+
? effect.resourceId.slice(effect.resourceId.indexOf('.') + 1)
|
|
333
|
+
: effect.resourceId;
|
|
334
|
+
return name === linked || effect.resourceId === linked;
|
|
335
|
+
});
|
|
336
|
+
if (matches)
|
|
337
|
+
return null;
|
|
338
|
+
return (`endpoint '${resource.id ?? resource.name}' source link '${linked}' conflicts with declared ` +
|
|
339
|
+
'effect resource ids (source facts cannot be overridden silently)');
|
|
340
|
+
}
|
|
341
|
+
function sortEffects(effects) {
|
|
342
|
+
return [...effects].sort((a, b) => compareStrings(a.id, b.id));
|
|
343
|
+
}
|
|
344
|
+
function sortedUnique(values) {
|
|
345
|
+
return [...new Set(values)].sort(compareStrings);
|
|
346
|
+
}
|
|
347
|
+
function canonicalizeCase(definition) {
|
|
348
|
+
return {
|
|
349
|
+
id: definition.id,
|
|
350
|
+
contract: definition.contract,
|
|
351
|
+
channel: definition.channel,
|
|
352
|
+
fixture: definition.fixture,
|
|
353
|
+
actor: definition.actor,
|
|
354
|
+
action: definition.action,
|
|
355
|
+
expect: definition.expect,
|
|
356
|
+
controlCase: definition.controlCase ?? null,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
function canonicalKey(value) {
|
|
360
|
+
return JSON.stringify(value);
|
|
361
|
+
}
|
|
362
|
+
function block(kind, resourceId, name, detail, location, cause) {
|
|
363
|
+
return BlockingEntrySchema.parse({
|
|
364
|
+
kind,
|
|
365
|
+
resourceId,
|
|
366
|
+
name,
|
|
367
|
+
detail,
|
|
368
|
+
location,
|
|
369
|
+
cause,
|
|
370
|
+
nextAction: CAUSE_NEXT_ACTIONS[cause],
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/policy/behavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export interface MappedCoverage {
|
|
|
17
17
|
table: string;
|
|
18
18
|
/** The covered operation. */
|
|
19
19
|
operation: CoverageOperation;
|
|
20
|
-
/** Declared test kind;
|
|
20
|
+
/** Declared test kind; only real-UI kinds (`browser-e2e`, `observed-e2e`) satisfy closed-world coverage. */
|
|
21
21
|
testKind: string;
|
|
22
22
|
}
|
|
23
23
|
/** Configuration-error finding: the policy names a table the inventory cannot see. */
|
|
@@ -63,8 +63,9 @@ export interface CoveragePolicyResult {
|
|
|
63
63
|
* silently dropped table is a violation);
|
|
64
64
|
* - dispositioned table → excused (the disposition is a trusted owner
|
|
65
65
|
* act recorded in config, never an agent self-approval);
|
|
66
|
-
* - otherwise each required operation without a
|
|
67
|
-
* blocking
|
|
66
|
+
* - otherwise each required operation without a real-UI
|
|
67
|
+
* (`browser-e2e`/`observed-e2e`) mapping → blocking
|
|
68
|
+
* `CRUD_COVERAGE_MISSING`.
|
|
68
69
|
*
|
|
69
70
|
* Args:
|
|
70
71
|
* tables: the policy's table entries (validated `CoveragePolicySchema`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/policy/coverage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/policy/coverage.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iGAAiG;IACjG,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC1C;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,4GAA4G;IAC5G,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,IAAI,EAAE,uBAAuB,CAAC;IAC9B,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACnD,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,4EAA4E;IAC5E,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAKD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,SAAS,EAAE,SAAS,sBAAsB,EAAE,EAC5C,cAAc,GAAE,SAAS,cAAc,EAAO,GAC7C,oBAAoB,CAgFtB"}
|
package/dist/policy/coverage.js
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* silently dropped table is a violation, never coverage.
|
|
14
14
|
* - Inventory tables the policy does NOT enumerate are violations too
|
|
15
15
|
* (the policy is closed-world over the inventory).
|
|
16
|
-
* - Only
|
|
16
|
+
* - Only real-UI mappings satisfy (`browser-e2e` engine-driven and
|
|
17
|
+
* `observed-e2e` suite-driven-over-proxy; plan §3.2: api-e2e cannot
|
|
17
18
|
* substitute for browser behavior); the mapping subsystem may pass an
|
|
18
19
|
* empty list for now — the honest result is that enabled, undispositioned
|
|
19
20
|
* tables block until mappings or dispositions exist.
|
|
@@ -34,8 +35,9 @@ const CRUD_COVERAGE_MISSING_CAUSE = CAUSE_NEXT_ACTIONS['CRUD_COVERAGE_MISSING'];
|
|
|
34
35
|
* silently dropped table is a violation);
|
|
35
36
|
* - dispositioned table → excused (the disposition is a trusted owner
|
|
36
37
|
* act recorded in config, never an agent self-approval);
|
|
37
|
-
* - otherwise each required operation without a
|
|
38
|
-
* blocking
|
|
38
|
+
* - otherwise each required operation without a real-UI
|
|
39
|
+
* (`browser-e2e`/`observed-e2e`) mapping → blocking
|
|
40
|
+
* `CRUD_COVERAGE_MISSING`.
|
|
39
41
|
*
|
|
40
42
|
* Args:
|
|
41
43
|
* tables: the policy's table entries (validated `CoveragePolicySchema`).
|
|
@@ -76,9 +78,13 @@ export function evaluateCoveragePolicy(tables, inventory, mappedCoverage = []) {
|
|
|
76
78
|
if (table.disposition !== undefined)
|
|
77
79
|
continue;
|
|
78
80
|
for (const operation of table.requiredOperations) {
|
|
81
|
+
// Real-UI coverage (plan §3.2 + Observe channel): `browser-e2e`
|
|
82
|
+
// (engine-driven) and `observed-e2e` (suite-driven over the session
|
|
83
|
+
// proxy with independent adapter reads) are both genuine browser
|
|
84
|
+
// journeys — either covers. Every other kind contributes nothing.
|
|
79
85
|
const covered = mappedCoverage.some((mapping) => mapping.table === table.name &&
|
|
80
86
|
mapping.operation === operation &&
|
|
81
|
-
mapping.testKind === 'browser-e2e');
|
|
87
|
+
(mapping.testKind === 'browser-e2e' || mapping.testKind === 'observed-e2e'));
|
|
82
88
|
if (covered)
|
|
83
89
|
continue;
|
|
84
90
|
blocking.push({
|
|
@@ -86,8 +92,8 @@ export function evaluateCoveragePolicy(tables, inventory, mappedCoverage = []) {
|
|
|
86
92
|
cause: 'CRUD_COVERAGE_MISSING',
|
|
87
93
|
table: table.name,
|
|
88
94
|
operation,
|
|
89
|
-
detail: `coverage policy: table '${table.name}' has no mapped
|
|
90
|
-
'coverage and no owner disposition
|
|
95
|
+
detail: `coverage policy: table '${table.name}' has no mapped real-UI ` +
|
|
96
|
+
`'${operation}' coverage (browser-e2e or observed-e2e) and no owner disposition`,
|
|
91
97
|
nextAction: CRUD_COVERAGE_MISSING_CAUSE,
|
|
92
98
|
});
|
|
93
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/policy/coverage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/policy/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,17 @@ export declare const BlockingEntrySchema: z.ZodObject<{
|
|
|
86
86
|
DIAGNOSTIC_TEST_FAILURE: "DIAGNOSTIC_TEST_FAILURE";
|
|
87
87
|
DIAGNOSTIC_RUN_INCOMPLETE: "DIAGNOSTIC_RUN_INCOMPLETE";
|
|
88
88
|
DIAGNOSTIC_RESULT_STALE: "DIAGNOSTIC_RESULT_STALE";
|
|
89
|
+
ENDPOINT_BEHAVIOR_MISSING: "ENDPOINT_BEHAVIOR_MISSING";
|
|
90
|
+
BEHAVIOR_REFERENCE_STALE: "BEHAVIOR_REFERENCE_STALE";
|
|
91
|
+
BEHAVIOR_CASE_UNMAPPED: "BEHAVIOR_CASE_UNMAPPED";
|
|
92
|
+
BEHAVIOR_CASE_MISSING: "BEHAVIOR_CASE_MISSING";
|
|
93
|
+
BEHAVIOR_BINDING_MISMATCH: "BEHAVIOR_BINDING_MISMATCH";
|
|
94
|
+
BEHAVIOR_EFFECT_MISMATCH: "BEHAVIOR_EFFECT_MISMATCH";
|
|
95
|
+
OBSERVATION_SCOPE_INCOMPLETE: "OBSERVATION_SCOPE_INCOMPLETE";
|
|
96
|
+
BEHAVIOR_UNEXPECTED_EFFECT: "BEHAVIOR_UNEXPECTED_EFFECT";
|
|
97
|
+
ENFORCEMENT_BOUNDARY_UNVERIFIED: "ENFORCEMENT_BOUNDARY_UNVERIFIED";
|
|
98
|
+
RUNTIME_PREPARATION_FAILED: "RUNTIME_PREPARATION_FAILED";
|
|
99
|
+
RUNTIME_READINESS_FAILED: "RUNTIME_READINESS_FAILED";
|
|
89
100
|
}>>>;
|
|
90
101
|
nextAction: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
91
102
|
}, z.core.$strict>;
|
|
@@ -158,6 +169,7 @@ export declare const PolicyEvaluationResultSchema: z.ZodObject<{
|
|
|
158
169
|
archiveFields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
|
|
159
170
|
updateableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
160
171
|
}, z.core.$strict>;
|
|
172
|
+
requirementsDigest: z.ZodOptional<z.ZodString>;
|
|
161
173
|
}, z.core.$strict>>;
|
|
162
174
|
blocking: z.ZodArray<z.ZodObject<{
|
|
163
175
|
kind: z.ZodEnum<{
|
|
@@ -196,6 +208,17 @@ export declare const PolicyEvaluationResultSchema: z.ZodObject<{
|
|
|
196
208
|
DIAGNOSTIC_TEST_FAILURE: "DIAGNOSTIC_TEST_FAILURE";
|
|
197
209
|
DIAGNOSTIC_RUN_INCOMPLETE: "DIAGNOSTIC_RUN_INCOMPLETE";
|
|
198
210
|
DIAGNOSTIC_RESULT_STALE: "DIAGNOSTIC_RESULT_STALE";
|
|
211
|
+
ENDPOINT_BEHAVIOR_MISSING: "ENDPOINT_BEHAVIOR_MISSING";
|
|
212
|
+
BEHAVIOR_REFERENCE_STALE: "BEHAVIOR_REFERENCE_STALE";
|
|
213
|
+
BEHAVIOR_CASE_UNMAPPED: "BEHAVIOR_CASE_UNMAPPED";
|
|
214
|
+
BEHAVIOR_CASE_MISSING: "BEHAVIOR_CASE_MISSING";
|
|
215
|
+
BEHAVIOR_BINDING_MISMATCH: "BEHAVIOR_BINDING_MISMATCH";
|
|
216
|
+
BEHAVIOR_EFFECT_MISMATCH: "BEHAVIOR_EFFECT_MISMATCH";
|
|
217
|
+
OBSERVATION_SCOPE_INCOMPLETE: "OBSERVATION_SCOPE_INCOMPLETE";
|
|
218
|
+
BEHAVIOR_UNEXPECTED_EFFECT: "BEHAVIOR_UNEXPECTED_EFFECT";
|
|
219
|
+
ENFORCEMENT_BOUNDARY_UNVERIFIED: "ENFORCEMENT_BOUNDARY_UNVERIFIED";
|
|
220
|
+
RUNTIME_PREPARATION_FAILED: "RUNTIME_PREPARATION_FAILED";
|
|
221
|
+
RUNTIME_READINESS_FAILED: "RUNTIME_READINESS_FAILED";
|
|
199
222
|
}>>>;
|
|
200
223
|
nextAction: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
201
224
|
}, z.core.$strict>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/policy/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAsC,KAAK,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAG5G,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGzG,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAK1D;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,yDAAyD;AACzD,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/policy/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAsC,KAAK,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAG5G,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGzG,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAK1D;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,yDAAyD;AACzD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsC5B,CAAC;AAEL,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAKjF;AAED,yEAAyE;AACzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;kBAM9B,CAAC;AAEL,uCAAuC;AACvC,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,sEAAsE;AACtE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAcrC,CAAC;AAEL,+CAA+C;AAC/C,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC3D,GACA,OAAO,CAaT;AAED,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,KAAK,EAAE,aAAa,CAAC;IACrB,iEAAiE;IACjE,QAAQ,EAAE,UAAU,CAAC;IACrB,qEAAqE;IACrE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAmErF"}
|
package/dist/policy/index.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export { CRUD_CONTRACT_PREFIX, PERSISTENCE_CONTRACT_PREFIX, BlockingEntrySchema,
|
|
|
12
12
|
export type { BlockingEntry, ClaimAssessment, PolicyEvaluationInput, PolicyEvaluationResult, } from './evaluate.js';
|
|
13
13
|
export { evaluateCoveragePolicy, type CoverageInventoryTable, type MappedCoverage, type CoverageConfigError, type CoverageBlockingFinding, type CoveragePolicyResult, } from './coverage.js';
|
|
14
14
|
export { TRUSTED_POLICY_DOMAIN, trustedPolicyDigest, policyWeakenedCandidate, type TrustedPolicyInput, type PolicyWeakeningCheck, } from './trusted.js';
|
|
15
|
+
export { BEHAVIOR_POLICY_ID, EMPTY_BEHAVIOR_CATALOG_DIGEST, compileBehaviorPolicy, parseBehaviorPolicy, type CompileBehaviorPolicyInput, type CompileBehaviorPolicyResult, } from './behavior.js';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,eAAe,CAAC"}
|
package/dist/policy/index.js
CHANGED
|
@@ -11,4 +11,5 @@
|
|
|
11
11
|
export { CRUD_CONTRACT_PREFIX, PERSISTENCE_CONTRACT_PREFIX, BlockingEntrySchema, ClaimAssessmentSchema, PolicyEvaluationError, PolicyEvaluationResultSchema, classificationBlockedIdentity, evaluatePolicies, lifecycleAllowsContract, } from './evaluate.js';
|
|
12
12
|
export { evaluateCoveragePolicy, } from './coverage.js';
|
|
13
13
|
export { TRUSTED_POLICY_DOMAIN, trustedPolicyDigest, policyWeakenedCandidate, } from './trusted.js';
|
|
14
|
+
export { BEHAVIOR_POLICY_ID, EMPTY_BEHAVIOR_CATALOG_DIGEST, compileBehaviorPolicy, parseBehaviorPolicy, } from './behavior.js';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/policy/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,sBAAsB,GAMvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GAGxB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAOvB,OAAO,EACL,sBAAsB,GAMvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GAGpB,MAAM,eAAe,CAAC"}
|