owlrunkit 0.22.0 → 0.23.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.
@@ -195,7 +195,6 @@ import {
195
195
  openTeamProjectDecisionV1,
196
196
  readTeamProjectStatusV2,
197
197
  readTeamProjectStatusV3,
198
- readTeamProjectStatusV4,
199
198
  reconcileExternalGateV1,
200
199
  recordDeliveryLifecycleV1,
201
200
  rejectAndReturnTeamProjectV1,
@@ -205,6 +204,11 @@ import {
205
204
  setWorkItemEvidenceRequirementV1,
206
205
  transferTeamProjectV1,
207
206
  } from "./team-project.mjs";
207
+ import {
208
+ buildSuccessorScaffoldV1,
209
+ formatSuccessorScaffoldHumanV1,
210
+ readTeamProjectStatusV5,
211
+ } from "./project-completion-continuity.mjs";
208
212
  import {
209
213
  formatTeamProjectSuccessorHumanV1,
210
214
  successorTeamProjectV1,
@@ -258,7 +262,7 @@ Fleet and status
258
262
  npx --no-install owlrunkit fleet discover; npx --no-install owlrunkit status --workspace .
259
263
  npx --no-install owlrunkit hook recovery --workspace . --json
260
264
  Agent team projects
261
- npx --no-install owlrunkit project <init|assign|checkpoint|handoff|reject-and-return|reopen-upstream|transfer|work-item revise-scope|work-item require-evidence|reconcile|delivery record|decision|verification|capture|target-snapshot|import-delivery|status|takeover|successor> [options]
265
+ npx --no-install owlrunkit project <init|assign|checkpoint|handoff|reject-and-return|reopen-upstream|transfer|work-item revise-scope|work-item require-evidence|reconcile|delivery record|decision|verification|capture|target-snapshot|import-delivery|status|takeover|successor|successor scaffold> [options]
262
266
  npx --no-install owlrunkit team <recommend|status|packet validate> [options]
263
267
  Durable project truth plus read-only Team recommendation and packet validation. No Agent dispatch.
264
268
  Core successor: npx --no-install owlrunkit core-successor <plan|apply|resume> --workspace . [...]
@@ -741,6 +745,8 @@ action without granting any authority.
741
745
  npx --no-install owlrunkit project takeover --workspace <directory> --agent <id> [--json]
742
746
  npx --no-install owlrunkit project successor --workspace <directory> --transition-id <id> --at <ISO-UTC>
743
747
  --definition <project.json> --reason <text> [--json]
748
+ npx --no-install owlrunkit project successor scaffold --workspace <directory>
749
+ --from-workspace <git-worktree> --dry-run [--json]
744
750
 
745
751
  Project status is derived from durable work items, Agent assignments,
746
752
  dependencies, decisions, checkpoints, integration gates, and evidence refs.
@@ -909,6 +915,16 @@ Builds a read-only blank-session recovery packet for one Agent.
909
915
 
910
916
  Archives one derived-completed active project and installs one fresh active
911
917
  project with no inherited events. The receipt grants no repository or release authority.
918
+ `,
919
+ "project successor scaffold": `Usage:
920
+ npx --no-install owlrunkit project successor scaffold --workspace <directory>
921
+ --from-workspace <git-worktree> --dry-run [--json]
922
+
923
+ Reads one completed Project Driver ledger, its latest explicitly imported source
924
+ delivery baseline, and the exact current Git worktree. It reports terminal,
925
+ baseline-missing, or unmodeled-drift truth plus review-only path lanes. It does
926
+ not create a project, append an event, infer an objective, dispatch an Agent, or
927
+ grant Git, release, deployment, production, or business authority.
912
928
  `,
913
929
  });
914
930
 
@@ -2169,7 +2185,7 @@ function inspect(options) {
2169
2185
  const onboarding = onboardingProjection(root, recovery);
2170
2186
  const projectDefinitionPath = runtimePath(root, "project", "definition.json");
2171
2187
  const projectDriver = pathEntryExists(projectDefinitionPath)
2172
- ? readTeamProjectStatusV3({ workspaceRoot: root })
2188
+ ? readTeamProjectStatusV5({ workspaceRoot: root })
2173
2189
  : null;
2174
2190
  const localMaintenance = options.compact === true
2175
2191
  ? inspectLocalMaintenanceV1({
@@ -2487,6 +2503,11 @@ export async function runCli(argv = process.argv.slice(2), runtimeHooks = {}) {
2487
2503
  action = "delivery record";
2488
2504
  nestedOptions = nestedOptions.slice(1);
2489
2505
  }
2506
+ if (command === "project" && action === "successor"
2507
+ && nestedOptions[0] === "scaffold") {
2508
+ action = "successor scaffold";
2509
+ nestedOptions = nestedOptions.slice(1);
2510
+ }
2490
2511
  if (command === "team" && action === "packet"
2491
2512
  && nestedOptions[0] === "validate") {
2492
2513
  action = "packet validate";
@@ -2596,6 +2617,8 @@ export async function runCli(argv = process.argv.slice(2), runtimeHooks = {}) {
2596
2617
  ? ["json"]
2597
2618
  : command === "project" && new Set(["init", "assign", "handoff", "reject-and-return", "reopen-upstream", "transfer", "checkpoint", "integrate", "capture", "reconcile", "delivery record", "status", "takeover", "successor"]).has(action)
2598
2619
  ? ["json"]
2620
+ : command === "project" && action === "successor scaffold"
2621
+ ? ["json", "dry-run"]
2599
2622
  : command === "project" && new Set(["target-snapshot", "import-delivery"]).has(action)
2600
2623
  ? ["json", "dry-run", "apply"]
2601
2624
  : command === "doctor" || command === "adopt" || command === "status"
@@ -3722,6 +3745,7 @@ export async function runCli(argv = process.argv.slice(2), runtimeHooks = {}) {
3722
3745
  status: ["workspace", "json"],
3723
3746
  takeover: ["workspace", "agent", "json"],
3724
3747
  successor: ["workspace", "transition-id", "at", "definition", "reason", "json"],
3748
+ "successor scaffold": ["workspace", "from-workspace", "dry-run", "json"],
3725
3749
  };
3726
3750
  if (Object.hasOwn(allowedProjectOptions, action)) {
3727
3751
  assertOnlyOptions(options, allowedProjectOptions[action]);
@@ -4361,7 +4385,7 @@ export async function runCli(argv = process.argv.slice(2), runtimeHooks = {}) {
4361
4385
  });
4362
4386
  }
4363
4387
  if (action === "status") {
4364
- const status = readTeamProjectStatusV4({ workspaceRoot: root });
4388
+ const status = readTeamProjectStatusV5({ workspaceRoot: root });
4365
4389
  return options.json === true
4366
4390
  ? status
4367
4391
  : withHumanOutput(status, formatTeamProjectStatusHumanV2(status));
@@ -4388,7 +4412,19 @@ export async function runCli(argv = process.argv.slice(2), runtimeHooks = {}) {
4388
4412
  ? successor
4389
4413
  : withHumanOutput(successor, formatTeamProjectSuccessorHumanV1(successor));
4390
4414
  }
4391
- throw new Error("Usage: npx --no-install owlrunkit project <init|assign|checkpoint|handoff|reject-and-return|reopen-upstream|transfer|work-item revise-scope|reconcile|delivery record|decision|verification|integrate|capture|target-snapshot|import-delivery|status|takeover|successor> [options]");
4415
+ if (action === "successor scaffold") {
4416
+ if (options["dry-run"] !== true) {
4417
+ throw new Error("project successor scaffold requires --dry-run.");
4418
+ }
4419
+ const scaffold = buildSuccessorScaffoldV1({
4420
+ workspaceRoot: root,
4421
+ fromWorkspaceRoot: requireOption(options, "from-workspace"),
4422
+ });
4423
+ return options.json === true
4424
+ ? scaffold
4425
+ : withHumanOutput(scaffold, formatSuccessorScaffoldHumanV1(scaffold));
4426
+ }
4427
+ throw new Error("Usage: npx --no-install owlrunkit project <init|assign|checkpoint|handoff|reject-and-return|reopen-upstream|transfer|work-item revise-scope|reconcile|delivery record|decision|verification|integrate|capture|target-snapshot|import-delivery|status|takeover|successor|successor scaffold> [options]");
4392
4428
  }
4393
4429
  if (command === "profiles") {
4394
4430
  const root = requireOption(options, "workspace");
@@ -42,7 +42,20 @@
42
42
  "source": { "type": "string", "minLength": 1 },
43
43
  "complete": { "type": "boolean" },
44
44
  "workspaceCount": { "type": "integer", "minimum": 0 },
45
- "unreachableRoots": { "$ref": "#/$defs/strings" }
45
+ "unreachableRoots": { "$ref": "#/$defs/strings" },
46
+ "issues": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["code", "path", "coverageRoot"],
52
+ "properties": {
53
+ "code": { "type": "string", "minLength": 1 },
54
+ "path": { "type": "string", "minLength": 1 },
55
+ "coverageRoot": { "type": "string", "minLength": 1 }
56
+ }
57
+ }
58
+ }
46
59
  }
47
60
  }
48
61
  ]
@@ -102,7 +115,7 @@
102
115
  "status": "blocked",
103
116
  "expectedCore": {
104
117
  "contractVersion": "0.2",
105
- "coreVersion": "0.22.0",
118
+ "coreVersion": "0.23.0",
106
119
  "coreManifestSha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
107
120
  "coreSourceRef": "artifact:sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
108
121
  },
@@ -113,7 +126,7 @@
113
126
  "installedConfigCoreVersion": "0.20.0",
114
127
  "issues": ["installed_skill_core_version_mismatch"]
115
128
  },
116
- "discovery": { "source": "fleet_registry", "complete": true, "workspaceCount": 1, "unreachableRoots": [] },
129
+ "discovery": { "source": "fleet_registry", "complete": true, "workspaceCount": 1, "unreachableRoots": [], "issues": [] },
117
130
  "affectedProjects": [
118
131
  {
119
132
  "workspaceRoot": "/projects/example",
@@ -0,0 +1,144 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://owlcoda.com/schemas/runkit/project-completion-continuity-v1.schema.json",
4
+ "title": "OwlCoda RunKit Project Completion Continuity V1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion", "status", "projectId", "projectTruthHash", "disposition",
9
+ "targetWorkspaceRef", "baseline", "current", "delta", "nextAction",
10
+ "readOnly", "writesPerformed", "authorityBoundary", "authorizationGranted"
11
+ ],
12
+ "properties": {
13
+ "schemaVersion": { "const": "OwlCodaRunKitProjectCompletionContinuityV1" },
14
+ "status": { "enum": ["not_applicable", "baseline_missing", "source_unverifiable", "workspace_drift", "terminal"] },
15
+ "projectId": { "$ref": "#/$defs/text" },
16
+ "projectTruthHash": { "$ref": "#/$defs/hash" },
17
+ "disposition": {
18
+ "enum": [
19
+ "project_work_ledger_incomplete",
20
+ "completed_project_source_baseline_missing",
21
+ "completed_project_source_unverifiable",
22
+ "completed_project_with_unmodeled_workspace_drift",
23
+ "completed_project_terminal"
24
+ ]
25
+ },
26
+ "targetWorkspaceRef": { "$ref": "#/$defs/nullableText" },
27
+ "baseline": {
28
+ "oneOf": [
29
+ { "type": "null" },
30
+ {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["kind", "deliveryId", "occurredAt", "targetHead", "workspaceSnapshotFingerprint", "truthRef"],
34
+ "properties": {
35
+ "kind": { "const": "imported_source_delivery" },
36
+ "deliveryId": { "$ref": "#/$defs/text" },
37
+ "occurredAt": { "$ref": "#/$defs/text" },
38
+ "targetHead": { "$ref": "#/$defs/gitHash" },
39
+ "workspaceSnapshotFingerprint": { "$ref": "#/$defs/hashRef" },
40
+ "truthRef": { "$ref": "#/$defs/text" }
41
+ }
42
+ }
43
+ ]
44
+ },
45
+ "current": {
46
+ "oneOf": [
47
+ { "type": "null" },
48
+ {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["headCommit", "workspaceSnapshotFingerprint"],
52
+ "properties": {
53
+ "headCommit": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/gitHash" }] },
54
+ "workspaceSnapshotFingerprint": { "$ref": "#/$defs/hashRef" }
55
+ }
56
+ }
57
+ ]
58
+ },
59
+ "delta": {
60
+ "oneOf": [
61
+ { "type": "null" },
62
+ {
63
+ "type": "object",
64
+ "additionalProperties": false,
65
+ "required": [
66
+ "baselineHead", "currentHead", "headChanged", "trackedTreeChanged",
67
+ "submodulesChanged", "committedPaths", "overlayPaths",
68
+ "dependencyEnvironmentPaths", "changedPaths", "changedPathCount",
69
+ "changedPathsTruncated", "pathEvidenceComplete"
70
+ ],
71
+ "properties": {
72
+ "baselineHead": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/gitHash" }] },
73
+ "currentHead": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/gitHash" }] },
74
+ "headChanged": { "type": "boolean" },
75
+ "trackedTreeChanged": { "type": "boolean" },
76
+ "submodulesChanged": { "type": "boolean" },
77
+ "committedPaths": { "$ref": "#/$defs/paths" },
78
+ "overlayPaths": { "$ref": "#/$defs/paths" },
79
+ "dependencyEnvironmentPaths": { "$ref": "#/$defs/paths" },
80
+ "changedPaths": { "$ref": "#/$defs/paths" },
81
+ "changedPathCount": { "type": "integer", "minimum": 0 },
82
+ "changedPathsTruncated": { "type": "boolean" },
83
+ "pathEvidenceComplete": { "type": "boolean" }
84
+ }
85
+ }
86
+ ]
87
+ },
88
+ "nextAction": { "$ref": "#/$defs/nullableText" },
89
+ "readOnly": { "const": true },
90
+ "writesPerformed": { "const": false },
91
+ "authorityBoundary": { "$ref": "#/$defs/authorityBoundary" },
92
+ "authorizationGranted": { "const": false }
93
+ },
94
+ "examples": [
95
+ {
96
+ "schemaVersion": "OwlCodaRunKitProjectCompletionContinuityV1",
97
+ "status": "baseline_missing",
98
+ "projectId": "completed-project",
99
+ "projectTruthHash": "0000000000000000000000000000000000000000000000000000000000000000",
100
+ "disposition": "completed_project_source_baseline_missing",
101
+ "targetWorkspaceRef": null,
102
+ "baseline": null,
103
+ "current": null,
104
+ "delta": null,
105
+ "nextAction": "Review the current workspace and bind an explicit source baseline before deciding whether the project is terminal.",
106
+ "readOnly": true,
107
+ "writesPerformed": false,
108
+ "authorityBoundary": {
109
+ "agentDispatch": false,
110
+ "git": false,
111
+ "release": false,
112
+ "deployment": false,
113
+ "production": false,
114
+ "business": false,
115
+ "automation": false,
116
+ "money": false
117
+ },
118
+ "authorizationGranted": false
119
+ }
120
+ ],
121
+ "$defs": {
122
+ "text": { "type": "string", "minLength": 1 },
123
+ "nullableText": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/text" }] },
124
+ "hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
125
+ "hashRef": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
126
+ "gitHash": { "type": "string", "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$" },
127
+ "paths": { "type": "array", "maxItems": 256, "uniqueItems": true, "items": { "$ref": "#/$defs/text" } },
128
+ "authorityBoundary": {
129
+ "type": "object",
130
+ "additionalProperties": false,
131
+ "required": ["agentDispatch", "git", "release", "deployment", "production", "business", "automation", "money"],
132
+ "properties": {
133
+ "agentDispatch": { "const": false },
134
+ "git": { "const": false },
135
+ "release": { "const": false },
136
+ "deployment": { "const": false },
137
+ "production": { "const": false },
138
+ "business": { "const": false },
139
+ "automation": { "const": false },
140
+ "money": { "const": false }
141
+ }
142
+ }
143
+ }
144
+ }
@@ -0,0 +1,184 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://owlcoda.com/schemas/runkit/successor-scaffold-v1.schema.json",
4
+ "title": "OwlCoda RunKit Successor Scaffold V1",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion", "status", "exitCode", "project", "completionContinuity",
9
+ "unmodeledCandidates", "pathConflicts", "possibleLanes", "draft",
10
+ "nextAction", "persisted", "readOnly", "writesPerformed",
11
+ "authorityBoundary", "authorizationGranted"
12
+ ],
13
+ "properties": {
14
+ "schemaVersion": { "const": "OwlCodaRunKitSuccessorScaffoldV1" },
15
+ "status": { "enum": ["successor_review_required", "successor_baseline_missing", "successor_not_required", "successor_source_unverifiable"] },
16
+ "exitCode": { "const": 0 },
17
+ "project": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "required": ["projectId", "projectTruthHash", "overall"],
21
+ "properties": {
22
+ "projectId": { "$ref": "#/$defs/text" },
23
+ "projectTruthHash": { "$ref": "#/$defs/hash" },
24
+ "overall": { "const": "completed" }
25
+ }
26
+ },
27
+ "completionContinuity": { "$ref": "project-completion-continuity-v1.schema.json" },
28
+ "unmodeledCandidates": {
29
+ "type": "array",
30
+ "maxItems": 1,
31
+ "items": {
32
+ "type": "object",
33
+ "additionalProperties": false,
34
+ "required": ["candidateId", "kind", "targetWorkspaceRef", "baselineFingerprint", "currentFingerprint", "changedPaths", "changedPathCount", "changedPathsTruncated", "pathEvidenceComplete"],
35
+ "properties": {
36
+ "candidateId": { "const": "workspace-drift" },
37
+ "kind": { "const": "workspace_source_delta" },
38
+ "targetWorkspaceRef": { "$ref": "#/$defs/text" },
39
+ "baselineFingerprint": { "$ref": "#/$defs/hashRef" },
40
+ "currentFingerprint": { "$ref": "#/$defs/hashRef" },
41
+ "changedPaths": { "$ref": "#/$defs/paths" },
42
+ "changedPathCount": { "type": "integer", "minimum": 0 },
43
+ "changedPathsTruncated": { "type": "boolean" },
44
+ "pathEvidenceComplete": { "type": "boolean" }
45
+ }
46
+ }
47
+ },
48
+ "pathConflicts": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": ["path", "historicalWorkItemIds"],
54
+ "properties": {
55
+ "path": { "$ref": "#/$defs/text" },
56
+ "historicalWorkItemIds": { "$ref": "#/$defs/nonemptyStrings" }
57
+ }
58
+ }
59
+ },
60
+ "possibleLanes": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "object",
64
+ "additionalProperties": false,
65
+ "required": ["laneId", "basis", "historicalWorkItemId", "suggestedOwnedPaths", "requiresHumanConfirmation"],
66
+ "properties": {
67
+ "laneId": { "$ref": "#/$defs/text" },
68
+ "basis": { "enum": ["historical_owned_paths_only", "unmatched_paths_only"] },
69
+ "historicalWorkItemId": { "$ref": "#/$defs/nullableText" },
70
+ "suggestedOwnedPaths": { "$ref": "#/$defs/nonemptyStrings" },
71
+ "requiresHumanConfirmation": { "const": true }
72
+ }
73
+ }
74
+ },
75
+ "draft": {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["projectId", "objective", "workItems", "requiresHumanConfirmation"],
79
+ "properties": {
80
+ "projectId": { "type": "null" },
81
+ "objective": { "type": "null" },
82
+ "workItems": {
83
+ "type": "array",
84
+ "items": {
85
+ "type": "object",
86
+ "additionalProperties": false,
87
+ "required": ["draftLaneId", "title", "ownedPaths", "ownerAgentId"],
88
+ "properties": {
89
+ "draftLaneId": { "$ref": "#/$defs/text" },
90
+ "title": { "type": "null" },
91
+ "ownedPaths": { "$ref": "#/$defs/nonemptyStrings" },
92
+ "ownerAgentId": { "type": "null" }
93
+ }
94
+ }
95
+ },
96
+ "requiresHumanConfirmation": { "$ref": "#/$defs/nonemptyStrings" }
97
+ }
98
+ },
99
+ "nextAction": { "$ref": "#/$defs/nullableText" },
100
+ "persisted": { "const": false },
101
+ "readOnly": { "const": true },
102
+ "writesPerformed": { "const": false },
103
+ "authorityBoundary": { "$ref": "project-completion-continuity-v1.schema.json#/$defs/authorityBoundary" },
104
+ "authorizationGranted": { "const": false }
105
+ },
106
+ "examples": [
107
+ {
108
+ "schemaVersion": "OwlCodaRunKitSuccessorScaffoldV1",
109
+ "status": "successor_baseline_missing",
110
+ "exitCode": 0,
111
+ "project": {
112
+ "projectId": "completed-project",
113
+ "projectTruthHash": "0000000000000000000000000000000000000000000000000000000000000000",
114
+ "overall": "completed"
115
+ },
116
+ "completionContinuity": {
117
+ "schemaVersion": "OwlCodaRunKitProjectCompletionContinuityV1",
118
+ "status": "baseline_missing",
119
+ "projectId": "completed-project",
120
+ "projectTruthHash": "0000000000000000000000000000000000000000000000000000000000000000",
121
+ "disposition": "completed_project_source_baseline_missing",
122
+ "targetWorkspaceRef": "/projects/source",
123
+ "baseline": null,
124
+ "current": {
125
+ "headCommit": "0000000000000000000000000000000000000000",
126
+ "workspaceSnapshotFingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000"
127
+ },
128
+ "delta": null,
129
+ "nextAction": "Review the current workspace and bind an explicit source baseline before deciding whether the project is terminal.",
130
+ "readOnly": true,
131
+ "writesPerformed": false,
132
+ "authorityBoundary": {
133
+ "agentDispatch": false,
134
+ "git": false,
135
+ "release": false,
136
+ "deployment": false,
137
+ "production": false,
138
+ "business": false,
139
+ "automation": false,
140
+ "money": false
141
+ },
142
+ "authorizationGranted": false
143
+ },
144
+ "unmodeledCandidates": [],
145
+ "pathConflicts": [],
146
+ "possibleLanes": [],
147
+ "draft": {
148
+ "projectId": null,
149
+ "objective": null,
150
+ "workItems": [],
151
+ "requiresHumanConfirmation": [
152
+ "project_id",
153
+ "objective",
154
+ "work_item_boundaries",
155
+ "owners",
156
+ "acceptance"
157
+ ]
158
+ },
159
+ "nextAction": "Review the current workspace and bind an explicit source baseline before deciding whether the project is terminal.",
160
+ "persisted": false,
161
+ "readOnly": true,
162
+ "writesPerformed": false,
163
+ "authorityBoundary": {
164
+ "agentDispatch": false,
165
+ "git": false,
166
+ "release": false,
167
+ "deployment": false,
168
+ "production": false,
169
+ "business": false,
170
+ "automation": false,
171
+ "money": false
172
+ },
173
+ "authorizationGranted": false
174
+ }
175
+ ],
176
+ "$defs": {
177
+ "text": { "type": "string", "minLength": 1 },
178
+ "nullableText": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/text" }] },
179
+ "hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
180
+ "hashRef": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
181
+ "paths": { "type": "array", "maxItems": 256, "uniqueItems": true, "items": { "$ref": "#/$defs/text" } },
182
+ "nonemptyStrings": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/text" } }
183
+ }
184
+ }