@superbee/core 0.2.0-pre.30 → 0.2.0-pre.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/recipe-set-preflight.d.ts +139 -0
- package/dist/recipe-set-preflight.d.ts.map +1 -0
- package/dist/recipe-set-preflight.js +536 -0
- package/dist/recipe-set-preflight.js.map +1 -0
- package/dist/source-profiles/index.d.ts +1 -1
- package/dist/source-profiles/index.js +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1080,3 +1080,5 @@ The v0 shape preserves authored array order and warning metadata. It does not
|
|
|
1080
1080
|
include `fields.types` or derived `freshnessHorizonMs`; adapters that already add
|
|
1081
1081
|
these fields keep that enrichment. Projection does not establish snapshot coherence,
|
|
1082
1082
|
authorization or permission to disclose a bundle's declarations.
|
|
1083
|
+
|
|
1084
|
+
See [explicit recipe-set structural preflight](recipe-set-preflight.md) for the opt-in read-only composition checker and its evidence limits.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
export declare const RECIPE_PREFLIGHT_SCHEMA: "recipe-set-preflight/v1";
|
|
2
|
+
export declare const RECIPE_PREFLIGHT_DIGEST_SCHEME: "fixture-envelope-v1/utf16-code-unit-sorted-keys-and-file-paths/sha256";
|
|
3
|
+
export interface ArtifactFile {
|
|
4
|
+
path: string;
|
|
5
|
+
bytes: string;
|
|
6
|
+
digest: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RecipeArtifact {
|
|
9
|
+
identity: {
|
|
10
|
+
publisher: string;
|
|
11
|
+
recipeId: string;
|
|
12
|
+
release: string;
|
|
13
|
+
};
|
|
14
|
+
files: ArtifactFile[];
|
|
15
|
+
}
|
|
16
|
+
export interface SelectedRecipe {
|
|
17
|
+
key: string;
|
|
18
|
+
publisher: string;
|
|
19
|
+
recipeId: string;
|
|
20
|
+
release: string;
|
|
21
|
+
role: 'base' | 'extension';
|
|
22
|
+
artifactDigest: string;
|
|
23
|
+
artifact?: RecipeArtifact | null;
|
|
24
|
+
}
|
|
25
|
+
export interface Requirement {
|
|
26
|
+
id: string;
|
|
27
|
+
provider: string;
|
|
28
|
+
kind: string;
|
|
29
|
+
required: boolean;
|
|
30
|
+
fields?: string[];
|
|
31
|
+
links?: {
|
|
32
|
+
label: string;
|
|
33
|
+
target: {
|
|
34
|
+
provider: string;
|
|
35
|
+
kind: string;
|
|
36
|
+
};
|
|
37
|
+
}[];
|
|
38
|
+
unsupported?: string[];
|
|
39
|
+
[operator: string]: unknown;
|
|
40
|
+
}
|
|
41
|
+
export interface Consumer {
|
|
42
|
+
id: string;
|
|
43
|
+
owner: string;
|
|
44
|
+
descriptorDigest: string;
|
|
45
|
+
requirements: Requirement[] | null;
|
|
46
|
+
}
|
|
47
|
+
export interface Endpoint {
|
|
48
|
+
id: string;
|
|
49
|
+
consumer: string;
|
|
50
|
+
requirement: string;
|
|
51
|
+
placement: 'local' | 'qualified';
|
|
52
|
+
alias?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Selected-provider evidence, separate from the complete placement collision inventory. */
|
|
55
|
+
export interface Observation {
|
|
56
|
+
id: string;
|
|
57
|
+
provider: string;
|
|
58
|
+
scope: string;
|
|
59
|
+
bundleId?: string;
|
|
60
|
+
expectedBundleId?: string;
|
|
61
|
+
availability: 'available' | 'unavailable' | 'unknown';
|
|
62
|
+
complete: boolean;
|
|
63
|
+
observedVersion?: string;
|
|
64
|
+
definitions: {
|
|
65
|
+
id: string;
|
|
66
|
+
bytes: string;
|
|
67
|
+
}[];
|
|
68
|
+
}
|
|
69
|
+
export interface PlacementInventory {
|
|
70
|
+
id: string;
|
|
71
|
+
scope: string;
|
|
72
|
+
bundleId?: string;
|
|
73
|
+
expectedBundleId?: string;
|
|
74
|
+
availability: 'available' | 'unavailable' | 'unknown';
|
|
75
|
+
complete: boolean;
|
|
76
|
+
observedVersion?: string;
|
|
77
|
+
files: {
|
|
78
|
+
path: string;
|
|
79
|
+
bytes: string;
|
|
80
|
+
}[];
|
|
81
|
+
}
|
|
82
|
+
export interface RecipePreflightInput {
|
|
83
|
+
schema: typeof RECIPE_PREFLIGHT_SCHEMA;
|
|
84
|
+
selected: SelectedRecipe[];
|
|
85
|
+
consumers: Consumer[];
|
|
86
|
+
endpoints: Endpoint[];
|
|
87
|
+
observations: Observation[];
|
|
88
|
+
placementInventories?: PlacementInventory[];
|
|
89
|
+
}
|
|
90
|
+
export interface PreflightIssue {
|
|
91
|
+
level: 'partial' | 'refused';
|
|
92
|
+
code: string;
|
|
93
|
+
at: string;
|
|
94
|
+
}
|
|
95
|
+
export interface PreflightResult {
|
|
96
|
+
schema: 'recipe-set-preflight-result/v1';
|
|
97
|
+
verdict: 'valid' | 'partial' | 'refused';
|
|
98
|
+
structuralComplete: boolean;
|
|
99
|
+
scope: 'declared-structural-input-only';
|
|
100
|
+
digestScheme: typeof RECIPE_PREFLIGHT_DIGEST_SCHEME;
|
|
101
|
+
inputs: {
|
|
102
|
+
selected: {
|
|
103
|
+
key: string;
|
|
104
|
+
publisher: string;
|
|
105
|
+
recipeId: string;
|
|
106
|
+
release: string;
|
|
107
|
+
artifactDigest: string;
|
|
108
|
+
}[];
|
|
109
|
+
consumers: {
|
|
110
|
+
id: string;
|
|
111
|
+
descriptorDigest: string;
|
|
112
|
+
}[];
|
|
113
|
+
observations: {
|
|
114
|
+
id: string;
|
|
115
|
+
observedVersion?: string;
|
|
116
|
+
}[];
|
|
117
|
+
placementInventories: {
|
|
118
|
+
id: string;
|
|
119
|
+
observedVersion?: string;
|
|
120
|
+
}[];
|
|
121
|
+
};
|
|
122
|
+
externalConsumers: 'unknown-out-of-scope';
|
|
123
|
+
issues: PreflightIssue[];
|
|
124
|
+
parserWarnings: {
|
|
125
|
+
provider: string;
|
|
126
|
+
code: string;
|
|
127
|
+
field?: string;
|
|
128
|
+
}[];
|
|
129
|
+
}
|
|
130
|
+
/** This envelope identity is separate from Core source/definition digests and Studio packaging. */
|
|
131
|
+
export declare function recipePreflightDigest(value: unknown): string;
|
|
132
|
+
/** Async for a uniform portable consumer contract; performs no IO, writes, or permission checks. */
|
|
133
|
+
export declare function preflightRecipeSet(value: unknown): Promise<PreflightResult>;
|
|
134
|
+
/** Human guidance is separate from deterministic diagnostics, so adapters need not invent it. */
|
|
135
|
+
export declare function explainRecipePreflightIssue(code: string): {
|
|
136
|
+
message: string;
|
|
137
|
+
action: string;
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=recipe-set-preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-set-preflight.d.ts","sourceRoot":"","sources":["../src/recipe-set-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|
|
@@ -14,7 +14,7 @@ export interface RestJsonCursor {
|
|
|
14
14
|
}
|
|
15
15
|
export declare const restJsonProfile: SourceProfile<ConnectorSource, RestJsonCursor>;
|
|
16
16
|
/** Contract-1 composition helpers for explicitly trusted standalone source plugins. */
|
|
17
|
-
export declare const SOURCE_PLUGIN_CORE_VERSION = "0.2.0-pre.
|
|
17
|
+
export declare const SOURCE_PLUGIN_CORE_VERSION = "0.2.0-pre.31";
|
|
18
18
|
export interface SourcePluginHelpers {
|
|
19
19
|
readonly restJsonProfile: typeof restJsonProfile;
|
|
20
20
|
readonly nextLinkTarget: typeof nextLinkTarget;
|
|
@@ -196,7 +196,7 @@ export const restJsonProfile = Object.freeze({
|
|
|
196
196
|
},
|
|
197
197
|
});
|
|
198
198
|
/** Contract-1 composition helpers for explicitly trusted standalone source plugins. */
|
|
199
|
-
export const SOURCE_PLUGIN_CORE_VERSION = "0.2.0-pre.
|
|
199
|
+
export const SOURCE_PLUGIN_CORE_VERSION = "0.2.0-pre.31";
|
|
200
200
|
export { nextLinkTarget };
|
|
201
201
|
export const SOURCE_PROFILES = Object.freeze([restJsonProfile].map(profile => Object.freeze({ id: profile.id, version: profile.version, kind: profile.kind })));
|
|
202
202
|
/** Inert lookup. Extensions are explicit caller imports, never discovered or executed here. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superbee/core",
|
|
3
|
-
"version": "0.2.0-pre.
|
|
3
|
+
"version": "0.2.0-pre.31",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "OKF store engine \u2014 bundle I/O, cross-links, derived backlinks, freshness, and versioned writes.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -214,6 +214,10 @@
|
|
|
214
214
|
"./domain-model": {
|
|
215
215
|
"types": "./dist/domain-model.d.ts",
|
|
216
216
|
"default": "./dist/domain-model.js"
|
|
217
|
+
},
|
|
218
|
+
"./recipe-set-preflight": {
|
|
219
|
+
"types": "./dist/recipe-set-preflight.d.ts",
|
|
220
|
+
"default": "./dist/recipe-set-preflight.js"
|
|
217
221
|
}
|
|
218
222
|
},
|
|
219
223
|
"files": [
|