devcontour-harness 0.0.0-stage → 0.1.0-alpha.6

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 (390) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -2
  3. package/docs/architecture.md +473 -0
  4. package/docs/compatibility-versions.md +56 -0
  5. package/docs/compatibility.md +192 -0
  6. package/docs/connectors.md +323 -0
  7. package/docs/contracts.md +603 -0
  8. package/docs/integrations/hindsight.md +148 -0
  9. package/docs/quickstart.md +182 -0
  10. package/docs/release-notes/0.1.0-alpha.6.md +238 -0
  11. package/docs/review-probes.md +120 -0
  12. package/docs/review-protocol.md +251 -0
  13. package/docs/toolchains.md +167 -0
  14. package/docs/turbo-starter.md +269 -0
  15. package/docs/upgrade.md +202 -0
  16. package/examples/README.md +27 -0
  17. package/examples/external-connector/README.md +19 -0
  18. package/examples/external-connector/connector.mjs +55 -0
  19. package/examples/files-only/README.md +28 -0
  20. package/examples/files-only/context/norms/rules.md +4 -0
  21. package/examples/files-only/graph.json +23 -0
  22. package/examples/files-only/policy.json +30 -0
  23. package/examples/one-vendor/README.md +19 -0
  24. package/examples/one-vendor/policy.json +27 -0
  25. package/examples/single-task/README.md +18 -0
  26. package/examples/single-task/graph.json +27 -0
  27. package/examples/single-task/policy-same-vendor.json +55 -0
  28. package/examples/single-task/policy.json +52 -0
  29. package/examples/single-task/src/.gitkeep +0 -0
  30. package/examples/single-task/test/run.js +19 -0
  31. package/examples/toolchains/README.md +32 -0
  32. package/examples/toolchains/go/bad/label/label.go +9 -0
  33. package/examples/toolchains/go/good/label/label.go +9 -0
  34. package/examples/toolchains/go/policy.json +79 -0
  35. package/examples/toolchains/go/repo/REQUIREMENTS.md +9 -0
  36. package/examples/toolchains/go/repo/_gitignore +1 -0
  37. package/examples/toolchains/go/repo/go.mod +5 -0
  38. package/examples/toolchains/go/repo/go.sum +2 -0
  39. package/examples/toolchains/go/repo/label/label.go +9 -0
  40. package/examples/toolchains/go/repo/label/label_test.go +27 -0
  41. package/examples/toolchains/go/repo/label/version.go +9 -0
  42. package/examples/toolchains/go/task.json +25 -0
  43. package/examples/toolchains/mixed-go/bad/backend/label/label.go +9 -0
  44. package/examples/toolchains/mixed-go/bad/frontend/src/label.js +4 -0
  45. package/examples/toolchains/mixed-go/good/backend/label/label.go +9 -0
  46. package/examples/toolchains/mixed-go/good/frontend/src/label.js +4 -0
  47. package/examples/toolchains/mixed-go/policy.json +126 -0
  48. package/examples/toolchains/mixed-go/repo/REQUIREMENTS.md +9 -0
  49. package/examples/toolchains/mixed-go/repo/_gitignore +6 -0
  50. package/examples/toolchains/mixed-go/repo/backend/go.mod +3 -0
  51. package/examples/toolchains/mixed-go/repo/backend/label/label.go +9 -0
  52. package/examples/toolchains/mixed-go/repo/backend/label/label_test.go +30 -0
  53. package/examples/toolchains/mixed-go/repo/contract/check.mjs +17 -0
  54. package/examples/toolchains/mixed-go/repo/contract/label.json +9 -0
  55. package/examples/toolchains/mixed-go/repo/frontend/package.json +15 -0
  56. package/examples/toolchains/mixed-go/repo/frontend/pnpm-lock.yaml +22 -0
  57. package/examples/toolchains/mixed-go/repo/frontend/src/label.js +4 -0
  58. package/examples/toolchains/mixed-go/repo/frontend/test/label.test.js +11 -0
  59. package/examples/toolchains/mixed-go/task.json +25 -0
  60. package/examples/toolchains/mixed-python/bad/backend/src/fx_backend/__init__.py +6 -0
  61. package/examples/toolchains/mixed-python/bad/frontend/src/label.js +4 -0
  62. package/examples/toolchains/mixed-python/good/backend/src/fx_backend/__init__.py +6 -0
  63. package/examples/toolchains/mixed-python/good/frontend/src/label.js +4 -0
  64. package/examples/toolchains/mixed-python/policy.json +121 -0
  65. package/examples/toolchains/mixed-python/repo/REQUIREMENTS.md +9 -0
  66. package/examples/toolchains/mixed-python/repo/_gitignore +6 -0
  67. package/examples/toolchains/mixed-python/repo/backend/.python-version +1 -0
  68. package/examples/toolchains/mixed-python/repo/backend/pyproject.toml +19 -0
  69. package/examples/toolchains/mixed-python/repo/backend/src/fx_backend/__init__.py +6 -0
  70. package/examples/toolchains/mixed-python/repo/backend/tests/test_label.py +11 -0
  71. package/examples/toolchains/mixed-python/repo/backend/uv.lock +108 -0
  72. package/examples/toolchains/mixed-python/repo/contract/check.mjs +17 -0
  73. package/examples/toolchains/mixed-python/repo/contract/label.json +9 -0
  74. package/examples/toolchains/mixed-python/repo/frontend/package.json +15 -0
  75. package/examples/toolchains/mixed-python/repo/frontend/pnpm-lock.yaml +22 -0
  76. package/examples/toolchains/mixed-python/repo/frontend/src/label.js +4 -0
  77. package/examples/toolchains/mixed-python/repo/frontend/test/label.test.js +11 -0
  78. package/examples/toolchains/mixed-python/task.json +25 -0
  79. package/examples/toolchains/npm/bad/src/label.js +4 -0
  80. package/examples/toolchains/npm/good/src/label.js +4 -0
  81. package/examples/toolchains/npm/policy.json +82 -0
  82. package/examples/toolchains/npm/repo/REQUIREMENTS.md +9 -0
  83. package/examples/toolchains/npm/repo/_gitignore +4 -0
  84. package/examples/toolchains/npm/repo/package-lock.json +22 -0
  85. package/examples/toolchains/npm/repo/package.json +13 -0
  86. package/examples/toolchains/npm/repo/src/label.js +4 -0
  87. package/examples/toolchains/npm/repo/test/label.test.js +13 -0
  88. package/examples/toolchains/npm/task.json +25 -0
  89. package/examples/toolchains/pnpm/bad/packages/label/src/label.js +4 -0
  90. package/examples/toolchains/pnpm/good/packages/label/src/label.js +4 -0
  91. package/examples/toolchains/pnpm/policy.json +85 -0
  92. package/examples/toolchains/pnpm/repo/REQUIREMENTS.md +9 -0
  93. package/examples/toolchains/pnpm/repo/_gitignore +4 -0
  94. package/examples/toolchains/pnpm/repo/package.json +10 -0
  95. package/examples/toolchains/pnpm/repo/packages/checker/check.mjs +5 -0
  96. package/examples/toolchains/pnpm/repo/packages/checker/package.json +9 -0
  97. package/examples/toolchains/pnpm/repo/packages/label/package.json +14 -0
  98. package/examples/toolchains/pnpm/repo/packages/label/src/label.js +4 -0
  99. package/examples/toolchains/pnpm/repo/packages/label/test/label.test.js +13 -0
  100. package/examples/toolchains/pnpm/repo/pnpm-lock.yaml +29 -0
  101. package/examples/toolchains/pnpm/repo/pnpm-workspace.yaml +2 -0
  102. package/examples/toolchains/pnpm/task.json +25 -0
  103. package/examples/toolchains/python/bad/src/fx_label/__init__.py +6 -0
  104. package/examples/toolchains/python/good/src/fx_label/__init__.py +6 -0
  105. package/examples/toolchains/python/policy.json +80 -0
  106. package/examples/toolchains/python/repo/.python-version +1 -0
  107. package/examples/toolchains/python/repo/REQUIREMENTS.md +9 -0
  108. package/examples/toolchains/python/repo/_gitignore +5 -0
  109. package/examples/toolchains/python/repo/pyproject.toml +19 -0
  110. package/examples/toolchains/python/repo/src/fx_label/__init__.py +6 -0
  111. package/examples/toolchains/python/repo/tests/test_label.py +13 -0
  112. package/examples/toolchains/python/repo/uv.lock +108 -0
  113. package/examples/toolchains/python/task.json +25 -0
  114. package/examples/toolchains/turbo/bad/packages/label/src/label.js +4 -0
  115. package/examples/toolchains/turbo/good/packages/label/src/label.js +4 -0
  116. package/examples/toolchains/turbo/policy.json +110 -0
  117. package/examples/toolchains/turbo/repo/REQUIREMENTS.md +9 -0
  118. package/examples/toolchains/turbo/repo/_gitignore +4 -0
  119. package/examples/toolchains/turbo/repo/package.json +13 -0
  120. package/examples/toolchains/turbo/repo/packages/checker/check.mjs +5 -0
  121. package/examples/toolchains/turbo/repo/packages/checker/package.json +9 -0
  122. package/examples/toolchains/turbo/repo/packages/label/package.json +14 -0
  123. package/examples/toolchains/turbo/repo/packages/label/src/label.js +4 -0
  124. package/examples/toolchains/turbo/repo/packages/label/test/label.test.js +13 -0
  125. package/examples/toolchains/turbo/repo/pnpm-lock.yaml +94 -0
  126. package/examples/toolchains/turbo/repo/pnpm-workspace.yaml +2 -0
  127. package/examples/toolchains/turbo/repo/turbo.json +7 -0
  128. package/examples/toolchains/turbo/task.json +25 -0
  129. package/examples/turbo-starter/README.md +16 -0
  130. package/examples/turbo-starter/changes/issued-at-consumer-only.patch +12 -0
  131. package/examples/turbo-starter/changes/issued-at.patch +130 -0
  132. package/examples/turbo-starter/cleanup.mjs +58 -0
  133. package/examples/turbo-starter/graph.json +32 -0
  134. package/examples/turbo-starter/harness/acceptance/db-isolation.test.mjs +97 -0
  135. package/examples/turbo-starter/harness/acceptance/env-probe.test.mjs +75 -0
  136. package/examples/turbo-starter/harness/acceptance/generation.test.mjs +54 -0
  137. package/examples/turbo-starter/harness/acceptance/issued-at.test.mjs +43 -0
  138. package/examples/turbo-starter/harness/acceptance/lifecycle-probe.test.mjs +47 -0
  139. package/examples/turbo-starter/harness/compose-bridge.mjs +593 -0
  140. package/examples/turbo-starter/harness/compose.acceptance.yml +23 -0
  141. package/examples/turbo-starter/harness/env/backend.env.template +7 -0
  142. package/examples/turbo-starter/harness/env/compose.env.template +6 -0
  143. package/examples/turbo-starter/policy.json +109 -0
  144. package/examples/turbo-starter/policy.lifecycle.json +114 -0
  145. package/examples/turbo-starter/setup.mjs +352 -0
  146. package/examples/two-vendors/policy.json +30 -0
  147. package/lib/agents/cli-adapter.d.ts +48 -0
  148. package/lib/agents/cli-adapter.js +386 -0
  149. package/lib/agents/inspect.d.ts +6 -0
  150. package/lib/agents/inspect.js +46 -0
  151. package/lib/agents/probe-server.d.ts +2 -0
  152. package/lib/agents/probe-server.js +13 -0
  153. package/lib/agents/review-probe.d.ts +295 -0
  154. package/lib/agents/review-probe.js +872 -0
  155. package/lib/agents/runtime-events.d.ts +11 -0
  156. package/lib/agents/runtime-events.js +21 -0
  157. package/lib/agents/schemas.d.ts +217 -0
  158. package/lib/agents/schemas.js +124 -0
  159. package/lib/agents/usage.d.ts +8 -0
  160. package/lib/agents/usage.js +83 -0
  161. package/lib/cli.d.ts +2 -0
  162. package/lib/cli.js +491 -0
  163. package/lib/connectors/files.d.ts +108 -0
  164. package/lib/connectors/files.js +133 -0
  165. package/lib/contracts/checks.d.ts +307 -0
  166. package/lib/contracts/checks.js +181 -0
  167. package/lib/contracts/cli.d.ts +3895 -0
  168. package/lib/contracts/cli.js +664 -0
  169. package/lib/contracts/context.d.ts +135 -0
  170. package/lib/contracts/context.js +129 -0
  171. package/lib/contracts/digest.d.ts +9 -0
  172. package/lib/contracts/digest.js +22 -0
  173. package/lib/contracts/errors.d.ts +81 -0
  174. package/lib/contracts/errors.js +70 -0
  175. package/lib/contracts/events.d.ts +827 -0
  176. package/lib/contracts/events.js +258 -0
  177. package/lib/contracts/execution.d.ts +3216 -0
  178. package/lib/contracts/execution.js +872 -0
  179. package/lib/contracts/failure.d.ts +67 -0
  180. package/lib/contracts/failure.js +127 -0
  181. package/lib/contracts/index.d.ts +18 -0
  182. package/lib/contracts/index.js +18 -0
  183. package/lib/contracts/policy.d.ts +1080 -0
  184. package/lib/contracts/policy.js +544 -0
  185. package/lib/contracts/ports.d.ts +417 -0
  186. package/lib/contracts/ports.js +1 -0
  187. package/lib/contracts/primitives.d.ts +63 -0
  188. package/lib/contracts/primitives.js +73 -0
  189. package/lib/contracts/profiles.d.ts +336 -0
  190. package/lib/contracts/profiles.js +109 -0
  191. package/lib/contracts/published.d.ts +3237 -0
  192. package/lib/contracts/published.js +34 -0
  193. package/lib/contracts/result.d.ts +1280 -0
  194. package/lib/contracts/result.js +311 -0
  195. package/lib/contracts/review.d.ts +441 -0
  196. package/lib/contracts/review.js +477 -0
  197. package/lib/contracts/toolchain.d.ts +96 -0
  198. package/lib/contracts/toolchain.js +89 -0
  199. package/lib/contracts/version.d.ts +17 -0
  200. package/lib/contracts/version.js +17 -0
  201. package/lib/contracts/work.d.ts +173 -0
  202. package/lib/contracts/work.js +178 -0
  203. package/lib/control/base-move.d.ts +44 -0
  204. package/lib/control/base-move.js +90 -0
  205. package/lib/control/doctor.d.ts +50 -0
  206. package/lib/control/doctor.js +113 -0
  207. package/lib/control/harness.d.ts +1125 -0
  208. package/lib/control/harness.js +741 -0
  209. package/lib/control/provenance.d.ts +17 -0
  210. package/lib/control/provenance.js +25 -0
  211. package/lib/control/recovery.d.ts +237 -0
  212. package/lib/control/recovery.js +236 -0
  213. package/lib/control/review.d.ts +62 -0
  214. package/lib/control/review.js +178 -0
  215. package/lib/control/workflow.d.ts +247 -0
  216. package/lib/control/workflow.js +259 -0
  217. package/lib/engine/budget.d.ts +345 -0
  218. package/lib/engine/budget.js +278 -0
  219. package/lib/engine/classify.d.ts +8 -0
  220. package/lib/engine/classify.js +32 -0
  221. package/lib/engine/engine.d.ts +1527 -0
  222. package/lib/engine/engine.js +2259 -0
  223. package/lib/engine/failure.d.ts +1 -0
  224. package/lib/engine/failure.js +3 -0
  225. package/lib/engine/joint-runner.d.ts +257 -0
  226. package/lib/engine/joint-runner.js +254 -0
  227. package/lib/engine/measured.d.ts +15 -0
  228. package/lib/engine/measured.js +82 -0
  229. package/lib/engine/prompt.d.ts +66 -0
  230. package/lib/engine/prompt.js +131 -0
  231. package/lib/engine/property-recovery.d.ts +50 -0
  232. package/lib/engine/property-recovery.js +171 -0
  233. package/lib/engine/repair.d.ts +33 -0
  234. package/lib/engine/repair.js +82 -0
  235. package/lib/engine/result.d.ts +9 -0
  236. package/lib/engine/result.js +218 -0
  237. package/lib/engine/reuse.d.ts +80 -0
  238. package/lib/engine/reuse.js +102 -0
  239. package/lib/engine/runner.d.ts +360 -0
  240. package/lib/engine/runner.js +1836 -0
  241. package/lib/engine/standalone.d.ts +6 -0
  242. package/lib/engine/standalone.js +48 -0
  243. package/lib/engine/usage.d.ts +87 -0
  244. package/lib/engine/usage.js +165 -0
  245. package/lib/environment/isolation.d.ts +110 -0
  246. package/lib/environment/isolation.js +238 -0
  247. package/lib/environment/lifecycle.d.ts +40 -0
  248. package/lib/environment/lifecycle.js +197 -0
  249. package/lib/environment/live-calls.d.ts +14 -0
  250. package/lib/environment/live-calls.js +73 -0
  251. package/lib/environment/os-tools.d.ts +16 -0
  252. package/lib/environment/os-tools.js +35 -0
  253. package/lib/environment/process.d.ts +32 -0
  254. package/lib/environment/process.js +369 -0
  255. package/lib/environment/redaction.d.ts +22 -0
  256. package/lib/environment/redaction.js +102 -0
  257. package/lib/environment/resources.d.ts +31 -0
  258. package/lib/environment/resources.js +120 -0
  259. package/lib/index.d.ts +65 -0
  260. package/lib/index.js +67 -0
  261. package/lib/integrations/connector/commands.d.ts +358 -0
  262. package/lib/integrations/connector/commands.js +428 -0
  263. package/lib/integrations/connector/config.d.ts +215 -0
  264. package/lib/integrations/connector/config.js +214 -0
  265. package/lib/integrations/connector/delivery.d.ts +107 -0
  266. package/lib/integrations/connector/delivery.js +591 -0
  267. package/lib/integrations/connector/fake.d.ts +291 -0
  268. package/lib/integrations/connector/fake.js +786 -0
  269. package/lib/integrations/connector/history.d.ts +124 -0
  270. package/lib/integrations/connector/history.js +497 -0
  271. package/lib/integrations/connector/index.d.ts +16 -0
  272. package/lib/integrations/connector/index.js +16 -0
  273. package/lib/integrations/connector/redact.d.ts +19 -0
  274. package/lib/integrations/connector/redact.js +91 -0
  275. package/lib/integrations/connector/registry.d.ts +15 -0
  276. package/lib/integrations/connector/registry.js +43 -0
  277. package/lib/integrations/connector/snapshot.d.ts +131 -0
  278. package/lib/integrations/connector/snapshot.js +422 -0
  279. package/lib/integrations/connector/source.d.ts +37 -0
  280. package/lib/integrations/connector/source.js +73 -0
  281. package/lib/integrations/connector/steps.d.ts +71 -0
  282. package/lib/integrations/connector/steps.js +188 -0
  283. package/lib/integrations/connector/store.d.ts +140 -0
  284. package/lib/integrations/connector/store.js +277 -0
  285. package/lib/integrations/connector/summary.d.ts +38 -0
  286. package/lib/integrations/connector/summary.js +59 -0
  287. package/lib/integrations/connector/testing-worker.d.ts +1 -0
  288. package/lib/integrations/connector/testing-worker.js +81 -0
  289. package/lib/integrations/connector/testing.d.ts +205 -0
  290. package/lib/integrations/connector/testing.js +1615 -0
  291. package/lib/integrations/connector/transport.d.ts +240 -0
  292. package/lib/integrations/connector/transport.js +28 -0
  293. package/lib/integrations/memory/context.d.ts +120 -0
  294. package/lib/integrations/memory/context.js +239 -0
  295. package/lib/integrations/memory/index.d.ts +8 -0
  296. package/lib/integrations/memory/index.js +8 -0
  297. package/lib/integrations/memory/provider.d.ts +79 -0
  298. package/lib/integrations/memory/provider.js +22 -0
  299. package/lib/integrations/memory/sink.d.ts +56 -0
  300. package/lib/integrations/memory/sink.js +116 -0
  301. package/lib/integrations/memory/testing.d.ts +44 -0
  302. package/lib/integrations/memory/testing.js +61 -0
  303. package/lib/integrations/relay-v1/index.d.ts +122 -0
  304. package/lib/integrations/relay-v1/index.js +860 -0
  305. package/lib/integrations/relay-v2/index.d.ts +145 -0
  306. package/lib/integrations/relay-v2/index.js +752 -0
  307. package/lib/integrations/relay-v2/process.d.ts +32 -0
  308. package/lib/integrations/relay-v2/process.js +112 -0
  309. package/lib/integrations/relay-v2/protocol.d.ts +172 -0
  310. package/lib/integrations/relay-v2/protocol.js +142 -0
  311. package/lib/package.d.ts +2 -0
  312. package/lib/package.js +3 -0
  313. package/lib/profiles/resolve.d.ts +190 -0
  314. package/lib/profiles/resolve.js +273 -0
  315. package/lib/storage/document.d.ts +1234 -0
  316. package/lib/storage/document.js +80 -0
  317. package/lib/storage/sqlite.d.ts +35 -0
  318. package/lib/storage/sqlite.js +260 -0
  319. package/lib/testing/index.d.ts +5 -0
  320. package/lib/testing/index.js +5 -0
  321. package/lib/testing/store-contract.d.ts +8 -0
  322. package/lib/testing/store-contract.js +167 -0
  323. package/lib/toolchains/index.d.ts +9 -0
  324. package/lib/toolchains/index.js +9 -0
  325. package/lib/toolchains/inspect.d.ts +105 -0
  326. package/lib/toolchains/inspect.js +831 -0
  327. package/lib/toolchains/manifests.d.ts +67 -0
  328. package/lib/toolchains/manifests.js +238 -0
  329. package/lib/toolchains/probe.d.ts +28 -0
  330. package/lib/toolchains/probe.js +54 -0
  331. package/lib/toolchains/recipes.d.ts +33 -0
  332. package/lib/toolchains/recipes.js +51 -0
  333. package/lib/validate.d.ts +36 -0
  334. package/lib/validate.js +175 -0
  335. package/lib/verification/acceptance.d.ts +284 -0
  336. package/lib/verification/acceptance.js +670 -0
  337. package/lib/verification/checks.d.ts +72 -0
  338. package/lib/verification/checks.js +190 -0
  339. package/lib/verification/confirm.d.ts +125 -0
  340. package/lib/verification/confirm.js +411 -0
  341. package/lib/verification/corpus.d.ts +1303 -0
  342. package/lib/verification/corpus.js +744 -0
  343. package/lib/verification/dependencies.d.ts +66 -0
  344. package/lib/verification/dependencies.js +144 -0
  345. package/lib/verification/gates.d.ts +160 -0
  346. package/lib/verification/gates.js +600 -0
  347. package/lib/verification/joint.d.ts +63 -0
  348. package/lib/verification/joint.js +121 -0
  349. package/lib/verification/proof.d.ts +54 -0
  350. package/lib/verification/proof.js +96 -0
  351. package/lib/verification/property.d.ts +86 -0
  352. package/lib/verification/property.js +214 -0
  353. package/lib/verification/requirements.d.ts +25 -0
  354. package/lib/verification/requirements.js +69 -0
  355. package/lib/verification/self-check.d.ts +29 -0
  356. package/lib/verification/self-check.js +99 -0
  357. package/lib/verification/spike.d.ts +79 -0
  358. package/lib/verification/spike.js +124 -0
  359. package/package.json +100 -4
  360. package/profiles/expo-mobile.json +15 -0
  361. package/profiles/go-api.json +15 -0
  362. package/profiles/go-gotestsum.json +21 -0
  363. package/profiles/mobile-maestro.json +29 -0
  364. package/profiles/nest-api.json +26 -0
  365. package/profiles/next-product.json +72 -0
  366. package/profiles/node-checks.json +77 -0
  367. package/profiles/npm-ci.json +22 -0
  368. package/profiles/pnpm-frozen.json +24 -0
  369. package/profiles/python-api.json +32 -0
  370. package/profiles/python-uv.json +26 -0
  371. package/profiles/react-native.json +50 -0
  372. package/profiles/react-vite-admin.json +71 -0
  373. package/schemas/context-snapshot.schema.json +231 -0
  374. package/schemas/contract-document.schema.json +385 -0
  375. package/schemas/execution-document.schema.json +3695 -0
  376. package/schemas/execution-policy.schema.json +2196 -0
  377. package/schemas/joint-verification.schema.json +617 -0
  378. package/schemas/result-envelope.schema.json +1652 -0
  379. package/schemas/review-record.schema.json +177 -0
  380. package/schemas/run-event.schema.json +2458 -0
  381. package/schemas/run-result.schema.json +1570 -0
  382. package/schemas/stack-profile.schema.json +535 -0
  383. package/schemas/work-graph.schema.json +381 -0
  384. package/schemas/work-order.schema.json +256 -0
  385. package/skills/harness/SKILL.md +64 -0
  386. package/templates/AGENTS.md +13 -0
  387. package/templates/controller-mode/AGENTS.controller.md +58 -0
  388. package/templates/controller-mode/README.md +44 -0
  389. package/templates/graph.json +22 -0
  390. package/templates/policy.json +28 -0
@@ -0,0 +1,2458 @@
1
+ {
2
+ "$id": "devcontour-harness/v1alpha1/run-event.schema.json",
3
+ "title": "run-event",
4
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
5
+ "oneOf": [
6
+ {
7
+ "type": "object",
8
+ "properties": {
9
+ "apiVersion": {
10
+ "type": "string",
11
+ "const": "devcontour-harness/v1alpha1"
12
+ },
13
+ "seq": {
14
+ "type": "integer",
15
+ "exclusiveMinimum": 0,
16
+ "maximum": 9007199254740991
17
+ },
18
+ "at": {
19
+ "type": "string",
20
+ "format": "date-time",
21
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
22
+ },
23
+ "graphId": {
24
+ "type": "string",
25
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
26
+ },
27
+ "workId": {
28
+ "type": "string",
29
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
30
+ },
31
+ "runId": {
32
+ "type": "string",
33
+ "minLength": 1,
34
+ "maxLength": 200
35
+ },
36
+ "attempt": {
37
+ "type": "integer",
38
+ "exclusiveMinimum": 0,
39
+ "maximum": 9007199254740991
40
+ },
41
+ "type": {
42
+ "type": "string",
43
+ "const": "graph.registered"
44
+ },
45
+ "payload": {
46
+ "type": "object",
47
+ "properties": {
48
+ "digest": {
49
+ "type": "string",
50
+ "pattern": "^[a-f0-9]{64}$"
51
+ },
52
+ "orders": {
53
+ "type": "integer",
54
+ "exclusiveMinimum": 0,
55
+ "maximum": 9007199254740991
56
+ },
57
+ "source": {
58
+ "type": "object",
59
+ "properties": {
60
+ "connector": {
61
+ "type": "string",
62
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
63
+ },
64
+ "ref": {
65
+ "type": "string",
66
+ "minLength": 1,
67
+ "maxLength": 300
68
+ },
69
+ "revision": {
70
+ "type": "string",
71
+ "minLength": 1,
72
+ "maxLength": 200
73
+ }
74
+ },
75
+ "required": [
76
+ "connector",
77
+ "ref",
78
+ "revision"
79
+ ],
80
+ "additionalProperties": false
81
+ }
82
+ },
83
+ "required": [
84
+ "digest",
85
+ "orders",
86
+ "source"
87
+ ],
88
+ "additionalProperties": false
89
+ }
90
+ },
91
+ "required": [
92
+ "apiVersion",
93
+ "seq",
94
+ "at",
95
+ "type",
96
+ "payload"
97
+ ],
98
+ "additionalProperties": false
99
+ },
100
+ {
101
+ "type": "object",
102
+ "properties": {
103
+ "apiVersion": {
104
+ "type": "string",
105
+ "const": "devcontour-harness/v1alpha1"
106
+ },
107
+ "seq": {
108
+ "type": "integer",
109
+ "exclusiveMinimum": 0,
110
+ "maximum": 9007199254740991
111
+ },
112
+ "at": {
113
+ "type": "string",
114
+ "format": "date-time",
115
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
116
+ },
117
+ "graphId": {
118
+ "type": "string",
119
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
120
+ },
121
+ "workId": {
122
+ "type": "string",
123
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
124
+ },
125
+ "runId": {
126
+ "type": "string",
127
+ "minLength": 1,
128
+ "maxLength": 200
129
+ },
130
+ "attempt": {
131
+ "type": "integer",
132
+ "exclusiveMinimum": 0,
133
+ "maximum": 9007199254740991
134
+ },
135
+ "type": {
136
+ "type": "string",
137
+ "const": "graph.reviewed"
138
+ },
139
+ "payload": {
140
+ "type": "object",
141
+ "properties": {
142
+ "kind": {
143
+ "type": "string",
144
+ "enum": [
145
+ "plan",
146
+ "contract"
147
+ ]
148
+ },
149
+ "subject": {
150
+ "type": "string",
151
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
152
+ },
153
+ "digest": {
154
+ "type": "string",
155
+ "pattern": "^[a-f0-9]{64}$"
156
+ },
157
+ "round": {
158
+ "type": "integer",
159
+ "exclusiveMinimum": 0,
160
+ "maximum": 9007199254740991
161
+ },
162
+ "approved": {
163
+ "type": "boolean"
164
+ },
165
+ "open": {
166
+ "type": "integer",
167
+ "minimum": 0,
168
+ "maximum": 9007199254740991
169
+ }
170
+ },
171
+ "required": [
172
+ "kind",
173
+ "subject",
174
+ "digest",
175
+ "round",
176
+ "approved",
177
+ "open"
178
+ ],
179
+ "additionalProperties": false
180
+ }
181
+ },
182
+ "required": [
183
+ "apiVersion",
184
+ "seq",
185
+ "at",
186
+ "type",
187
+ "payload"
188
+ ],
189
+ "additionalProperties": false
190
+ },
191
+ {
192
+ "type": "object",
193
+ "properties": {
194
+ "apiVersion": {
195
+ "type": "string",
196
+ "const": "devcontour-harness/v1alpha1"
197
+ },
198
+ "seq": {
199
+ "type": "integer",
200
+ "exclusiveMinimum": 0,
201
+ "maximum": 9007199254740991
202
+ },
203
+ "at": {
204
+ "type": "string",
205
+ "format": "date-time",
206
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
207
+ },
208
+ "graphId": {
209
+ "type": "string",
210
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
211
+ },
212
+ "workId": {
213
+ "type": "string",
214
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
215
+ },
216
+ "runId": {
217
+ "type": "string",
218
+ "minLength": 1,
219
+ "maxLength": 200
220
+ },
221
+ "attempt": {
222
+ "type": "integer",
223
+ "exclusiveMinimum": 0,
224
+ "maximum": 9007199254740991
225
+ },
226
+ "type": {
227
+ "type": "string",
228
+ "const": "graph.approved"
229
+ },
230
+ "payload": {
231
+ "type": "object",
232
+ "properties": {
233
+ "digest": {
234
+ "type": "string",
235
+ "pattern": "^[a-f0-9]{64}$"
236
+ },
237
+ "actor": {
238
+ "type": "string",
239
+ "enum": [
240
+ "operator",
241
+ "agent"
242
+ ]
243
+ }
244
+ },
245
+ "required": [
246
+ "digest",
247
+ "actor"
248
+ ],
249
+ "additionalProperties": false
250
+ }
251
+ },
252
+ "required": [
253
+ "apiVersion",
254
+ "seq",
255
+ "at",
256
+ "type",
257
+ "payload"
258
+ ],
259
+ "additionalProperties": false
260
+ },
261
+ {
262
+ "type": "object",
263
+ "properties": {
264
+ "apiVersion": {
265
+ "type": "string",
266
+ "const": "devcontour-harness/v1alpha1"
267
+ },
268
+ "seq": {
269
+ "type": "integer",
270
+ "exclusiveMinimum": 0,
271
+ "maximum": 9007199254740991
272
+ },
273
+ "at": {
274
+ "type": "string",
275
+ "format": "date-time",
276
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
277
+ },
278
+ "graphId": {
279
+ "type": "string",
280
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
281
+ },
282
+ "workId": {
283
+ "type": "string",
284
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
285
+ },
286
+ "runId": {
287
+ "type": "string",
288
+ "minLength": 1,
289
+ "maxLength": 200
290
+ },
291
+ "attempt": {
292
+ "type": "integer",
293
+ "exclusiveMinimum": 0,
294
+ "maximum": 9007199254740991
295
+ },
296
+ "type": {
297
+ "type": "string",
298
+ "const": "work.ready"
299
+ },
300
+ "payload": {
301
+ "type": "object",
302
+ "properties": {
303
+ "orderDigest": {
304
+ "type": "string",
305
+ "pattern": "^[a-f0-9]{64}$"
306
+ }
307
+ },
308
+ "required": [
309
+ "orderDigest"
310
+ ],
311
+ "additionalProperties": false
312
+ }
313
+ },
314
+ "required": [
315
+ "apiVersion",
316
+ "seq",
317
+ "at",
318
+ "type",
319
+ "payload"
320
+ ],
321
+ "additionalProperties": false
322
+ },
323
+ {
324
+ "type": "object",
325
+ "properties": {
326
+ "apiVersion": {
327
+ "type": "string",
328
+ "const": "devcontour-harness/v1alpha1"
329
+ },
330
+ "seq": {
331
+ "type": "integer",
332
+ "exclusiveMinimum": 0,
333
+ "maximum": 9007199254740991
334
+ },
335
+ "at": {
336
+ "type": "string",
337
+ "format": "date-time",
338
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
339
+ },
340
+ "graphId": {
341
+ "type": "string",
342
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
343
+ },
344
+ "workId": {
345
+ "type": "string",
346
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
347
+ },
348
+ "runId": {
349
+ "type": "string",
350
+ "minLength": 1,
351
+ "maxLength": 200
352
+ },
353
+ "attempt": {
354
+ "type": "integer",
355
+ "exclusiveMinimum": 0,
356
+ "maximum": 9007199254740991
357
+ },
358
+ "type": {
359
+ "type": "string",
360
+ "const": "work.held"
361
+ },
362
+ "payload": {
363
+ "type": "object",
364
+ "properties": {
365
+ "operation": {
366
+ "type": "string",
367
+ "minLength": 1,
368
+ "maxLength": 200
369
+ },
370
+ "reason": {
371
+ "type": "string",
372
+ "maxLength": 4000
373
+ },
374
+ "released": {
375
+ "type": "boolean"
376
+ }
377
+ },
378
+ "required": [
379
+ "operation",
380
+ "reason",
381
+ "released"
382
+ ],
383
+ "additionalProperties": false
384
+ }
385
+ },
386
+ "required": [
387
+ "apiVersion",
388
+ "seq",
389
+ "at",
390
+ "type",
391
+ "payload"
392
+ ],
393
+ "additionalProperties": false
394
+ },
395
+ {
396
+ "type": "object",
397
+ "properties": {
398
+ "apiVersion": {
399
+ "type": "string",
400
+ "const": "devcontour-harness/v1alpha1"
401
+ },
402
+ "seq": {
403
+ "type": "integer",
404
+ "exclusiveMinimum": 0,
405
+ "maximum": 9007199254740991
406
+ },
407
+ "at": {
408
+ "type": "string",
409
+ "format": "date-time",
410
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
411
+ },
412
+ "graphId": {
413
+ "type": "string",
414
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
415
+ },
416
+ "workId": {
417
+ "type": "string",
418
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
419
+ },
420
+ "runId": {
421
+ "type": "string",
422
+ "minLength": 1,
423
+ "maxLength": 200
424
+ },
425
+ "attempt": {
426
+ "type": "integer",
427
+ "exclusiveMinimum": 0,
428
+ "maximum": 9007199254740991
429
+ },
430
+ "type": {
431
+ "type": "string",
432
+ "const": "attempt.claimed"
433
+ },
434
+ "payload": {
435
+ "type": "object",
436
+ "properties": {
437
+ "owner": {
438
+ "type": "string",
439
+ "minLength": 1,
440
+ "maxLength": 300
441
+ },
442
+ "runtime": {
443
+ "type": "string",
444
+ "enum": [
445
+ "codex",
446
+ "claude",
447
+ "fixture"
448
+ ]
449
+ },
450
+ "reviewer": {
451
+ "type": "string",
452
+ "enum": [
453
+ "codex",
454
+ "claude",
455
+ "fixture"
456
+ ]
457
+ },
458
+ "policyDigest": {
459
+ "type": "string",
460
+ "pattern": "^[a-f0-9]{64}$"
461
+ },
462
+ "engineVersion": {
463
+ "type": "string",
464
+ "minLength": 1
465
+ }
466
+ },
467
+ "required": [
468
+ "owner",
469
+ "runtime",
470
+ "reviewer",
471
+ "policyDigest",
472
+ "engineVersion"
473
+ ],
474
+ "additionalProperties": false
475
+ }
476
+ },
477
+ "required": [
478
+ "apiVersion",
479
+ "seq",
480
+ "at",
481
+ "type",
482
+ "payload"
483
+ ],
484
+ "additionalProperties": false
485
+ },
486
+ {
487
+ "type": "object",
488
+ "properties": {
489
+ "apiVersion": {
490
+ "type": "string",
491
+ "const": "devcontour-harness/v1alpha1"
492
+ },
493
+ "seq": {
494
+ "type": "integer",
495
+ "exclusiveMinimum": 0,
496
+ "maximum": 9007199254740991
497
+ },
498
+ "at": {
499
+ "type": "string",
500
+ "format": "date-time",
501
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
502
+ },
503
+ "graphId": {
504
+ "type": "string",
505
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
506
+ },
507
+ "workId": {
508
+ "type": "string",
509
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
510
+ },
511
+ "runId": {
512
+ "type": "string",
513
+ "minLength": 1,
514
+ "maxLength": 200
515
+ },
516
+ "attempt": {
517
+ "type": "integer",
518
+ "exclusiveMinimum": 0,
519
+ "maximum": 9007199254740991
520
+ },
521
+ "type": {
522
+ "type": "string",
523
+ "const": "attempt.phase"
524
+ },
525
+ "payload": {
526
+ "type": "object",
527
+ "properties": {
528
+ "phase": {
529
+ "type": "string",
530
+ "enum": [
531
+ "draft",
532
+ "ready",
533
+ "running",
534
+ "verifying",
535
+ "reviewing",
536
+ "integrating",
537
+ "done",
538
+ "failed",
539
+ "cancelled"
540
+ ]
541
+ },
542
+ "sha": {
543
+ "type": "string",
544
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
545
+ }
546
+ },
547
+ "required": [
548
+ "phase"
549
+ ],
550
+ "additionalProperties": false
551
+ }
552
+ },
553
+ "required": [
554
+ "apiVersion",
555
+ "seq",
556
+ "at",
557
+ "type",
558
+ "payload"
559
+ ],
560
+ "additionalProperties": false
561
+ },
562
+ {
563
+ "type": "object",
564
+ "properties": {
565
+ "apiVersion": {
566
+ "type": "string",
567
+ "const": "devcontour-harness/v1alpha1"
568
+ },
569
+ "seq": {
570
+ "type": "integer",
571
+ "exclusiveMinimum": 0,
572
+ "maximum": 9007199254740991
573
+ },
574
+ "at": {
575
+ "type": "string",
576
+ "format": "date-time",
577
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
578
+ },
579
+ "graphId": {
580
+ "type": "string",
581
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
582
+ },
583
+ "workId": {
584
+ "type": "string",
585
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
586
+ },
587
+ "runId": {
588
+ "type": "string",
589
+ "minLength": 1,
590
+ "maxLength": 200
591
+ },
592
+ "attempt": {
593
+ "type": "integer",
594
+ "exclusiveMinimum": 0,
595
+ "maximum": 9007199254740991
596
+ },
597
+ "type": {
598
+ "type": "string",
599
+ "const": "attempt.gate"
600
+ },
601
+ "payload": {
602
+ "type": "object",
603
+ "properties": {
604
+ "phase": {
605
+ "type": "string",
606
+ "enum": [
607
+ "candidate",
608
+ "integration"
609
+ ]
610
+ },
611
+ "gate": {
612
+ "type": "string",
613
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
614
+ },
615
+ "sha": {
616
+ "type": "string",
617
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
618
+ },
619
+ "passed": {
620
+ "type": "boolean"
621
+ },
622
+ "evidenceId": {
623
+ "type": "string",
624
+ "minLength": 1,
625
+ "maxLength": 200
626
+ },
627
+ "consumer": {
628
+ "type": "string",
629
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
630
+ }
631
+ },
632
+ "required": [
633
+ "phase",
634
+ "gate",
635
+ "sha",
636
+ "passed",
637
+ "evidenceId"
638
+ ],
639
+ "additionalProperties": false
640
+ }
641
+ },
642
+ "required": [
643
+ "apiVersion",
644
+ "seq",
645
+ "at",
646
+ "type",
647
+ "payload"
648
+ ],
649
+ "additionalProperties": false
650
+ },
651
+ {
652
+ "type": "object",
653
+ "properties": {
654
+ "apiVersion": {
655
+ "type": "string",
656
+ "const": "devcontour-harness/v1alpha1"
657
+ },
658
+ "seq": {
659
+ "type": "integer",
660
+ "exclusiveMinimum": 0,
661
+ "maximum": 9007199254740991
662
+ },
663
+ "at": {
664
+ "type": "string",
665
+ "format": "date-time",
666
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
667
+ },
668
+ "graphId": {
669
+ "type": "string",
670
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
671
+ },
672
+ "workId": {
673
+ "type": "string",
674
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
675
+ },
676
+ "runId": {
677
+ "type": "string",
678
+ "minLength": 1,
679
+ "maxLength": 200
680
+ },
681
+ "attempt": {
682
+ "type": "integer",
683
+ "exclusiveMinimum": 0,
684
+ "maximum": 9007199254740991
685
+ },
686
+ "type": {
687
+ "type": "string",
688
+ "const": "attempt.review"
689
+ },
690
+ "payload": {
691
+ "type": "object",
692
+ "properties": {
693
+ "phase": {
694
+ "type": "string",
695
+ "enum": [
696
+ "candidate",
697
+ "integration"
698
+ ]
699
+ },
700
+ "sha": {
701
+ "type": "string",
702
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
703
+ },
704
+ "passed": {
705
+ "type": "boolean"
706
+ },
707
+ "evidenceId": {
708
+ "type": "string",
709
+ "minLength": 1,
710
+ "maxLength": 200
711
+ },
712
+ "reviewer": {
713
+ "type": "string",
714
+ "enum": [
715
+ "codex",
716
+ "claude",
717
+ "fixture"
718
+ ]
719
+ },
720
+ "sameVendor": {
721
+ "type": "boolean"
722
+ },
723
+ "blocking": {
724
+ "type": "integer",
725
+ "minimum": 0,
726
+ "maximum": 9007199254740991
727
+ }
728
+ },
729
+ "required": [
730
+ "phase",
731
+ "sha",
732
+ "passed",
733
+ "evidenceId",
734
+ "reviewer",
735
+ "sameVendor",
736
+ "blocking"
737
+ ],
738
+ "additionalProperties": false
739
+ }
740
+ },
741
+ "required": [
742
+ "apiVersion",
743
+ "seq",
744
+ "at",
745
+ "type",
746
+ "payload"
747
+ ],
748
+ "additionalProperties": false
749
+ },
750
+ {
751
+ "type": "object",
752
+ "properties": {
753
+ "apiVersion": {
754
+ "type": "string",
755
+ "const": "devcontour-harness/v1alpha1"
756
+ },
757
+ "seq": {
758
+ "type": "integer",
759
+ "exclusiveMinimum": 0,
760
+ "maximum": 9007199254740991
761
+ },
762
+ "at": {
763
+ "type": "string",
764
+ "format": "date-time",
765
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
766
+ },
767
+ "graphId": {
768
+ "type": "string",
769
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
770
+ },
771
+ "workId": {
772
+ "type": "string",
773
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
774
+ },
775
+ "runId": {
776
+ "type": "string",
777
+ "minLength": 1,
778
+ "maxLength": 200
779
+ },
780
+ "attempt": {
781
+ "type": "integer",
782
+ "exclusiveMinimum": 0,
783
+ "maximum": 9007199254740991
784
+ },
785
+ "type": {
786
+ "type": "string",
787
+ "const": "attempt.failed"
788
+ },
789
+ "payload": {
790
+ "type": "object",
791
+ "properties": {
792
+ "failureKind": {
793
+ "type": "string",
794
+ "enum": [
795
+ "provider-auth",
796
+ "environment",
797
+ "timeout",
798
+ "stale-base",
799
+ "empty-result",
800
+ "scope-violation",
801
+ "gate",
802
+ "review",
803
+ "review-protocol",
804
+ "merge",
805
+ "cancelled",
806
+ "budget",
807
+ "unknown"
808
+ ]
809
+ },
810
+ "message": {
811
+ "type": "string",
812
+ "maxLength": 4000
813
+ },
814
+ "blocked": {
815
+ "type": "boolean"
816
+ }
817
+ },
818
+ "required": [
819
+ "failureKind",
820
+ "message",
821
+ "blocked"
822
+ ],
823
+ "additionalProperties": false
824
+ }
825
+ },
826
+ "required": [
827
+ "apiVersion",
828
+ "seq",
829
+ "at",
830
+ "type",
831
+ "payload"
832
+ ],
833
+ "additionalProperties": false
834
+ },
835
+ {
836
+ "type": "object",
837
+ "properties": {
838
+ "apiVersion": {
839
+ "type": "string",
840
+ "const": "devcontour-harness/v1alpha1"
841
+ },
842
+ "seq": {
843
+ "type": "integer",
844
+ "exclusiveMinimum": 0,
845
+ "maximum": 9007199254740991
846
+ },
847
+ "at": {
848
+ "type": "string",
849
+ "format": "date-time",
850
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
851
+ },
852
+ "graphId": {
853
+ "type": "string",
854
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
855
+ },
856
+ "workId": {
857
+ "type": "string",
858
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
859
+ },
860
+ "runId": {
861
+ "type": "string",
862
+ "minLength": 1,
863
+ "maxLength": 200
864
+ },
865
+ "attempt": {
866
+ "type": "integer",
867
+ "exclusiveMinimum": 0,
868
+ "maximum": 9007199254740991
869
+ },
870
+ "type": {
871
+ "type": "string",
872
+ "const": "attempt.expired"
873
+ },
874
+ "payload": {
875
+ "type": "object",
876
+ "properties": {
877
+ "leaseUntil": {
878
+ "type": "integer",
879
+ "minimum": 0,
880
+ "maximum": 9007199254740991
881
+ }
882
+ },
883
+ "required": [
884
+ "leaseUntil"
885
+ ],
886
+ "additionalProperties": false
887
+ }
888
+ },
889
+ "required": [
890
+ "apiVersion",
891
+ "seq",
892
+ "at",
893
+ "type",
894
+ "payload"
895
+ ],
896
+ "additionalProperties": false
897
+ },
898
+ {
899
+ "type": "object",
900
+ "properties": {
901
+ "apiVersion": {
902
+ "type": "string",
903
+ "const": "devcontour-harness/v1alpha1"
904
+ },
905
+ "seq": {
906
+ "type": "integer",
907
+ "exclusiveMinimum": 0,
908
+ "maximum": 9007199254740991
909
+ },
910
+ "at": {
911
+ "type": "string",
912
+ "format": "date-time",
913
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
914
+ },
915
+ "graphId": {
916
+ "type": "string",
917
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
918
+ },
919
+ "workId": {
920
+ "type": "string",
921
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
922
+ },
923
+ "runId": {
924
+ "type": "string",
925
+ "minLength": 1,
926
+ "maxLength": 200
927
+ },
928
+ "attempt": {
929
+ "type": "integer",
930
+ "exclusiveMinimum": 0,
931
+ "maximum": 9007199254740991
932
+ },
933
+ "type": {
934
+ "type": "string",
935
+ "const": "attempt.cancelled"
936
+ },
937
+ "payload": {
938
+ "type": "object",
939
+ "properties": {
940
+ "reason": {
941
+ "type": "string",
942
+ "maxLength": 4000
943
+ }
944
+ },
945
+ "required": [
946
+ "reason"
947
+ ],
948
+ "additionalProperties": false
949
+ }
950
+ },
951
+ "required": [
952
+ "apiVersion",
953
+ "seq",
954
+ "at",
955
+ "type",
956
+ "payload"
957
+ ],
958
+ "additionalProperties": false
959
+ },
960
+ {
961
+ "type": "object",
962
+ "properties": {
963
+ "apiVersion": {
964
+ "type": "string",
965
+ "const": "devcontour-harness/v1alpha1"
966
+ },
967
+ "seq": {
968
+ "type": "integer",
969
+ "exclusiveMinimum": 0,
970
+ "maximum": 9007199254740991
971
+ },
972
+ "at": {
973
+ "type": "string",
974
+ "format": "date-time",
975
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
976
+ },
977
+ "graphId": {
978
+ "type": "string",
979
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
980
+ },
981
+ "workId": {
982
+ "type": "string",
983
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
984
+ },
985
+ "runId": {
986
+ "type": "string",
987
+ "minLength": 1,
988
+ "maxLength": 200
989
+ },
990
+ "attempt": {
991
+ "type": "integer",
992
+ "exclusiveMinimum": 0,
993
+ "maximum": 9007199254740991
994
+ },
995
+ "type": {
996
+ "type": "string",
997
+ "const": "attempt.recovered"
998
+ },
999
+ "payload": {
1000
+ "type": "object",
1001
+ "properties": {
1002
+ "integrationSha": {
1003
+ "type": "string",
1004
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
1005
+ },
1006
+ "accepted": {
1007
+ "type": "boolean"
1008
+ },
1009
+ "reason": {
1010
+ "type": "string",
1011
+ "maxLength": 4000
1012
+ }
1013
+ },
1014
+ "required": [
1015
+ "integrationSha",
1016
+ "accepted"
1017
+ ],
1018
+ "additionalProperties": false
1019
+ }
1020
+ },
1021
+ "required": [
1022
+ "apiVersion",
1023
+ "seq",
1024
+ "at",
1025
+ "type",
1026
+ "payload"
1027
+ ],
1028
+ "additionalProperties": false
1029
+ },
1030
+ {
1031
+ "type": "object",
1032
+ "properties": {
1033
+ "apiVersion": {
1034
+ "type": "string",
1035
+ "const": "devcontour-harness/v1alpha1"
1036
+ },
1037
+ "seq": {
1038
+ "type": "integer",
1039
+ "exclusiveMinimum": 0,
1040
+ "maximum": 9007199254740991
1041
+ },
1042
+ "at": {
1043
+ "type": "string",
1044
+ "format": "date-time",
1045
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1046
+ },
1047
+ "graphId": {
1048
+ "type": "string",
1049
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1050
+ },
1051
+ "workId": {
1052
+ "type": "string",
1053
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1054
+ },
1055
+ "runId": {
1056
+ "type": "string",
1057
+ "minLength": 1,
1058
+ "maxLength": 200
1059
+ },
1060
+ "attempt": {
1061
+ "type": "integer",
1062
+ "exclusiveMinimum": 0,
1063
+ "maximum": 9007199254740991
1064
+ },
1065
+ "type": {
1066
+ "type": "string",
1067
+ "const": "work.accepted"
1068
+ },
1069
+ "payload": {
1070
+ "type": "object",
1071
+ "properties": {
1072
+ "resultSha": {
1073
+ "type": "string",
1074
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
1075
+ },
1076
+ "integrationSha": {
1077
+ "type": "string",
1078
+ "pattern": "^[a-f0-9]{40}([a-f0-9]{24})?$"
1079
+ }
1080
+ },
1081
+ "required": [
1082
+ "resultSha",
1083
+ "integrationSha"
1084
+ ],
1085
+ "additionalProperties": false
1086
+ }
1087
+ },
1088
+ "required": [
1089
+ "apiVersion",
1090
+ "seq",
1091
+ "at",
1092
+ "type",
1093
+ "payload"
1094
+ ],
1095
+ "additionalProperties": false
1096
+ },
1097
+ {
1098
+ "type": "object",
1099
+ "properties": {
1100
+ "apiVersion": {
1101
+ "type": "string",
1102
+ "const": "devcontour-harness/v1alpha1"
1103
+ },
1104
+ "seq": {
1105
+ "type": "integer",
1106
+ "exclusiveMinimum": 0,
1107
+ "maximum": 9007199254740991
1108
+ },
1109
+ "at": {
1110
+ "type": "string",
1111
+ "format": "date-time",
1112
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1113
+ },
1114
+ "graphId": {
1115
+ "type": "string",
1116
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1117
+ },
1118
+ "workId": {
1119
+ "type": "string",
1120
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1121
+ },
1122
+ "runId": {
1123
+ "type": "string",
1124
+ "minLength": 1,
1125
+ "maxLength": 200
1126
+ },
1127
+ "attempt": {
1128
+ "type": "integer",
1129
+ "exclusiveMinimum": 0,
1130
+ "maximum": 9007199254740991
1131
+ },
1132
+ "type": {
1133
+ "type": "string",
1134
+ "const": "work.blocked"
1135
+ },
1136
+ "payload": {
1137
+ "type": "object",
1138
+ "properties": {
1139
+ "code": {
1140
+ "type": "string",
1141
+ "minLength": 1,
1142
+ "maxLength": 60
1143
+ },
1144
+ "message": {
1145
+ "type": "string",
1146
+ "maxLength": 4000
1147
+ }
1148
+ },
1149
+ "required": [
1150
+ "code",
1151
+ "message"
1152
+ ],
1153
+ "additionalProperties": false
1154
+ }
1155
+ },
1156
+ "required": [
1157
+ "apiVersion",
1158
+ "seq",
1159
+ "at",
1160
+ "type",
1161
+ "payload"
1162
+ ],
1163
+ "additionalProperties": false
1164
+ },
1165
+ {
1166
+ "type": "object",
1167
+ "properties": {
1168
+ "apiVersion": {
1169
+ "type": "string",
1170
+ "const": "devcontour-harness/v1alpha1"
1171
+ },
1172
+ "seq": {
1173
+ "type": "integer",
1174
+ "exclusiveMinimum": 0,
1175
+ "maximum": 9007199254740991
1176
+ },
1177
+ "at": {
1178
+ "type": "string",
1179
+ "format": "date-time",
1180
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1181
+ },
1182
+ "graphId": {
1183
+ "type": "string",
1184
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1185
+ },
1186
+ "workId": {
1187
+ "type": "string",
1188
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1189
+ },
1190
+ "runId": {
1191
+ "type": "string",
1192
+ "minLength": 1,
1193
+ "maxLength": 200
1194
+ },
1195
+ "attempt": {
1196
+ "type": "integer",
1197
+ "exclusiveMinimum": 0,
1198
+ "maximum": 9007199254740991
1199
+ },
1200
+ "type": {
1201
+ "type": "string",
1202
+ "const": "control.paused"
1203
+ },
1204
+ "payload": {
1205
+ "type": "object",
1206
+ "properties": {
1207
+ "reason": {
1208
+ "type": "string",
1209
+ "enum": [
1210
+ "operator",
1211
+ "shutdown",
1212
+ "runtime",
1213
+ "base-check",
1214
+ "reconfigure"
1215
+ ]
1216
+ },
1217
+ "failures": {
1218
+ "type": "array",
1219
+ "items": {
1220
+ "type": "string",
1221
+ "enum": [
1222
+ "provider-auth",
1223
+ "environment",
1224
+ "timeout",
1225
+ "stale-base",
1226
+ "empty-result",
1227
+ "scope-violation",
1228
+ "gate",
1229
+ "review",
1230
+ "review-protocol",
1231
+ "merge",
1232
+ "cancelled",
1233
+ "budget",
1234
+ "unknown"
1235
+ ]
1236
+ }
1237
+ }
1238
+ },
1239
+ "required": [
1240
+ "reason"
1241
+ ],
1242
+ "additionalProperties": false
1243
+ }
1244
+ },
1245
+ "required": [
1246
+ "apiVersion",
1247
+ "seq",
1248
+ "at",
1249
+ "type",
1250
+ "payload"
1251
+ ],
1252
+ "additionalProperties": false
1253
+ },
1254
+ {
1255
+ "type": "object",
1256
+ "properties": {
1257
+ "apiVersion": {
1258
+ "type": "string",
1259
+ "const": "devcontour-harness/v1alpha1"
1260
+ },
1261
+ "seq": {
1262
+ "type": "integer",
1263
+ "exclusiveMinimum": 0,
1264
+ "maximum": 9007199254740991
1265
+ },
1266
+ "at": {
1267
+ "type": "string",
1268
+ "format": "date-time",
1269
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1270
+ },
1271
+ "graphId": {
1272
+ "type": "string",
1273
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1274
+ },
1275
+ "workId": {
1276
+ "type": "string",
1277
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1278
+ },
1279
+ "runId": {
1280
+ "type": "string",
1281
+ "minLength": 1,
1282
+ "maxLength": 200
1283
+ },
1284
+ "attempt": {
1285
+ "type": "integer",
1286
+ "exclusiveMinimum": 0,
1287
+ "maximum": 9007199254740991
1288
+ },
1289
+ "type": {
1290
+ "type": "string",
1291
+ "const": "control.resumed"
1292
+ },
1293
+ "payload": {
1294
+ "type": "object",
1295
+ "properties": {
1296
+ "reason": {
1297
+ "type": "string",
1298
+ "enum": [
1299
+ "operator",
1300
+ "shutdown",
1301
+ "runtime",
1302
+ "base-check",
1303
+ "reconfigure"
1304
+ ]
1305
+ }
1306
+ },
1307
+ "required": [
1308
+ "reason"
1309
+ ],
1310
+ "additionalProperties": false
1311
+ }
1312
+ },
1313
+ "required": [
1314
+ "apiVersion",
1315
+ "seq",
1316
+ "at",
1317
+ "type",
1318
+ "payload"
1319
+ ],
1320
+ "additionalProperties": false
1321
+ },
1322
+ {
1323
+ "type": "object",
1324
+ "properties": {
1325
+ "apiVersion": {
1326
+ "type": "string",
1327
+ "const": "devcontour-harness/v1alpha1"
1328
+ },
1329
+ "seq": {
1330
+ "type": "integer",
1331
+ "exclusiveMinimum": 0,
1332
+ "maximum": 9007199254740991
1333
+ },
1334
+ "at": {
1335
+ "type": "string",
1336
+ "format": "date-time",
1337
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1338
+ },
1339
+ "graphId": {
1340
+ "type": "string",
1341
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1342
+ },
1343
+ "workId": {
1344
+ "type": "string",
1345
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1346
+ },
1347
+ "runId": {
1348
+ "type": "string",
1349
+ "minLength": 1,
1350
+ "maxLength": 200
1351
+ },
1352
+ "attempt": {
1353
+ "type": "integer",
1354
+ "exclusiveMinimum": 0,
1355
+ "maximum": 9007199254740991
1356
+ },
1357
+ "type": {
1358
+ "type": "string",
1359
+ "const": "controller.acquired"
1360
+ },
1361
+ "payload": {
1362
+ "type": "object",
1363
+ "properties": {
1364
+ "owner": {
1365
+ "type": "string",
1366
+ "minLength": 1,
1367
+ "maxLength": 300
1368
+ }
1369
+ },
1370
+ "required": [
1371
+ "owner"
1372
+ ],
1373
+ "additionalProperties": false
1374
+ }
1375
+ },
1376
+ "required": [
1377
+ "apiVersion",
1378
+ "seq",
1379
+ "at",
1380
+ "type",
1381
+ "payload"
1382
+ ],
1383
+ "additionalProperties": false
1384
+ },
1385
+ {
1386
+ "type": "object",
1387
+ "properties": {
1388
+ "apiVersion": {
1389
+ "type": "string",
1390
+ "const": "devcontour-harness/v1alpha1"
1391
+ },
1392
+ "seq": {
1393
+ "type": "integer",
1394
+ "exclusiveMinimum": 0,
1395
+ "maximum": 9007199254740991
1396
+ },
1397
+ "at": {
1398
+ "type": "string",
1399
+ "format": "date-time",
1400
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1401
+ },
1402
+ "graphId": {
1403
+ "type": "string",
1404
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1405
+ },
1406
+ "workId": {
1407
+ "type": "string",
1408
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1409
+ },
1410
+ "runId": {
1411
+ "type": "string",
1412
+ "minLength": 1,
1413
+ "maxLength": 200
1414
+ },
1415
+ "attempt": {
1416
+ "type": "integer",
1417
+ "exclusiveMinimum": 0,
1418
+ "maximum": 9007199254740991
1419
+ },
1420
+ "type": {
1421
+ "type": "string",
1422
+ "const": "controller.released"
1423
+ },
1424
+ "payload": {
1425
+ "type": "object",
1426
+ "properties": {
1427
+ "owner": {
1428
+ "type": "string",
1429
+ "minLength": 1,
1430
+ "maxLength": 300
1431
+ }
1432
+ },
1433
+ "required": [
1434
+ "owner"
1435
+ ],
1436
+ "additionalProperties": false
1437
+ }
1438
+ },
1439
+ "required": [
1440
+ "apiVersion",
1441
+ "seq",
1442
+ "at",
1443
+ "type",
1444
+ "payload"
1445
+ ],
1446
+ "additionalProperties": false
1447
+ },
1448
+ {
1449
+ "type": "object",
1450
+ "properties": {
1451
+ "apiVersion": {
1452
+ "type": "string",
1453
+ "const": "devcontour-harness/v1alpha1"
1454
+ },
1455
+ "seq": {
1456
+ "type": "integer",
1457
+ "exclusiveMinimum": 0,
1458
+ "maximum": 9007199254740991
1459
+ },
1460
+ "at": {
1461
+ "type": "string",
1462
+ "format": "date-time",
1463
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1464
+ },
1465
+ "graphId": {
1466
+ "type": "string",
1467
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1468
+ },
1469
+ "workId": {
1470
+ "type": "string",
1471
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1472
+ },
1473
+ "runId": {
1474
+ "type": "string",
1475
+ "minLength": 1,
1476
+ "maxLength": 200
1477
+ },
1478
+ "attempt": {
1479
+ "type": "integer",
1480
+ "exclusiveMinimum": 0,
1481
+ "maximum": 9007199254740991
1482
+ },
1483
+ "type": {
1484
+ "type": "string",
1485
+ "const": "budget.blocked"
1486
+ },
1487
+ "payload": {
1488
+ "type": "object",
1489
+ "properties": {
1490
+ "scope": {
1491
+ "type": "string",
1492
+ "enum": [
1493
+ "work",
1494
+ "group",
1495
+ "total"
1496
+ ]
1497
+ },
1498
+ "scopeId": {
1499
+ "type": "string",
1500
+ "maxLength": 200
1501
+ },
1502
+ "state": {
1503
+ "type": "string",
1504
+ "enum": [
1505
+ "exceeded",
1506
+ "undetermined"
1507
+ ]
1508
+ },
1509
+ "reason": {
1510
+ "type": "string",
1511
+ "maxLength": 4000
1512
+ }
1513
+ },
1514
+ "required": [
1515
+ "scope",
1516
+ "state",
1517
+ "reason"
1518
+ ],
1519
+ "additionalProperties": false
1520
+ }
1521
+ },
1522
+ "required": [
1523
+ "apiVersion",
1524
+ "seq",
1525
+ "at",
1526
+ "type",
1527
+ "payload"
1528
+ ],
1529
+ "additionalProperties": false
1530
+ },
1531
+ {
1532
+ "type": "object",
1533
+ "properties": {
1534
+ "apiVersion": {
1535
+ "type": "string",
1536
+ "const": "devcontour-harness/v1alpha1"
1537
+ },
1538
+ "seq": {
1539
+ "type": "integer",
1540
+ "exclusiveMinimum": 0,
1541
+ "maximum": 9007199254740991
1542
+ },
1543
+ "at": {
1544
+ "type": "string",
1545
+ "format": "date-time",
1546
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1547
+ },
1548
+ "graphId": {
1549
+ "type": "string",
1550
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1551
+ },
1552
+ "workId": {
1553
+ "type": "string",
1554
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1555
+ },
1556
+ "runId": {
1557
+ "type": "string",
1558
+ "minLength": 1,
1559
+ "maxLength": 200
1560
+ },
1561
+ "attempt": {
1562
+ "type": "integer",
1563
+ "exclusiveMinimum": 0,
1564
+ "maximum": 9007199254740991
1565
+ },
1566
+ "type": {
1567
+ "type": "string",
1568
+ "const": "corpus.adopted"
1569
+ },
1570
+ "payload": {
1571
+ "type": "object",
1572
+ "properties": {
1573
+ "suite": {
1574
+ "type": "string",
1575
+ "minLength": 1,
1576
+ "maxLength": 300
1577
+ },
1578
+ "pending": {
1579
+ "type": "string",
1580
+ "minLength": 1,
1581
+ "maxLength": 200
1582
+ },
1583
+ "version": {
1584
+ "type": "integer",
1585
+ "minimum": 0,
1586
+ "maximum": 9007199254740991
1587
+ },
1588
+ "digest": {
1589
+ "type": "string",
1590
+ "pattern": "^[a-f0-9]{64}$"
1591
+ },
1592
+ "status": {
1593
+ "type": "string",
1594
+ "enum": [
1595
+ "waiting",
1596
+ "completed"
1597
+ ]
1598
+ },
1599
+ "accepted": {
1600
+ "maxItems": 500,
1601
+ "type": "array",
1602
+ "items": {
1603
+ "type": "string",
1604
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1605
+ }
1606
+ }
1607
+ },
1608
+ "required": [
1609
+ "suite",
1610
+ "pending",
1611
+ "version",
1612
+ "digest",
1613
+ "status",
1614
+ "accepted"
1615
+ ],
1616
+ "additionalProperties": false
1617
+ }
1618
+ },
1619
+ "required": [
1620
+ "apiVersion",
1621
+ "seq",
1622
+ "at",
1623
+ "type",
1624
+ "payload"
1625
+ ],
1626
+ "additionalProperties": false
1627
+ },
1628
+ {
1629
+ "type": "object",
1630
+ "properties": {
1631
+ "apiVersion": {
1632
+ "type": "string",
1633
+ "const": "devcontour-harness/v1alpha1"
1634
+ },
1635
+ "seq": {
1636
+ "type": "integer",
1637
+ "exclusiveMinimum": 0,
1638
+ "maximum": 9007199254740991
1639
+ },
1640
+ "at": {
1641
+ "type": "string",
1642
+ "format": "date-time",
1643
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1644
+ },
1645
+ "graphId": {
1646
+ "type": "string",
1647
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1648
+ },
1649
+ "workId": {
1650
+ "type": "string",
1651
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1652
+ },
1653
+ "runId": {
1654
+ "type": "string",
1655
+ "minLength": 1,
1656
+ "maxLength": 200
1657
+ },
1658
+ "attempt": {
1659
+ "type": "integer",
1660
+ "exclusiveMinimum": 0,
1661
+ "maximum": 9007199254740991
1662
+ },
1663
+ "type": {
1664
+ "type": "string",
1665
+ "const": "work.recovery"
1666
+ },
1667
+ "payload": {
1668
+ "type": "object",
1669
+ "properties": {
1670
+ "recoveryId": {
1671
+ "type": "string",
1672
+ "minLength": 1,
1673
+ "maxLength": 200
1674
+ },
1675
+ "property": {
1676
+ "type": "string",
1677
+ "minLength": 1,
1678
+ "maxLength": 200
1679
+ },
1680
+ "status": {
1681
+ "type": "string",
1682
+ "enum": [
1683
+ "awaiting-lead",
1684
+ "analyzing",
1685
+ "applying",
1686
+ "retry",
1687
+ "retrying",
1688
+ "awaiting-user",
1689
+ "stopped",
1690
+ "closed"
1691
+ ]
1692
+ },
1693
+ "reason": {
1694
+ "type": "string",
1695
+ "maxLength": 4000
1696
+ }
1697
+ },
1698
+ "required": [
1699
+ "recoveryId",
1700
+ "property",
1701
+ "status"
1702
+ ],
1703
+ "additionalProperties": false
1704
+ }
1705
+ },
1706
+ "required": [
1707
+ "apiVersion",
1708
+ "seq",
1709
+ "at",
1710
+ "type",
1711
+ "payload"
1712
+ ],
1713
+ "additionalProperties": false
1714
+ },
1715
+ {
1716
+ "type": "object",
1717
+ "properties": {
1718
+ "apiVersion": {
1719
+ "type": "string",
1720
+ "const": "devcontour-harness/v1alpha1"
1721
+ },
1722
+ "seq": {
1723
+ "type": "integer",
1724
+ "exclusiveMinimum": 0,
1725
+ "maximum": 9007199254740991
1726
+ },
1727
+ "at": {
1728
+ "type": "string",
1729
+ "format": "date-time",
1730
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1731
+ },
1732
+ "graphId": {
1733
+ "type": "string",
1734
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1735
+ },
1736
+ "workId": {
1737
+ "type": "string",
1738
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1739
+ },
1740
+ "runId": {
1741
+ "type": "string",
1742
+ "minLength": 1,
1743
+ "maxLength": 200
1744
+ },
1745
+ "attempt": {
1746
+ "type": "integer",
1747
+ "exclusiveMinimum": 0,
1748
+ "maximum": 9007199254740991
1749
+ },
1750
+ "type": {
1751
+ "type": "string",
1752
+ "const": "joint.started"
1753
+ },
1754
+ "payload": {
1755
+ "type": "object",
1756
+ "properties": {
1757
+ "verificationId": {
1758
+ "type": "string",
1759
+ "minLength": 1,
1760
+ "maxLength": 200
1761
+ },
1762
+ "workIds": {
1763
+ "maxItems": 500,
1764
+ "type": "array",
1765
+ "items": {
1766
+ "type": "string",
1767
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1768
+ }
1769
+ },
1770
+ "policyDigest": {
1771
+ "type": "string",
1772
+ "pattern": "^[a-f0-9]{64}$"
1773
+ }
1774
+ },
1775
+ "required": [
1776
+ "verificationId",
1777
+ "workIds",
1778
+ "policyDigest"
1779
+ ],
1780
+ "additionalProperties": false
1781
+ }
1782
+ },
1783
+ "required": [
1784
+ "apiVersion",
1785
+ "seq",
1786
+ "at",
1787
+ "type",
1788
+ "payload"
1789
+ ],
1790
+ "additionalProperties": false
1791
+ },
1792
+ {
1793
+ "type": "object",
1794
+ "properties": {
1795
+ "apiVersion": {
1796
+ "type": "string",
1797
+ "const": "devcontour-harness/v1alpha1"
1798
+ },
1799
+ "seq": {
1800
+ "type": "integer",
1801
+ "exclusiveMinimum": 0,
1802
+ "maximum": 9007199254740991
1803
+ },
1804
+ "at": {
1805
+ "type": "string",
1806
+ "format": "date-time",
1807
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1808
+ },
1809
+ "graphId": {
1810
+ "type": "string",
1811
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1812
+ },
1813
+ "workId": {
1814
+ "type": "string",
1815
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1816
+ },
1817
+ "runId": {
1818
+ "type": "string",
1819
+ "minLength": 1,
1820
+ "maxLength": 200
1821
+ },
1822
+ "attempt": {
1823
+ "type": "integer",
1824
+ "exclusiveMinimum": 0,
1825
+ "maximum": 9007199254740991
1826
+ },
1827
+ "type": {
1828
+ "type": "string",
1829
+ "const": "joint.finished"
1830
+ },
1831
+ "payload": {
1832
+ "type": "object",
1833
+ "properties": {
1834
+ "verificationId": {
1835
+ "type": "string",
1836
+ "minLength": 1,
1837
+ "maxLength": 200
1838
+ },
1839
+ "status": {
1840
+ "type": "string",
1841
+ "enum": [
1842
+ "passed",
1843
+ "failed"
1844
+ ]
1845
+ },
1846
+ "manifestDigest": {
1847
+ "type": "string",
1848
+ "pattern": "^[a-f0-9]{64}$"
1849
+ },
1850
+ "error": {
1851
+ "type": "string",
1852
+ "maxLength": 4000
1853
+ }
1854
+ },
1855
+ "required": [
1856
+ "verificationId",
1857
+ "status"
1858
+ ],
1859
+ "additionalProperties": false
1860
+ }
1861
+ },
1862
+ "required": [
1863
+ "apiVersion",
1864
+ "seq",
1865
+ "at",
1866
+ "type",
1867
+ "payload"
1868
+ ],
1869
+ "additionalProperties": false
1870
+ },
1871
+ {
1872
+ "type": "object",
1873
+ "properties": {
1874
+ "apiVersion": {
1875
+ "type": "string",
1876
+ "const": "devcontour-harness/v1alpha1"
1877
+ },
1878
+ "seq": {
1879
+ "type": "integer",
1880
+ "exclusiveMinimum": 0,
1881
+ "maximum": 9007199254740991
1882
+ },
1883
+ "at": {
1884
+ "type": "string",
1885
+ "format": "date-time",
1886
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1887
+ },
1888
+ "graphId": {
1889
+ "type": "string",
1890
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1891
+ },
1892
+ "workId": {
1893
+ "type": "string",
1894
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1895
+ },
1896
+ "runId": {
1897
+ "type": "string",
1898
+ "minLength": 1,
1899
+ "maxLength": 200
1900
+ },
1901
+ "attempt": {
1902
+ "type": "integer",
1903
+ "exclusiveMinimum": 0,
1904
+ "maximum": 9007199254740991
1905
+ },
1906
+ "type": {
1907
+ "type": "string",
1908
+ "const": "policy.applied"
1909
+ },
1910
+ "payload": {
1911
+ "type": "object",
1912
+ "properties": {
1913
+ "digest": {
1914
+ "type": "string",
1915
+ "pattern": "^[a-f0-9]{64}$"
1916
+ },
1917
+ "generation": {
1918
+ "type": "integer",
1919
+ "minimum": 0,
1920
+ "maximum": 9007199254740991
1921
+ },
1922
+ "by": {
1923
+ "type": "string",
1924
+ "minLength": 1,
1925
+ "maxLength": 300
1926
+ },
1927
+ "operation": {
1928
+ "type": "string",
1929
+ "minLength": 1,
1930
+ "maxLength": 200
1931
+ }
1932
+ },
1933
+ "required": [
1934
+ "digest",
1935
+ "generation",
1936
+ "by"
1937
+ ],
1938
+ "additionalProperties": false
1939
+ }
1940
+ },
1941
+ "required": [
1942
+ "apiVersion",
1943
+ "seq",
1944
+ "at",
1945
+ "type",
1946
+ "payload"
1947
+ ],
1948
+ "additionalProperties": false
1949
+ },
1950
+ {
1951
+ "type": "object",
1952
+ "properties": {
1953
+ "apiVersion": {
1954
+ "type": "string",
1955
+ "const": "devcontour-harness/v1alpha1"
1956
+ },
1957
+ "seq": {
1958
+ "type": "integer",
1959
+ "exclusiveMinimum": 0,
1960
+ "maximum": 9007199254740991
1961
+ },
1962
+ "at": {
1963
+ "type": "string",
1964
+ "format": "date-time",
1965
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
1966
+ },
1967
+ "graphId": {
1968
+ "type": "string",
1969
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1970
+ },
1971
+ "workId": {
1972
+ "type": "string",
1973
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
1974
+ },
1975
+ "runId": {
1976
+ "type": "string",
1977
+ "minLength": 1,
1978
+ "maxLength": 200
1979
+ },
1980
+ "attempt": {
1981
+ "type": "integer",
1982
+ "exclusiveMinimum": 0,
1983
+ "maximum": 9007199254740991
1984
+ },
1985
+ "type": {
1986
+ "type": "string",
1987
+ "const": "policy.reconfigure"
1988
+ },
1989
+ "payload": {
1990
+ "type": "object",
1991
+ "properties": {
1992
+ "operation": {
1993
+ "type": "string",
1994
+ "minLength": 1,
1995
+ "maxLength": 200
1996
+ },
1997
+ "digest": {
1998
+ "type": "string",
1999
+ "pattern": "^[a-f0-9]{64}$"
2000
+ },
2001
+ "status": {
2002
+ "type": "string",
2003
+ "enum": [
2004
+ "requested",
2005
+ "failed",
2006
+ "cleared"
2007
+ ]
2008
+ },
2009
+ "error": {
2010
+ "type": "string",
2011
+ "maxLength": 4000
2012
+ }
2013
+ },
2014
+ "required": [
2015
+ "operation",
2016
+ "digest",
2017
+ "status"
2018
+ ],
2019
+ "additionalProperties": false
2020
+ }
2021
+ },
2022
+ "required": [
2023
+ "apiVersion",
2024
+ "seq",
2025
+ "at",
2026
+ "type",
2027
+ "payload"
2028
+ ],
2029
+ "additionalProperties": false
2030
+ },
2031
+ {
2032
+ "type": "object",
2033
+ "properties": {
2034
+ "apiVersion": {
2035
+ "type": "string",
2036
+ "const": "devcontour-harness/v1alpha1"
2037
+ },
2038
+ "seq": {
2039
+ "type": "integer",
2040
+ "exclusiveMinimum": 0,
2041
+ "maximum": 9007199254740991
2042
+ },
2043
+ "at": {
2044
+ "type": "string",
2045
+ "format": "date-time",
2046
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
2047
+ },
2048
+ "graphId": {
2049
+ "type": "string",
2050
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2051
+ },
2052
+ "workId": {
2053
+ "type": "string",
2054
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2055
+ },
2056
+ "runId": {
2057
+ "type": "string",
2058
+ "minLength": 1,
2059
+ "maxLength": 200
2060
+ },
2061
+ "attempt": {
2062
+ "type": "integer",
2063
+ "exclusiveMinimum": 0,
2064
+ "maximum": 9007199254740991
2065
+ },
2066
+ "type": {
2067
+ "type": "string",
2068
+ "const": "delivery.pending"
2069
+ },
2070
+ "payload": {
2071
+ "type": "object",
2072
+ "properties": {
2073
+ "sink": {
2074
+ "type": "string",
2075
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2076
+ },
2077
+ "key": {
2078
+ "type": "string",
2079
+ "minLength": 1,
2080
+ "maxLength": 300
2081
+ },
2082
+ "revision": {
2083
+ "type": "string",
2084
+ "minLength": 1,
2085
+ "maxLength": 200
2086
+ },
2087
+ "attempts": {
2088
+ "type": "integer",
2089
+ "minimum": 0,
2090
+ "maximum": 9007199254740991
2091
+ }
2092
+ },
2093
+ "required": [
2094
+ "sink",
2095
+ "key",
2096
+ "revision",
2097
+ "attempts"
2098
+ ],
2099
+ "additionalProperties": false
2100
+ }
2101
+ },
2102
+ "required": [
2103
+ "apiVersion",
2104
+ "seq",
2105
+ "at",
2106
+ "type",
2107
+ "payload"
2108
+ ],
2109
+ "additionalProperties": false
2110
+ },
2111
+ {
2112
+ "type": "object",
2113
+ "properties": {
2114
+ "apiVersion": {
2115
+ "type": "string",
2116
+ "const": "devcontour-harness/v1alpha1"
2117
+ },
2118
+ "seq": {
2119
+ "type": "integer",
2120
+ "exclusiveMinimum": 0,
2121
+ "maximum": 9007199254740991
2122
+ },
2123
+ "at": {
2124
+ "type": "string",
2125
+ "format": "date-time",
2126
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
2127
+ },
2128
+ "graphId": {
2129
+ "type": "string",
2130
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2131
+ },
2132
+ "workId": {
2133
+ "type": "string",
2134
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2135
+ },
2136
+ "runId": {
2137
+ "type": "string",
2138
+ "minLength": 1,
2139
+ "maxLength": 200
2140
+ },
2141
+ "attempt": {
2142
+ "type": "integer",
2143
+ "exclusiveMinimum": 0,
2144
+ "maximum": 9007199254740991
2145
+ },
2146
+ "type": {
2147
+ "type": "string",
2148
+ "const": "delivery.delivered"
2149
+ },
2150
+ "payload": {
2151
+ "type": "object",
2152
+ "properties": {
2153
+ "sink": {
2154
+ "type": "string",
2155
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2156
+ },
2157
+ "key": {
2158
+ "type": "string",
2159
+ "minLength": 1,
2160
+ "maxLength": 300
2161
+ },
2162
+ "revision": {
2163
+ "type": "string",
2164
+ "minLength": 1,
2165
+ "maxLength": 200
2166
+ },
2167
+ "attempts": {
2168
+ "type": "integer",
2169
+ "minimum": 0,
2170
+ "maximum": 9007199254740991
2171
+ },
2172
+ "receipt": {
2173
+ "type": "string",
2174
+ "maxLength": 1000
2175
+ }
2176
+ },
2177
+ "required": [
2178
+ "sink",
2179
+ "key",
2180
+ "revision",
2181
+ "attempts"
2182
+ ],
2183
+ "additionalProperties": false
2184
+ }
2185
+ },
2186
+ "required": [
2187
+ "apiVersion",
2188
+ "seq",
2189
+ "at",
2190
+ "type",
2191
+ "payload"
2192
+ ],
2193
+ "additionalProperties": false
2194
+ },
2195
+ {
2196
+ "type": "object",
2197
+ "properties": {
2198
+ "apiVersion": {
2199
+ "type": "string",
2200
+ "const": "devcontour-harness/v1alpha1"
2201
+ },
2202
+ "seq": {
2203
+ "type": "integer",
2204
+ "exclusiveMinimum": 0,
2205
+ "maximum": 9007199254740991
2206
+ },
2207
+ "at": {
2208
+ "type": "string",
2209
+ "format": "date-time",
2210
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
2211
+ },
2212
+ "graphId": {
2213
+ "type": "string",
2214
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2215
+ },
2216
+ "workId": {
2217
+ "type": "string",
2218
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2219
+ },
2220
+ "runId": {
2221
+ "type": "string",
2222
+ "minLength": 1,
2223
+ "maxLength": 200
2224
+ },
2225
+ "attempt": {
2226
+ "type": "integer",
2227
+ "exclusiveMinimum": 0,
2228
+ "maximum": 9007199254740991
2229
+ },
2230
+ "type": {
2231
+ "type": "string",
2232
+ "const": "delivery.failed"
2233
+ },
2234
+ "payload": {
2235
+ "type": "object",
2236
+ "properties": {
2237
+ "sink": {
2238
+ "type": "string",
2239
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2240
+ },
2241
+ "key": {
2242
+ "type": "string",
2243
+ "minLength": 1,
2244
+ "maxLength": 300
2245
+ },
2246
+ "revision": {
2247
+ "type": "string",
2248
+ "minLength": 1,
2249
+ "maxLength": 200
2250
+ },
2251
+ "attempts": {
2252
+ "type": "integer",
2253
+ "minimum": 0,
2254
+ "maximum": 9007199254740991
2255
+ },
2256
+ "error": {
2257
+ "type": "string",
2258
+ "maxLength": 4000
2259
+ }
2260
+ },
2261
+ "required": [
2262
+ "sink",
2263
+ "key",
2264
+ "revision",
2265
+ "attempts",
2266
+ "error"
2267
+ ],
2268
+ "additionalProperties": false
2269
+ }
2270
+ },
2271
+ "required": [
2272
+ "apiVersion",
2273
+ "seq",
2274
+ "at",
2275
+ "type",
2276
+ "payload"
2277
+ ],
2278
+ "additionalProperties": false
2279
+ },
2280
+ {
2281
+ "type": "object",
2282
+ "properties": {
2283
+ "apiVersion": {
2284
+ "type": "string",
2285
+ "const": "devcontour-harness/v1alpha1"
2286
+ },
2287
+ "seq": {
2288
+ "type": "integer",
2289
+ "exclusiveMinimum": 0,
2290
+ "maximum": 9007199254740991
2291
+ },
2292
+ "at": {
2293
+ "type": "string",
2294
+ "format": "date-time",
2295
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
2296
+ },
2297
+ "graphId": {
2298
+ "type": "string",
2299
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2300
+ },
2301
+ "workId": {
2302
+ "type": "string",
2303
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2304
+ },
2305
+ "runId": {
2306
+ "type": "string",
2307
+ "minLength": 1,
2308
+ "maxLength": 200
2309
+ },
2310
+ "attempt": {
2311
+ "type": "integer",
2312
+ "exclusiveMinimum": 0,
2313
+ "maximum": 9007199254740991
2314
+ },
2315
+ "type": {
2316
+ "type": "string",
2317
+ "const": "delivery.conflict"
2318
+ },
2319
+ "payload": {
2320
+ "type": "object",
2321
+ "properties": {
2322
+ "sink": {
2323
+ "type": "string",
2324
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2325
+ },
2326
+ "key": {
2327
+ "type": "string",
2328
+ "minLength": 1,
2329
+ "maxLength": 300
2330
+ },
2331
+ "revision": {
2332
+ "type": "string",
2333
+ "minLength": 1,
2334
+ "maxLength": 200
2335
+ },
2336
+ "attempts": {
2337
+ "type": "integer",
2338
+ "minimum": 0,
2339
+ "maximum": 9007199254740991
2340
+ },
2341
+ "currentRevision": {
2342
+ "type": "string",
2343
+ "minLength": 1,
2344
+ "maxLength": 200
2345
+ }
2346
+ },
2347
+ "required": [
2348
+ "sink",
2349
+ "key",
2350
+ "revision",
2351
+ "attempts",
2352
+ "currentRevision"
2353
+ ],
2354
+ "additionalProperties": false
2355
+ }
2356
+ },
2357
+ "required": [
2358
+ "apiVersion",
2359
+ "seq",
2360
+ "at",
2361
+ "type",
2362
+ "payload"
2363
+ ],
2364
+ "additionalProperties": false
2365
+ },
2366
+ {
2367
+ "type": "object",
2368
+ "properties": {
2369
+ "apiVersion": {
2370
+ "type": "string",
2371
+ "const": "devcontour-harness/v1alpha1"
2372
+ },
2373
+ "seq": {
2374
+ "type": "integer",
2375
+ "exclusiveMinimum": 0,
2376
+ "maximum": 9007199254740991
2377
+ },
2378
+ "at": {
2379
+ "type": "string",
2380
+ "format": "date-time",
2381
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
2382
+ },
2383
+ "graphId": {
2384
+ "type": "string",
2385
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2386
+ },
2387
+ "workId": {
2388
+ "type": "string",
2389
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2390
+ },
2391
+ "runId": {
2392
+ "type": "string",
2393
+ "minLength": 1,
2394
+ "maxLength": 200
2395
+ },
2396
+ "attempt": {
2397
+ "type": "integer",
2398
+ "exclusiveMinimum": 0,
2399
+ "maximum": 9007199254740991
2400
+ },
2401
+ "type": {
2402
+ "type": "string",
2403
+ "const": "delivery.uncertain"
2404
+ },
2405
+ "payload": {
2406
+ "type": "object",
2407
+ "properties": {
2408
+ "sink": {
2409
+ "type": "string",
2410
+ "pattern": "^[A-Za-z0-9_-]{1,80}$"
2411
+ },
2412
+ "key": {
2413
+ "type": "string",
2414
+ "minLength": 1,
2415
+ "maxLength": 300
2416
+ },
2417
+ "revision": {
2418
+ "type": "string",
2419
+ "minLength": 1,
2420
+ "maxLength": 200
2421
+ },
2422
+ "attempts": {
2423
+ "type": "integer",
2424
+ "minimum": 0,
2425
+ "maximum": 9007199254740991
2426
+ },
2427
+ "operation": {
2428
+ "type": "string",
2429
+ "minLength": 1,
2430
+ "maxLength": 300
2431
+ },
2432
+ "reason": {
2433
+ "type": "string",
2434
+ "maxLength": 4000
2435
+ }
2436
+ },
2437
+ "required": [
2438
+ "sink",
2439
+ "key",
2440
+ "revision",
2441
+ "attempts",
2442
+ "operation",
2443
+ "reason"
2444
+ ],
2445
+ "additionalProperties": false
2446
+ }
2447
+ },
2448
+ "required": [
2449
+ "apiVersion",
2450
+ "seq",
2451
+ "at",
2452
+ "type",
2453
+ "payload"
2454
+ ],
2455
+ "additionalProperties": false
2456
+ }
2457
+ ]
2458
+ }