@claudexor/schema 3.0.3 → 3.1.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 (134) hide show
  1. package/LICENSE +1 -1
  2. package/dist/agent-capabilities.d.ts +37 -0
  3. package/dist/agent-capabilities.d.ts.map +1 -1
  4. package/dist/agent-capabilities.js +14 -0
  5. package/dist/agent-capabilities.js.map +1 -1
  6. package/dist/apply-eligibility.d.ts +384 -18
  7. package/dist/apply-eligibility.d.ts.map +1 -1
  8. package/dist/apply-eligibility.js +20 -1
  9. package/dist/apply-eligibility.js.map +1 -1
  10. package/dist/budget.d.ts +75 -0
  11. package/dist/budget.d.ts.map +1 -1
  12. package/dist/budget.js +46 -0
  13. package/dist/budget.js.map +1 -1
  14. package/dist/config.d.ts +41 -41
  15. package/dist/control-operation-responses.d.ts +287 -65
  16. package/dist/control-operation-responses.d.ts.map +1 -1
  17. package/dist/control-operation-responses.js +33 -3
  18. package/dist/control-operation-responses.js.map +1 -1
  19. package/dist/control-run-detail.d.ts +600 -150
  20. package/dist/control-run-detail.d.ts.map +1 -1
  21. package/dist/control-run-detail.js +28 -2
  22. package/dist/control-run-detail.js.map +1 -1
  23. package/dist/control-run-retry.d.ts +1 -1
  24. package/dist/control-run-scope.d.ts +1 -1
  25. package/dist/control-thread-apply.d.ts +10 -0
  26. package/dist/control-thread-apply.d.ts.map +1 -1
  27. package/dist/control.d.ts +664 -156
  28. package/dist/control.d.ts.map +1 -1
  29. package/dist/control.js +76 -2
  30. package/dist/control.js.map +1 -1
  31. package/dist/decision.d.ts +205 -9
  32. package/dist/decision.d.ts.map +1 -1
  33. package/dist/decision.js +69 -1
  34. package/dist/decision.js.map +1 -1
  35. package/dist/deep-scan.d.ts +27 -0
  36. package/dist/deep-scan.d.ts.map +1 -0
  37. package/dist/deep-scan.js +27 -0
  38. package/dist/deep-scan.js.map +1 -0
  39. package/dist/delivery.d.ts +13 -0
  40. package/dist/delivery.d.ts.map +1 -1
  41. package/dist/delivery.js +15 -0
  42. package/dist/delivery.js.map +1 -1
  43. package/dist/events.d.ts +59 -4
  44. package/dist/events.d.ts.map +1 -1
  45. package/dist/events.js +85 -0
  46. package/dist/events.js.map +1 -1
  47. package/dist/harness.d.ts +111 -3
  48. package/dist/harness.d.ts.map +1 -1
  49. package/dist/harness.js +77 -1
  50. package/dist/harness.js.map +1 -1
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/operation.d.ts +193 -10
  56. package/dist/operation.d.ts.map +1 -1
  57. package/dist/operation.js +45 -0
  58. package/dist/operation.js.map +1 -1
  59. package/dist/output-schema-dialect.d.ts +22 -0
  60. package/dist/output-schema-dialect.d.ts.map +1 -0
  61. package/dist/output-schema-dialect.js +37 -0
  62. package/dist/output-schema-dialect.js.map +1 -0
  63. package/dist/output-schema.d.ts +26 -2
  64. package/dist/output-schema.d.ts.map +1 -1
  65. package/dist/output-schema.js +313 -16
  66. package/dist/output-schema.js.map +1 -1
  67. package/dist/plan.d.ts +2 -2
  68. package/dist/problem.d.ts +3 -3
  69. package/dist/project.d.ts +47 -12
  70. package/dist/project.d.ts.map +1 -1
  71. package/dist/project.js +32 -0
  72. package/dist/project.js.map +1 -1
  73. package/dist/readiness.d.ts +14 -0
  74. package/dist/readiness.d.ts.map +1 -1
  75. package/dist/recovery.d.ts +14 -14
  76. package/dist/review.d.ts +7 -7
  77. package/dist/route.d.ts +2 -2
  78. package/dist/setup.d.ts +288 -94
  79. package/dist/setup.d.ts.map +1 -1
  80. package/dist/setup.js +90 -6
  81. package/dist/setup.js.map +1 -1
  82. package/dist/status-projection.d.ts +79 -4
  83. package/dist/status-projection.d.ts.map +1 -1
  84. package/dist/status-projection.js +161 -4
  85. package/dist/status-projection.js.map +1 -1
  86. package/dist/task.d.ts +14 -0
  87. package/dist/task.d.ts.map +1 -1
  88. package/dist/task.js +9 -0
  89. package/dist/task.js.map +1 -1
  90. package/dist/telemetry.d.ts +779 -16
  91. package/dist/telemetry.d.ts.map +1 -1
  92. package/dist/telemetry.js +177 -4
  93. package/dist/telemetry.js.map +1 -1
  94. package/dist/tool-ref.d.ts +14 -0
  95. package/dist/tool-ref.d.ts.map +1 -1
  96. package/dist/tool-ref.js +15 -0
  97. package/dist/tool-ref.js.map +1 -1
  98. package/dist/work-report.d.ts +131 -0
  99. package/dist/work-report.d.ts.map +1 -0
  100. package/dist/work-report.js +124 -0
  101. package/dist/work-report.js.map +1 -0
  102. package/dist/workspace.d.ts +2 -2
  103. package/generated/AgentCapabilityCatalog.schema.json +35 -0
  104. package/generated/ControlApplyCheckResponse.schema.json +5 -0
  105. package/generated/ControlDeliveryResponse.schema.json +14 -0
  106. package/generated/ControlHarnessListResponse.schema.json +19 -0
  107. package/generated/ControlOperationCatalog.schema.json +74 -0
  108. package/generated/ControlOperationDescriptor.schema.json +74 -0
  109. package/generated/ControlOperationParameter.schema.json +75 -0
  110. package/generated/ControlProjectRemoveReceipt.schema.json +58 -0
  111. package/generated/ControlRunAgainDraft.schema.json +11 -0
  112. package/generated/ControlRunDetail.schema.json +403 -9
  113. package/generated/ControlRunListResponse.schema.json +229 -3
  114. package/generated/ControlRunStartRequest.schema.json +11 -0
  115. package/generated/ControlRunSummary.schema.json +215 -2
  116. package/generated/ControlSetupJobCreateRequest.schema.json +2 -1
  117. package/generated/ControlSetupJobEvent.schema.json +28 -0
  118. package/generated/ControlSetupJobSnapshot.schema.json +28 -0
  119. package/generated/ControlThreadApplyResponse.schema.json +14 -0
  120. package/generated/ControlThreadDetail.schema.json +94 -1
  121. package/generated/ControlThreadTurnRequest.schema.json +11 -0
  122. package/generated/DecisionRecord.schema.json +178 -2
  123. package/generated/HarnessEvent.schema.json +79 -1
  124. package/generated/HarnessManifest.schema.json +19 -0
  125. package/generated/HarnessStatusDto.schema.json +19 -0
  126. package/generated/McpRunHandleResult.schema.json +286 -1
  127. package/generated/McpRunToolResult.schema.json +171 -1
  128. package/generated/RoutePoolDegradedPayload.schema.json +79 -0
  129. package/generated/RunEvent.schema.json +7 -1
  130. package/generated/RunFailure.schema.json +23 -1
  131. package/generated/RunTelemetry.schema.json +376 -1
  132. package/generated/StructuredOutputConformance.schema.json +83 -0
  133. package/generated/TaskContract.schema.json +16 -0
  134. package/package.json +2 -2
@@ -0,0 +1,124 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * D-16: the model-authored WorkReport — the typed self-assessment an attempt
4
+ * emits alongside its deliverable so the finalizer can tell "I finished" from
5
+ * "I need input / I ran out of room" WITHOUT prose matching. It rides the
6
+ * existing structured-output seam inside a compiled envelope (see
7
+ * `buildWorkReportEnvelope` in output-schema.ts) and is validated by the
8
+ * attempt finalizer, never by a Zod refinement on the wire type: the wire
9
+ * shape is deliberately permissive (a malformed report is a typed
10
+ * `work_report_contract` failure the finalizer raises, not a parse throw that
11
+ * loses the whole answer).
12
+ */
13
+ /** What state the model says its own work reached. Cross-field rules
14
+ * (completed ⇒ no required_inputs; needs_input ⇒ ≥1) are enforced by the
15
+ * finalizer, not here — the wire type stays permissive for transport. */
16
+ export const WorkReportState = z
17
+ .enum(["completed", "needs_input", "incomplete"])
18
+ .describe("Model-authored work state: completed (the task is done), needs_input (blocked on a listed input), or incomplete (partial, more work remains).");
19
+ /** The category of a blocking input the model needs to proceed. */
20
+ export const RequiredInputKind = z
21
+ .enum(["file", "context", "credential", "permission", "decision", "external_dependency"])
22
+ .describe("Category of a missing input a needs_input/incomplete report lists: a file, additional context, a credential, a permission, a human decision, or an external dependency.");
23
+ /** One blocking input the model reports it needs. `locator` points at the
24
+ * concrete missing thing (a path, a URL, an env var name) when it can name it. */
25
+ export const RequiredInput = z
26
+ .object({
27
+ kind: RequiredInputKind,
28
+ locator: z
29
+ .string()
30
+ .max(512)
31
+ .nullable()
32
+ .default(null)
33
+ .describe("Concrete pointer to the missing thing (path/url/name); null when unnameable."),
34
+ description: z
35
+ .string()
36
+ .max(1024)
37
+ .describe("Human-readable description of what is needed and why."),
38
+ })
39
+ .describe("One blocking input a needs_input/incomplete WorkReport lists.");
40
+ /** The model-authored work self-assessment (D-16). */
41
+ export const WorkReport = z
42
+ .object({
43
+ state: WorkReportState,
44
+ required_inputs: z
45
+ .array(RequiredInput)
46
+ .max(16)
47
+ .default([])
48
+ .describe("Blocking inputs the model needs to proceed; empty for a completed report, ≥1 for needs_input (finalizer-enforced)."),
49
+ })
50
+ .describe("Model-authored WorkReport (D-16): a typed self-assessment of whether the attempt completed, needs input, or is incomplete, riding the structured-output envelope and validated by the attempt finalizer.");
51
+ /**
52
+ * How the engine OBTAINED (or failed to obtain) a WorkReport for an attempt —
53
+ * the provenance of the work_state axis:
54
+ * - `constrained`: a native schema-constrained transport carried it (codex
55
+ * --output-schema, claude StructuredOutput tool).
56
+ * - `validated`: a whole-answer validated-JSON transport carried it (cursor).
57
+ * - `absent`: the route could not carry one (transport unsupported or a lane
58
+ * gated the structured transport off) — a DISCLOSED absence, not a failure.
59
+ */
60
+ export const WorkReportSource = z
61
+ .enum(["constrained", "validated", "absent"])
62
+ .describe("Provenance of a WorkReport: constrained (native schema transport), validated (whole-answer JSON), or absent (no transport could carry one — a disclosed absence, not a failure).");
63
+ /**
64
+ * The D-16 work_state axis attached to attempt/run outcomes, ORTHOGONAL to the
65
+ * process lifecycle (INV-116). `state` folds the WorkReport state with an
66
+ * `unverified` value for the disclosed-absence case (transport unsupported /
67
+ * lane gated). A `needs_input`/`incomplete` work_state VETOES applyability and
68
+ * forces a non-zero CLI exit even when the process lifecycle succeeded, but it
69
+ * NEVER flips the lifecycle itself.
70
+ */
71
+ export const WorkState = z
72
+ .object({
73
+ state: z
74
+ .enum(["completed", "needs_input", "incomplete", "unverified"])
75
+ .describe("Folded work state: the WorkReport state, or unverified when no report was obtainable (transport unsupported / lane gated)."),
76
+ source: WorkReportSource,
77
+ required_inputs: z
78
+ .array(RequiredInput)
79
+ .max(16)
80
+ .optional()
81
+ .describe("Carried through from a needs_input/incomplete WorkReport for honest disclosure."),
82
+ })
83
+ .describe("D-16 work_state axis: the model-attested work outcome, orthogonal to process lifecycle (INV-116); a needs_input/incomplete state vetoes applyability and exit 0 without flipping the lifecycle.");
84
+ /**
85
+ * Strict transport form of the WorkReport, hand-authored to match the Zod shape
86
+ * (every key required, additionalProperties:false, optional locator expressed
87
+ * as string|null — the vendor strict-mode recipe). This is the WorkReport half
88
+ * of the compiled envelope that rides `HarnessRunSpec.output_schema`. A unit
89
+ * test pins it against a fresh strictify of the generated WorkReport schema so
90
+ * drift is caught.
91
+ */
92
+ export const WORK_REPORT_TRANSPORT_SCHEMA = {
93
+ type: "object",
94
+ properties: {
95
+ state: { type: "string", enum: ["completed", "needs_input", "incomplete"] },
96
+ required_inputs: {
97
+ type: "array",
98
+ maxItems: 16,
99
+ items: {
100
+ type: "object",
101
+ properties: {
102
+ kind: {
103
+ type: "string",
104
+ enum: [
105
+ "file",
106
+ "context",
107
+ "credential",
108
+ "permission",
109
+ "decision",
110
+ "external_dependency",
111
+ ],
112
+ },
113
+ locator: { type: ["string", "null"], maxLength: 512 },
114
+ description: { type: "string", maxLength: 1024 },
115
+ },
116
+ required: ["kind", "locator", "description"],
117
+ additionalProperties: false,
118
+ },
119
+ },
120
+ },
121
+ required: ["state", "required_inputs"],
122
+ additionalProperties: false,
123
+ };
124
+ //# sourceMappingURL=work-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-report.js","sourceRoot":"","sources":["../src/work-report.ts"],"names":[],"mappings":"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"}
@@ -26,8 +26,8 @@ export declare const WorkspaceEnvelope: z.ZodObject<{
26
26
  worktree_path: string;
27
27
  base_sha: string | null;
28
28
  base_ref: string;
29
- task_id: string;
30
29
  attempt_id: string;
30
+ task_id: string;
31
31
  dirty_policy: "refuse" | "snapshot";
32
32
  repo_root: string;
33
33
  branch_name: string;
@@ -39,8 +39,8 @@ export declare const WorkspaceEnvelope: z.ZodObject<{
39
39
  id: string;
40
40
  worktree_path: string;
41
41
  base_ref: string;
42
- task_id: string;
43
42
  attempt_id: string;
43
+ task_id: string;
44
44
  repo_root: string;
45
45
  branch_name: string;
46
46
  home_dir: string;
@@ -278,6 +278,40 @@
278
278
  },
279
279
  "description": "Accepted POST /runs request keys (derived from the ControlRunStartRequest schema; the CLI/MCP/ACP surfaces project subsets of these)."
280
280
  },
281
+ "outputSchemaDialects": {
282
+ "type": "array",
283
+ "items": {
284
+ "type": "object",
285
+ "properties": {
286
+ "dialect": {
287
+ "type": "string",
288
+ "enum": [
289
+ "draft-07",
290
+ "draft-2020-12"
291
+ ],
292
+ "description": "Stable dialect id used in structured-output receipts."
293
+ },
294
+ "uri": {
295
+ "type": "string",
296
+ "format": "uri",
297
+ "description": "Canonical $schema URI accepted for this dialect."
298
+ },
299
+ "defaultWhenOmitted": {
300
+ "type": "boolean",
301
+ "description": "True when this dialect is selected for schemas without a $schema declaration."
302
+ }
303
+ },
304
+ "required": [
305
+ "dialect",
306
+ "uri",
307
+ "defaultWhenOmitted"
308
+ ],
309
+ "additionalProperties": false,
310
+ "description": "One JSON Schema dialect accepted by the structured-output validator."
311
+ },
312
+ "minItems": 1,
313
+ "description": "Supported structured-output JSON Schema dialects and canonical $schema URIs."
314
+ },
281
315
  "mutability": {
282
316
  "type": "object",
283
317
  "properties": {
@@ -416,6 +450,7 @@
416
450
  "availableHarnesses",
417
451
  "modes",
418
452
  "runControlKeys",
453
+ "outputSchemaDialects",
419
454
  "mutability",
420
455
  "cliCommands",
421
456
  "mcpTools",
@@ -19,6 +19,11 @@
19
19
  },
20
20
  "stderr": {
21
21
  "type": "string"
22
+ },
23
+ "alreadyApplied": {
24
+ "type": "boolean",
25
+ "default": false,
26
+ "description": "True when the clean check is an already-applied idempotent no-op."
22
27
  }
23
28
  },
24
29
  "required": [
@@ -34,6 +34,20 @@
34
34
  "refused": {
35
35
  "type": "boolean"
36
36
  },
37
+ "alreadyApplied": {
38
+ "type": "boolean",
39
+ "default": false,
40
+ "description": "True when delivery was an idempotent already-applied no-op (no files changed)."
41
+ },
42
+ "deliveryStatus": {
43
+ "type": "string",
44
+ "enum": [
45
+ "applied",
46
+ "already_applied",
47
+ "refused"
48
+ ],
49
+ "description": "Coarse typed delivery disposition (applied / already_applied / refused)."
50
+ },
37
51
  "finalVerify": {
38
52
  "type": "object",
39
53
  "properties": {
@@ -349,6 +349,25 @@
349
349
  "default": false,
350
350
  "description": "The harness can constrain its final message to a caller-supplied JSON Schema (native structured-output flag)."
351
351
  },
352
+ "work_report_transport": {
353
+ "type": "string",
354
+ "enum": [
355
+ "constrained",
356
+ "validated",
357
+ "unsupported"
358
+ ],
359
+ "default": "unsupported",
360
+ "description": "How the harness carries the D-16 WorkReport envelope: constrained (native schema transport), validated (whole-answer JSON), or unsupported (work_state stays unverified)."
361
+ },
362
+ "structured_output_channel": {
363
+ "type": "string",
364
+ "enum": [
365
+ "side_tool",
366
+ "final_message"
367
+ ],
368
+ "default": "final_message",
369
+ "description": "Where a schema-constrained answer surfaces: side_tool (rides a tool; final message stays markdown) or final_message (constrains the final message itself)."
370
+ },
352
371
  "effort_levels": {
353
372
  "type": "array",
354
373
  "items": {
@@ -55,6 +55,80 @@
55
55
  }
56
56
  ]
57
57
  },
58
+ "parameters": {
59
+ "type": "array",
60
+ "items": {
61
+ "type": "object",
62
+ "properties": {
63
+ "name": {
64
+ "type": "string",
65
+ "minLength": 1,
66
+ "description": "Wire name of the parameter: the query key or the (case-insensitive) header field name."
67
+ },
68
+ "location": {
69
+ "type": "string",
70
+ "enum": [
71
+ "query",
72
+ "header"
73
+ ],
74
+ "description": "Where the parameter travels: the URL query string or a request header."
75
+ },
76
+ "required": {
77
+ "type": "boolean",
78
+ "description": "Whether the operation requires the parameter to be present."
79
+ },
80
+ "repeatable": {
81
+ "type": "boolean",
82
+ "default": false,
83
+ "description": "Whether the parameter may appear more than once (e.g. a repeated query filter)."
84
+ },
85
+ "enum": {
86
+ "anyOf": [
87
+ {
88
+ "type": "array",
89
+ "items": {
90
+ "type": "string",
91
+ "minLength": 1
92
+ }
93
+ },
94
+ {
95
+ "type": "null"
96
+ }
97
+ ],
98
+ "default": null,
99
+ "description": "Closed set of accepted values when the grammar is a fixed enum; null otherwise."
100
+ },
101
+ "schemaRef": {
102
+ "anyOf": [
103
+ {
104
+ "type": "string",
105
+ "minLength": 1
106
+ },
107
+ {
108
+ "type": "null"
109
+ }
110
+ ],
111
+ "default": null,
112
+ "description": "Generated schema name (optionally a `Name#/properties/field` pointer) that types this parameter's value when it is not a simple enum; null otherwise."
113
+ },
114
+ "description": {
115
+ "type": "string",
116
+ "minLength": 1,
117
+ "description": "One-line human semantics of the parameter."
118
+ }
119
+ },
120
+ "required": [
121
+ "name",
122
+ "location",
123
+ "required",
124
+ "description"
125
+ ],
126
+ "additionalProperties": false,
127
+ "description": "A query or header request parameter an operation reads (never the JSON body)."
128
+ },
129
+ "default": [],
130
+ "description": "Query/header request parameters (body shape is `requestSchema`)."
131
+ },
58
132
  "responseSchema": {
59
133
  "anyOf": [
60
134
  {
@@ -46,6 +46,80 @@
46
46
  }
47
47
  ]
48
48
  },
49
+ "parameters": {
50
+ "type": "array",
51
+ "items": {
52
+ "type": "object",
53
+ "properties": {
54
+ "name": {
55
+ "type": "string",
56
+ "minLength": 1,
57
+ "description": "Wire name of the parameter: the query key or the (case-insensitive) header field name."
58
+ },
59
+ "location": {
60
+ "type": "string",
61
+ "enum": [
62
+ "query",
63
+ "header"
64
+ ],
65
+ "description": "Where the parameter travels: the URL query string or a request header."
66
+ },
67
+ "required": {
68
+ "type": "boolean",
69
+ "description": "Whether the operation requires the parameter to be present."
70
+ },
71
+ "repeatable": {
72
+ "type": "boolean",
73
+ "default": false,
74
+ "description": "Whether the parameter may appear more than once (e.g. a repeated query filter)."
75
+ },
76
+ "enum": {
77
+ "anyOf": [
78
+ {
79
+ "type": "array",
80
+ "items": {
81
+ "type": "string",
82
+ "minLength": 1
83
+ }
84
+ },
85
+ {
86
+ "type": "null"
87
+ }
88
+ ],
89
+ "default": null,
90
+ "description": "Closed set of accepted values when the grammar is a fixed enum; null otherwise."
91
+ },
92
+ "schemaRef": {
93
+ "anyOf": [
94
+ {
95
+ "type": "string",
96
+ "minLength": 1
97
+ },
98
+ {
99
+ "type": "null"
100
+ }
101
+ ],
102
+ "default": null,
103
+ "description": "Generated schema name (optionally a `Name#/properties/field` pointer) that types this parameter's value when it is not a simple enum; null otherwise."
104
+ },
105
+ "description": {
106
+ "type": "string",
107
+ "minLength": 1,
108
+ "description": "One-line human semantics of the parameter."
109
+ }
110
+ },
111
+ "required": [
112
+ "name",
113
+ "location",
114
+ "required",
115
+ "description"
116
+ ],
117
+ "additionalProperties": false,
118
+ "description": "A query or header request parameter an operation reads (never the JSON body)."
119
+ },
120
+ "default": [],
121
+ "description": "Query/header request parameters (body shape is `requestSchema`)."
122
+ },
49
123
  "responseSchema": {
50
124
  "anyOf": [
51
125
  {
@@ -0,0 +1,75 @@
1
+ {
2
+ "$ref": "#/definitions/ControlOperationParameter",
3
+ "definitions": {
4
+ "ControlOperationParameter": {
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "Wire name of the parameter: the query key or the (case-insensitive) header field name."
11
+ },
12
+ "location": {
13
+ "type": "string",
14
+ "enum": [
15
+ "query",
16
+ "header"
17
+ ],
18
+ "description": "Where the parameter travels: the URL query string or a request header."
19
+ },
20
+ "required": {
21
+ "type": "boolean",
22
+ "description": "Whether the operation requires the parameter to be present."
23
+ },
24
+ "repeatable": {
25
+ "type": "boolean",
26
+ "default": false,
27
+ "description": "Whether the parameter may appear more than once (e.g. a repeated query filter)."
28
+ },
29
+ "enum": {
30
+ "anyOf": [
31
+ {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ }
37
+ },
38
+ {
39
+ "type": "null"
40
+ }
41
+ ],
42
+ "default": null,
43
+ "description": "Closed set of accepted values when the grammar is a fixed enum; null otherwise."
44
+ },
45
+ "schemaRef": {
46
+ "anyOf": [
47
+ {
48
+ "type": "string",
49
+ "minLength": 1
50
+ },
51
+ {
52
+ "type": "null"
53
+ }
54
+ ],
55
+ "default": null,
56
+ "description": "Generated schema name (optionally a `Name#/properties/field` pointer) that types this parameter's value when it is not a simple enum; null otherwise."
57
+ },
58
+ "description": {
59
+ "type": "string",
60
+ "minLength": 1,
61
+ "description": "One-line human semantics of the parameter."
62
+ }
63
+ },
64
+ "required": [
65
+ "name",
66
+ "location",
67
+ "required",
68
+ "description"
69
+ ],
70
+ "additionalProperties": false,
71
+ "description": "A query or header request parameter an operation reads (never the JSON body)."
72
+ }
73
+ },
74
+ "$schema": "http://json-schema.org/draft-07/schema#"
75
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "$ref": "#/definitions/ControlProjectRemoveReceipt",
3
+ "definitions": {
4
+ "ControlProjectRemoveReceipt": {
5
+ "type": "object",
6
+ "properties": {
7
+ "projectId": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "description": "The retired project's stable id."
11
+ },
12
+ "root": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "description": "The project's canonical root at removal time."
16
+ },
17
+ "registryRemoved": {
18
+ "type": "boolean",
19
+ "const": true,
20
+ "description": "The durable global-registry entry (and its indexes) were removed."
21
+ },
22
+ "journalPartitionArchived": {
23
+ "type": "boolean",
24
+ "description": "Whether the project's journal partition directory was archived (renamed out of the active journal tree). False only when the partition never materialized on disk."
25
+ },
26
+ "archivedPartitionPath": {
27
+ "type": [
28
+ "string",
29
+ "null"
30
+ ],
31
+ "description": "Absolute path the partition journal was archived to, or null when there was no partition directory to archive."
32
+ },
33
+ "artifactsRetained": {
34
+ "type": "boolean",
35
+ "const": true,
36
+ "description": "Run artifact trees are left in place for normal GC/retention — remove never deletes run bytes or the user's project directory."
37
+ },
38
+ "activeRunCheck": {
39
+ "type": "string",
40
+ "const": "snapshot",
41
+ "description": "How the live/queued-run fence was evaluated. Always 'snapshot': the active-run set is read once (an async daemon IPC job-list read) BEFORE the synchronous removal, so a run that starts in the narrow window between the snapshot and the removal is NOT fenced. Honest disclosure of a TOCTOU race the current architecture cannot close inside the sync section; see docs/ARCHITECTURE.md."
42
+ }
43
+ },
44
+ "required": [
45
+ "projectId",
46
+ "root",
47
+ "registryRemoved",
48
+ "journalPartitionArchived",
49
+ "archivedPartitionPath",
50
+ "artifactsRetained",
51
+ "activeRunCheck"
52
+ ],
53
+ "additionalProperties": false,
54
+ "description": "DELETE /v2/projects/:id receipt: registry entry removed, journal partition archived, artifacts left to GC."
55
+ }
56
+ },
57
+ "$schema": "http://json-schema.org/draft-07/schema#"
58
+ }
@@ -167,6 +167,17 @@
167
167
  ],
168
168
  "description": "Requested reasoning effort."
169
169
  },
170
+ "efforts": {
171
+ "type": "object",
172
+ "additionalProperties": {
173
+ "$ref": "#/definitions/ControlRunAgainDraft/properties/request/properties/effort"
174
+ },
175
+ "propertyNames": {
176
+ "minLength": 1,
177
+ "pattern": "\\S"
178
+ },
179
+ "description": "Harness-scoped effort map (harness id to effort); an entry here wins over the scalar effort and the per-harness settings default."
180
+ },
170
181
  "reviewerModels": {
171
182
  "type": "object",
172
183
  "additionalProperties": {