@superbee/core 0.2.0-pre.30 → 0.2.0-pre.32

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 (51) hide show
  1. package/README.md +4 -0
  2. package/dist/bundle-health/report.d.ts.map +1 -1
  3. package/dist/bundle-health/report.js +13 -1
  4. package/dist/bundle-health/report.js.map +1 -1
  5. package/dist/connectors.d.ts +10 -0
  6. package/dist/connectors.d.ts.map +1 -1
  7. package/dist/connectors.js +13 -2
  8. package/dist/connectors.js.map +1 -1
  9. package/dist/link-types.d.ts +3 -2
  10. package/dist/link-types.d.ts.map +1 -1
  11. package/dist/link-types.js +6 -3
  12. package/dist/link-types.js.map +1 -1
  13. package/dist/recipe-set-preflight.d.ts +139 -0
  14. package/dist/recipe-set-preflight.d.ts.map +1 -0
  15. package/dist/recipe-set-preflight.js +536 -0
  16. package/dist/recipe-set-preflight.js.map +1 -0
  17. package/dist/record-overlay/index.d.ts +1 -1
  18. package/dist/record-overlay/index.d.ts.map +1 -1
  19. package/dist/record-overlay/index.js +1 -1
  20. package/dist/record-overlay/index.js.map +1 -1
  21. package/dist/record-overlay/policy.d.ts +5 -0
  22. package/dist/record-overlay/policy.d.ts.map +1 -1
  23. package/dist/record-overlay/policy.js +10 -3
  24. package/dist/record-overlay/policy.js.map +1 -1
  25. package/dist/source-engine/driver.d.ts +40 -0
  26. package/dist/source-engine/driver.d.ts.map +1 -0
  27. package/dist/source-engine/driver.js +392 -0
  28. package/dist/source-engine/driver.js.map +1 -0
  29. package/dist/source-engine/evidence.d.ts +39 -0
  30. package/dist/source-engine/evidence.d.ts.map +1 -0
  31. package/dist/source-engine/evidence.js +54 -0
  32. package/dist/source-engine/evidence.js.map +1 -0
  33. package/dist/source-engine/index.d.ts +7 -0
  34. package/dist/source-engine/index.d.ts.map +1 -1
  35. package/dist/source-engine/index.js +5 -0
  36. package/dist/source-engine/index.js.map +1 -1
  37. package/dist/source-engine/observe.d.ts +1 -9
  38. package/dist/source-engine/observe.d.ts.map +1 -1
  39. package/dist/source-engine/observe.js +14 -374
  40. package/dist/source-engine/observe.js.map +1 -1
  41. package/dist/source-engine/overlay.d.ts +2 -1
  42. package/dist/source-engine/overlay.d.ts.map +1 -1
  43. package/dist/source-engine/overlay.js +3 -3
  44. package/dist/source-engine/overlay.js.map +1 -1
  45. package/dist/source-engine/snapshot.d.ts +104 -0
  46. package/dist/source-engine/snapshot.d.ts.map +1 -0
  47. package/dist/source-engine/snapshot.js +240 -0
  48. package/dist/source-engine/snapshot.js.map +1 -0
  49. package/dist/source-profiles/index.d.ts +1 -1
  50. package/dist/source-profiles/index.js +1 -1
  51. package/package.json +5 -1
@@ -0,0 +1,536 @@
1
+ /** Read-only structural checks over explicitly supplied snapshots. No storage or admission. */
2
+ import { parseRecipeFiles } from './recipes.js';
3
+ import { parseMarkdown } from './frontmatter.js';
4
+ import { buildKindRegistry, isConventionId, CONVENTION_TYPE, CONVENTIONS_PREFIX } from './kinds.js';
5
+ import { isBundleAlias } from './dependencies.js';
6
+ import { assertSafeConceptId } from './paths.js';
7
+ import { prepareRecipeInstall, inspectRecipeInstallTarget, definitionDigest } from './recipe-lifecycle/index.js';
8
+ import { sha256Hex } from './versioning.js';
9
+ export const RECIPE_PREFLIGHT_SCHEMA = 'recipe-set-preflight/v1';
10
+ export const RECIPE_PREFLIGHT_DIGEST_SCHEME = 'fixture-envelope-v1/utf16-code-unit-sorted-keys-and-file-paths/sha256';
11
+ const MALFORMED_MODEL_DIAGNOSTICS = new Set([
12
+ 'KIND_CONVENTION_MALFORMED', 'KIND_CONVENTION_BAD_SHAPE', 'KIND_CONVENTION_BAD_MEMBER',
13
+ 'KIND_CONVENTION_MISPLACED_KEY', 'KIND_DUPLICATE_GOVERNS', 'KIND_HORIZON_MALFORMED',
14
+ 'KIND_CONVENTION_TERMINAL_UNDECLARED_FIELD', 'KIND_CONVENTION_TERMINAL_VALUE',
15
+ 'KIND_CONVENTION_UNDECLARED_DESCRIPTION_FIELD', 'KIND_CONVENTION_UNDECLARED_LINK_DESCRIPTION',
16
+ 'KIND_CONVENTION_UNDECLARED_TYPES_FIELD', 'KIND_CONVENTION_UNDECLARED_VALUES_FIELD',
17
+ 'KIND_CONVENTION_UNDECLARED_VALUE_DESCRIPTION_FIELD', 'KIND_CONVENTION_UNDECLARED_VALUE_DESCRIPTION_VALUE',
18
+ 'KIND_CONVENTION_VALUES_TYPE_MISMATCH', 'OKF_WORKFLOW_STATUS_COLLISION',
19
+ ]);
20
+ const modelDiagnosticLevel = (code) => MALFORMED_MODEL_DIAGNOSTICS.has(code) ? 'refused' : 'partial';
21
+ const compareCodeUnits = (a, b) => a < b ? -1 : a > b ? 1 : 0;
22
+ function canonicalJson(value) {
23
+ if (Array.isArray(value)) {
24
+ const ordered = value.every(v => record(v) && typeof v.path === 'string')
25
+ ? [...value].sort((a, b) => compareCodeUnits(a.path, b.path)) : value;
26
+ return '[' + ordered.map(canonicalJson).join(',') + ']';
27
+ }
28
+ if (record(value)) {
29
+ // Rebuilding an object would let JSON.stringify reorder integer-like keys numerically.
30
+ return '{' + Object.keys(value).sort(compareCodeUnits)
31
+ .map(key => JSON.stringify(key) + ':' + canonicalJson(value[key])).join(',') + '}';
32
+ }
33
+ return JSON.stringify(value);
34
+ }
35
+ /** This envelope identity is separate from Core source/definition digests and Studio packaging. */
36
+ export function recipePreflightDigest(value) {
37
+ if (!jsonValue(value))
38
+ throw new TypeError('Digest input must be finite JSON data');
39
+ return 'sha256:' + sha256Hex(typeof value === 'string' ? value : canonicalJson(value));
40
+ }
41
+ function record(value) { return value !== null && typeof value === 'object' && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null); }
42
+ function jsonValue(value, seen = new Set()) {
43
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
44
+ return true;
45
+ if (typeof value === 'number')
46
+ return Number.isFinite(value);
47
+ if (typeof value !== 'object' || seen.has(value))
48
+ return false;
49
+ seen.add(value);
50
+ const descriptors = Object.getOwnPropertyDescriptors(value);
51
+ let ok;
52
+ if (Array.isArray(value)) {
53
+ const length = descriptors.length?.value;
54
+ ok = Number.isSafeInteger(length) && length >= 0 && Reflect.ownKeys(value).length === length + 1;
55
+ // JSON observes every index, including nonenumerable indices, but never inherited holes.
56
+ if (ok)
57
+ for (let index = 0; index < length; index++) {
58
+ const descriptor = descriptors[String(index)];
59
+ if (!descriptor || !('value' in descriptor) || !jsonValue(descriptor.value, seen)) {
60
+ ok = false;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ ok = record(value) && Reflect.ownKeys(value).every(k => typeof k === 'string' && ('value' in descriptors[k])) && Object.values(value).every(v => jsonValue(v, seen));
67
+ }
68
+ seen.delete(value);
69
+ return ok;
70
+ }
71
+ const text = (v) => typeof v === 'string' && v.trim().length > 0;
72
+ const pin = (v) => typeof v === 'string' && /^sha256:[0-9a-f]{64}$/.test(v);
73
+ const strings = (v) => Array.isArray(v) && v.every(text);
74
+ /** Shape refusals precede semantic evaluation; unknown requirement operators remain partial. */
75
+ function shape(input) {
76
+ const errors = [];
77
+ const check = (ok, at) => {
78
+ if (!ok)
79
+ errors.push(at);
80
+ };
81
+ const obj = (v, keys, at) => {
82
+ if (!record(v)) {
83
+ errors.push(at);
84
+ return false;
85
+ }
86
+ for (const k of Object.keys(v))
87
+ check(keys.includes(k), at + '.' + k);
88
+ return true;
89
+ };
90
+ if (!jsonValue(input))
91
+ return ['input'];
92
+ if (!obj(input, ['schema', 'selected', 'consumers', 'endpoints', 'observations', 'placementInventories'], 'input'))
93
+ return errors;
94
+ for (const k of ['selected', 'consumers', 'endpoints', 'observations'])
95
+ check(Array.isArray(input[k]), k);
96
+ if (errors.length)
97
+ return errors;
98
+ for (const [i, s] of input.selected.entries())
99
+ if (obj(s, ['key', 'publisher', 'recipeId', 'release', 'role', 'artifactDigest', 'artifact'], `selected[${i}]`)) {
100
+ for (const k of ['key', 'publisher', 'recipeId', 'release'])
101
+ check(text(s[k]), `selected[${i}].${k}`);
102
+ check(['base', 'extension'].includes(s.role), `selected[${i}].role`);
103
+ check(typeof s.release === 'string' && /^[A-Za-z0-9][A-Za-z0-9._+-]*$/.test(s.release) && !/^(latest|next)$/i.test(s.release) && !/(^|[.])[xX]($|[.])/.test(s.release), `selected[${i}].release`);
104
+ check(pin(s.artifactDigest), `selected[${i}].artifactDigest`);
105
+ if (s.artifact != null && obj(s.artifact, ['identity', 'files'], `selected[${i}].artifact`)) {
106
+ if (obj(s.artifact.identity, ['publisher', 'recipeId', 'release'], `selected[${i}].identity`))
107
+ for (const k of ['publisher', 'recipeId', 'release'])
108
+ check(text(s.artifact.identity[k]), `selected[${i}].identity.${k}`);
109
+ check(Array.isArray(s.artifact.files), `selected[${i}].files`);
110
+ if (Array.isArray(s.artifact.files))
111
+ for (const [j, f] of s.artifact.files.entries())
112
+ if (obj(f, ['path', 'bytes', 'digest'], `selected[${i}].files[${j}]`)) {
113
+ check(text(f.path) && safePath(f.path), `selected[${i}].files[${j}].path`);
114
+ check(typeof f.bytes === 'string', `selected[${i}].files[${j}].bytes`);
115
+ check(pin(f.digest), `selected[${i}].files[${j}].digest`);
116
+ }
117
+ }
118
+ }
119
+ for (const [i, c] of input.consumers.entries())
120
+ if (obj(c, ['id', 'owner', 'descriptorDigest', 'requirements'], `consumers[${i}]`)) {
121
+ check(text(c.id) && text(c.owner) && pin(c.descriptorDigest), `consumers[${i}]`);
122
+ check(c.requirements === null || Array.isArray(c.requirements), `consumers[${i}].requirements`);
123
+ if (Array.isArray(c.requirements))
124
+ for (const [j, r] of c.requirements.entries()) {
125
+ const at = `consumers[${i}].requirements[${j}]`;
126
+ if (!record(r)) {
127
+ errors.push(at);
128
+ continue;
129
+ }
130
+ check(text(r.id) && text(r.provider) && text(r.kind) && typeof r.required === 'boolean', at);
131
+ if (r.fields !== undefined)
132
+ check(strings(r.fields), at + '.fields');
133
+ if (r.unsupported !== undefined)
134
+ check(strings(r.unsupported), at + '.unsupported');
135
+ if (r.links !== undefined) {
136
+ check(Array.isArray(r.links), at + '.links');
137
+ if (Array.isArray(r.links))
138
+ for (const l of r.links)
139
+ if (obj(l, ['label', 'target'], at + '.links')) {
140
+ check(text(l.label), at + '.links.label');
141
+ if (obj(l.target, ['provider', 'kind'], at + '.links.target'))
142
+ check(text(l.target.provider) && text(l.target.kind), at + '.links.target');
143
+ }
144
+ }
145
+ }
146
+ }
147
+ for (const [i, e] of input.endpoints.entries())
148
+ if (obj(e, ['id', 'consumer', 'requirement', 'placement', 'alias'], `endpoints[${i}]`)) {
149
+ check(text(e.id) && text(e.consumer) && text(e.requirement) && ['local', 'qualified'].includes(e.placement), `endpoints[${i}]`);
150
+ check(e.alias === undefined || text(e.alias), `endpoints[${i}].alias`);
151
+ }
152
+ for (const [i, o] of input.observations.entries())
153
+ if (obj(o, ['id', 'provider', 'scope', 'bundleId', 'expectedBundleId', 'availability', 'complete', 'observedVersion', 'definitions'], `observations[${i}]`)) {
154
+ check(text(o.id) && text(o.provider) && text(o.scope) && typeof o.complete === 'boolean' && ['available', 'unavailable', 'unknown'].includes(o.availability), `observations[${i}]`);
155
+ for (const k of ['bundleId', 'expectedBundleId', 'observedVersion'])
156
+ check(o[k] === undefined || text(o[k]), `observations[${i}].${k}`);
157
+ check(Array.isArray(o.definitions), `observations[${i}].definitions`);
158
+ if (Array.isArray(o.definitions))
159
+ for (const d of o.definitions)
160
+ if (obj(d, ['id', 'bytes'], `observations[${i}].definitions`))
161
+ check(text(d.id) && safeId(d.id) && typeof d.bytes === 'string', `observations[${i}].definitions`);
162
+ }
163
+ if (input.placementInventories !== undefined) {
164
+ check(Array.isArray(input.placementInventories), 'placementInventories');
165
+ if (Array.isArray(input.placementInventories))
166
+ for (const [i, o] of input.placementInventories.entries())
167
+ if (obj(o, ['id', 'scope', 'bundleId', 'expectedBundleId', 'availability', 'complete', 'observedVersion', 'files'], `placementInventories[${i}]`)) {
168
+ check(text(o.id) && text(o.scope) && typeof o.complete === 'boolean' && ['available', 'unavailable', 'unknown'].includes(o.availability), `placementInventories[${i}]`);
169
+ for (const k of ['bundleId', 'expectedBundleId', 'observedVersion'])
170
+ check(o[k] === undefined || text(o[k]), `placementInventories[${i}].${k}`);
171
+ check(Array.isArray(o.files), `placementInventories[${i}].files`);
172
+ if (Array.isArray(o.files))
173
+ for (const f of o.files)
174
+ if (obj(f, ['path', 'bytes'], `placementInventories[${i}].files`))
175
+ check(text(f.path) && safePath(f.path) && typeof f.bytes === 'string', `placementInventories[${i}].files`);
176
+ }
177
+ }
178
+ return errors;
179
+ }
180
+ function safeId(id) {
181
+ try {
182
+ assertSafeConceptId(id);
183
+ return true;
184
+ }
185
+ catch {
186
+ return false;
187
+ }
188
+ }
189
+ function safePath(path) { return safeId(path) && !path.startsWith('/'); }
190
+ function ownedDocs(prepared) { return [...prepared.docs, ...prepared.connectors.map(c => c.doc), ...prepared.references.map(r => r.doc)]; }
191
+ function assets(prepared) {
192
+ return new Map([...ownedDocs(prepared).map(d => [`${d.id}.md`, d]), ...prepared.pages.flatMap(p => [[`${p.registry.id}.md`, p.registry], [p.entry, p.html]])]);
193
+ }
194
+ /** Async for a uniform portable consumer contract; performs no IO, writes, or permission checks. */
195
+ export async function preflightRecipeSet(value) {
196
+ let malformed;
197
+ try {
198
+ malformed = shape(value);
199
+ }
200
+ catch {
201
+ malformed = ['input'];
202
+ }
203
+ if (malformed.length)
204
+ return { schema: 'recipe-set-preflight-result/v1', verdict: 'refused', structuralComplete: false, scope: 'declared-structural-input-only', digestScheme: RECIPE_PREFLIGHT_DIGEST_SCHEME, inputs: { selected: [], consumers: [], observations: [], placementInventories: [] }, externalConsumers: 'unknown-out-of-scope', issues: malformed.sort(compareCodeUnits).map(at => ({ level: 'refused', code: 'INPUT_SHAPE', at })), parserWarnings: [] };
205
+ const input = value;
206
+ const issues = [], parserWarnings = [];
207
+ const recipes = new Map();
208
+ const inventories = new Map();
209
+ const issue = (level, code, at) => { issues.push({ level, code, at }); };
210
+ if (input.schema !== 'recipe-set-preflight/v1')
211
+ issue('refused', 'SCHEMA', 'schema');
212
+ if (input.selected.length === 0)
213
+ issue('partial', 'SELECTED_SET_UNKNOWN', 'selected');
214
+ const unique = (rows, key, at) => {
215
+ const seen = new Set();
216
+ for (const r of rows) {
217
+ if (seen.has(r[key]))
218
+ issue('refused', 'DUPLICATE_ID', `${at}:${r[key]}`);
219
+ seen.add(r[key]);
220
+ }
221
+ };
222
+ unique(input.selected, 'key', 'selected');
223
+ unique(input.selected, 'recipeId', 'recipeIds');
224
+ unique(input.consumers, 'id', 'consumers');
225
+ if (input.consumers.length === 0 && input.selected.some(s => s.role === 'extension'))
226
+ issue('partial', 'CONSUMER_REQUIREMENTS_UNKNOWN', 'consumers');
227
+ for (const s of input.selected) {
228
+ if (!s.artifact) {
229
+ issue('partial', 'ARTIFACT_UNAVAILABLE', s.key);
230
+ continue;
231
+ }
232
+ if (recipePreflightDigest(s.artifact) !== s.artifactDigest)
233
+ issue('refused', 'ARTIFACT_DIGEST', s.key);
234
+ if (['publisher', 'recipeId', 'release'].some(k => s[k] !== s.artifact.identity[k]))
235
+ issue('refused', 'ARTIFACT_IDENTITY', s.key);
236
+ unique(s.artifact.files, 'path', `files:${s.key}`);
237
+ for (const f of s.artifact.files)
238
+ if (recipePreflightDigest(f.bytes) !== f.digest)
239
+ issue('refused', 'FILE_DIGEST', `${s.key}:${f.path}`);
240
+ try {
241
+ const p = parseRecipeFiles(s.artifact.files, `${s.publisher}/${s.recipeId}@${s.release}`, { okfVersion: '0.2' });
242
+ if (!p.ok) {
243
+ issue('refused', p.error.code, s.key);
244
+ continue;
245
+ }
246
+ if (p.recipe.id !== s.recipeId || p.recipe.version !== s.release)
247
+ issue('refused', 'MANIFEST_IDENTITY', s.key);
248
+ parserWarnings.push(...p.recipe.warnings.map(w => ({ provider: s.key, code: w.code, field: w.field })));
249
+ for (const w of p.recipe.warnings)
250
+ issue(w.code === 'KIND_CONVENTION_MALFORMED' || w.code === 'KIND_DUPLICATE_GOVERNS' ? 'refused' : 'partial', w.code === 'RECIPE_MANIFEST_RESERVED_KEY' ? 'MANIFEST_SEMANTICS_NOT_APPLIED' : 'PARSER_DIAGNOSTIC_UNCLASSIFIED', `${s.key}:${w.code}`);
251
+ const registry = buildKindRegistry(p.recipe.docs);
252
+ for (const w of registry.warnings)
253
+ issue(modelDiagnosticLevel(w.code), w.code, s.key);
254
+ recipes.set(s.key, { ...s, parsed: p.recipe, prepared: prepareRecipeInstall(p.recipe, { okfVersion: '0.2', now: '1970-01-01T00:00:00.000Z' }) });
255
+ }
256
+ catch {
257
+ issue('refused', 'PARSE_FAILURE', s.key);
258
+ }
259
+ }
260
+ // Caller-supplied observations are structural evidence only, never access grants or reads.
261
+ unique(input.observations, 'id', 'observations');
262
+ unique(input.endpoints, 'id', 'endpoints');
263
+ for (const selected of input.selected)
264
+ if (!input.observations.some(o => o.provider === selected.key))
265
+ issue('partial', 'SELECTED_PLACEMENT_UNKNOWN', selected.key);
266
+ for (const o of input.observations) {
267
+ if (!['available', 'unavailable', 'unknown'].includes(o.availability)) {
268
+ issue('refused', 'AVAILABILITY', o.id);
269
+ continue;
270
+ }
271
+ if (!input.selected.some(s => s.key === o.provider))
272
+ issue('refused', 'OBSERVATION_PROVIDER_UNKNOWN', o.id);
273
+ if (o.scope !== 'local' && !isBundleAlias(o.scope))
274
+ issue('refused', 'ENDPOINT_BINDING', o.id);
275
+ if (o.availability !== 'available') {
276
+ issue('partial', 'OBSERVATION_UNAVAILABLE', o.id);
277
+ continue;
278
+ }
279
+ if (o.complete !== true)
280
+ issue('partial', 'INVENTORY_INCOMPLETE', o.id);
281
+ if (typeof o.observedVersion !== 'string' || !o.observedVersion)
282
+ issue('partial', 'OBSERVED_VERSION_UNKNOWN', o.id);
283
+ if (o.scope !== 'local' && (!o.bundleId || o.bundleId !== o.expectedBundleId))
284
+ issue('refused', 'BUNDLE_IDENTITY', o.id);
285
+ const s = recipes.get(o.provider);
286
+ if (!s) {
287
+ issue('partial', 'PROVIDER_ARTIFACT_UNAVAILABLE', o.id);
288
+ continue;
289
+ }
290
+ unique(o.definitions, 'id', `definitions:${o.id}`);
291
+ const docs = [];
292
+ for (const d of o.definitions) {
293
+ const desired = ownedDocs(s.prepared).find(x => x.id === d.id);
294
+ if (!desired) {
295
+ issue('refused', 'UNOWNED_DEFINITION', `${o.id}:${d.id}`);
296
+ continue;
297
+ }
298
+ try {
299
+ const doc = { id: d.id, ...parseMarkdown(d.bytes, d.id, { okfVersion: '0.2' }) };
300
+ const checked = inspectRecipeInstallTarget(doc, desired, s.prepared);
301
+ if (definitionDigest(doc) !== definitionDigest(desired))
302
+ issue('refused', 'LOCAL_ADAPTATION', `${o.id}:${d.id}`);
303
+ if (checked.stamp === 'missing')
304
+ issue('partial', 'STAMP_UNAVAILABLE', `${o.id}:${d.id}`);
305
+ else if (checked.stamp !== 'current')
306
+ issue('refused', 'FOREIGN_OR_DIVERGENT_STAMP', `${o.id}:${d.id}`);
307
+ if (checked.stampIntegrity === 'unknown')
308
+ issue('partial', 'STAMP_RULES_UNKNOWN', `${o.id}:${d.id}`);
309
+ else if (checked.stampIntegrity === 'diverged')
310
+ issue('refused', 'STAMP_DEFINITION_DIVERGED', `${o.id}:${d.id}`);
311
+ docs.push(doc);
312
+ }
313
+ catch {
314
+ issue('refused', 'OBSERVATION_PARSE', `${o.id}:${d.id}`);
315
+ }
316
+ }
317
+ // Catch omitted definitions instead of interpreting an incomplete observation as complete.
318
+ for (const d of ownedDocs(s.prepared))
319
+ if (!o.definitions.some(x => x.id === d.id))
320
+ issue(o.complete ? 'refused' : 'partial', 'DEFINITION_UNOBSERVED', `${o.id}:${d.id}`);
321
+ const registry = buildKindRegistry(docs.filter(d => isConventionId(d.id) && d.frontmatter.type === CONVENTION_TYPE));
322
+ for (const w of registry.warnings)
323
+ issue(modelDiagnosticLevel(w.code), w.code, o.id);
324
+ inventories.set(o.id, { o, docs, registry });
325
+ }
326
+ // Full placement inventories prevent selected-provider filtering from hiding local collisions.
327
+ const placements = input.placementInventories ?? [];
328
+ unique(placements, 'id', 'placementInventories');
329
+ for (const scope of new Set([...input.observations.map(o => o.scope), ...placements.map(p => p.scope)])) {
330
+ const matches = placements.filter(p => p.scope === scope);
331
+ if (matches.length !== 1) {
332
+ issue(matches.length ? 'refused' : 'partial', matches.length ? 'PLACEMENT_INVENTORY_AMBIGUOUS' : 'PLACEMENT_INVENTORY_UNKNOWN', scope);
333
+ continue;
334
+ }
335
+ const placement = matches[0];
336
+ if (scope !== 'local' && (!isBundleAlias(scope) || !placement.bundleId || placement.bundleId !== placement.expectedBundleId))
337
+ issue('refused', 'BUNDLE_IDENTITY', placement.id);
338
+ if (placement.availability !== 'available') {
339
+ issue('partial', 'PLACEMENT_INVENTORY_UNKNOWN', placement.id);
340
+ continue;
341
+ }
342
+ if (!placement.complete)
343
+ issue('partial', 'PLACEMENT_INVENTORY_INCOMPLETE', placement.id);
344
+ if (!placement.observedVersion)
345
+ issue('partial', 'OBSERVED_VERSION_UNKNOWN', placement.id);
346
+ unique(placement.files, 'path', `placement:${placement.id}`);
347
+ const files = new Map(placement.files.map(f => [f.path, f.bytes]));
348
+ const documents = [];
349
+ for (const file of placement.files.filter(f => f.path.startsWith(CONVENTIONS_PREFIX) && f.path.endsWith('.md'))) {
350
+ try {
351
+ documents.push({ id: file.path.slice(0, -3), ...parseMarkdown(file.bytes, undefined, { okfVersion: '0.2' }) });
352
+ }
353
+ catch {
354
+ issue('refused', 'OBSERVATION_PARSE', `${placement.id}:${file.path}`);
355
+ }
356
+ }
357
+ for (const warning of buildKindRegistry(documents.filter(d => isConventionId(d.id) && d.frontmatter.type === CONVENTION_TYPE)).warnings)
358
+ issue(modelDiagnosticLevel(warning.code), warning.code, placement.id);
359
+ const claims = new Map();
360
+ const scopes = input.observations.filter(o => o.scope === scope);
361
+ for (const observation of scopes) {
362
+ if (scope !== 'local' && (observation.bundleId !== placement.bundleId || observation.expectedBundleId !== placement.expectedBundleId))
363
+ issue('refused', 'BUNDLE_IDENTITY', observation.id);
364
+ for (const definition of observation.definitions) {
365
+ const file = files.get(`${definition.id}.md`);
366
+ if (file !== undefined && file !== definition.bytes)
367
+ issue('refused', 'INVENTORY_INCONSISTENT', `${observation.id}:${definition.id}`);
368
+ if (file === undefined)
369
+ issue(placement.complete ? 'refused' : 'partial', 'PLACEMENT_DEFINITION_UNOBSERVED', `${observation.id}:${definition.id}`);
370
+ }
371
+ const recipe = recipes.get(observation.provider);
372
+ if (!recipe)
373
+ continue;
374
+ for (const [path, expected] of assets(recipe.prepared)) {
375
+ const previous = claims.get(path);
376
+ if (previous !== undefined && previous !== observation.provider)
377
+ issue('refused', 'DEFINITION_ID_COLLISION', `${scope}:${path}`);
378
+ claims.set(path, observation.provider);
379
+ const actual = files.get(path);
380
+ if (actual === undefined) {
381
+ issue(placement.complete ? 'refused' : 'partial', 'PLACEMENT_ASSET_UNOBSERVED', `${scope}:${path}`);
382
+ continue;
383
+ }
384
+ if (typeof expected === 'string') {
385
+ if (actual !== expected)
386
+ issue('refused', 'LOCAL_ADAPTATION', `${scope}:${path}`);
387
+ }
388
+ else {
389
+ try {
390
+ const doc = { id: path.slice(0, -3), ...parseMarkdown(actual, undefined, { okfVersion: '0.2' }) };
391
+ if (definitionDigest(doc) !== definitionDigest(expected))
392
+ issue('refused', 'LOCAL_ADAPTATION', `${scope}:${path}`);
393
+ // The installer stamps owned definitions, but not View registry documents.
394
+ if (ownedDocs(recipe.prepared).some(d => `${d.id}.md` === path)) {
395
+ const checked = inspectRecipeInstallTarget(doc, expected, recipe.prepared);
396
+ if (checked.stamp === 'missing')
397
+ issue('partial', 'STAMP_UNAVAILABLE', `${scope}:${path}`);
398
+ else if (checked.stamp !== 'current')
399
+ issue('refused', 'FOREIGN_OR_DIVERGENT_STAMP', `${scope}:${path}`);
400
+ if (checked.stampIntegrity === 'unknown')
401
+ issue('partial', 'STAMP_RULES_UNKNOWN', `${scope}:${path}`);
402
+ else if (checked.stampIntegrity === 'diverged')
403
+ issue('refused', 'STAMP_DEFINITION_DIVERGED', `${scope}:${path}`);
404
+ }
405
+ }
406
+ catch {
407
+ issue('refused', 'OBSERVATION_PARSE', `${scope}:${path}`);
408
+ }
409
+ }
410
+ }
411
+ }
412
+ const selectedDocs = [...inventories.values()].filter(x => x.o.scope === scope).flatMap(x => x.docs);
413
+ const ids = new Set();
414
+ for (const doc of selectedDocs) {
415
+ if (ids.has(doc.id))
416
+ issue('refused', 'DEFINITION_ID_COLLISION', `${scope}:${doc.id}`);
417
+ ids.add(doc.id);
418
+ }
419
+ for (const warning of buildKindRegistry(selectedDocs.filter(d => isConventionId(d.id) && d.frontmatter.type === CONVENTION_TYPE)).warnings)
420
+ issue(modelDiagnosticLevel(warning.code), warning.code, scope);
421
+ }
422
+ const scopeOf = (e) => e.placement === 'local' ? 'local' : e.alias;
423
+ const endpoint = (consumer, requirement) => input.endpoints.filter(e => e.consumer === consumer && e.requirement === requirement);
424
+ const materializedTargets = (consumer, provider, kind) => {
425
+ const c = input.consumers.find(x => x.id === consumer);
426
+ const requirements = c?.requirements?.filter(r => r.provider === provider && r.kind === kind) ?? [];
427
+ const targets = requirements.flatMap(r => endpoint(consumer, r.id)).map(e => e.placement === 'local' ? kind : `${e.alias}:${kind}`);
428
+ return [...new Set(targets)].sort(compareCodeUnits);
429
+ };
430
+ for (const s of input.selected)
431
+ if (s.role === 'extension' && !input.consumers.some(c => c.owner === s.key))
432
+ issue('partial', 'EXTENSION_CONSUMER_UNKNOWN', s.key);
433
+ for (const c of input.consumers) {
434
+ if (c.descriptorDigest !== recipePreflightDigest({ id: c.id, owner: c.owner, requirements: c.requirements }))
435
+ issue('refused', 'DESCRIPTOR_DIGEST', c.id);
436
+ if (!input.selected.some(s => s.key === c.owner))
437
+ issue('refused', 'CONSUMER_OWNER', c.id);
438
+ else if (!recipes.has(c.owner))
439
+ issue('partial', 'PROVIDER_ARTIFACT_UNAVAILABLE', c.id);
440
+ if (!Array.isArray(c.requirements)) {
441
+ issue('partial', 'CONSUMER_REQUIREMENTS_UNKNOWN', c.id);
442
+ continue;
443
+ }
444
+ unique(c.requirements, 'id', `requirements:${c.id}`);
445
+ if (c.requirements.length === 0 && input.selected.some(s => s.key === c.owner && s.role === 'extension'))
446
+ issue('partial', 'EXTENSION_REQUIREMENTS_UNKNOWN', c.id);
447
+ for (const r of c.requirements) {
448
+ const at = `${c.id}:${r.id}`;
449
+ for (const key of Object.keys(r))
450
+ if (!['id', 'provider', 'kind', 'required', 'fields', 'links', 'unsupported'].includes(key))
451
+ issue('partial', 'UNSUPPORTED_OPERATOR', `${at}:${key}`);
452
+ for (const u of r.unsupported ?? [])
453
+ issue('partial', 'UNSUPPORTED_CONSTRAINT', `${at}:${u}`);
454
+ if (!input.selected.some(s => s.key === r.provider)) {
455
+ issue(r.required ? 'refused' : 'partial', 'SELECTED_PROVIDER_MISSING', at);
456
+ continue;
457
+ }
458
+ if (!recipes.has(r.provider)) {
459
+ issue('partial', 'PROVIDER_ARTIFACT_UNAVAILABLE', at);
460
+ continue;
461
+ }
462
+ const es = endpoint(c.id, r.id);
463
+ if (es.length !== 1) {
464
+ issue(es.length > 1 ? 'refused' : 'partial', es.length > 1 ? 'ENDPOINT_AMBIGUOUS' : 'ENDPOINT_UNOBSERVED', at);
465
+ continue;
466
+ }
467
+ const e = es[0];
468
+ if (!['local', 'qualified'].includes(e.placement) || (e.placement === 'local' && e.alias !== undefined) || (e.placement === 'qualified' && (!e.alias || e.alias === 'local' || !isBundleAlias(e.alias)))) {
469
+ issue('refused', 'ENDPOINT_BINDING', at);
470
+ continue;
471
+ }
472
+ const os = input.observations.filter(o => o.provider === r.provider && o.scope === scopeOf(e));
473
+ if (os.length !== 1) {
474
+ issue(os.length > 1 ? 'refused' : 'partial', os.length > 1 ? 'OBSERVATION_AMBIGUOUS' : 'OBSERVATION_UNAVAILABLE', at);
475
+ continue;
476
+ }
477
+ const o = os[0];
478
+ if (o.availability !== 'available') {
479
+ issue('partial', r.required ? 'REQUIRED_UNAVAILABLE' : 'OPTIONAL_UNAVAILABLE', at);
480
+ continue;
481
+ }
482
+ const kind = inventories.get(o.id)?.registry.kinds.get(r.kind);
483
+ if (!kind) {
484
+ issue(o.complete === true ? 'refused' : 'partial', o.complete === true ? 'REQUIRED_KIND_MISSING' : 'REQUIRED_KIND_UNOBSERVED', at);
485
+ continue;
486
+ }
487
+ for (const field of r.fields ?? [])
488
+ if (![...kind.fields.required, ...kind.fields.optional].includes(field))
489
+ issue('refused', 'REQUIRED_FIELD_MISSING', `${at}:${field}`);
490
+ if (e.placement === 'qualified' && r.links?.length) {
491
+ // Alias mappings here describe the root scope, not a foreign source's namespace.
492
+ issue('partial', 'SOURCE_QUALIFIED_LINKS_UNSUPPORTED', at);
493
+ continue;
494
+ }
495
+ for (const link of r.links ?? []) {
496
+ const targets = materializedTargets(c.id, link.target.provider, link.target.kind);
497
+ const expected = targets[0];
498
+ if (targets.length > 1)
499
+ issue('refused', 'LINK_TARGET_AMBIGUOUS', `${at}:${link.label}`);
500
+ else if (!expected)
501
+ issue('partial', 'LINK_TARGET_UNOBSERVED', `${at}:${link.label}`);
502
+ else if (!kind.links || kind.links[link.label] !== expected)
503
+ issue('refused', 'LINK_TARGET_MISMATCH', `${at}:${link.label}`);
504
+ }
505
+ }
506
+ }
507
+ for (const e of input.endpoints) {
508
+ const c = input.consumers.find(c => c.id === e.consumer);
509
+ if (!c?.requirements?.some(r => r.id === e.requirement))
510
+ issue('refused', 'ORPHAN_ENDPOINT', e.id);
511
+ }
512
+ const dedup = [...new Map(issues.map(i => [JSON.stringify(i), i])).values()].sort((a, b) => compareCodeUnits(JSON.stringify(a), JSON.stringify(b)));
513
+ const verdict = dedup.some(i => i.level === 'refused') ? 'refused' : dedup.length ? 'partial' : 'valid';
514
+ return { schema: 'recipe-set-preflight-result/v1', verdict, structuralComplete: verdict === 'valid', scope: 'declared-structural-input-only', digestScheme: 'fixture-envelope-v1/utf16-code-unit-sorted-keys-and-file-paths/sha256', inputs: { selected: input.selected.map(({ key, publisher, recipeId, release, artifactDigest }) => ({ key, publisher, recipeId, release, artifactDigest })), consumers: input.consumers.map(({ id, descriptorDigest }) => ({ id, descriptorDigest })), observations: input.observations.map(({ id, observedVersion }) => ({ id, ...(observedVersion ? { observedVersion } : {}) })), placementInventories: (input.placementInventories ?? []).map(({ id, observedVersion }) => ({ id, ...(observedVersion ? { observedVersion } : {}) })) }, externalConsumers: 'unknown-out-of-scope', issues: dedup, parserWarnings: parserWarnings.sort((a, b) => compareCodeUnits(JSON.stringify(a), JSON.stringify(b))) };
515
+ }
516
+ /** Human guidance is separate from deterministic diagnostics, so adapters need not invent it. */
517
+ export function explainRecipePreflightIssue(code) {
518
+ const groups = [
519
+ [['INPUT_SHAPE', 'SCHEMA'], 'The supplied evidence does not match the supported contract.', 'Supply finite JSON using recipe-set-preflight/v1 and the documented fields.'],
520
+ [['ARTIFACT_DIGEST', 'FILE_DIGEST', 'DESCRIPTOR_DIGEST'], 'An exact content pin does not match the supplied content.', 'Reacquire the intended exact bytes and independently verify their declared digest.'],
521
+ [['ARTIFACT_IDENTITY', 'MANIFEST_IDENTITY', 'DUPLICATE_ID', 'CONSUMER_OWNER', 'OBSERVATION_PROVIDER_UNKNOWN'], 'The supplied identities conflict or are ambiguous.', 'Choose unique selected keys, recipe IDs and descriptor identities, and align their references.'],
522
+ [['DEFINITION_ID_COLLISION', 'KIND_DUPLICATE_GOVERNS'], 'More than one owner claims a definition path or active Kind in this placement.', 'Use separately owned noncolliding definitions or explicitly different placements.'],
523
+ [['FOREIGN_OR_DIVERGENT_STAMP', 'STAMP_DEFINITION_DIVERGED', 'LOCAL_ADAPTATION', 'UNOWNED_DEFINITION'], 'Observed content does not conform to the selected recipe release and ownership.', 'Inspect the installed definition and choose the intended exact release or deliberate local adaptation outside this conformance claim.'],
524
+ [['STAMP_UNAVAILABLE', 'STAMP_RULES_UNKNOWN'], 'Installed ownership or integrity cannot be established.', 'Supply readable supported Core stamps; do not adopt or restamp definitions based on this result.'],
525
+ [['BUNDLE_IDENTITY', 'ENDPOINT_BINDING', 'ENDPOINT_AMBIGUOUS', 'LINK_TARGET_AMBIGUOUS', 'ORPHAN_ENDPOINT'], 'Placement evidence conflicts with the declared endpoint mapping.', 'Provide one explicit mapping with matching aliases and expected/observed bundle identities.'],
526
+ [['REQUIRED_KIND_MISSING', 'REQUIRED_FIELD_MISSING', 'LINK_TARGET_MISMATCH'], 'A supplied structural definition contradicts a declared consumer requirement.', 'Align the explicitly selected definitions and consumer contract; optionality does not hide contradictions.'],
527
+ [['INVENTORY_INCONSISTENT', 'PLACEMENT_INVENTORY_AMBIGUOUS'], 'Supplied inventories disagree about the checked snapshot.', 'Collect one consistent placement inventory and matching owned observations.'],
528
+ [['RECIPE_MALFORMED', 'RECIPE_EMPTY', 'RECIPE_UNSAFE_PATH', 'RECIPE_CONNECTOR_INVALID', 'PARSE_FAILURE', 'OBSERVATION_PARSE', 'KIND_CONVENTION_MALFORMED'], 'A supplied recipe or active definition is malformed.', 'Correct the input using the existing Core recipe/Kind parser diagnostics before checking again.'],
529
+ [['UNSUPPORTED_OPERATOR', 'UNSUPPORTED_CONSTRAINT', 'SOURCE_QUALIFIED_LINKS_UNSUPPORTED', 'PARSER_DIAGNOSTIC_UNCLASSIFIED', 'MANIFEST_SEMANTICS_NOT_APPLIED'], 'Requested or declared semantics are not evaluated by this structural checker.', 'Keep this result partial and evaluate those semantics with their owning contract; reserved manifest keys are not enforced.'],
530
+ ];
531
+ for (const [codes, message, action] of groups)
532
+ if (codes.includes(code))
533
+ return { message, action };
534
+ return { message: 'Required evidence or consumer scope is missing, incomplete or unavailable.', action: 'Inspect the diagnostic location, supply the missing exact snapshot or descriptor, then run preflight again. Do not treat unknown evidence as absence or approval.' };
535
+ }
536
+ //# sourceMappingURL=recipe-set-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-set-preflight.js","sourceRoot":"","sources":["../src/recipe-set-preflight.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * correlation, `sources` properties, site candidate rules and derived fields. Storage-neutral: no
13
13
  * Node globals or builtins.
14
14
  */
15
- export { DEFAULT_AUTO_APPLY, DEFAULT_NEEDS_REVIEW, NEVER_OWNED, decideChange, gateSafeValue, isExcludedRecord, readOverlayPolicy, } from "./policy.js";
15
+ export { DEFAULT_AUTO_APPLY, DEFAULT_NEEDS_REVIEW, NEVER_OWNED, decideChange, gateSafeValue, isExcludedRecord, readOverlayPolicy, readOverlayPolicyForResource, } from "./policy.js";
16
16
  export { disappearedPhase, planRecordOverlay, summarizeChange } from "./plan.js";
17
17
  export { FINDING_CHANGE_KIND, findingDigest, planFindings } from "./findings.js";
18
18
  export { applyRecordOverlay, composeGuards, ownershipGuard } from "./apply.js";