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.
Files changed (59) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +223 -52
  3. package/docs/architecture/OWLCODA_RUNKIT_0184_EXTERNAL_DELIVERY_INTAKE_PRODUCT_DECISION_20260812.md +209 -0
  4. package/docs/architecture/OWLCODA_RUNKIT_0190_CONSOLIDATED_DAILY_USE_PRODUCT_DECISION_20260812.md +97 -0
  5. package/docs/architecture/OWLCODA_RUNKIT_USAGE_MODE_SELECTION_PRODUCT_DECISION_20260811.md +8 -7
  6. package/docs/architecture/OWLCODA_RUN_KIT_CONTRACT_V0_2.md +57 -0
  7. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +133 -77
  8. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  9. package/integrations/codex/skills/owlcoda-runkit/references/contract-v0.2.md +57 -0
  10. package/package.json +1 -1
  11. package/packages/attest/README.md +9 -5
  12. package/packages/attest/consumer-surface-v2.json +263 -0
  13. package/packages/attest/distribution-manifest-v1.json +14 -1
  14. package/packages/attest/schemas/quick-verification-receipt-v3.schema.json +244 -0
  15. package/packages/attest/schemas/workspace-snapshot-v2.schema.json +114 -0
  16. package/packages/attest/src/dependency-environment.mjs +128 -0
  17. package/packages/attest/src/index.mjs +1 -0
  18. package/packages/attest/src/quick-receipt-contract.mjs +205 -12
  19. package/packages/attest/src/quick.mjs +45 -4
  20. package/packages/attest/src/workspace-snapshot.mjs +143 -7
  21. package/registry-release-policy-v1.json +5 -5
  22. package/sbom.spdx.json +5 -5
  23. package/scripts/runkit-contract/assurance-router.mjs +25 -6
  24. package/scripts/runkit-contract/core-contract.mjs +29 -1
  25. package/scripts/runkit-contract/efficiency-metrics.mjs +559 -0
  26. package/scripts/runkit-contract/evidence-store.mjs +130 -0
  27. package/scripts/runkit-contract/onboarding-bootstrap.mjs +685 -0
  28. package/scripts/runkit-contract/onboarding-doctor.mjs +3 -2
  29. package/scripts/runkit-contract/outcome-presentation.mjs +171 -0
  30. package/scripts/runkit-contract/profile-onboarding.mjs +285 -17
  31. package/scripts/runkit-contract/project-cli-resolver.mjs +29 -5
  32. package/scripts/runkit-contract/project-external-delivery.mjs +707 -0
  33. package/scripts/runkit-contract/quick-evidence-reuse.mjs +590 -0
  34. package/scripts/runkit-contract/quick-isolation.mjs +314 -0
  35. package/scripts/runkit-contract/quick-metrics.mjs +51 -3
  36. package/scripts/runkit-contract/quick-receipt.mjs +31 -1
  37. package/scripts/runkit-contract/quick-verify.mjs +217 -26
  38. package/scripts/runkit-contract/quick-workspace-snapshot.mjs +1 -0
  39. package/scripts/runkit-contract/runkit-bootstrap.mjs +7 -1
  40. package/scripts/runkit-contract/runkit-cli.mjs +602 -152
  41. package/scripts/runkit-contract/runtime-transition.mjs +478 -0
  42. package/scripts/runkit-contract/schemas/assurance-route-v2.schema.json +26 -0
  43. package/scripts/runkit-contract/schemas/efficiency-event-v1.schema.json +56 -0
  44. package/scripts/runkit-contract/schemas/efficiency-metrics-v1.schema.json +220 -0
  45. package/scripts/runkit-contract/schemas/external-runtime-report-v1.schema.json +125 -0
  46. package/scripts/runkit-contract/schemas/onboarding-bootstrap-plan-v1.schema.json +168 -0
  47. package/scripts/runkit-contract/schemas/onboarding-bootstrap-receipt-v1.schema.json +130 -0
  48. package/scripts/runkit-contract/schemas/outcome-summary-v1.schema.json +83 -0
  49. package/scripts/runkit-contract/schemas/profile-detection-v3.schema.json +170 -0
  50. package/scripts/runkit-contract/schemas/quick-evidence-reuse-plan-v1.schema.json +59 -0
  51. package/scripts/runkit-contract/schemas/quick-evidence-reuse-receipt-v1.schema.json +79 -0
  52. package/scripts/runkit-contract/schemas/runtime-transition-receipt-v1.schema.json +185 -0
  53. package/scripts/runkit-contract/schemas/team-project-event-v3.schema.json +146 -0
  54. package/scripts/runkit-contract/schemas/team-project-event-v4.schema.json +142 -0
  55. package/scripts/runkit-contract/schemas/team-project-status-v2.schema.json +85 -0
  56. package/scripts/runkit-contract/schemas/usage-mode-recommendation-v2.schema.json +136 -0
  57. package/scripts/runkit-contract/team-project.mjs +1172 -22
  58. package/scripts/runkit-contract/usage-mode.mjs +28 -7
  59. 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
- if (status.includes("R") || status.includes("C")) index += 1;
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
- export function captureWorkspaceSnapshot(workspaceRoot) {
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 payload = {
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
- ignoredPathsBound: false,
165
- policyVersion: "workspace-snapshot-v1",
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.18.3",
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.2",
27
- "shasum": "4a85e31dad306260e4a6b1fcbccb3807e8647a0a",
28
- "integrity": "sha512-Clpr8UQdNitzMMmQHUtjs9mesmukUqZrQ5nrda+Ryo8SuvECH8eBiis378NnzV1lI79kmljv49ToRRe867zlBg==",
29
- "tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.2.tgz"
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.18.3",
6
- "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.18.3",
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.3",
18
- "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.18.3.tgz",
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.18.3"
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: "OwlCodaRunKitAssuranceRouteV1",
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
- export function routeRunKitAssuranceV1(input) {
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: "owlrunkit formal start",
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: "owlrunkit formal start",
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: "owlrunkit quick-verify",
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.18.3";
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) {