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.
- package/CHANGELOG.md +51 -0
- package/README.md +53 -9
- package/integrations/codex/skills/owlcoda-runkit/SKILL.md +55 -16
- package/integrations/codex/skills/owlcoda-runkit/assets/templates/config.json +3 -3
- package/package.json +1 -1
- package/packages/attest/distribution-manifest-v1.json +10 -0
- package/packages/attest/src/quick.mjs +10 -0
- package/registry-release-policy-v2.json +5 -5
- package/sbom.spdx.json +4 -4
- package/scripts/runkit-contract/core-contract.mjs +5 -1
- package/scripts/runkit-contract/fleet-skill-plan.mjs +14 -66
- package/scripts/runkit-contract/formal-workflow.mjs +1 -1
- package/scripts/runkit-contract/install-codex-skill.mjs +2097 -196
- package/scripts/runkit-contract/project-cli-resolver.mjs +8 -0
- package/scripts/runkit-contract/project-completion-continuity.mjs +545 -0
- package/scripts/runkit-contract/registry-adoption.mjs +4 -4
- package/scripts/runkit-contract/runkit-cli.mjs +41 -5
- package/scripts/runkit-contract/schemas/fleet-skill-upgrade-plan-v1.schema.json +16 -3
- package/scripts/runkit-contract/schemas/project-completion-continuity-v1.schema.json +144 -0
- package/scripts/runkit-contract/schemas/successor-scaffold-v1.schema.json +184 -0
- package/scripts/runkit-contract/schemas/team-project-status-v5.schema.json +169 -0
|
@@ -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
|
-
?
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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
|
+
}
|