owlrunkit 0.18.3 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +80 -0
- package/README.md +223 -52
- package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
- package/docs/architecture/OWLCODA_RUNKIT_0190_CONSOLIDATED_DAILY_USE_PRODUCT_DECISION_20260812.md +97 -0
- package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +8 -7
- package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_2.md +57 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +133 -77
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.2.md +57 -0
- package/package.json +1 -1
- package/packages/attest/README.md +9 -5
- package/packages/attest/consumer-surface-v2.json +263 -0
- package/packages/attest/distribution-manifest-v1.json +14 -1
- package/packages/attest/schemas/quick-verification-receipt-v3.schema.json +244 -0
- package/packages/attest/schemas/workspace-snapshot-v2.schema.json +114 -0
- package/packages/attest/src/dependency-environment.mjs +128 -0
- package/packages/attest/src/index.mjs +1 -0
- package/packages/attest/src/quick-receipt-contract.mjs +205 -12
- package/packages/attest/src/quick.mjs +45 -4
- package/packages/attest/src/workspace-snapshot.mjs +143 -7
- package/registry-release-policy-v1.json +5 -5
- package/sbom.spdx.json +5 -5
- package/scripts/runkit-contract/assurance-router.mjs +25 -6
- package/scripts/runkit-contract/core-contract.mjs +29 -1
- package/scripts/runkit-contract/efficiency-metrics.mjs +559 -0
- package/scripts/runkit-contract/evidence-store.mjs +130 -0
- package/scripts/runkit-contract/onboarding-bootstrap.mjs +685 -0
- package/scripts/runkit-contract/onboarding-doctor.mjs +3 -2
- package/scripts/runkit-contract/outcome-presentation.mjs +171 -0
- package/scripts/runkit-contract/profile-onboarding.mjs +285 -17
- package/scripts/runkit-contract/project-cli-resolver.mjs +29 -5
- package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
- package/scripts/runkit-contract/quick-evidence-reuse.mjs +590 -0
- package/scripts/runkit-contract/quick-isolation.mjs +314 -0
- package/scripts/runkit-contract/quick-metrics.mjs +51 -3
- package/scripts/runkit-contract/quick-receipt.mjs +31 -1
- package/scripts/runkit-contract/quick-verify.mjs +217 -26
- package/scripts/runkit-contract/quick-workspace-snapshot.mjs +1 -0
- package/scripts/runkit-contract/runkit-bootstrap.mjs +7 -1
- package/scripts/runkit-contract/runkit-cli.mjs +602 -152
- package/scripts/runkit-contract/runtime-transition.mjs +478 -0
- package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
- package/scripts/runkit-contract/schemas/efficiency-event-v1.schema.json +56 -0
- package/scripts/runkit-contract/schemas/efficiency-metrics-v1.schema.json +220 -0
- package/scripts/runkit-contract/schemas/external-runtime-report-v1.schema.json +125 -0
- package/scripts/runkit-contract/schemas/onboarding-bootstrap-plan-v1.schema.json +168 -0
- package/scripts/runkit-contract/schemas/onboarding-bootstrap-receipt-v1.schema.json +130 -0
- package/scripts/runkit-contract/schemas/outcome-summary-v1.schema.json +83 -0
- package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
- package/scripts/runkit-contract/schemas/quick-evidence-reuse-plan-v1.schema.json +59 -0
- package/scripts/runkit-contract/schemas/quick-evidence-reuse-receipt-v1.schema.json +79 -0
- package/scripts/runkit-contract/schemas/runtime-transition-receipt-v1.schema.json +185 -0
- package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
- package/scripts/runkit-contract/schemas/team-project-event-v4.schema.json +142 -0
- package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
- package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
- package/scripts/runkit-contract/team-project.mjs +1172 -22
- package/scripts/runkit-contract/usage-mode.mjs +28 -7
- package/scripts/runkit-contract/verification-envelope.mjs +15 -18
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
|
-
import { lstatSync, readFileSync, readlinkSync, realpathSync } from "node:fs";
|
|
2
|
+
import { lstatSync, readFileSync, readdirSync, readlinkSync, realpathSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
5
|
import { sha256Bytes, sha256Canonical } from "./formal.mjs";
|
|
6
6
|
|
|
7
7
|
const CONTROL_ROOT = ".owlcoda/runkit";
|
|
8
|
+
const MAX_BOUND_IGNORED_FILES = 10_000;
|
|
9
|
+
const MAX_BOUND_IGNORED_BYTES = 512 * 1024 * 1024;
|
|
8
10
|
const LOCKFILE_NAMES = new Set([
|
|
9
11
|
"bun.lock",
|
|
10
12
|
"bun.lockb",
|
|
@@ -76,7 +78,16 @@ function parseStatus(root) {
|
|
|
76
78
|
if (!field) continue;
|
|
77
79
|
const status = field.slice(0, 2);
|
|
78
80
|
const currentPath = normalizePath(field.slice(3));
|
|
79
|
-
|
|
81
|
+
let priorPath = null;
|
|
82
|
+
if (status.includes("R") || status.includes("C")) {
|
|
83
|
+
const prior = fields[index + 1];
|
|
84
|
+
if (!prior) throw new Error("Git status rename entry is incomplete.");
|
|
85
|
+
priorPath = normalizePath(prior);
|
|
86
|
+
index += 1;
|
|
87
|
+
}
|
|
88
|
+
if (status.includes("R") && priorPath && !isControlPath(priorPath)) {
|
|
89
|
+
entries.set(priorPath, { path: priorPath, state: "deleted", sha256: null });
|
|
90
|
+
}
|
|
80
91
|
if (!currentPath || isControlPath(currentPath)) continue;
|
|
81
92
|
let state = "modified";
|
|
82
93
|
if (status === "??") state = "untracked";
|
|
@@ -148,12 +159,117 @@ function trackedTreeIdentity(root, headCommit) {
|
|
|
148
159
|
});
|
|
149
160
|
}
|
|
150
161
|
|
|
151
|
-
|
|
162
|
+
function safeIgnoredPath(value) {
|
|
163
|
+
if (typeof value !== "string" || value.length === 0 || path.isAbsolute(value)) return false;
|
|
164
|
+
if (value.includes("\\") || value.includes("\0")) return false;
|
|
165
|
+
const segments = value.split("/");
|
|
166
|
+
return segments.every(segment => segment.length > 0 && segment !== "." && segment !== "..")
|
|
167
|
+
&& !isControlPath(value);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function withinRoot(root, candidate) {
|
|
171
|
+
const relative = path.relative(root, candidate);
|
|
172
|
+
return relative === ""
|
|
173
|
+
|| (relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function assertIgnoredByGit(root, relativePath) {
|
|
177
|
+
const tracked = git(root, ["ls-files", "-z", "--", relativePath]);
|
|
178
|
+
if (tracked.length > 0) {
|
|
179
|
+
throw new Error(`Explicit ignored binding cannot replace tracked source binding: ${relativePath}`);
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
git(root, ["check-ignore", "--no-index", "-q", "--", relativePath]);
|
|
183
|
+
} catch {
|
|
184
|
+
throw new Error(`Explicit ignored binding is not covered by Git ignore rules: ${relativePath}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function hashIgnoredTree(root, relativePath, budget) {
|
|
189
|
+
const absolute = path.resolve(root, ...relativePath.split("/"));
|
|
190
|
+
if (!withinRoot(root, absolute)) throw new Error(`Ignored binding escapes workspace: ${relativePath}`);
|
|
191
|
+
let stat;
|
|
192
|
+
try {
|
|
193
|
+
stat = lstatSync(absolute);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
if (error?.code === "ENOENT") return { path: relativePath, state: "missing", sha256: null };
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
if (stat.isSymbolicLink() || realpathSync(absolute) !== absolute) {
|
|
199
|
+
throw new Error(`Ignored binding cannot traverse a symlink: ${relativePath}`);
|
|
200
|
+
}
|
|
201
|
+
if (stat.isFile()) {
|
|
202
|
+
budget.files += 1;
|
|
203
|
+
budget.bytes += stat.size;
|
|
204
|
+
if (budget.files > MAX_BOUND_IGNORED_FILES || budget.bytes > MAX_BOUND_IGNORED_BYTES) {
|
|
205
|
+
throw new Error("Explicit ignored binding exceeds the bounded file or byte limit.");
|
|
206
|
+
}
|
|
207
|
+
return { path: relativePath, state: "file", sha256: sha256Bytes(readFileSync(absolute)) };
|
|
208
|
+
}
|
|
209
|
+
if (!stat.isDirectory()) {
|
|
210
|
+
throw new Error(`Ignored binding must be a regular file, directory, or missing path: ${relativePath}`);
|
|
211
|
+
}
|
|
212
|
+
const files = [];
|
|
213
|
+
const visit = (directory, prefix) => {
|
|
214
|
+
for (const name of readdirSync(directory).sort((left, right) => left.localeCompare(right, "en"))) {
|
|
215
|
+
const child = path.join(directory, name);
|
|
216
|
+
const childRelative = prefix ? `${prefix}/${name}` : name;
|
|
217
|
+
const childStat = lstatSync(child);
|
|
218
|
+
if (childStat.isSymbolicLink() || realpathSync(child) !== child) {
|
|
219
|
+
throw new Error(`Ignored binding cannot traverse a symlink: ${relativePath}/${childRelative}`);
|
|
220
|
+
}
|
|
221
|
+
if (childStat.isDirectory()) {
|
|
222
|
+
visit(child, childRelative);
|
|
223
|
+
} else if (childStat.isFile()) {
|
|
224
|
+
budget.files += 1;
|
|
225
|
+
budget.bytes += childStat.size;
|
|
226
|
+
if (budget.files > MAX_BOUND_IGNORED_FILES || budget.bytes > MAX_BOUND_IGNORED_BYTES) {
|
|
227
|
+
throw new Error("Explicit ignored binding exceeds the bounded file or byte limit.");
|
|
228
|
+
}
|
|
229
|
+
files.push({ path: childRelative, sha256: sha256Bytes(readFileSync(child)) });
|
|
230
|
+
} else {
|
|
231
|
+
throw new Error(`Ignored binding contains a special file: ${relativePath}/${childRelative}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
visit(absolute, "");
|
|
236
|
+
return { path: relativePath, state: "directory", sha256: sha256Canonical(files) };
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function bindIgnoredPaths(root, requestedPaths) {
|
|
240
|
+
if (!Array.isArray(requestedPaths)
|
|
241
|
+
|| requestedPaths.length === 0
|
|
242
|
+
|| requestedPaths.some(value => !safeIgnoredPath(value))) {
|
|
243
|
+
throw new Error("Explicit ignored bindings must be safe literal workspace-relative paths.");
|
|
244
|
+
}
|
|
245
|
+
const paths = [...new Set(requestedPaths)].sort((left, right) => left.localeCompare(right, "en"));
|
|
246
|
+
if (paths.length !== requestedPaths.length) {
|
|
247
|
+
throw new Error("Explicit ignored bindings must not contain duplicates.");
|
|
248
|
+
}
|
|
249
|
+
const budget = { files: 0, bytes: 0 };
|
|
250
|
+
return paths.map(relativePath => {
|
|
251
|
+
assertIgnoredByGit(root, relativePath);
|
|
252
|
+
return hashIgnoredTree(root, relativePath, budget);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export function workspaceSourceStateFingerprint(snapshot) {
|
|
257
|
+
return sha256Canonical({
|
|
258
|
+
repositoryIdentity: snapshot.repositoryIdentity,
|
|
259
|
+
headCommit: snapshot.headCommit,
|
|
260
|
+
trackedTreeIdentity: snapshot.trackedTreeIdentity,
|
|
261
|
+
submodules: snapshot.submodules,
|
|
262
|
+
dirtyOverlay: snapshot.dirtyOverlay,
|
|
263
|
+
dependencyLockfiles: snapshot.dependencyLockfiles,
|
|
264
|
+
excludedRoots: snapshot.excludedRoots,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
export function captureWorkspaceSnapshot(workspaceRoot, { ignoredPaths = [] } = {}) {
|
|
152
269
|
const root = realpathSync(workspaceRoot);
|
|
153
270
|
git(root, ["rev-parse", "--is-inside-work-tree"]);
|
|
154
271
|
const headCommit = optionalGit(root, ["rev-parse", "HEAD"]) || null;
|
|
155
|
-
const
|
|
156
|
-
schemaVersion: "OwlCodaWorkspaceSnapshotV1",
|
|
272
|
+
const base = {
|
|
157
273
|
repositoryIdentity: repositoryIdentity(root),
|
|
158
274
|
headCommit,
|
|
159
275
|
trackedTreeIdentity: trackedTreeIdentity(root, headCommit),
|
|
@@ -161,8 +277,28 @@ export function captureWorkspaceSnapshot(workspaceRoot) {
|
|
|
161
277
|
dirtyOverlay: parseStatus(root),
|
|
162
278
|
dependencyLockfiles: dependencyLockfiles(root),
|
|
163
279
|
excludedRoots: [CONTROL_ROOT],
|
|
164
|
-
|
|
165
|
-
|
|
280
|
+
};
|
|
281
|
+
if (ignoredPaths.length === 0) {
|
|
282
|
+
const payload = {
|
|
283
|
+
schemaVersion: "OwlCodaWorkspaceSnapshotV1",
|
|
284
|
+
...base,
|
|
285
|
+
ignoredPathsBound: false,
|
|
286
|
+
policyVersion: "workspace-snapshot-v1",
|
|
287
|
+
};
|
|
288
|
+
return {
|
|
289
|
+
...payload,
|
|
290
|
+
sourceFingerprint: sha256Canonical(payload),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const ignoredPathBindings = bindIgnoredPaths(root, ignoredPaths);
|
|
294
|
+
const payload = {
|
|
295
|
+
schemaVersion: "OwlCodaWorkspaceSnapshotV2",
|
|
296
|
+
...base,
|
|
297
|
+
ignoredPathsBound: true,
|
|
298
|
+
ignoredPathBindings,
|
|
299
|
+
ignoredPathsFingerprint: sha256Canonical(ignoredPathBindings),
|
|
300
|
+
sourceStateFingerprint: workspaceSourceStateFingerprint(base),
|
|
301
|
+
policyVersion: "workspace-snapshot-v2",
|
|
166
302
|
};
|
|
167
303
|
return {
|
|
168
304
|
...payload,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV1",
|
|
3
3
|
"status": "release_candidate_unpublished",
|
|
4
4
|
"packageName": "owlrunkit",
|
|
5
|
-
"candidateVersion": "0.
|
|
5
|
+
"candidateVersion": "0.19.0",
|
|
6
6
|
"registry": "https://registry.npmjs.org",
|
|
7
7
|
"registryRequiredBeforeAdoption": true,
|
|
8
8
|
"exactVersionRequired": true,
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
],
|
|
24
24
|
"currentPublishedRelease": {
|
|
25
25
|
"packageName": "owlrunkit",
|
|
26
|
-
"version": "0.18.
|
|
27
|
-
"shasum": "
|
|
28
|
-
"integrity": "sha512-
|
|
29
|
-
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.
|
|
26
|
+
"version": "0.18.4",
|
|
27
|
+
"shasum": "8f2ef01da287b76b545eeebd6973bc40449dd302",
|
|
28
|
+
"integrity": "sha512-L3cFuJnU39p/EhgrRaJbEIB7gTRFxKzEpNmANw3kwNFrTe9Fe8wtwgdFOBXldX6xCJY+W44/8cw4P/dtAxiCAA==",
|
|
29
|
+
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.4.tgz"
|
|
30
30
|
},
|
|
31
31
|
"registryRelease": null,
|
|
32
32
|
"registryEvidenceMustBeExternal": true,
|
package/sbom.spdx.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"spdxVersion": "SPDX-2.3",
|
|
3
3
|
"dataLicense": "CC0-1.0",
|
|
4
4
|
"SPDXID": "SPDXRef-DOCUMENT",
|
|
5
|
-
"name": "owlrunkit-0.
|
|
6
|
-
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.
|
|
5
|
+
"name": "owlrunkit-0.19.0",
|
|
6
|
+
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.19.0",
|
|
7
7
|
"creationInfo": {
|
|
8
8
|
"created": "2026-07-29T00:00:00Z",
|
|
9
9
|
"creators": [
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "owlrunkit",
|
|
16
16
|
"SPDXID": "SPDXRef-Package-OwlRunKit",
|
|
17
|
-
"versionInfo": "0.
|
|
18
|
-
"downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.
|
|
17
|
+
"versionInfo": "0.19.0",
|
|
18
|
+
"downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.19.0.tgz",
|
|
19
19
|
"filesAnalyzed": false,
|
|
20
20
|
"licenseConcluded": "GPL-3.0-or-later",
|
|
21
21
|
"licenseDeclared": "GPL-3.0-or-later",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
{
|
|
25
25
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
26
26
|
"referenceType": "purl",
|
|
27
|
-
"referenceLocator": "pkg:npm/owlrunkit@0.
|
|
27
|
+
"referenceLocator": "pkg:npm/owlrunkit@0.19.0"
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
}
|
|
@@ -56,9 +56,9 @@ function incompleteReasons(input) {
|
|
|
56
56
|
return [...new Set(reasons)].sort();
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
function result({ lane, riskMode, reasonCodes, nextCommand }) {
|
|
59
|
+
function result({ schemaVersion, lane, riskMode, reasonCodes, nextCommand }) {
|
|
60
60
|
return {
|
|
61
|
-
schemaVersion
|
|
61
|
+
schemaVersion,
|
|
62
62
|
status: "routed",
|
|
63
63
|
lane,
|
|
64
64
|
riskMode,
|
|
@@ -68,14 +68,15 @@ function result({ lane, riskMode, reasonCodes, nextCommand }) {
|
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
function routeRunKitAssurance(input, { schemaVersion, commandPrefix }) {
|
|
72
72
|
const incomplete = incompleteReasons(input);
|
|
73
73
|
if (incomplete.length > 0) {
|
|
74
74
|
return result({
|
|
75
|
+
schemaVersion,
|
|
75
76
|
lane: "formal",
|
|
76
77
|
riskMode: "full",
|
|
77
78
|
reasonCodes: ["assurance_input_incomplete", ...incomplete],
|
|
78
|
-
nextCommand:
|
|
79
|
+
nextCommand: `${commandPrefix} formal start`,
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -95,15 +96,17 @@ export function routeRunKitAssuranceV1(input) {
|
|
|
95
96
|
];
|
|
96
97
|
if (formalReasons.length > 0) {
|
|
97
98
|
return result({
|
|
99
|
+
schemaVersion,
|
|
98
100
|
lane: "formal",
|
|
99
101
|
riskMode: "full",
|
|
100
102
|
reasonCodes: [...new Set(formalReasons)].sort(),
|
|
101
|
-
nextCommand:
|
|
103
|
+
nextCommand: `${commandPrefix} formal start`,
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
106
|
|
|
105
107
|
if (!input.needsDurableEvidence) {
|
|
106
108
|
return result({
|
|
109
|
+
schemaVersion,
|
|
107
110
|
lane: "none",
|
|
108
111
|
riskMode: "lightweight",
|
|
109
112
|
reasonCodes: ["durable_evidence_not_required"],
|
|
@@ -113,6 +116,7 @@ export function routeRunKitAssuranceV1(input) {
|
|
|
113
116
|
|
|
114
117
|
if (input.exactCommandCount !== 1) {
|
|
115
118
|
return result({
|
|
119
|
+
schemaVersion,
|
|
116
120
|
lane: "none",
|
|
117
121
|
riskMode: "lightweight",
|
|
118
122
|
reasonCodes: ["quick_exact_command_required"],
|
|
@@ -121,9 +125,24 @@ export function routeRunKitAssuranceV1(input) {
|
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
return result({
|
|
128
|
+
schemaVersion,
|
|
124
129
|
lane: "quick",
|
|
125
130
|
riskMode: "lightweight",
|
|
126
131
|
reasonCodes: ["single_bounded_verification"],
|
|
127
|
-
nextCommand:
|
|
132
|
+
nextCommand: `${commandPrefix} quick-verify`,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function routeRunKitAssuranceV1(input) {
|
|
137
|
+
return routeRunKitAssurance(input, {
|
|
138
|
+
schemaVersion: "OwlCodaRunKitAssuranceRouteV1",
|
|
139
|
+
commandPrefix: "owlrunkit",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function routeRunKitAssuranceV2(input) {
|
|
144
|
+
return routeRunKitAssurance(input, {
|
|
145
|
+
schemaVersion: "OwlCodaRunKitAssuranceRouteV2",
|
|
146
|
+
commandPrefix: "npx --no-install owlrunkit",
|
|
128
147
|
});
|
|
129
148
|
}
|
|
@@ -14,7 +14,7 @@ import { fileURLToPath } from "node:url";
|
|
|
14
14
|
import { parseProjectControlState } from "./project-control-parser.mjs";
|
|
15
15
|
|
|
16
16
|
export const CONTRACT_VERSION = "0.2";
|
|
17
|
-
export const CORE_VERSION = "0.
|
|
17
|
+
export const CORE_VERSION = "0.19.0";
|
|
18
18
|
export const RUNTIME_ROOT = ".owlcoda/runkit";
|
|
19
19
|
|
|
20
20
|
const CORE_FILES = [
|
|
@@ -26,6 +26,7 @@ const CORE_FILES = [
|
|
|
26
26
|
"delivery-create.mjs",
|
|
27
27
|
"delivery-selection.mjs",
|
|
28
28
|
"deployment-workflow.mjs",
|
|
29
|
+
"efficiency-metrics.mjs",
|
|
29
30
|
"fleet-discovery.mjs",
|
|
30
31
|
"finalize.mjs",
|
|
31
32
|
"formal-workflow.mjs",
|
|
@@ -35,7 +36,9 @@ const CORE_FILES = [
|
|
|
35
36
|
"lease-lifecycle.mjs",
|
|
36
37
|
"lifecycle-orchestration.mjs",
|
|
37
38
|
"offline-store.mjs",
|
|
39
|
+
"outcome-presentation.mjs",
|
|
38
40
|
"onboarding-doctor.mjs",
|
|
41
|
+
"onboarding-bootstrap.mjs",
|
|
39
42
|
"owner-authority-trust.mjs",
|
|
40
43
|
"owner-deployment-decision.mjs",
|
|
41
44
|
"profile-impact.mjs",
|
|
@@ -43,11 +46,16 @@ const CORE_FILES = [
|
|
|
43
46
|
"project-cli-resolver.mjs",
|
|
44
47
|
"project-control-parser.mjs",
|
|
45
48
|
"project-control-state.mjs",
|
|
49
|
+
"project-external-delivery.mjs",
|
|
46
50
|
"provenance-common.mjs",
|
|
47
51
|
"quick-attest.mjs",
|
|
48
52
|
"quick-canonical.mjs",
|
|
53
|
+
"quick-isolation.mjs",
|
|
49
54
|
"quick-metrics.mjs",
|
|
50
55
|
"quick-receipt.mjs",
|
|
56
|
+
"quick-evidence-reuse.mjs",
|
|
57
|
+
"evidence-store.mjs",
|
|
58
|
+
"runtime-transition.mjs",
|
|
51
59
|
"quick-verify.mjs",
|
|
52
60
|
"quick-workspace-snapshot.mjs",
|
|
53
61
|
"ready-for-commit.mjs",
|
|
@@ -76,6 +84,7 @@ const CORE_FILES = [
|
|
|
76
84
|
"verification-plan.mjs",
|
|
77
85
|
"visual-smoke.mjs",
|
|
78
86
|
"schemas/assurance-route-v1.schema.json",
|
|
87
|
+
"schemas/assurance-route-v2.schema.json",
|
|
79
88
|
"schemas/closeout-receipt-v2.schema.json",
|
|
80
89
|
"schemas/adoption-evidence-v1.schema.json",
|
|
81
90
|
"schemas/coverage-adopt-request-v1.schema.json",
|
|
@@ -87,6 +96,8 @@ const CORE_FILES = [
|
|
|
87
96
|
"schemas/deployment-execute-request-v1.schema.json",
|
|
88
97
|
"schemas/deployment-lineage-v1.schema.json",
|
|
89
98
|
"schemas/deployment-prepare-receipt-v1.schema.json",
|
|
99
|
+
"schemas/efficiency-event-v1.schema.json",
|
|
100
|
+
"schemas/efficiency-metrics-v1.schema.json",
|
|
90
101
|
"schemas/engine-pin.schema.json",
|
|
91
102
|
"schemas/engine-pin-v2.schema.json",
|
|
92
103
|
"schemas/evidence-coverage-index-v1.schema.json",
|
|
@@ -94,6 +105,9 @@ const CORE_FILES = [
|
|
|
94
105
|
"schemas/fleet-manifest-v1.schema.json",
|
|
95
106
|
"schemas/fleet-root-registry-v1.schema.json",
|
|
96
107
|
"schemas/human-status-v1.schema.json",
|
|
108
|
+
"schemas/onboarding-bootstrap-plan-v1.schema.json",
|
|
109
|
+
"schemas/onboarding-bootstrap-receipt-v1.schema.json",
|
|
110
|
+
"schemas/outcome-summary-v1.schema.json",
|
|
97
111
|
"schemas/owner-authority-trust-v1.schema.json",
|
|
98
112
|
"schemas/owner-migration-authority-v1.schema.json",
|
|
99
113
|
"schemas/owner-migration-authority-v2.schema.json",
|
|
@@ -102,6 +116,7 @@ const CORE_FILES = [
|
|
|
102
116
|
"schemas/owner-deployment-decision-v1.schema.json",
|
|
103
117
|
"schemas/profile-apply-receipt-v1.schema.json",
|
|
104
118
|
"schemas/profile-detection-v2.schema.json",
|
|
119
|
+
"schemas/profile-detection-v3.schema.json",
|
|
105
120
|
"schemas/profile-reconcile-plan-v1.schema.json",
|
|
106
121
|
"schemas/profile-reconcile-receipt-v1.schema.json",
|
|
107
122
|
"schemas/project-config.schema.json",
|
|
@@ -119,6 +134,10 @@ const CORE_FILES = [
|
|
|
119
134
|
"schemas/finalize-request-v1.schema.json",
|
|
120
135
|
"schemas/ready-for-commit-v1.schema.json",
|
|
121
136
|
"schemas/ready-for-commit-v2.schema.json",
|
|
137
|
+
"schemas/quick-evidence-reuse-plan-v1.schema.json",
|
|
138
|
+
"schemas/quick-evidence-reuse-receipt-v1.schema.json",
|
|
139
|
+
"schemas/external-runtime-report-v1.schema.json",
|
|
140
|
+
"schemas/runtime-transition-receipt-v1.schema.json",
|
|
122
141
|
"schemas/snapshot-v1.schema.json",
|
|
123
142
|
"schemas/source-candidate-v2.schema.json",
|
|
124
143
|
"schemas/visual-smoke-request-v1.schema.json",
|
|
@@ -127,9 +146,13 @@ const CORE_FILES = [
|
|
|
127
146
|
"schemas/team-project-definition-v1.schema.json",
|
|
128
147
|
"schemas/team-project-event-v1.schema.json",
|
|
129
148
|
"schemas/team-project-event-v2.schema.json",
|
|
149
|
+
"schemas/team-project-event-v3.schema.json",
|
|
150
|
+
"schemas/team-project-event-v4.schema.json",
|
|
130
151
|
"schemas/team-project-successor-receipt-v1.schema.json",
|
|
131
152
|
"schemas/team-project-status-v1.schema.json",
|
|
153
|
+
"schemas/team-project-status-v2.schema.json",
|
|
132
154
|
"schemas/usage-mode-recommendation-v1.schema.json",
|
|
155
|
+
"schemas/usage-mode-recommendation-v2.schema.json",
|
|
133
156
|
"schemas/verification-envelope-v1.schema.json",
|
|
134
157
|
"schemas/verification-finalize-attempt-v1.schema.json",
|
|
135
158
|
"schemas/verification-preflight-v1.schema.json",
|
|
@@ -161,10 +184,15 @@ const CORE_FILES = [
|
|
|
161
184
|
];
|
|
162
185
|
|
|
163
186
|
const CORE_DEPENDENCY_FILES = [
|
|
187
|
+
"packages/attest/src/dependency-environment.mjs",
|
|
188
|
+
"packages/attest/schemas/workspace-snapshot-v1.schema.json",
|
|
189
|
+
"packages/attest/schemas/workspace-snapshot-v2.schema.json",
|
|
190
|
+
"packages/attest/schemas/quick-verification-receipt-v3.schema.json",
|
|
164
191
|
"packages/attest/src/formal.mjs",
|
|
165
192
|
"packages/attest/src/offline-bundle.mjs",
|
|
166
193
|
"packages/attest/src/quick-receipt-contract.mjs",
|
|
167
194
|
"packages/attest/src/reference-contract.mjs",
|
|
195
|
+
"packages/attest/src/workspace-snapshot.mjs",
|
|
168
196
|
];
|
|
169
197
|
|
|
170
198
|
function sha256(value) {
|