@claudexor/schema 3.0.4 → 3.1.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 (146) hide show
  1. package/dist/agent-capabilities.d.ts +45 -8
  2. package/dist/agent-capabilities.d.ts.map +1 -1
  3. package/dist/agent-capabilities.js +14 -0
  4. package/dist/agent-capabilities.js.map +1 -1
  5. package/dist/apply-eligibility.d.ts +384 -18
  6. package/dist/apply-eligibility.d.ts.map +1 -1
  7. package/dist/apply-eligibility.js +20 -1
  8. package/dist/apply-eligibility.js.map +1 -1
  9. package/dist/budget.d.ts +84 -9
  10. package/dist/budget.d.ts.map +1 -1
  11. package/dist/budget.js +46 -0
  12. package/dist/budget.js.map +1 -1
  13. package/dist/config.d.ts +97 -65
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +12 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/control-operation-responses.d.ts +311 -89
  18. package/dist/control-operation-responses.d.ts.map +1 -1
  19. package/dist/control-operation-responses.js +33 -3
  20. package/dist/control-operation-responses.js.map +1 -1
  21. package/dist/control-run-detail.d.ts +613 -163
  22. package/dist/control-run-detail.d.ts.map +1 -1
  23. package/dist/control-run-detail.js +28 -2
  24. package/dist/control-run-detail.js.map +1 -1
  25. package/dist/control-run-retry.d.ts +1 -1
  26. package/dist/control-run-scope.d.ts +1 -1
  27. package/dist/control-thread-apply.d.ts +10 -0
  28. package/dist/control-thread-apply.d.ts.map +1 -1
  29. package/dist/control.d.ts +791 -232
  30. package/dist/control.d.ts.map +1 -1
  31. package/dist/control.js +76 -2
  32. package/dist/control.js.map +1 -1
  33. package/dist/decision.d.ts +205 -9
  34. package/dist/decision.d.ts.map +1 -1
  35. package/dist/decision.js +69 -1
  36. package/dist/decision.js.map +1 -1
  37. package/dist/deep-scan.d.ts +27 -0
  38. package/dist/deep-scan.d.ts.map +1 -0
  39. package/dist/deep-scan.js +27 -0
  40. package/dist/deep-scan.js.map +1 -0
  41. package/dist/delivery.d.ts +13 -0
  42. package/dist/delivery.d.ts.map +1 -1
  43. package/dist/delivery.js +15 -0
  44. package/dist/delivery.js.map +1 -1
  45. package/dist/effort.d.ts +132 -0
  46. package/dist/effort.d.ts.map +1 -0
  47. package/dist/effort.js +167 -0
  48. package/dist/effort.js.map +1 -0
  49. package/dist/events.d.ts +59 -4
  50. package/dist/events.d.ts.map +1 -1
  51. package/dist/events.js +91 -0
  52. package/dist/events.js.map +1 -1
  53. package/dist/gate.d.ts +2 -2
  54. package/dist/harness.d.ts +209 -28
  55. package/dist/harness.d.ts.map +1 -1
  56. package/dist/harness.js +107 -14
  57. package/dist/harness.js.map +1 -1
  58. package/dist/index.d.ts +4 -0
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +4 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/operation.d.ts +193 -10
  63. package/dist/operation.d.ts.map +1 -1
  64. package/dist/operation.js +45 -0
  65. package/dist/operation.js.map +1 -1
  66. package/dist/output-schema-dialect.d.ts +22 -0
  67. package/dist/output-schema-dialect.d.ts.map +1 -0
  68. package/dist/output-schema-dialect.js +37 -0
  69. package/dist/output-schema-dialect.js.map +1 -0
  70. package/dist/output-schema.d.ts +26 -2
  71. package/dist/output-schema.d.ts.map +1 -1
  72. package/dist/output-schema.js +313 -16
  73. package/dist/output-schema.js.map +1 -1
  74. package/dist/plan.d.ts +2 -2
  75. package/dist/problem.d.ts +3 -3
  76. package/dist/project.d.ts +47 -12
  77. package/dist/project.d.ts.map +1 -1
  78. package/dist/project.js +32 -0
  79. package/dist/project.js.map +1 -1
  80. package/dist/readiness.d.ts +62 -7
  81. package/dist/readiness.d.ts.map +1 -1
  82. package/dist/recovery.d.ts +14 -14
  83. package/dist/review.d.ts +7 -7
  84. package/dist/route.d.ts +2 -2
  85. package/dist/setup.d.ts +288 -94
  86. package/dist/setup.d.ts.map +1 -1
  87. package/dist/setup.js +90 -6
  88. package/dist/setup.js.map +1 -1
  89. package/dist/status-projection.d.ts +79 -4
  90. package/dist/status-projection.d.ts.map +1 -1
  91. package/dist/status-projection.js +161 -4
  92. package/dist/status-projection.js.map +1 -1
  93. package/dist/task.d.ts +70 -53
  94. package/dist/task.d.ts.map +1 -1
  95. package/dist/task.js +18 -8
  96. package/dist/task.js.map +1 -1
  97. package/dist/telemetry.d.ts +795 -32
  98. package/dist/telemetry.d.ts.map +1 -1
  99. package/dist/telemetry.js +177 -4
  100. package/dist/telemetry.js.map +1 -1
  101. package/dist/tool-ref.d.ts +14 -0
  102. package/dist/tool-ref.d.ts.map +1 -1
  103. package/dist/tool-ref.js +15 -0
  104. package/dist/tool-ref.js.map +1 -1
  105. package/dist/work-report.d.ts +131 -0
  106. package/dist/work-report.d.ts.map +1 -0
  107. package/dist/work-report.js +124 -0
  108. package/dist/work-report.js.map +1 -0
  109. package/dist/workspace.d.ts +2 -2
  110. package/generated/AgentCapabilityCatalog.schema.json +39 -8
  111. package/generated/ControlApplyCheckResponse.schema.json +5 -0
  112. package/generated/ControlDeliveryResponse.schema.json +14 -0
  113. package/generated/ControlHarnessListResponse.schema.json +64 -9
  114. package/generated/ControlHarnessSettingsPatch.schema.json +4 -8
  115. package/generated/ControlOperationCatalog.schema.json +74 -0
  116. package/generated/ControlOperationDescriptor.schema.json +74 -0
  117. package/generated/ControlOperationParameter.schema.json +75 -0
  118. package/generated/ControlProjectRemoveReceipt.schema.json +58 -0
  119. package/generated/ControlRunAgainDraft.schema.json +14 -7
  120. package/generated/ControlRunDetail.schema.json +406 -16
  121. package/generated/ControlRunListResponse.schema.json +232 -10
  122. package/generated/ControlRunStartRequest.schema.json +14 -7
  123. package/generated/ControlRunSummary.schema.json +218 -9
  124. package/generated/ControlSettingsSnapshot.schema.json +4 -8
  125. package/generated/ControlSettingsUpdateRequest.schema.json +4 -8
  126. package/generated/ControlSetupJobCreateRequest.schema.json +2 -1
  127. package/generated/ControlSetupJobEvent.schema.json +28 -0
  128. package/generated/ControlSetupJobSnapshot.schema.json +28 -0
  129. package/generated/ControlThreadApplyResponse.schema.json +14 -0
  130. package/generated/ControlThreadDetail.schema.json +94 -1
  131. package/generated/ControlThreadTurnRequest.schema.json +14 -7
  132. package/generated/DecisionRecord.schema.json +178 -2
  133. package/generated/GlobalConfig.schema.json +4 -8
  134. package/generated/HarnessEvent.schema.json +79 -1
  135. package/generated/HarnessManifest.schema.json +64 -9
  136. package/generated/HarnessStatusDto.schema.json +64 -9
  137. package/generated/McpRunHandleResult.schema.json +286 -1
  138. package/generated/McpRunToolResult.schema.json +171 -1
  139. package/generated/ProjectConfig.schema.json +26 -0
  140. package/generated/RoutePoolDegradedPayload.schema.json +79 -0
  141. package/generated/RunEvent.schema.json +8 -1
  142. package/generated/RunFailure.schema.json +23 -1
  143. package/generated/RunTelemetry.schema.json +376 -1
  144. package/generated/StructuredOutputConformance.schema.json +83 -0
  145. package/generated/TaskContract.schema.json +13 -1
  146. package/package.json +2 -2
@@ -158,15 +158,22 @@
158
158
  },
159
159
  "effort": {
160
160
  "type": "string",
161
- "enum": [
162
- "low",
163
- "medium",
164
- "high",
165
- "xhigh",
166
- "max"
167
- ],
161
+ "minLength": 1,
162
+ "maxLength": 32,
163
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
168
164
  "description": "Requested reasoning effort."
169
165
  },
166
+ "efforts": {
167
+ "type": "object",
168
+ "additionalProperties": {
169
+ "$ref": "#/definitions/ControlRunAgainDraft/properties/request/properties/effort"
170
+ },
171
+ "propertyNames": {
172
+ "minLength": 1,
173
+ "pattern": "\\S"
174
+ },
175
+ "description": "Harness-scoped effort map (harness id to effort); an entry here wins over the scalar effort and the per-harness settings default."
176
+ },
170
177
  "reviewerModels": {
171
178
  "type": "object",
172
179
  "additionalProperties": {
@@ -57,6 +57,7 @@
57
57
  "auth",
58
58
  "harness_unavailable",
59
59
  "harness_error",
60
+ "config_error",
60
61
  "budget",
61
62
  "policy",
62
63
  "cancelled",
@@ -64,7 +65,28 @@
64
65
  "unknown"
65
66
  ],
66
67
  "default": "unknown",
67
- "description": "Typed failure category (validation, project, auth, harness, budget, policy, cancelled, internal, unknown)."
68
+ "description": "Typed failure category (validation, project, auth, harness, config, budget, policy, cancelled, internal, unknown). config_error is a settings/routing misconfiguration (e.g. quality routing with no comparable tier), corrected by changing configuration, not by re-auth or waiting for a harness."
69
+ },
70
+ "code": {
71
+ "anyOf": [
72
+ {
73
+ "type": "string",
74
+ "enum": [
75
+ "finite_zero",
76
+ "hard_cap",
77
+ "estimate_headroom",
78
+ "unknown_paid_in_flight",
79
+ "budget_overshoot",
80
+ "cost_unverifiable"
81
+ ],
82
+ "description": "Machine-readable failure sub-code within a RunFailure category (today the typed budget-denial reasons produced by the budget ledger)."
83
+ },
84
+ {
85
+ "type": "null"
86
+ }
87
+ ],
88
+ "description": "Machine-readable failure sub-code within the category (today the typed budget-denial reason from the ledger); null when the category alone is sufficient. Surfaces choose remediation from this, never by parsing safeMessage.",
89
+ "default": null
68
90
  },
69
91
  "harnessId": {
70
92
  "type": [
@@ -256,13 +278,9 @@
256
278
  },
257
279
  "effort": {
258
280
  "type": "string",
259
- "enum": [
260
- "low",
261
- "medium",
262
- "high",
263
- "xhigh",
264
- "max"
265
- ],
281
+ "minLength": 1,
282
+ "maxLength": 32,
283
+ "pattern": "^[a-z0-9]+(?:[_-][a-z0-9]+)*$",
266
284
  "description": "Per-reviewer effort hint, passed to that harness only."
267
285
  }
268
286
  },
@@ -880,7 +898,11 @@
880
898
  "stuck_no_progress",
881
899
  "wall_clock_exceeded",
882
900
  "user_cancelled",
883
- "crash_interrupted"
901
+ "crash_interrupted",
902
+ "input_required",
903
+ "work_incomplete",
904
+ "context_capacity_exhausted",
905
+ "work_report_contract"
884
906
  ],
885
907
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success."
886
908
  },
@@ -890,6 +912,82 @@
890
912
  ],
891
913
  "description": "Typed reason qualifying a non-clean terminal; null on a clean success.",
892
914
  "default": null
915
+ },
916
+ "work_state": {
917
+ "type": "object",
918
+ "properties": {
919
+ "state": {
920
+ "type": "string",
921
+ "enum": [
922
+ "completed",
923
+ "needs_input",
924
+ "incomplete",
925
+ "unverified"
926
+ ],
927
+ "description": "Folded work state: the WorkReport state, or unverified when no report was obtainable (transport unsupported / lane gated)."
928
+ },
929
+ "source": {
930
+ "type": "string",
931
+ "enum": [
932
+ "constrained",
933
+ "validated",
934
+ "absent"
935
+ ],
936
+ "description": "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)."
937
+ },
938
+ "required_inputs": {
939
+ "type": "array",
940
+ "items": {
941
+ "type": "object",
942
+ "properties": {
943
+ "kind": {
944
+ "type": "string",
945
+ "enum": [
946
+ "file",
947
+ "context",
948
+ "credential",
949
+ "permission",
950
+ "decision",
951
+ "external_dependency"
952
+ ],
953
+ "description": "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."
954
+ },
955
+ "locator": {
956
+ "anyOf": [
957
+ {
958
+ "type": "string",
959
+ "maxLength": 512
960
+ },
961
+ {
962
+ "type": "null"
963
+ }
964
+ ],
965
+ "default": null,
966
+ "description": "Concrete pointer to the missing thing (path/url/name); null when unnameable."
967
+ },
968
+ "description": {
969
+ "type": "string",
970
+ "maxLength": 1024,
971
+ "description": "Human-readable description of what is needed and why."
972
+ }
973
+ },
974
+ "required": [
975
+ "kind",
976
+ "description"
977
+ ],
978
+ "additionalProperties": false,
979
+ "description": "One blocking input a needs_input/incomplete WorkReport lists."
980
+ },
981
+ "maxItems": 16,
982
+ "description": "Carried through from a needs_input/incomplete WorkReport for honest disclosure."
983
+ }
984
+ },
985
+ "required": [
986
+ "state",
987
+ "source"
988
+ ],
989
+ "additionalProperties": false,
990
+ "description": "D-16 model-attested work outcome, orthogonal to lifecycle; a needs_input/incomplete state vetoes applyability and exit 0. Absent on runs with no work_report transport."
893
991
  }
894
992
  },
895
993
  "required": [
@@ -955,6 +1053,117 @@
955
1053
  "description": "Route evidence from telemetry; null when no telemetry exists (legacy runs).",
956
1054
  "default": null
957
1055
  },
1056
+ "routingRationale": {
1057
+ "anyOf": [
1058
+ {
1059
+ "type": "object",
1060
+ "properties": {
1061
+ "goal": {
1062
+ "$ref": "#/definitions/ControlRunDetail/properties/summary/properties/routingGoal"
1063
+ },
1064
+ "paid_fallback": {
1065
+ "type": "string",
1066
+ "enum": [
1067
+ "never",
1068
+ "when_unavailable",
1069
+ "allowed_within_cap"
1070
+ ],
1071
+ "description": "When a route with incremental paid spend may be used."
1072
+ },
1073
+ "order": {
1074
+ "type": "array",
1075
+ "items": {
1076
+ "type": "string",
1077
+ "minLength": 1,
1078
+ "description": "Non-empty identifier string."
1079
+ },
1080
+ "default": [],
1081
+ "description": "Final ranked order, harness ids."
1082
+ },
1083
+ "dropped": {
1084
+ "type": "array",
1085
+ "items": {
1086
+ "$ref": "#/definitions/ControlRunDetail/properties/summary/properties/routingRationale/anyOf/0/properties/order/items"
1087
+ },
1088
+ "default": [],
1089
+ "description": "Ids removed by paid_fallback or cooldown before ranking."
1090
+ },
1091
+ "reason": {
1092
+ "type": "string",
1093
+ "enum": [
1094
+ "subscription_entitlement_first",
1095
+ "lowest_incremental_cash",
1096
+ "quality_tier",
1097
+ "expiring_quota_slack",
1098
+ "all_incremental_cash_unknown",
1099
+ "declared_order"
1100
+ ],
1101
+ "description": "Typed decisive reason the pool ranked the way it did (QA-034)."
1102
+ },
1103
+ "entries": {
1104
+ "type": "array",
1105
+ "items": {
1106
+ "type": "object",
1107
+ "properties": {
1108
+ "harness_id": {
1109
+ "type": "string",
1110
+ "minLength": 1,
1111
+ "description": "Candidate harness id."
1112
+ },
1113
+ "billing_knowledge": {
1114
+ "type": "string",
1115
+ "enum": [
1116
+ "proven_zero",
1117
+ "subscription_entitlement",
1118
+ "metered",
1119
+ "unknown"
1120
+ ],
1121
+ "description": "Effective billing knowledge used to rank it."
1122
+ },
1123
+ "incremental_cost_usd": {
1124
+ "anyOf": [
1125
+ {
1126
+ "type": "number",
1127
+ "minimum": 0
1128
+ },
1129
+ {
1130
+ "type": "null"
1131
+ }
1132
+ ],
1133
+ "default": null,
1134
+ "description": "Known incremental cash cost, when any; null when unknown."
1135
+ },
1136
+ "eligible": {
1137
+ "type": "boolean",
1138
+ "description": "Whether the candidate survived paid_fallback/cooldown filtering."
1139
+ }
1140
+ },
1141
+ "required": [
1142
+ "harness_id",
1143
+ "billing_knowledge",
1144
+ "eligible"
1145
+ ],
1146
+ "additionalProperties": false,
1147
+ "description": "Per-candidate billing/cost tuple in the routing rationale (QA-034)."
1148
+ },
1149
+ "default": []
1150
+ }
1151
+ },
1152
+ "required": [
1153
+ "goal",
1154
+ "paid_fallback",
1155
+ "reason"
1156
+ ],
1157
+ "additionalProperties": false,
1158
+ "description": "Typed routing rationale recorded once at pool ordering (QA-034)."
1159
+ },
1160
+ {
1161
+ "type": "null"
1162
+ }
1163
+ ],
1164
+ "description": "Typed routing rationale (QA-034) projected from telemetry; null when no ranking was computed or on legacy runs.",
1165
+ "default": null
1166
+ },
958
1167
  "tests": {
959
1168
  "type": "array",
960
1169
  "items": {
@@ -1197,6 +1406,14 @@
1197
1406
  "default": null,
1198
1407
  "description": "Redacted error detail for error events."
1199
1408
  },
1409
+ "ignoredSettings": {
1410
+ "type": "array",
1411
+ "items": {
1412
+ "type": "string"
1413
+ },
1414
+ "default": [],
1415
+ "description": "Unsupported per-harness knobs the route could not honor (INV-105), disclosed on harness.started; empty when nothing was dropped (QA-070)."
1416
+ },
1200
1417
  "rawRef": {
1201
1418
  "type": [
1202
1419
  "string",
@@ -1234,6 +1451,24 @@
1234
1451
  "default": null,
1235
1452
  "description": "CASH spend so far in USD; null when unknown."
1236
1453
  },
1454
+ "valuationUsd": {
1455
+ "type": [
1456
+ "number",
1457
+ "null"
1458
+ ],
1459
+ "default": null,
1460
+ "description": "Subscription valuation in USD (separate from billed cash); null when unknown — never a fabricated $0 (QA-023c)."
1461
+ },
1462
+ "valuationKnowledge": {
1463
+ "type": "string",
1464
+ "enum": [
1465
+ "exact",
1466
+ "estimated",
1467
+ "unknown"
1468
+ ],
1469
+ "default": "unknown",
1470
+ "description": "Confidence of valuationUsd: 'estimated' when token-derived, 'unknown' when no usage was reported (valuationUsd is then null), 'exact' when natively priced."
1471
+ },
1237
1472
  "remainingUsd": {
1238
1473
  "type": [
1239
1474
  "number",
@@ -1257,6 +1492,16 @@
1257
1492
  ],
1258
1493
  "default": "unknown",
1259
1494
  "description": "Where the snapshot came from: the decision record, live events, settings, or unknown."
1495
+ },
1496
+ "evidence": {
1497
+ "type": "string",
1498
+ "enum": [
1499
+ "complete",
1500
+ "incomplete",
1501
+ "unavailable"
1502
+ ],
1503
+ "description": "Integrity of the canonical events this spend fallback read: 'incomplete' when malformed/non-object event lines were skipped, 'unavailable' when the events file was unreadable, else 'complete'. A non-complete value means the projected spend may disagree with disk truth.",
1504
+ "default": "complete"
1260
1505
  }
1261
1506
  },
1262
1507
  "additionalProperties": false,
@@ -1279,9 +1524,7 @@
1279
1524
  "winner": {
1280
1525
  "anyOf": [
1281
1526
  {
1282
- "type": "string",
1283
- "minLength": 1,
1284
- "description": "Non-empty identifier string."
1527
+ "$ref": "#/definitions/ControlRunDetail/properties/summary/properties/routingRationale/anyOf/0/properties/order/items"
1285
1528
  },
1286
1529
  {
1287
1530
  "type": "null"
@@ -1305,6 +1548,84 @@
1305
1548
  "default": {},
1306
1549
  "description": "Per-candidate reasons the others lost, keyed by candidate id."
1307
1550
  },
1551
+ "ranking_policy_version": {
1552
+ "type": "integer",
1553
+ "exclusiveMinimum": 0,
1554
+ "default": 1,
1555
+ "description": "Version of the ranking axis registry the scorecard was produced under."
1556
+ },
1557
+ "score_axes": {
1558
+ "type": "array",
1559
+ "items": {
1560
+ "type": "string"
1561
+ },
1562
+ "default": [],
1563
+ "description": "Every compared ranking axis key, in precedence (best-first) order."
1564
+ },
1565
+ "ranking_scorecard": {
1566
+ "type": "array",
1567
+ "items": {
1568
+ "type": "object",
1569
+ "properties": {
1570
+ "attempt_id": {
1571
+ "type": "string",
1572
+ "minLength": 1,
1573
+ "description": "Candidate attempt id (stable key; labels may localize)."
1574
+ },
1575
+ "label": {
1576
+ "type": "string",
1577
+ "description": "Anonymized candidate label shown to the arbiter."
1578
+ },
1579
+ "axes": {
1580
+ "type": "object",
1581
+ "additionalProperties": {
1582
+ "type": "string"
1583
+ },
1584
+ "description": "Formatted value for every ranking axis, keyed by axis key."
1585
+ }
1586
+ },
1587
+ "required": [
1588
+ "attempt_id",
1589
+ "label",
1590
+ "axes"
1591
+ ],
1592
+ "additionalProperties": false
1593
+ },
1594
+ "default": [],
1595
+ "description": "Per-candidate full ranking scorecard, in final ranking order."
1596
+ },
1597
+ "decisive_axis": {
1598
+ "anyOf": [
1599
+ {
1600
+ "type": "object",
1601
+ "properties": {
1602
+ "key": {
1603
+ "type": "string",
1604
+ "description": "The first ranking axis that separated winner from runner-up."
1605
+ },
1606
+ "winner_value": {
1607
+ "type": "string",
1608
+ "description": "The winner's formatted value on the decisive axis."
1609
+ },
1610
+ "runner_up_value": {
1611
+ "type": "string",
1612
+ "description": "The runner-up's formatted value on the decisive axis."
1613
+ }
1614
+ },
1615
+ "required": [
1616
+ "key",
1617
+ "winner_value",
1618
+ "runner_up_value"
1619
+ ],
1620
+ "additionalProperties": false
1621
+ },
1622
+ {
1623
+ "type": "null"
1624
+ }
1625
+ ],
1626
+ "default": null,
1627
+ "description": "The axis that actually decided the winner vs the runner-up; null on an exact tie (route order decided, disclosed in final_checks)."
1628
+ },
1308
1629
  "accepted_risks": {
1309
1630
  "type": "array",
1310
1631
  "items": {
@@ -1344,12 +1665,30 @@
1344
1665
  "type": "boolean",
1345
1666
  "default": false,
1346
1667
  "description": "True when any of the spend is token-derived rather than natively reported."
1668
+ },
1669
+ "cash_usd": {
1670
+ "type": [
1671
+ "number",
1672
+ "null"
1673
+ ],
1674
+ "default": null,
1675
+ "description": "Settled cash spend in USD (0 on native-subscription routes); null when unknown."
1676
+ },
1677
+ "valuation_usd": {
1678
+ "type": [
1679
+ "number",
1680
+ "null"
1681
+ ],
1682
+ "default": null,
1683
+ "description": "Settled subscription-equivalent valuation in USD (includes the reviewer panel); null when unknown."
1347
1684
  }
1348
1685
  },
1349
1686
  "additionalProperties": false,
1350
1687
  "default": {
1351
1688
  "spend_usd": null,
1352
- "estimated": false
1689
+ "estimated": false,
1690
+ "cash_usd": null,
1691
+ "valuation_usd": null
1353
1692
  },
1354
1693
  "description": "Settled spend for the run; estimates are disclosed, never presented as exact."
1355
1694
  },
@@ -1535,7 +1874,7 @@
1535
1874
  "description": "Task the work product came from."
1536
1875
  },
1537
1876
  "producer_attempt_id": {
1538
- "$ref": "#/definitions/ControlRunDetail/properties/decision/anyOf/0/properties/winner/anyOf/0",
1877
+ "$ref": "#/definitions/ControlRunDetail/properties/summary/properties/routingRationale/anyOf/0/properties/order/items",
1539
1878
  "description": "Attempt that produced it, when known."
1540
1879
  },
1541
1880
  "evidence_dir": {
@@ -1855,7 +2194,7 @@
1855
2194
  "linked_acceptance_criteria": {
1856
2195
  "type": "array",
1857
2196
  "items": {
1858
- "$ref": "#/definitions/ControlRunDetail/properties/decision/anyOf/0/properties/winner/anyOf/0"
2197
+ "$ref": "#/definitions/ControlRunDetail/properties/summary/properties/routingRationale/anyOf/0/properties/order/items"
1859
2198
  },
1860
2199
  "default": [],
1861
2200
  "description": "Ids of acceptance criteria this finding relates to."
@@ -2272,6 +2611,21 @@
2272
2611
  ],
2273
2612
  "default": null,
2274
2613
  "description": "Diff statistics of the candidate's patch; null when there is no patch."
2614
+ },
2615
+ "rankingAxes": {
2616
+ "anyOf": [
2617
+ {
2618
+ "type": "object",
2619
+ "additionalProperties": {
2620
+ "type": "string"
2621
+ }
2622
+ },
2623
+ {
2624
+ "type": "null"
2625
+ }
2626
+ ],
2627
+ "default": null,
2628
+ "description": "This candidate's ranking-scorecard axis values (from decision.ranking_scorecard); null when no arbitration ran."
2275
2629
  }
2276
2630
  },
2277
2631
  "required": [
@@ -2321,6 +2675,11 @@
2321
2675
  },
2322
2676
  "default": [],
2323
2677
  "description": "Plan items, last-wins."
2678
+ },
2679
+ "evidence": {
2680
+ "$ref": "#/definitions/ControlRunDetail/properties/budget/properties/evidence",
2681
+ "default": "complete",
2682
+ "description": "Integrity of the canonical events this checklist was projected from: 'incomplete'/'unavailable' warns that a plan.progress event may have been lost to a malformed or unreadable events file, so the checklist may be stale or empty; 'complete' otherwise."
2324
2683
  }
2325
2684
  },
2326
2685
  "additionalProperties": false
@@ -2330,7 +2689,7 @@
2330
2689
  }
2331
2690
  ],
2332
2691
  "default": null,
2333
- "description": "Live plan checklist from the last plan.progress event; null when the run never emitted one."
2692
+ "description": "Live plan checklist from the last plan.progress event; null when the run never emitted one AND its canonical events were fully readable. Non-null with empty items + non-complete evidence discloses that a plan event may have been dropped."
2334
2693
  },
2335
2694
  "failure": {
2336
2695
  "anyOf": [
@@ -2343,6 +2702,37 @@
2343
2702
  ],
2344
2703
  "description": "Typed failure info; null unless the run failed.",
2345
2704
  "default": null
2705
+ },
2706
+ "requiredActions": {
2707
+ "type": "array",
2708
+ "items": {
2709
+ "type": "object",
2710
+ "properties": {
2711
+ "id": {
2712
+ "type": "string",
2713
+ "enum": [
2714
+ "provide_required_input",
2715
+ "complete_incomplete_work",
2716
+ "resolve_review_block",
2717
+ "fix_failed_checks",
2718
+ "record_operator_decision"
2719
+ ],
2720
+ "description": "Stable machine id for a required operator action on a blocked terminal run."
2721
+ },
2722
+ "detail": {
2723
+ "type": "string",
2724
+ "description": "Human-readable guidance for this action (English-only, INV-141)."
2725
+ }
2726
+ },
2727
+ "required": [
2728
+ "id",
2729
+ "detail"
2730
+ ],
2731
+ "additionalProperties": false,
2732
+ "description": "One typed required operator action derived from a run's terminal outcome facts."
2733
+ },
2734
+ "default": [],
2735
+ "description": "Stable-id required operator actions for a succeeded-but-blocked run (GH #29); empty for clean/decided/failed runs."
2346
2736
  }
2347
2737
  },
2348
2738
  "required": [