owlrunkit 0.19.2 → 0.21.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 +63 -0
- package/README.md +94 -8
- package/docs/architecture/OWLCODA_RUNKIT_0201_RELEASE_TRUTH_AND_PROFILE_NORMALIZATION_PATCH_DECISION_20260813.md +95 -0
- package/docs/architecture/OWLCODA_RUNKIT_020_TEAM_DELIVERY_PHASE1_PRODUCT_DECISION_20260813.md +296 -0
- package/docs/architecture/OWLCODA_RUNKIT_021_TEAM_DELIVERY_PHASE2_PRODUCT_DECISION_20260813.md +249 -0
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +114 -12
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/README.md +7 -1
- package/packages/attest/consumer-surface-v3.json +275 -0
- package/packages/attest/distribution-manifest-v1.json +19 -0
- package/packages/attest/schemas/canonical-candidate-identity-v1.schema.json +112 -0
- package/packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json +32 -0
- package/packages/attest/schemas/quick-verification-receipt-v4.schema.json +226 -0
- package/packages/attest/src/candidate-identity.mjs +454 -0
- package/packages/attest/src/index.mjs +11 -0
- package/packages/attest/src/quick-receipt-contract.mjs +126 -5
- package/packages/attest/src/quick.mjs +48 -8
- package/{registry-release-policy-v1.json → registry-release-policy-v2.json} +8 -9
- package/sbom.spdx.json +4 -4
- package/scripts/runkit-contract/core-contract.mjs +21 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +223 -0
- package/scripts/runkit-contract/formal-workflow.mjs +3 -1
- package/scripts/runkit-contract/inspect-presentation.mjs +56 -0
- package/scripts/runkit-contract/install-codex-skill.mjs +1 -0
- package/scripts/runkit-contract/onboarding-bootstrap.mjs +15 -0
- package/scripts/runkit-contract/onboarding-doctor.mjs +201 -7
- package/scripts/runkit-contract/profile-onboarding.mjs +6 -0
- package/scripts/runkit-contract/project-cli-resolver.mjs +12 -1
- package/scripts/runkit-contract/quick-metrics.mjs +9 -5
- package/scripts/runkit-contract/quick-verify.mjs +108 -24
- package/scripts/runkit-contract/registry-adoption-gate.mjs +12 -3
- package/scripts/runkit-contract/registry-adoption.mjs +10 -5
- package/scripts/runkit-contract/runkit-cli.mjs +367 -20
- package/scripts/runkit-contract/schemas/candidate-transfer-packet-v1.schema.json +98 -0
- package/scripts/runkit-contract/schemas/delivery-lifecycle-v1.schema.json +91 -0
- package/scripts/runkit-contract/schemas/external-gate-v1.schema.json +68 -0
- package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +140 -0
- package/scripts/runkit-contract/schemas/inspect-compact-v1.schema.json +93 -0
- package/scripts/runkit-contract/schemas/team-acceptance-packet-v2.schema.json +109 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v1.schema.json +72 -0
- package/scripts/runkit-contract/schemas/team-delivery-status-v2.schema.json +219 -0
- package/scripts/runkit-contract/schemas/team-packet-validation-v1.schema.json +33 -0
- package/scripts/runkit-contract/schemas/team-project-event-v6.schema.json +82 -0
- package/scripts/runkit-contract/schemas/team-project-event-v7.schema.json +80 -0
- package/scripts/runkit-contract/schemas/team-project-status-v4.schema.json +208 -0
- package/scripts/runkit-contract/schemas/team-recommendation-v1.schema.json +121 -0
- package/scripts/runkit-contract/schemas/team-task-packet-v2.schema.json +228 -0
- package/scripts/runkit-contract/sync-release-identity.mjs +87 -0
- package/scripts/runkit-contract/team-delivery.mjs +1031 -0
- package/scripts/runkit-contract/team-project.mjs +970 -9
|
@@ -29,6 +29,12 @@ import {
|
|
|
29
29
|
parseOfflineAttestationBundle,
|
|
30
30
|
} from "./offline-bundle.mjs";
|
|
31
31
|
import { captureWorkspaceSnapshot } from "./workspace-snapshot.mjs";
|
|
32
|
+
import {
|
|
33
|
+
captureCanonicalCandidateIdentityV1,
|
|
34
|
+
captureForeignWorkspaceFilesystemIdentityV1,
|
|
35
|
+
validCanonicalCandidateIdentityV1,
|
|
36
|
+
validForeignWorkspaceFilesystemIdentityV1,
|
|
37
|
+
} from "./candidate-identity.mjs";
|
|
32
38
|
|
|
33
39
|
function readSubject(subjectPath) {
|
|
34
40
|
const { absolutePath, bytes } = readFileBytesBounded(subjectPath);
|
|
@@ -45,6 +51,7 @@ export function attestFile({ subjectPath, workspaceRoot }) {
|
|
|
45
51
|
"OwlCodaQuickVerificationReceiptV1",
|
|
46
52
|
"OwlCodaQuickVerificationReceiptV2",
|
|
47
53
|
"OwlCodaQuickVerificationReceiptV3",
|
|
54
|
+
"OwlCodaQuickVerificationReceiptV4",
|
|
48
55
|
]).has(subject.value.schemaVersion)) {
|
|
49
56
|
const details = attestQuickReceiptDetailsFromBytes({
|
|
50
57
|
receiptPath: subject.absolutePath,
|
|
@@ -99,6 +106,8 @@ export {
|
|
|
99
106
|
attestQuickReceipt,
|
|
100
107
|
attestQuickReceiptDetails,
|
|
101
108
|
canonicalJson,
|
|
109
|
+
captureCanonicalCandidateIdentityV1,
|
|
110
|
+
captureForeignWorkspaceFilesystemIdentityV1,
|
|
102
111
|
captureWorkspaceSnapshot,
|
|
103
112
|
createAttestationRef,
|
|
104
113
|
createOfflineAttestationBundle,
|
|
@@ -113,5 +122,7 @@ export {
|
|
|
113
122
|
sha256Bytes,
|
|
114
123
|
sha256Canonical,
|
|
115
124
|
validQuickReceiptShape,
|
|
125
|
+
validCanonicalCandidateIdentityV1,
|
|
126
|
+
validForeignWorkspaceFilesystemIdentityV1,
|
|
116
127
|
verifyBundle,
|
|
117
128
|
};
|
|
@@ -3,6 +3,10 @@ import {
|
|
|
3
3
|
isSha256Ref,
|
|
4
4
|
sha256Canonical,
|
|
5
5
|
} from "./formal.mjs";
|
|
6
|
+
import {
|
|
7
|
+
validCanonicalCandidateIdentityV1,
|
|
8
|
+
validForeignWorkspaceFilesystemIdentityV1,
|
|
9
|
+
} from "./candidate-identity.mjs";
|
|
6
10
|
|
|
7
11
|
const RECEIPT_REQUIRED_KEYS = [
|
|
8
12
|
"schemaVersion",
|
|
@@ -52,6 +56,10 @@ const V3_RECEIPT_ISSUES = new Set([
|
|
|
52
56
|
"consumer_source_mutated_during_verification",
|
|
53
57
|
"quick_isolation_cleanup_failed",
|
|
54
58
|
]);
|
|
59
|
+
const V4_RECEIPT_ISSUES = new Set([
|
|
60
|
+
...V3_RECEIPT_ISSUES,
|
|
61
|
+
"foreign_workspace_mutated_during_verification",
|
|
62
|
+
]);
|
|
55
63
|
const V3_MUTATION_DECISIONS = new Set([
|
|
56
64
|
"source_unchanged",
|
|
57
65
|
"invalidated_by_command_source_mutation",
|
|
@@ -61,6 +69,10 @@ const V3_MUTATION_DECISIONS = new Set([
|
|
|
61
69
|
"invalidated_by_isolation_cleanup_failure",
|
|
62
70
|
"invalidated_by_multiple_mutations",
|
|
63
71
|
]);
|
|
72
|
+
const V4_MUTATION_DECISIONS = new Set([
|
|
73
|
+
...V3_MUTATION_DECISIONS,
|
|
74
|
+
"invalidated_by_foreign_workspace_mutation",
|
|
75
|
+
]);
|
|
64
76
|
|
|
65
77
|
function validDateTime(value) {
|
|
66
78
|
return typeof value === "string"
|
|
@@ -237,6 +249,48 @@ function validMutationClasses(value) {
|
|
|
237
249
|
&& ["not_isolated", "none", "changed_and_discarded"].includes(value.consumerIgnoredArtifacts);
|
|
238
250
|
}
|
|
239
251
|
|
|
252
|
+
function validForeignMutationClasses(value) {
|
|
253
|
+
return hasExactKeys(value, [
|
|
254
|
+
"workspaceSource",
|
|
255
|
+
"boundIgnoredPaths",
|
|
256
|
+
"dependencyEnvironment",
|
|
257
|
+
"consumerSource",
|
|
258
|
+
"consumerIgnoredArtifacts",
|
|
259
|
+
"foreignTarget",
|
|
260
|
+
])
|
|
261
|
+
&& ["unchanged", "changed"].includes(value.workspaceSource)
|
|
262
|
+
&& ["not_bound", "unchanged", "changed"].includes(value.boundIgnoredPaths)
|
|
263
|
+
&& ["not_bound", "unchanged", "changed"].includes(value.dependencyEnvironment)
|
|
264
|
+
&& ["unchanged", "changed"].includes(value.consumerSource)
|
|
265
|
+
&& ["none", "changed_and_discarded"].includes(value.consumerIgnoredArtifacts)
|
|
266
|
+
&& ["unchanged", "changed"].includes(value.foreignTarget);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function validForeignWorkspace(value, sourceWorkspaceRoot) {
|
|
270
|
+
if (!hasExactKeys(value, [
|
|
271
|
+
"candidateBefore",
|
|
272
|
+
"candidateAfter",
|
|
273
|
+
"filesystemBefore",
|
|
274
|
+
"filesystemAfter",
|
|
275
|
+
"zeroWriteObserved",
|
|
276
|
+
])) return false;
|
|
277
|
+
if (
|
|
278
|
+
!validCanonicalCandidateIdentityV1(value.candidateBefore)
|
|
279
|
+
|| !validCanonicalCandidateIdentityV1(value.candidateAfter)
|
|
280
|
+
|| !validForeignWorkspaceFilesystemIdentityV1(value.filesystemBefore)
|
|
281
|
+
|| !validForeignWorkspaceFilesystemIdentityV1(value.filesystemAfter)
|
|
282
|
+
|| value.candidateBefore.workspaceRoot !== sourceWorkspaceRoot
|
|
283
|
+
|| value.candidateAfter.workspaceRoot !== sourceWorkspaceRoot
|
|
284
|
+
|| value.filesystemBefore.workspaceRoot !== sourceWorkspaceRoot
|
|
285
|
+
|| value.filesystemAfter.workspaceRoot !== sourceWorkspaceRoot
|
|
286
|
+
) return false;
|
|
287
|
+
const unchanged = value.candidateBefore.candidateFingerprint
|
|
288
|
+
=== value.candidateAfter.candidateFingerprint
|
|
289
|
+
&& value.filesystemBefore.filesystemFingerprint
|
|
290
|
+
=== value.filesystemAfter.filesystemFingerprint;
|
|
291
|
+
return value.zeroWriteObserved === unchanged;
|
|
292
|
+
}
|
|
293
|
+
|
|
240
294
|
function validV3MutationTruth(receipt) {
|
|
241
295
|
const workspaceSourceChanged = sourceStateFingerprint(receipt.workspaceBefore)
|
|
242
296
|
!== sourceStateFingerprint(receipt.workspaceAfter);
|
|
@@ -283,17 +337,66 @@ function validV3MutationTruth(receipt) {
|
|
|
283
337
|
&& JSON.stringify([...receipt.issueCodes].sort()) === JSON.stringify(expectedIssues);
|
|
284
338
|
}
|
|
285
339
|
|
|
340
|
+
function validV4MutationTruth(receipt) {
|
|
341
|
+
const workspaceSourceChanged = sourceStateFingerprint(receipt.workspaceBefore)
|
|
342
|
+
!== sourceStateFingerprint(receipt.workspaceAfter);
|
|
343
|
+
const boundIgnored = receipt.workspaceBefore.ignoredPathsBound === true;
|
|
344
|
+
const boundIgnoredChanged = boundIgnored
|
|
345
|
+
&& receipt.workspaceBefore.ignoredPathsFingerprint
|
|
346
|
+
!== receipt.workspaceAfter.ignoredPathsFingerprint;
|
|
347
|
+
const isolation = receipt.executionIsolation;
|
|
348
|
+
const consumerSourceChanged = isolation.consumerDelta.sourcePaths.length > 0;
|
|
349
|
+
const consumerIgnoredChanged = isolation.consumerDelta.ignoredPaths.length > 0;
|
|
350
|
+
const dependencyBound = isolation.dependencyEnvironment !== null;
|
|
351
|
+
const dependencyChanged = dependencyBound
|
|
352
|
+
&& (isolation.dependencyEnvironmentAfter === null
|
|
353
|
+
|| isolation.dependencyEnvironmentAfter.fingerprint
|
|
354
|
+
!== isolation.dependencyEnvironment.fingerprint);
|
|
355
|
+
const cleanupFailed = isolation.cleanupStatus === "cleanup_failed";
|
|
356
|
+
const foreignChanged = receipt.foreignWorkspace.zeroWriteObserved !== true;
|
|
357
|
+
if (receipt.mutationClasses.workspaceSource !== (workspaceSourceChanged ? "changed" : "unchanged")
|
|
358
|
+
|| receipt.mutationClasses.boundIgnoredPaths !== (boundIgnored
|
|
359
|
+
? boundIgnoredChanged ? "changed" : "unchanged"
|
|
360
|
+
: "not_bound")
|
|
361
|
+
|| receipt.mutationClasses.dependencyEnvironment !== (dependencyBound
|
|
362
|
+
? dependencyChanged ? "changed" : "unchanged"
|
|
363
|
+
: "not_bound")
|
|
364
|
+
|| receipt.mutationClasses.consumerSource !== (consumerSourceChanged ? "changed" : "unchanged")
|
|
365
|
+
|| receipt.mutationClasses.consumerIgnoredArtifacts !== (consumerIgnoredChanged
|
|
366
|
+
? "changed_and_discarded" : "none")
|
|
367
|
+
|| receipt.mutationClasses.foreignTarget !== (foreignChanged ? "changed" : "unchanged")) {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
const facts = [
|
|
371
|
+
[workspaceSourceChanged, "invalidated_by_command_source_mutation", "source_mutated_during_verification"],
|
|
372
|
+
[boundIgnoredChanged, "invalidated_by_bound_ignored_mutation", "bound_ignored_path_mutated_during_verification"],
|
|
373
|
+
[dependencyChanged, "invalidated_by_dependency_environment_mutation", "dependency_environment_mutated_during_verification"],
|
|
374
|
+
[consumerSourceChanged, "invalidated_by_consumer_source_mutation", "consumer_source_mutated_during_verification"],
|
|
375
|
+
[cleanupFailed, "invalidated_by_isolation_cleanup_failure", "quick_isolation_cleanup_failed"],
|
|
376
|
+
[foreignChanged, "invalidated_by_foreign_workspace_mutation", "foreign_workspace_mutated_during_verification"],
|
|
377
|
+
].filter(([active]) => active);
|
|
378
|
+
const expectedDecision = facts.length === 0
|
|
379
|
+
? "source_unchanged"
|
|
380
|
+
: facts.length === 1 ? facts[0][1] : "invalidated_by_multiple_mutations";
|
|
381
|
+
const expectedIssues = facts.map(([, , issue]) => issue).sort();
|
|
382
|
+
return receipt.mutationDecision === expectedDecision
|
|
383
|
+
&& JSON.stringify([...receipt.issueCodes].sort()) === JSON.stringify(expectedIssues);
|
|
384
|
+
}
|
|
385
|
+
|
|
286
386
|
export function validQuickReceiptShape(receipt) {
|
|
287
387
|
const receiptV1 = receipt?.schemaVersion === "OwlCodaQuickVerificationReceiptV1";
|
|
288
388
|
const receiptV2 = receipt?.schemaVersion === "OwlCodaQuickVerificationReceiptV2";
|
|
289
389
|
const receiptV3 = receipt?.schemaVersion === "OwlCodaQuickVerificationReceiptV3";
|
|
290
|
-
const
|
|
390
|
+
const receiptV4 = receipt?.schemaVersion === "OwlCodaQuickVerificationReceiptV4";
|
|
391
|
+
const requiredKeys = receiptV4
|
|
392
|
+
? [...RECEIPT_REQUIRED_KEYS, "controllerWorkspaceRoot", "sourceWorkspaceRoot", "executionIsolation", "mutationClasses", "foreignWorkspace"]
|
|
393
|
+
: receiptV3
|
|
291
394
|
? [...RECEIPT_REQUIRED_KEYS, "sourceWorkspaceRoot", "executionIsolation", "mutationClasses"]
|
|
292
395
|
: receiptV2
|
|
293
396
|
? [...RECEIPT_REQUIRED_KEYS, "inputArtifacts"]
|
|
294
397
|
: RECEIPT_REQUIRED_KEYS;
|
|
295
|
-
const optionalKeys = receiptV3 ? ["inputArtifacts", "signatureRef"] : ["signatureRef"];
|
|
296
|
-
if (!(receiptV1 || receiptV2 || receiptV3) || !hasExactKeys(receipt, requiredKeys, optionalKeys)) return false;
|
|
398
|
+
const optionalKeys = receiptV3 || receiptV4 ? ["inputArtifacts", "signatureRef"] : ["signatureRef"];
|
|
399
|
+
if (!(receiptV1 || receiptV2 || receiptV3 || receiptV4) || !hasExactKeys(receipt, requiredKeys, optionalKeys)) return false;
|
|
297
400
|
if (
|
|
298
401
|
typeof receipt.receiptId !== "string"
|
|
299
402
|
|| receipt.receiptId.length === 0
|
|
@@ -320,13 +423,15 @@ export function validQuickReceiptShape(receipt) {
|
|
|
320
423
|
|| !hasExactKeys(receipt.outputArtifacts, ["stdout", "stderr"])
|
|
321
424
|
|| !validOutputArtifact(receipt.outputArtifacts.stdout)
|
|
322
425
|
|| !validOutputArtifact(receipt.outputArtifacts.stderr)
|
|
323
|
-
|| !(
|
|
426
|
+
|| !(receiptV4
|
|
427
|
+
? V4_MUTATION_DECISIONS.has(receipt.mutationDecision)
|
|
428
|
+
: receiptV3
|
|
324
429
|
? V3_MUTATION_DECISIONS.has(receipt.mutationDecision)
|
|
325
430
|
: ["source_unchanged", "invalidated_by_command_source_mutation"].includes(receipt.mutationDecision))
|
|
326
431
|
|| !Array.isArray(receipt.issueCodes)
|
|
327
432
|
|| new Set(receipt.issueCodes).size !== receipt.issueCodes.length
|
|
328
433
|
|| !receipt.issueCodes.every((entry) => typeof entry === "string"
|
|
329
|
-
&& (receiptV3 ? V3_RECEIPT_ISSUES : KNOWN_RECEIPT_ISSUES).has(entry))
|
|
434
|
+
&& (receiptV4 ? V4_RECEIPT_ISSUES : receiptV3 ? V3_RECEIPT_ISSUES : KNOWN_RECEIPT_ISSUES).has(entry))
|
|
330
435
|
) {
|
|
331
436
|
return false;
|
|
332
437
|
}
|
|
@@ -348,6 +453,22 @@ export function validQuickReceiptShape(receipt) {
|
|
|
348
453
|
)) {
|
|
349
454
|
return false;
|
|
350
455
|
}
|
|
456
|
+
if (receiptV4 && (
|
|
457
|
+
typeof receipt.controllerWorkspaceRoot !== "string"
|
|
458
|
+
|| receipt.controllerWorkspaceRoot.length === 0
|
|
459
|
+
|| typeof receipt.sourceWorkspaceRoot !== "string"
|
|
460
|
+
|| receipt.sourceWorkspaceRoot.length === 0
|
|
461
|
+
|| receipt.controllerWorkspaceRoot === receipt.sourceWorkspaceRoot
|
|
462
|
+
|| !validForeignMutationClasses(receipt.mutationClasses)
|
|
463
|
+
|| !validExecutionIsolation(receipt.executionIsolation, receipt)
|
|
464
|
+
|| !validForeignWorkspace(receipt.foreignWorkspace, receipt.sourceWorkspaceRoot)
|
|
465
|
+
|| receipt.inputArtifacts !== undefined
|
|
466
|
+
&& (!hasExactKeys(receipt.inputArtifacts, ["stdin"])
|
|
467
|
+
|| !validOutputArtifact(receipt.inputArtifacts.stdin))
|
|
468
|
+
|| !validV4MutationTruth(receipt)
|
|
469
|
+
)) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
351
472
|
if (receipt.signatureRef !== undefined) {
|
|
352
473
|
if (!hasExactKeys(receipt.signatureRef, ["path", "sha256"])
|
|
353
474
|
|| typeof receipt.signatureRef.path !== "string"
|
|
@@ -15,10 +15,29 @@ import {
|
|
|
15
15
|
} from "./quick-receipt-contract.mjs";
|
|
16
16
|
import { captureDependencyEnvironment } from "./dependency-environment.mjs";
|
|
17
17
|
import { captureWorkspaceSnapshot } from "./workspace-snapshot.mjs";
|
|
18
|
+
import {
|
|
19
|
+
captureCanonicalCandidateIdentityV1,
|
|
20
|
+
captureForeignWorkspaceFilesystemIdentityV1,
|
|
21
|
+
} from "./candidate-identity.mjs";
|
|
18
22
|
|
|
19
23
|
export { validQuickReceiptShape } from "./quick-receipt-contract.mjs";
|
|
20
24
|
|
|
21
25
|
export const SUPPORTED_QUICK_CORE_IDENTITIES = Object.freeze([
|
|
26
|
+
{
|
|
27
|
+
contractVersion: "0.2",
|
|
28
|
+
coreVersion: "0.21.0",
|
|
29
|
+
coreManifestSha256: "sha256:f85b9bf8c32705d5f5dfebdb653e83ac8d1ac0468214c17f230cbd2de04246fd",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
contractVersion: "0.2",
|
|
33
|
+
coreVersion: "0.20.1",
|
|
34
|
+
coreManifestSha256: "sha256:8af2b9792731efa37f596255a7677dcec6e2fd3cc079dfdb0e6ff29e8017e784",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
contractVersion: "0.2",
|
|
38
|
+
coreVersion: "0.20.0",
|
|
39
|
+
coreManifestSha256: "sha256:30098aa9344c17c1ed0b5ed45ef1c590b3214b824402f584029c1ecb38ca7a70",
|
|
40
|
+
},
|
|
22
41
|
{
|
|
23
42
|
contractVersion: "0.2",
|
|
24
43
|
coreVersion: "0.19.2",
|
|
@@ -266,19 +285,25 @@ function attestQuickReceiptDetailsFromBytesWithCatalog({
|
|
|
266
285
|
const selectedWorkspaceRoot = workspaceRoot === undefined
|
|
267
286
|
? undefined
|
|
268
287
|
: realpathSync(workspaceRoot);
|
|
288
|
+
const foreignReceipt = receipt.schemaVersion === "OwlCodaQuickVerificationReceiptV4";
|
|
269
289
|
if (selectedWorkspaceRoot === undefined) {
|
|
270
290
|
issues.push("current_workspace_not_checked");
|
|
271
291
|
}
|
|
272
292
|
let receiptWorkspaceRoot;
|
|
293
|
+
let receiptSourceRoot;
|
|
273
294
|
if (selectedWorkspaceRoot !== undefined) {
|
|
274
295
|
try {
|
|
275
|
-
receiptWorkspaceRoot = realpathSync(
|
|
276
|
-
receipt.
|
|
296
|
+
receiptWorkspaceRoot = realpathSync(foreignReceipt
|
|
297
|
+
? receipt.controllerWorkspaceRoot
|
|
298
|
+
: receipt.schemaVersion === "OwlCodaQuickVerificationReceiptV3"
|
|
277
299
|
? receipt.sourceWorkspaceRoot
|
|
278
|
-
: receipt.exactCommand.cwd
|
|
279
|
-
|
|
300
|
+
: receipt.exactCommand.cwd);
|
|
301
|
+
receiptSourceRoot = realpathSync(foreignReceipt
|
|
302
|
+
? receipt.sourceWorkspaceRoot
|
|
303
|
+
: receiptWorkspaceRoot);
|
|
280
304
|
} catch {
|
|
281
305
|
receiptWorkspaceRoot = undefined;
|
|
306
|
+
receiptSourceRoot = undefined;
|
|
282
307
|
}
|
|
283
308
|
}
|
|
284
309
|
const commandWorkspaceMatches = selectedWorkspaceRoot !== undefined
|
|
@@ -312,10 +337,25 @@ function attestQuickReceiptDetailsFromBytesWithCatalog({
|
|
|
312
337
|
const ignoredPaths = receipt.workspaceAfter.ignoredPathsBound === true
|
|
313
338
|
? receipt.workspaceAfter.ignoredPathBindings.map(entry => entry.path)
|
|
314
339
|
: [];
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
340
|
+
let currentSourceValid = selectedWorkspaceRoot === undefined;
|
|
341
|
+
if (selectedWorkspaceRoot !== undefined && commandWorkspaceMatches && receiptSourceRoot !== undefined) {
|
|
342
|
+
try {
|
|
343
|
+
currentSourceValid = captureWorkspaceSnapshot(receiptSourceRoot, { ignoredPaths }).sourceFingerprint
|
|
344
|
+
=== receipt.workspaceAfter.sourceFingerprint;
|
|
345
|
+
if (foreignReceipt) {
|
|
346
|
+
const currentCandidate = captureCanonicalCandidateIdentityV1(receiptSourceRoot);
|
|
347
|
+
const currentFilesystem = captureForeignWorkspaceFilesystemIdentityV1(receiptSourceRoot);
|
|
348
|
+
currentSourceValid = currentSourceValid
|
|
349
|
+
&& receipt.foreignWorkspace.zeroWriteObserved === true
|
|
350
|
+
&& currentCandidate.candidateFingerprint
|
|
351
|
+
=== receipt.foreignWorkspace.candidateAfter.candidateFingerprint
|
|
352
|
+
&& currentFilesystem.filesystemFingerprint
|
|
353
|
+
=== receipt.foreignWorkspace.filesystemAfter.filesystemFingerprint;
|
|
354
|
+
}
|
|
355
|
+
} catch {
|
|
356
|
+
currentSourceValid = false;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
319
359
|
const dependencyEnvironmentValid = dependencyEnvironmentCurrent(
|
|
320
360
|
receipt.executionIsolation?.dependencyEnvironment,
|
|
321
361
|
materials,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion": "
|
|
3
|
-
"status": "
|
|
2
|
+
"schemaVersion": "OwlCodaRunKitRegistryReleasePolicyV2",
|
|
3
|
+
"status": "release_artifact_registry_gated",
|
|
4
4
|
"packageName": "owlrunkit",
|
|
5
|
-
"
|
|
5
|
+
"artifactVersion": "0.21.0",
|
|
6
6
|
"registry": "https://registry.npmjs.org",
|
|
7
7
|
"registryRequiredBeforeAdoption": true,
|
|
8
8
|
"exactVersionRequired": true,
|
|
@@ -21,14 +21,13 @@
|
|
|
21
21
|
"symlink",
|
|
22
22
|
"workspace"
|
|
23
23
|
],
|
|
24
|
-
"
|
|
24
|
+
"rollbackRelease": {
|
|
25
25
|
"packageName": "owlrunkit",
|
|
26
|
-
"version": "0.
|
|
27
|
-
"shasum": "
|
|
28
|
-
"integrity": "sha512-
|
|
29
|
-
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.
|
|
26
|
+
"version": "0.20.0",
|
|
27
|
+
"shasum": "b123f5ea33a4f500961a0df3226ed0ca409d111d",
|
|
28
|
+
"integrity": "sha512-VcXUh+q8DwR6RoO9JDoUMEzFrpFRBpSvpqgHvIY15Z+Oo+A31Ij2kFO5wCFki80nd6Tl/YT70t7UV2aG0TZ0GQ==",
|
|
29
|
+
"tarballUrl": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.20.0.tgz"
|
|
30
30
|
},
|
|
31
|
-
"registryRelease": null,
|
|
32
31
|
"registryEvidenceMustBeExternal": true,
|
|
33
32
|
"registryEvidenceSchemaVersion": "OwlCodaRunKitRegistryReleaseEvidenceV1",
|
|
34
33
|
"embeddedAttestComponentVersion": "0.2.0",
|
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.21.0",
|
|
6
|
+
"documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.21.0",
|
|
7
7
|
"creationInfo": {
|
|
8
8
|
"created": "2026-07-29T00:00:00Z",
|
|
9
9
|
"creators": [
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "owlrunkit",
|
|
16
16
|
"SPDXID": "SPDXRef-Package-OwlRunKit",
|
|
17
|
-
"versionInfo": "0.
|
|
17
|
+
"versionInfo": "0.21.0",
|
|
18
18
|
"downloadLocation": "NOASSERTION",
|
|
19
19
|
"filesAnalyzed": false,
|
|
20
20
|
"licenseConcluded": "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.21.0"
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
}
|
|
@@ -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.21.0";
|
|
18
18
|
export const RUNTIME_ROOT = ".owlcoda/runkit";
|
|
19
19
|
|
|
20
20
|
const CORE_FILES = [
|
|
@@ -28,6 +28,7 @@ const CORE_FILES = [
|
|
|
28
28
|
"deployment-workflow.mjs",
|
|
29
29
|
"efficiency-metrics.mjs",
|
|
30
30
|
"fleet-discovery.mjs",
|
|
31
|
+
"fleet-skill-plan.mjs",
|
|
31
32
|
"finalize.mjs",
|
|
32
33
|
"formal-workflow.mjs",
|
|
33
34
|
"formal-preflight.mjs",
|
|
@@ -78,6 +79,7 @@ const CORE_FILES = [
|
|
|
78
79
|
"sync-release-identity.mjs",
|
|
79
80
|
"team-project-successor.mjs",
|
|
80
81
|
"team-project.mjs",
|
|
82
|
+
"team-delivery.mjs",
|
|
81
83
|
"usage-mode.mjs",
|
|
82
84
|
"verification-envelope.mjs",
|
|
83
85
|
"verification-envelope-check.mjs",
|
|
@@ -106,11 +108,13 @@ const CORE_FILES = [
|
|
|
106
108
|
"schemas/fleet-discovery-v1.schema.json",
|
|
107
109
|
"schemas/fleet-manifest-v1.schema.json",
|
|
108
110
|
"schemas/fleet-root-registry-v1.schema.json",
|
|
111
|
+
"schemas/fleet-skill-upgrade-plan-v1.schema.json",
|
|
109
112
|
"schemas/formal-check-v2.schema.json",
|
|
110
113
|
"schemas/formal-envelope-preflight-v1.schema.json",
|
|
111
114
|
"schemas/formal-evidence-summary-v1.schema.json",
|
|
112
115
|
"schemas/formal-supplemental-evidence-v1.schema.json",
|
|
113
116
|
"schemas/human-status-v1.schema.json",
|
|
117
|
+
"schemas/inspect-compact-v1.schema.json",
|
|
114
118
|
"schemas/onboarding-bootstrap-plan-v1.schema.json",
|
|
115
119
|
"schemas/onboarding-bootstrap-receipt-v1.schema.json",
|
|
116
120
|
"schemas/outcome-summary-v1.schema.json",
|
|
@@ -146,6 +150,13 @@ const CORE_FILES = [
|
|
|
146
150
|
"schemas/runtime-transition-receipt-v1.schema.json",
|
|
147
151
|
"schemas/snapshot-v1.schema.json",
|
|
148
152
|
"schemas/source-candidate-v2.schema.json",
|
|
153
|
+
"schemas/candidate-transfer-packet-v1.schema.json",
|
|
154
|
+
"schemas/team-acceptance-packet-v2.schema.json",
|
|
155
|
+
"schemas/team-delivery-status-v1.schema.json",
|
|
156
|
+
"schemas/team-delivery-status-v2.schema.json",
|
|
157
|
+
"schemas/team-packet-validation-v1.schema.json",
|
|
158
|
+
"schemas/team-recommendation-v1.schema.json",
|
|
159
|
+
"schemas/team-task-packet-v2.schema.json",
|
|
149
160
|
"schemas/visual-smoke-request-v1.schema.json",
|
|
150
161
|
"schemas/visual-smoke-result-v1.schema.json",
|
|
151
162
|
"schemas/verification-context-v1.schema.json",
|
|
@@ -155,10 +166,15 @@ const CORE_FILES = [
|
|
|
155
166
|
"schemas/team-project-event-v3.schema.json",
|
|
156
167
|
"schemas/team-project-event-v4.schema.json",
|
|
157
168
|
"schemas/team-project-event-v5.schema.json",
|
|
169
|
+
"schemas/team-project-event-v6.schema.json",
|
|
170
|
+
"schemas/team-project-event-v7.schema.json",
|
|
158
171
|
"schemas/team-project-successor-receipt-v1.schema.json",
|
|
159
172
|
"schemas/team-project-status-v1.schema.json",
|
|
160
173
|
"schemas/team-project-status-v2.schema.json",
|
|
161
174
|
"schemas/team-project-status-v3.schema.json",
|
|
175
|
+
"schemas/team-project-status-v4.schema.json",
|
|
176
|
+
"schemas/external-gate-v1.schema.json",
|
|
177
|
+
"schemas/delivery-lifecycle-v1.schema.json",
|
|
162
178
|
"schemas/usage-mode-recommendation-v1.schema.json",
|
|
163
179
|
"schemas/usage-mode-recommendation-v2.schema.json",
|
|
164
180
|
"schemas/verification-envelope-v1.schema.json",
|
|
@@ -192,10 +208,14 @@ const CORE_FILES = [
|
|
|
192
208
|
];
|
|
193
209
|
|
|
194
210
|
const CORE_DEPENDENCY_FILES = [
|
|
211
|
+
"packages/attest/src/candidate-identity.mjs",
|
|
195
212
|
"packages/attest/src/dependency-environment.mjs",
|
|
213
|
+
"packages/attest/schemas/canonical-candidate-identity-v1.schema.json",
|
|
214
|
+
"packages/attest/schemas/foreign-workspace-filesystem-identity-v1.schema.json",
|
|
196
215
|
"packages/attest/schemas/workspace-snapshot-v1.schema.json",
|
|
197
216
|
"packages/attest/schemas/workspace-snapshot-v2.schema.json",
|
|
198
217
|
"packages/attest/schemas/quick-verification-receipt-v3.schema.json",
|
|
218
|
+
"packages/attest/schemas/quick-verification-receipt-v4.schema.json",
|
|
199
219
|
"packages/attest/src/formal.mjs",
|
|
200
220
|
"packages/attest/src/offline-bundle.mjs",
|
|
201
221
|
"packages/attest/src/quick-receipt-contract.mjs",
|