owlrunkit 0.15.1 → 0.16.1

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 (76) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +284 -66
  3. package/integrations/codex/skills/owlcoda-runkit/SKILL.md +235 -116
  4. package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
  5. package/integrations/codex/skills/owlcoda-runkit/assets/templates/ready-for-commit-request.json +2 -2
  6. package/package.json +2 -2
  7. package/packages/attest/distribution-manifest-v1.json +10 -0
  8. package/packages/attest/src/quick.mjs +10 -0
  9. package/registry-release-policy-v1.json +8 -2
  10. package/sbom.spdx.json +5 -5
  11. package/scripts/runkit-contract/assurance-router.mjs +119 -0
  12. package/scripts/runkit-contract/core-contract.mjs +203 -206
  13. package/scripts/runkit-contract/core-successor.mjs +2043 -0
  14. package/scripts/runkit-contract/deployment-workflow.mjs +2040 -0
  15. package/scripts/runkit-contract/finalize.mjs +242 -21
  16. package/scripts/runkit-contract/fleet-discovery.mjs +1198 -0
  17. package/scripts/runkit-contract/formal-workflow.mjs +850 -0
  18. package/scripts/runkit-contract/human-status.mjs +553 -0
  19. package/scripts/runkit-contract/inspect-presentation.mjs +25 -8
  20. package/scripts/runkit-contract/install-codex-skill.mjs +73 -30
  21. package/scripts/runkit-contract/lease-lifecycle.mjs +8 -2
  22. package/scripts/runkit-contract/lifecycle-orchestration.mjs +135 -12
  23. package/scripts/runkit-contract/onboarding-doctor.mjs +43 -90
  24. package/scripts/runkit-contract/owner-authority-trust.mjs +230 -0
  25. package/scripts/runkit-contract/owner-deployment-decision.mjs +385 -0
  26. package/scripts/runkit-contract/profile-onboarding.mjs +841 -13
  27. package/scripts/runkit-contract/project-cli-resolver.mjs +704 -0
  28. package/scripts/runkit-contract/project-control-parser.mjs +889 -0
  29. package/scripts/runkit-contract/project-control-state.mjs +28 -0
  30. package/scripts/runkit-contract/provenance-common.mjs +19 -2
  31. package/scripts/runkit-contract/ready-for-commit.mjs +330 -18
  32. package/scripts/runkit-contract/remote-deployment.mjs +1596 -0
  33. package/scripts/runkit-contract/remote-process-adapter.mjs +177 -0
  34. package/scripts/runkit-contract/runkit-bootstrap.mjs +131 -0
  35. package/scripts/runkit-contract/runkit-cli.mjs +1155 -21
  36. package/scripts/runkit-contract/schemas/assurance-route-v1.schema.json +26 -0
  37. package/scripts/runkit-contract/schemas/core-successor-batch-receipt-v1.schema.json +126 -0
  38. package/scripts/runkit-contract/schemas/core-successor-plan-v1.schema.json +167 -0
  39. package/scripts/runkit-contract/schemas/core-successor-project-success-receipt-v1.schema.json +72 -0
  40. package/scripts/runkit-contract/schemas/deployment-execute-request-v1.schema.json +63 -0
  41. package/scripts/runkit-contract/schemas/deployment-lineage-v1.schema.json +292 -0
  42. package/scripts/runkit-contract/schemas/deployment-prepare-receipt-v1.schema.json +140 -0
  43. package/scripts/runkit-contract/schemas/fleet-discovery-v1.schema.json +62 -0
  44. package/scripts/runkit-contract/schemas/fleet-manifest-v1.schema.json +20 -0
  45. package/scripts/runkit-contract/schemas/fleet-root-registry-v1.schema.json +34 -0
  46. package/scripts/runkit-contract/schemas/human-status-v1.schema.json +102 -0
  47. package/scripts/runkit-contract/schemas/owner-authority-trust-v1.schema.json +66 -0
  48. package/scripts/runkit-contract/schemas/owner-deployment-authority-v1.schema.json +46 -0
  49. package/scripts/runkit-contract/schemas/owner-deployment-authority-v2.schema.json +94 -0
  50. package/scripts/runkit-contract/schemas/owner-deployment-decision-v1.schema.json +102 -0
  51. package/scripts/runkit-contract/schemas/owner-migration-authority-v1.schema.json +33 -0
  52. package/scripts/runkit-contract/schemas/owner-migration-authority-v2.schema.json +67 -0
  53. package/scripts/runkit-contract/schemas/profile-apply-receipt-v1.schema.json +32 -0
  54. package/scripts/runkit-contract/schemas/profile-detection-v2.schema.json +145 -0
  55. package/scripts/runkit-contract/schemas/ready-for-commit-v2.schema.json +37 -0
  56. package/scripts/runkit-contract/schemas/remote-deployment-manifest-v1.schema.json +379 -0
  57. package/scripts/runkit-contract/schemas/remote-deployment-result-v1.schema.json +153 -0
  58. package/scripts/runkit-contract/schemas/remote-deployment-stage-journal-v1.schema.json +183 -0
  59. package/scripts/runkit-contract/schemas/remote-target-v1.schema.json +32 -0
  60. package/scripts/runkit-contract/schemas/source-candidate-v2.schema.json +152 -0
  61. package/scripts/runkit-contract/schemas/verification-receipt-v2.schema.json +13 -0
  62. package/scripts/runkit-contract/snapshot.mjs +1 -1
  63. package/scripts/runkit-contract/source-candidate.mjs +1382 -0
  64. package/scripts/runkit-contract/ssh-remote-adapter.mjs +1184 -0
  65. package/scripts/runkit-contract/sync-core016-release-identity.mjs +166 -0
  66. package/scripts/runkit-contract/templates/assurance-request.json +13 -0
  67. package/scripts/runkit-contract/templates/core-successor-owner-authority.json +15 -0
  68. package/scripts/runkit-contract/templates/deployment-execute-request.json +39 -0
  69. package/scripts/runkit-contract/templates/deployment-owner-authority.json +23 -0
  70. package/scripts/runkit-contract/templates/deployment-owner-decision.json +26 -0
  71. package/scripts/runkit-contract/templates/fleet-manifest.json +8 -0
  72. package/scripts/runkit-contract/templates/fleet-root-registry.json +8 -0
  73. package/scripts/runkit-contract/templates/owner-authority-trust.json +16 -0
  74. package/scripts/runkit-contract/templates/ready-for-commit-request.json +2 -2
  75. package/scripts/runkit-contract/templates/remote-deployment-manifest.json +108 -0
  76. package/scripts/runkit-contract/verification-receipt-gate.mjs +28 -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.15.1",
6
- "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.15.1",
5
+ "name": "owlrunkit-0.16.1",
6
+ "documentNamespace": "https://owlcoda.com/spdx/owlrunkit/0.16.1",
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.15.1",
18
- "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.15.1.tgz",
17
+ "versionInfo": "0.16.1",
18
+ "downloadLocation": "https://registry.npmjs.org/owlrunkit/-/owlrunkit-0.16.1.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.15.1"
27
+ "referenceLocator": "pkg:npm/owlrunkit@0.16.1"
28
28
  }
29
29
  ]
30
30
  }
@@ -0,0 +1,119 @@
1
+ const BOOLEAN_FACTS = [
2
+ "needsDurableEvidence",
3
+ "needsFormalAcceptance",
4
+ "mayMutateProject",
5
+ "externalSideEffects",
6
+ "longRunning",
7
+ "interruptionRecovery",
8
+ "dirtyParallelWorkspace",
9
+ ];
10
+
11
+ const RISK_CATEGORIES = new Set([
12
+ "backtest",
13
+ "deployment",
14
+ "destructive",
15
+ "foreign_write",
16
+ "funds",
17
+ "integration",
18
+ "migration",
19
+ "production",
20
+ "release",
21
+ ]);
22
+
23
+ const FULL_RISK_CATEGORIES = new Set([
24
+ "deployment",
25
+ "destructive",
26
+ "foreign_write",
27
+ "funds",
28
+ "production",
29
+ "release",
30
+ ]);
31
+
32
+ function incompleteReasons(input) {
33
+ const reasons = [];
34
+ for (const field of BOOLEAN_FACTS) {
35
+ if (typeof input?.[field] !== "boolean") {
36
+ reasons.push(`unknown_${field.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`)}`);
37
+ }
38
+ }
39
+ if (!Number.isInteger(input?.exactCommandCount) || input.exactCommandCount < 0) {
40
+ reasons.push("unknown_exact_command_count");
41
+ }
42
+ if (!Number.isInteger(input?.writerCount) || input.writerCount < 0) {
43
+ reasons.push("unknown_writer_count");
44
+ }
45
+ if (!Array.isArray(input?.riskCategories)) {
46
+ reasons.push("unknown_risk_categories");
47
+ } else if (input.riskCategories.some(category => !RISK_CATEGORIES.has(category))) {
48
+ reasons.push("unknown_risk_category");
49
+ }
50
+ return [...new Set(reasons)].sort();
51
+ }
52
+
53
+ function result({ lane, riskMode, reasonCodes, nextCommand }) {
54
+ return {
55
+ schemaVersion: "OwlCodaRunKitAssuranceRouteV1",
56
+ status: "routed",
57
+ lane,
58
+ riskMode,
59
+ reasonCodes,
60
+ nextCommand,
61
+ authorizationGranted: false,
62
+ };
63
+ }
64
+
65
+ export function routeRunKitAssuranceV1(input) {
66
+ const incomplete = incompleteReasons(input);
67
+ if (incomplete.length > 0) {
68
+ return result({
69
+ lane: "formal",
70
+ riskMode: "full",
71
+ reasonCodes: ["assurance_input_incomplete", ...incomplete],
72
+ nextCommand: "owlrunkit formal start",
73
+ });
74
+ }
75
+
76
+ const categories = [...new Set(input.riskCategories)].sort();
77
+ const formalReasons = [
78
+ ...(input.needsFormalAcceptance ? ["formal_acceptance_required"] : []),
79
+ ...(input.mayMutateProject ? ["project_mutation"] : []),
80
+ ...(input.externalSideEffects ? ["external_side_effects"] : []),
81
+ ...(input.longRunning ? ["long_running_execution"] : []),
82
+ ...(input.interruptionRecovery ? ["interruption_recovery_required"] : []),
83
+ ...(input.dirtyParallelWorkspace ? ["dirty_parallel_workspace"] : []),
84
+ ...(input.writerCount > 0 ? ["writer_scope_required"] : []),
85
+ ...(input.needsDurableEvidence && input.exactCommandCount === 0
86
+ ? ["exact_command_missing"]
87
+ : []),
88
+ ...(input.needsDurableEvidence && input.exactCommandCount > 1
89
+ ? ["multiple_commands"]
90
+ : []),
91
+ ...categories.map(category => `risk_${category}`),
92
+ ];
93
+ if (formalReasons.length > 0) {
94
+ const full = input.externalSideEffects
95
+ || categories.some(category => FULL_RISK_CATEGORIES.has(category));
96
+ return result({
97
+ lane: "formal",
98
+ riskMode: full ? "full" : "standard",
99
+ reasonCodes: [...new Set(formalReasons)].sort(),
100
+ nextCommand: "owlrunkit formal start",
101
+ });
102
+ }
103
+
104
+ if (!input.needsDurableEvidence) {
105
+ return result({
106
+ lane: "none",
107
+ riskMode: "lightweight",
108
+ reasonCodes: ["durable_evidence_not_required"],
109
+ nextCommand: null,
110
+ });
111
+ }
112
+
113
+ return result({
114
+ lane: "quick",
115
+ riskMode: "lightweight",
116
+ reasonCodes: ["single_bounded_verification"],
117
+ nextCommand: "owlrunkit quick-verify",
118
+ });
119
+ }