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

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 (466) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +268 -2
  3. package/docs/architecture.md +496 -0
  4. package/docs/compatibility-versions.md +60 -0
  5. package/docs/compatibility.md +192 -0
  6. package/docs/connectors.md +323 -0
  7. package/docs/contracts.md +630 -0
  8. package/docs/integrations/hindsight.md +148 -0
  9. package/docs/quickstart.md +185 -0
  10. package/docs/release-notes/0.1.0-alpha.10.md +50 -0
  11. package/docs/release-notes/0.1.0-alpha.11.md +44 -0
  12. package/docs/release-notes/0.1.0-alpha.12.md +66 -0
  13. package/docs/release-notes/0.1.0-alpha.6.md +238 -0
  14. package/docs/release-notes/0.1.0-alpha.7.md +71 -0
  15. package/docs/release-notes/0.1.0-alpha.8.md +73 -0
  16. package/docs/release-notes/0.1.0-alpha.9.md +55 -0
  17. package/docs/review-probes.md +199 -0
  18. package/docs/review-protocol.md +251 -0
  19. package/docs/standalone.md +271 -0
  20. package/docs/toolchains.md +167 -0
  21. package/docs/turbo-starter.md +269 -0
  22. package/docs/upgrade.md +219 -0
  23. package/examples/README.md +27 -0
  24. package/examples/external-connector/README.md +19 -0
  25. package/examples/external-connector/connector.mjs +55 -0
  26. package/examples/files-only/README.md +28 -0
  27. package/examples/files-only/context/norms/rules.md +4 -0
  28. package/examples/files-only/graph.json +23 -0
  29. package/examples/files-only/policy.json +30 -0
  30. package/examples/one-vendor/README.md +19 -0
  31. package/examples/one-vendor/policy.json +27 -0
  32. package/examples/single-task/README.md +18 -0
  33. package/examples/single-task/graph.json +27 -0
  34. package/examples/single-task/policy-same-vendor.json +55 -0
  35. package/examples/single-task/policy.json +52 -0
  36. package/examples/single-task/src/.gitkeep +0 -0
  37. package/examples/single-task/test/run.js +19 -0
  38. package/examples/toolchains/README.md +32 -0
  39. package/examples/toolchains/go/bad/label/label.go +9 -0
  40. package/examples/toolchains/go/good/label/label.go +9 -0
  41. package/examples/toolchains/go/policy.json +79 -0
  42. package/examples/toolchains/go/repo/REQUIREMENTS.md +9 -0
  43. package/examples/toolchains/go/repo/_gitignore +1 -0
  44. package/examples/toolchains/go/repo/go.mod +5 -0
  45. package/examples/toolchains/go/repo/go.sum +2 -0
  46. package/examples/toolchains/go/repo/label/label.go +9 -0
  47. package/examples/toolchains/go/repo/label/label_test.go +27 -0
  48. package/examples/toolchains/go/repo/label/version.go +9 -0
  49. package/examples/toolchains/go/task.json +25 -0
  50. package/examples/toolchains/mixed-go/bad/backend/label/label.go +9 -0
  51. package/examples/toolchains/mixed-go/bad/frontend/src/label.js +4 -0
  52. package/examples/toolchains/mixed-go/good/backend/label/label.go +9 -0
  53. package/examples/toolchains/mixed-go/good/frontend/src/label.js +4 -0
  54. package/examples/toolchains/mixed-go/policy.json +126 -0
  55. package/examples/toolchains/mixed-go/repo/REQUIREMENTS.md +9 -0
  56. package/examples/toolchains/mixed-go/repo/_gitignore +6 -0
  57. package/examples/toolchains/mixed-go/repo/backend/go.mod +3 -0
  58. package/examples/toolchains/mixed-go/repo/backend/label/label.go +9 -0
  59. package/examples/toolchains/mixed-go/repo/backend/label/label_test.go +30 -0
  60. package/examples/toolchains/mixed-go/repo/contract/check.mjs +17 -0
  61. package/examples/toolchains/mixed-go/repo/contract/label.json +9 -0
  62. package/examples/toolchains/mixed-go/repo/frontend/package.json +15 -0
  63. package/examples/toolchains/mixed-go/repo/frontend/pnpm-lock.yaml +22 -0
  64. package/examples/toolchains/mixed-go/repo/frontend/src/label.js +4 -0
  65. package/examples/toolchains/mixed-go/repo/frontend/test/label.test.js +11 -0
  66. package/examples/toolchains/mixed-go/task.json +25 -0
  67. package/examples/toolchains/mixed-python/bad/backend/src/fx_backend/__init__.py +6 -0
  68. package/examples/toolchains/mixed-python/bad/frontend/src/label.js +4 -0
  69. package/examples/toolchains/mixed-python/good/backend/src/fx_backend/__init__.py +6 -0
  70. package/examples/toolchains/mixed-python/good/frontend/src/label.js +4 -0
  71. package/examples/toolchains/mixed-python/policy.json +121 -0
  72. package/examples/toolchains/mixed-python/repo/REQUIREMENTS.md +9 -0
  73. package/examples/toolchains/mixed-python/repo/_gitignore +6 -0
  74. package/examples/toolchains/mixed-python/repo/backend/.python-version +1 -0
  75. package/examples/toolchains/mixed-python/repo/backend/pyproject.toml +19 -0
  76. package/examples/toolchains/mixed-python/repo/backend/src/fx_backend/__init__.py +6 -0
  77. package/examples/toolchains/mixed-python/repo/backend/tests/test_label.py +11 -0
  78. package/examples/toolchains/mixed-python/repo/backend/uv.lock +108 -0
  79. package/examples/toolchains/mixed-python/repo/contract/check.mjs +17 -0
  80. package/examples/toolchains/mixed-python/repo/contract/label.json +9 -0
  81. package/examples/toolchains/mixed-python/repo/frontend/package.json +15 -0
  82. package/examples/toolchains/mixed-python/repo/frontend/pnpm-lock.yaml +22 -0
  83. package/examples/toolchains/mixed-python/repo/frontend/src/label.js +4 -0
  84. package/examples/toolchains/mixed-python/repo/frontend/test/label.test.js +11 -0
  85. package/examples/toolchains/mixed-python/task.json +25 -0
  86. package/examples/toolchains/npm/bad/src/label.js +4 -0
  87. package/examples/toolchains/npm/good/src/label.js +4 -0
  88. package/examples/toolchains/npm/policy.json +82 -0
  89. package/examples/toolchains/npm/repo/REQUIREMENTS.md +9 -0
  90. package/examples/toolchains/npm/repo/_gitignore +4 -0
  91. package/examples/toolchains/npm/repo/package-lock.json +22 -0
  92. package/examples/toolchains/npm/repo/package.json +13 -0
  93. package/examples/toolchains/npm/repo/src/label.js +4 -0
  94. package/examples/toolchains/npm/repo/test/label.test.js +13 -0
  95. package/examples/toolchains/npm/task.json +25 -0
  96. package/examples/toolchains/pnpm/bad/packages/label/src/label.js +4 -0
  97. package/examples/toolchains/pnpm/good/packages/label/src/label.js +4 -0
  98. package/examples/toolchains/pnpm/policy.json +85 -0
  99. package/examples/toolchains/pnpm/repo/REQUIREMENTS.md +9 -0
  100. package/examples/toolchains/pnpm/repo/_gitignore +4 -0
  101. package/examples/toolchains/pnpm/repo/package.json +10 -0
  102. package/examples/toolchains/pnpm/repo/packages/checker/check.mjs +5 -0
  103. package/examples/toolchains/pnpm/repo/packages/checker/package.json +9 -0
  104. package/examples/toolchains/pnpm/repo/packages/label/package.json +14 -0
  105. package/examples/toolchains/pnpm/repo/packages/label/src/label.js +4 -0
  106. package/examples/toolchains/pnpm/repo/packages/label/test/label.test.js +13 -0
  107. package/examples/toolchains/pnpm/repo/pnpm-lock.yaml +29 -0
  108. package/examples/toolchains/pnpm/repo/pnpm-workspace.yaml +2 -0
  109. package/examples/toolchains/pnpm/task.json +25 -0
  110. package/examples/toolchains/python/bad/src/fx_label/__init__.py +6 -0
  111. package/examples/toolchains/python/good/src/fx_label/__init__.py +6 -0
  112. package/examples/toolchains/python/policy.json +80 -0
  113. package/examples/toolchains/python/repo/.python-version +1 -0
  114. package/examples/toolchains/python/repo/REQUIREMENTS.md +9 -0
  115. package/examples/toolchains/python/repo/_gitignore +5 -0
  116. package/examples/toolchains/python/repo/pyproject.toml +19 -0
  117. package/examples/toolchains/python/repo/src/fx_label/__init__.py +6 -0
  118. package/examples/toolchains/python/repo/tests/test_label.py +13 -0
  119. package/examples/toolchains/python/repo/uv.lock +108 -0
  120. package/examples/toolchains/python/task.json +25 -0
  121. package/examples/toolchains/turbo/bad/packages/label/src/label.js +4 -0
  122. package/examples/toolchains/turbo/good/packages/label/src/label.js +4 -0
  123. package/examples/toolchains/turbo/policy.json +110 -0
  124. package/examples/toolchains/turbo/repo/REQUIREMENTS.md +9 -0
  125. package/examples/toolchains/turbo/repo/_gitignore +4 -0
  126. package/examples/toolchains/turbo/repo/package.json +13 -0
  127. package/examples/toolchains/turbo/repo/packages/checker/check.mjs +5 -0
  128. package/examples/toolchains/turbo/repo/packages/checker/package.json +9 -0
  129. package/examples/toolchains/turbo/repo/packages/label/package.json +14 -0
  130. package/examples/toolchains/turbo/repo/packages/label/src/label.js +4 -0
  131. package/examples/toolchains/turbo/repo/packages/label/test/label.test.js +13 -0
  132. package/examples/toolchains/turbo/repo/pnpm-lock.yaml +94 -0
  133. package/examples/toolchains/turbo/repo/pnpm-workspace.yaml +2 -0
  134. package/examples/toolchains/turbo/repo/turbo.json +7 -0
  135. package/examples/toolchains/turbo/task.json +25 -0
  136. package/examples/turbo-starter/README.md +16 -0
  137. package/examples/turbo-starter/changes/issued-at-consumer-only.patch +12 -0
  138. package/examples/turbo-starter/changes/issued-at.patch +130 -0
  139. package/examples/turbo-starter/cleanup.mjs +58 -0
  140. package/examples/turbo-starter/graph.json +32 -0
  141. package/examples/turbo-starter/harness/acceptance/db-isolation.test.mjs +97 -0
  142. package/examples/turbo-starter/harness/acceptance/env-probe.test.mjs +75 -0
  143. package/examples/turbo-starter/harness/acceptance/generation.test.mjs +54 -0
  144. package/examples/turbo-starter/harness/acceptance/issued-at.test.mjs +43 -0
  145. package/examples/turbo-starter/harness/acceptance/lifecycle-probe.test.mjs +47 -0
  146. package/examples/turbo-starter/harness/compose-bridge.mjs +593 -0
  147. package/examples/turbo-starter/harness/compose.acceptance.yml +23 -0
  148. package/examples/turbo-starter/harness/env/backend.env.template +7 -0
  149. package/examples/turbo-starter/harness/env/compose.env.template +6 -0
  150. package/examples/turbo-starter/policy.json +109 -0
  151. package/examples/turbo-starter/policy.lifecycle.json +114 -0
  152. package/examples/turbo-starter/setup.mjs +352 -0
  153. package/examples/two-vendors/policy.json +30 -0
  154. package/lib/agents/cli-adapter.d.ts +48 -0
  155. package/lib/agents/cli-adapter.js +393 -0
  156. package/lib/agents/inspect.d.ts +60 -0
  157. package/lib/agents/inspect.js +296 -0
  158. package/lib/agents/probe-server.d.ts +2 -0
  159. package/lib/agents/probe-server.js +13 -0
  160. package/lib/agents/review-probe.d.ts +345 -0
  161. package/lib/agents/review-probe.js +1037 -0
  162. package/lib/agents/runtime-events.d.ts +11 -0
  163. package/lib/agents/runtime-events.js +21 -0
  164. package/lib/agents/schemas.d.ts +217 -0
  165. package/lib/agents/schemas.js +124 -0
  166. package/lib/agents/usage.d.ts +8 -0
  167. package/lib/agents/usage.js +83 -0
  168. package/lib/catalog/bytes.d.ts +9 -0
  169. package/lib/catalog/bytes.js +14 -0
  170. package/lib/catalog/harness.d.ts +3 -0
  171. package/lib/catalog/harness.js +11 -0
  172. package/lib/catalog/index.d.ts +5 -0
  173. package/lib/catalog/index.js +5 -0
  174. package/lib/catalog/operations.d.ts +24 -0
  175. package/lib/catalog/operations.js +74 -0
  176. package/lib/catalog/page.d.ts +46 -0
  177. package/lib/catalog/page.js +128 -0
  178. package/lib/catalog/shared.d.ts +37 -0
  179. package/lib/catalog/shared.js +67 -0
  180. package/lib/cli.d.ts +2 -0
  181. package/lib/cli.js +673 -0
  182. package/lib/connectors/files.d.ts +108 -0
  183. package/lib/connectors/files.js +133 -0
  184. package/lib/contracts/catalog.d.ts +31 -0
  185. package/lib/contracts/catalog.js +18 -0
  186. package/lib/contracts/checks.d.ts +307 -0
  187. package/lib/contracts/checks.js +181 -0
  188. package/lib/contracts/cli.d.ts +4665 -0
  189. package/lib/contracts/cli.js +840 -0
  190. package/lib/contracts/context.d.ts +135 -0
  191. package/lib/contracts/context.js +129 -0
  192. package/lib/contracts/diagnosis.d.ts +108 -0
  193. package/lib/contracts/diagnosis.js +69 -0
  194. package/lib/contracts/digest.d.ts +9 -0
  195. package/lib/contracts/digest.js +22 -0
  196. package/lib/contracts/errors.d.ts +89 -0
  197. package/lib/contracts/errors.js +74 -0
  198. package/lib/contracts/events.d.ts +827 -0
  199. package/lib/contracts/events.js +258 -0
  200. package/lib/contracts/execution.d.ts +3423 -0
  201. package/lib/contracts/execution.js +936 -0
  202. package/lib/contracts/failure.d.ts +38 -0
  203. package/lib/contracts/failure.js +53 -0
  204. package/lib/contracts/index.d.ts +22 -0
  205. package/lib/contracts/index.js +22 -0
  206. package/lib/contracts/planning.d.ts +433 -0
  207. package/lib/contracts/planning.js +159 -0
  208. package/lib/contracts/policy.d.ts +1075 -0
  209. package/lib/contracts/policy.js +544 -0
  210. package/lib/contracts/ports.d.ts +417 -0
  211. package/lib/contracts/ports.js +1 -0
  212. package/lib/contracts/primitives.d.ts +63 -0
  213. package/lib/contracts/primitives.js +73 -0
  214. package/lib/contracts/profiles.d.ts +340 -0
  215. package/lib/contracts/profiles.js +109 -0
  216. package/lib/contracts/project.d.ts +69 -0
  217. package/lib/contracts/project.js +47 -0
  218. package/lib/contracts/published.d.ts +3467 -0
  219. package/lib/contracts/published.js +40 -0
  220. package/lib/contracts/repair-policy.d.ts +31 -0
  221. package/lib/contracts/repair-policy.js +77 -0
  222. package/lib/contracts/result.d.ts +1284 -0
  223. package/lib/contracts/result.js +311 -0
  224. package/lib/contracts/review.d.ts +441 -0
  225. package/lib/contracts/review.js +477 -0
  226. package/lib/contracts/toolchain.d.ts +96 -0
  227. package/lib/contracts/toolchain.js +89 -0
  228. package/lib/contracts/version.d.ts +17 -0
  229. package/lib/contracts/version.js +17 -0
  230. package/lib/contracts/work.d.ts +171 -0
  231. package/lib/contracts/work.js +178 -0
  232. package/lib/control/base-move.d.ts +44 -0
  233. package/lib/control/base-move.js +90 -0
  234. package/lib/control/doctor.d.ts +50 -0
  235. package/lib/control/doctor.js +113 -0
  236. package/lib/control/harness.d.ts +1125 -0
  237. package/lib/control/harness.js +741 -0
  238. package/lib/control/provenance.d.ts +17 -0
  239. package/lib/control/provenance.js +25 -0
  240. package/lib/control/recovery.d.ts +237 -0
  241. package/lib/control/recovery.js +236 -0
  242. package/lib/control/review.d.ts +62 -0
  243. package/lib/control/review.js +182 -0
  244. package/lib/control/workflow.d.ts +256 -0
  245. package/lib/control/workflow.js +277 -0
  246. package/lib/engine/budget.d.ts +345 -0
  247. package/lib/engine/budget.js +278 -0
  248. package/lib/engine/classify.d.ts +8 -0
  249. package/lib/engine/classify.js +41 -0
  250. package/lib/engine/engine.d.ts +1564 -0
  251. package/lib/engine/engine.js +2283 -0
  252. package/lib/engine/failure.d.ts +1 -0
  253. package/lib/engine/failure.js +3 -0
  254. package/lib/engine/joint-runner.d.ts +257 -0
  255. package/lib/engine/joint-runner.js +254 -0
  256. package/lib/engine/measured.d.ts +15 -0
  257. package/lib/engine/measured.js +82 -0
  258. package/lib/engine/prompt.d.ts +66 -0
  259. package/lib/engine/prompt.js +131 -0
  260. package/lib/engine/property-recovery.d.ts +50 -0
  261. package/lib/engine/property-recovery.js +171 -0
  262. package/lib/engine/repair.d.ts +33 -0
  263. package/lib/engine/repair.js +82 -0
  264. package/lib/engine/result.d.ts +9 -0
  265. package/lib/engine/result.js +194 -0
  266. package/lib/engine/reuse.d.ts +80 -0
  267. package/lib/engine/reuse.js +102 -0
  268. package/lib/engine/runner.d.ts +360 -0
  269. package/lib/engine/runner.js +1844 -0
  270. package/lib/engine/standalone.d.ts +6 -0
  271. package/lib/engine/standalone.js +48 -0
  272. package/lib/engine/usage.d.ts +87 -0
  273. package/lib/engine/usage.js +165 -0
  274. package/lib/environment/isolation.d.ts +110 -0
  275. package/lib/environment/isolation.js +238 -0
  276. package/lib/environment/lifecycle.d.ts +40 -0
  277. package/lib/environment/lifecycle.js +197 -0
  278. package/lib/environment/live-calls.d.ts +14 -0
  279. package/lib/environment/live-calls.js +73 -0
  280. package/lib/environment/os-tools.d.ts +16 -0
  281. package/lib/environment/os-tools.js +35 -0
  282. package/lib/environment/process.d.ts +40 -0
  283. package/lib/environment/process.js +375 -0
  284. package/lib/environment/redaction.d.ts +22 -0
  285. package/lib/environment/redaction.js +102 -0
  286. package/lib/environment/resources.d.ts +31 -0
  287. package/lib/environment/resources.js +120 -0
  288. package/lib/explain/diagnose.d.ts +25 -0
  289. package/lib/explain/diagnose.js +60 -0
  290. package/lib/explain/state.d.ts +18 -0
  291. package/lib/explain/state.js +305 -0
  292. package/lib/index.d.ts +72 -0
  293. package/lib/index.js +74 -0
  294. package/lib/init/policy.d.ts +40 -0
  295. package/lib/init/policy.js +73 -0
  296. package/lib/init/project.d.ts +52 -0
  297. package/lib/init/project.js +412 -0
  298. package/lib/integrations/connector/commands.d.ts +358 -0
  299. package/lib/integrations/connector/commands.js +428 -0
  300. package/lib/integrations/connector/config.d.ts +215 -0
  301. package/lib/integrations/connector/config.js +214 -0
  302. package/lib/integrations/connector/delivery.d.ts +107 -0
  303. package/lib/integrations/connector/delivery.js +591 -0
  304. package/lib/integrations/connector/fake.d.ts +291 -0
  305. package/lib/integrations/connector/fake.js +786 -0
  306. package/lib/integrations/connector/history.d.ts +124 -0
  307. package/lib/integrations/connector/history.js +497 -0
  308. package/lib/integrations/connector/index.d.ts +16 -0
  309. package/lib/integrations/connector/index.js +16 -0
  310. package/lib/integrations/connector/redact.d.ts +19 -0
  311. package/lib/integrations/connector/redact.js +91 -0
  312. package/lib/integrations/connector/registry.d.ts +15 -0
  313. package/lib/integrations/connector/registry.js +43 -0
  314. package/lib/integrations/connector/snapshot.d.ts +131 -0
  315. package/lib/integrations/connector/snapshot.js +422 -0
  316. package/lib/integrations/connector/source.d.ts +37 -0
  317. package/lib/integrations/connector/source.js +73 -0
  318. package/lib/integrations/connector/steps.d.ts +71 -0
  319. package/lib/integrations/connector/steps.js +188 -0
  320. package/lib/integrations/connector/store.d.ts +140 -0
  321. package/lib/integrations/connector/store.js +277 -0
  322. package/lib/integrations/connector/summary.d.ts +38 -0
  323. package/lib/integrations/connector/summary.js +59 -0
  324. package/lib/integrations/connector/testing-worker.d.ts +1 -0
  325. package/lib/integrations/connector/testing-worker.js +81 -0
  326. package/lib/integrations/connector/testing.d.ts +205 -0
  327. package/lib/integrations/connector/testing.js +1615 -0
  328. package/lib/integrations/connector/transport.d.ts +240 -0
  329. package/lib/integrations/connector/transport.js +28 -0
  330. package/lib/integrations/memory/context.d.ts +120 -0
  331. package/lib/integrations/memory/context.js +239 -0
  332. package/lib/integrations/memory/index.d.ts +8 -0
  333. package/lib/integrations/memory/index.js +8 -0
  334. package/lib/integrations/memory/provider.d.ts +79 -0
  335. package/lib/integrations/memory/provider.js +22 -0
  336. package/lib/integrations/memory/sink.d.ts +56 -0
  337. package/lib/integrations/memory/sink.js +116 -0
  338. package/lib/integrations/memory/testing.d.ts +44 -0
  339. package/lib/integrations/memory/testing.js +61 -0
  340. package/lib/integrations/relay-v1/index.d.ts +122 -0
  341. package/lib/integrations/relay-v1/index.js +860 -0
  342. package/lib/integrations/relay-v2/index.d.ts +145 -0
  343. package/lib/integrations/relay-v2/index.js +752 -0
  344. package/lib/integrations/relay-v2/process.d.ts +32 -0
  345. package/lib/integrations/relay-v2/process.js +112 -0
  346. package/lib/integrations/relay-v2/protocol.d.ts +172 -0
  347. package/lib/integrations/relay-v2/protocol.js +142 -0
  348. package/lib/package.d.ts +2 -0
  349. package/lib/package.js +3 -0
  350. package/lib/planning/check.d.ts +26 -0
  351. package/lib/planning/check.js +174 -0
  352. package/lib/planning/facts.d.ts +13 -0
  353. package/lib/planning/facts.js +47 -0
  354. package/lib/planning/graph.d.ts +20 -0
  355. package/lib/planning/graph.js +114 -0
  356. package/lib/planning/index.d.ts +6 -0
  357. package/lib/planning/index.js +6 -0
  358. package/lib/planning/issues.d.ts +19 -0
  359. package/lib/planning/issues.js +210 -0
  360. package/lib/planning/request.d.ts +19 -0
  361. package/lib/planning/request.js +57 -0
  362. package/lib/planning/standalone.d.ts +16 -0
  363. package/lib/planning/standalone.js +19 -0
  364. package/lib/planning/stub.d.ts +2 -0
  365. package/lib/planning/stub.js +5 -0
  366. package/lib/profiles/resolve.d.ts +266 -0
  367. package/lib/profiles/resolve.js +322 -0
  368. package/lib/projections/chain.d.ts +35 -0
  369. package/lib/projections/chain.js +72 -0
  370. package/lib/projections/clip.d.ts +6 -0
  371. package/lib/projections/clip.js +23 -0
  372. package/lib/projections/enums.d.ts +7 -0
  373. package/lib/projections/enums.js +19 -0
  374. package/lib/projections/index.d.ts +8 -0
  375. package/lib/projections/index.js +9 -0
  376. package/lib/projections/next.d.ts +28 -0
  377. package/lib/projections/next.js +75 -0
  378. package/lib/projections/progress.d.ts +27 -0
  379. package/lib/projections/progress.js +37 -0
  380. package/lib/projections/queue.d.ts +21 -0
  381. package/lib/projections/queue.js +18 -0
  382. package/lib/projections/stop.d.ts +98 -0
  383. package/lib/projections/stop.js +532 -0
  384. package/lib/setup/files.d.ts +45 -0
  385. package/lib/setup/files.js +280 -0
  386. package/lib/storage/document.d.ts +1286 -0
  387. package/lib/storage/document.js +80 -0
  388. package/lib/storage/sqlite.d.ts +35 -0
  389. package/lib/storage/sqlite.js +260 -0
  390. package/lib/testing/index.d.ts +5 -0
  391. package/lib/testing/index.js +5 -0
  392. package/lib/testing/store-contract.d.ts +8 -0
  393. package/lib/testing/store-contract.js +167 -0
  394. package/lib/toolchains/index.d.ts +9 -0
  395. package/lib/toolchains/index.js +9 -0
  396. package/lib/toolchains/inspect.d.ts +105 -0
  397. package/lib/toolchains/inspect.js +831 -0
  398. package/lib/toolchains/manifests.d.ts +67 -0
  399. package/lib/toolchains/manifests.js +238 -0
  400. package/lib/toolchains/probe.d.ts +28 -0
  401. package/lib/toolchains/probe.js +54 -0
  402. package/lib/toolchains/recipes.d.ts +33 -0
  403. package/lib/toolchains/recipes.js +51 -0
  404. package/lib/validate.d.ts +37 -0
  405. package/lib/validate.js +182 -0
  406. package/lib/verification/acceptance.d.ts +284 -0
  407. package/lib/verification/acceptance.js +670 -0
  408. package/lib/verification/checks.d.ts +72 -0
  409. package/lib/verification/checks.js +190 -0
  410. package/lib/verification/confirm.d.ts +125 -0
  411. package/lib/verification/confirm.js +411 -0
  412. package/lib/verification/corpus.d.ts +1303 -0
  413. package/lib/verification/corpus.js +744 -0
  414. package/lib/verification/dependencies.d.ts +66 -0
  415. package/lib/verification/dependencies.js +144 -0
  416. package/lib/verification/gates.d.ts +182 -0
  417. package/lib/verification/gates.js +641 -0
  418. package/lib/verification/joint.d.ts +63 -0
  419. package/lib/verification/joint.js +121 -0
  420. package/lib/verification/proof.d.ts +54 -0
  421. package/lib/verification/proof.js +96 -0
  422. package/lib/verification/property.d.ts +86 -0
  423. package/lib/verification/property.js +214 -0
  424. package/lib/verification/requirements.d.ts +25 -0
  425. package/lib/verification/requirements.js +69 -0
  426. package/lib/verification/self-check.d.ts +29 -0
  427. package/lib/verification/self-check.js +99 -0
  428. package/lib/verification/spike.d.ts +79 -0
  429. package/lib/verification/spike.js +124 -0
  430. package/package.json +104 -4
  431. package/profiles/expo-mobile.json +15 -0
  432. package/profiles/go-api.json +15 -0
  433. package/profiles/go-gotestsum.json +21 -0
  434. package/profiles/mobile-maestro.json +29 -0
  435. package/profiles/nest-api.json +26 -0
  436. package/profiles/next-product.json +72 -0
  437. package/profiles/node-checks.json +77 -0
  438. package/profiles/npm-ci.json +22 -0
  439. package/profiles/pnpm-frozen.json +24 -0
  440. package/profiles/python-api.json +32 -0
  441. package/profiles/python-uv.json +26 -0
  442. package/profiles/react-native.json +50 -0
  443. package/profiles/react-vite-admin.json +71 -0
  444. package/schemas/context-snapshot.schema.json +231 -0
  445. package/schemas/contract-document.schema.json +385 -0
  446. package/schemas/execution-document.schema.json +3881 -0
  447. package/schemas/execution-policy.schema.json +2196 -0
  448. package/schemas/joint-verification.schema.json +617 -0
  449. package/schemas/plan-draft.schema.json +217 -0
  450. package/schemas/project-manifest.schema.json +167 -0
  451. package/schemas/result-envelope.schema.json +1654 -0
  452. package/schemas/review-record.schema.json +177 -0
  453. package/schemas/run-event.schema.json +2458 -0
  454. package/schemas/run-result.schema.json +1572 -0
  455. package/schemas/stack-profile.schema.json +535 -0
  456. package/schemas/stop-diagnosis.schema.json +169 -0
  457. package/schemas/work-graph.schema.json +381 -0
  458. package/schemas/work-order.schema.json +256 -0
  459. package/skills/harness/SKILL.md +247 -0
  460. package/skills/harness-setup/SKILL.md +356 -0
  461. package/templates/AGENTS.md +13 -0
  462. package/templates/controller-mode/AGENTS.controller.md +58 -0
  463. package/templates/controller-mode/README.md +44 -0
  464. package/templates/graph.json +22 -0
  465. package/templates/plan-draft.json +35 -0
  466. package/templates/policy.json +28 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DevContour contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,269 @@
1
- # Temporary Holding Version
1
+ # devcontour-harness
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Headless-движок исполнения инженерных поручений: согласованный граф работ,
4
+ изолированные попытки в Git worktree, обязательные gates, независимое ревью,
5
+ интеграция с принятой веткой через compare-and-swap и машинный результат с SHA
6
+ и доказательствами.
7
+
8
+ > Статус: `0.1.0-alpha.12` — предварительный выпуск (alpha). Договоры
9
+ > `v1alpha1` могут измениться между alpha-версиями; закрепляйте точную версию.
10
+ > Файл → ревью плана → кандидат → интеграция → принятие → результат JSON, с
11
+ > ограниченным восстановлением, повторным использованием кандидата, бюджетами,
12
+ > потребителями, свойствами и корпусом, совместной проверкой репозиториев и
13
+ > явным режимом одного вендора.
14
+
15
+ Пакет включает встроенные профили стеков (`profiles/`), skills
16
+ `skills/harness/SKILL.md` (работа с поручениями) и
17
+ `skills/harness-setup/SKILL.md` (установка, первая настройка и обновление
18
+ версии), шаблоны политики, графа и инструкции агентам (`templates/`).
19
+
20
+ ## Требования
21
+
22
+ - Node.js ≥ 24.3.0, Git.
23
+ - CLI `codex` и `claude`, установленные и авторизованные (для живого запуска).
24
+ `harness doctor` проверяет их без вызова модели.
25
+
26
+ ## Установка
27
+
28
+ Из npm — точная версия (воспроизводимо) или последняя alpha по тегу:
29
+
30
+ ```sh
31
+ npm install --save-exact devcontour-harness@0.1.0-alpha.12 # точная версия
32
+ # или: npm install --save-exact devcontour-harness@alpha # текущая alpha
33
+ npx harness --version
34
+ ```
35
+
36
+ Выпуски публикуются под тегом `alpha`; ставьте точную версию или `@alpha`,
37
+ а не версию по умолчанию без тега.
38
+
39
+ Чтобы не менять зависимости и lockfile существующего проекта, пакет ставят в
40
+ отдельный каталог инструментов — снаружи репозитория или в `.harness-tools/`
41
+ внутри него ([standalone](docs/standalone.md#установка), skill
42
+ [harness-setup](skills/harness-setup/SKILL.md)).
43
+
44
+ Из локального архива `devcontour-harness-<version>.tgz` (поддерживаемый
45
+ способ без registry):
46
+
47
+ ```sh
48
+ npm install --omit=dev --ignore-scripts ./devcontour-harness-<version>.tgz
49
+ ```
50
+
51
+ В архиве уже собраны JavaScript, декларации и JSON-схемы: установка не
52
+ выполняет скриптов и не требует devDependencies (`--omit=dev
53
+ --ignore-scripts` допустимы и для установки из npm). Проверка архива
54
+ целиком — `npm run check:install -- <архив>` из checkout пакета: установка в
55
+ отдельный каталог без сети, CLI, библиотека, профили, полный цикл на fixture
56
+ runtime и отказы.
57
+
58
+ CLI ставится локально: `npx harness` находит его в `node_modules/.bin`
59
+ ближайшего каталога установки (в том числе из его подкаталогов). Вне этого
60
+ каталога `npx harness` предложит скачать другой пакет с именем `harness` —
61
+ откажитесь; глобальная команда `harness` в `PATH` не предполагается.
62
+
63
+ ## Быстрый старт
64
+
65
+ Пример — вымышленный репозиторий с одной задачей: добавить `greet(name)`.
66
+ Команды выполняются из каталога, где установлен пакет; `harness` в таблице
67
+ ниже — тот же CLI (`npx harness …`).
68
+
69
+ ```sh
70
+ cp -R node_modules/devcontour-harness/examples/single-task greeting && cd greeting
71
+ git init -q && git add -A && git commit -qm init
72
+ npx harness validate --graph graph.json --policy policy.json
73
+ npx harness run --graph graph.json --policy policy.json --state ../greeting-state \
74
+ --author external --sink file:../greeting-results
75
+ npx harness result --state ../greeting-state --work add-greeting
76
+ git rev-parse refs/heads/harness/accepted # совпадает с data.result.shas.result
77
+ ```
78
+
79
+ `run` регистрирует граф, проводит ревью плана (reviewer по политике),
80
+ согласует его и ведёт очередь до простоя. Принятое поручение — коммит
81
+ интеграции в `refs/heads/harness/accepted`; ни основная ветка, ни рабочее
82
+ дерево не меняются. Результат и состояние доставки — `harness result`.
83
+
84
+ Конфигурации примера:
85
+
86
+ | Файл | Вендоры |
87
+ | ------------------------- | ------------------------------------------ |
88
+ | `policy.json` | writer claude, reviewer codex |
89
+ | `policy-same-vendor.json` | reviewer того же вендора, разрешённый явно |
90
+
91
+ ## Команды
92
+
93
+ | Команда | Что делает |
94
+ | -------------------------------------------- | -------------------------------------------------- |
95
+ | `validate --graph F --policy F` | Проверка входов без моделей и записи |
96
+ | `review-plan / review-contract … --author A` | Раунд технического ревью с историей находок |
97
+ | `approve --state D --subject ID --digest H` | Согласование оператором (`approvalMode: operator`) |
98
+ | `run --graph F --policy F --state D` | Регистрация, согласование и работа до простоя |
99
+ | `status / events / result --state D` | Чтение без побочных эффектов |
100
+ | `pause / resume / cancel / retry --state D` | Управление очередью и поручением |
101
+ | `deliver --state D --work ID --sink file:D` | Повтор доставки без моделей и интеграции |
102
+ | `profile --profile ID [--repository D]` | Разрешение профиля стека без команд проекта |
103
+ | `doctor` | Версии, runtime, sandbox, совместимость состояния |
104
+
105
+ stdout — один JSON (`devcontour-harness/v1alpha1`), диагностика — stderr. Exit
106
+ codes: 0 успех, 2 неверный вход, 3 отказ/блокировка, 4 инфраструктура.
107
+ `HARNESS_CODEX_BIN` и `HARNESS_CLAUDE_BIN` подменяют исполняемые файлы runtime
108
+ — например, fixture executable в тестах (это не живая модель).
109
+
110
+ ## Библиотека
111
+
112
+ ```js
113
+ import { Harness, validateInputs } from 'devcontour-harness';
114
+ ```
115
+
116
+ Библиотека и CLI вызывают одни и те же операции `Harness`; операции «передать
117
+ PASS» нет. Адаптеры хоста реализуют порты `ExecutionStore`, `WorkSource`,
118
+ `ContextSource`, `ResultSink`; набор проверок договора хранилища —
119
+ `devcontour-harness/testing`.
120
+
121
+ Пакет поставляет декларации TypeScript (`lib/**/*.d.ts`) для `.`,
122
+ `/contracts` и `/testing`; JSON-схемы входов и выходов —
123
+ `devcontour-harness/schemas/<имя>.schema.json`. Декларации используют типы
124
+ Node.js: TypeScript-потребителю нужен `@types/node` (или `skipLibCheck`).
125
+
126
+ ## Выпуск 0.1.0-alpha.12
127
+
128
+ Skill установки и обновления. Подробно —
129
+ [заметки выпуска](docs/release-notes/0.1.0-alpha.12.md).
130
+
131
+ - `skills/harness-setup/SKILL.md` — агент один раз спрашивает решения первой
132
+ настройки (новый или существующий проект, ветка, каталог установки —
133
+ `.harness-tools/` в проекте или снаружи, источник пакета, writer и reviewer
134
+ с моделями, согласование, источник задач: файлы или Relay), ставит точную
135
+ версию, выполняет `init` и обновляет версию с копией state и проверкой
136
+ совместимости. Движок, договоры и формат состояния не менялись.
137
+
138
+ ## Выпуск 0.1.0-alpha.11
139
+
140
+ Профили в форме хоста. Подробно —
141
+ [заметки выпуска](docs/release-notes/0.1.0-alpha.11.md).
142
+
143
+ - `resolveProfile(ref, { layerSchema })` — слои профиля разбирает схема файла
144
+ хоста; сложение, проверки gates и digest прежние.
145
+
146
+ ## Выпуск 0.1.0-alpha.10
147
+
148
+ Каталог общих операций и границы ответа. Подробно —
149
+ [заметки выпуска](docs/release-notes/0.1.0-alpha.10.md).
150
+
151
+ - `harness capabilities` — каталог общих операций из одной декларации:
152
+ описание, `readOnly`, схемы входа и ответа, пределы байт.
153
+ - Ответ общей операции сверх предела — `RESPONSE_TOO_LARGE` без усечения.
154
+ - Для хостов: `operationCatalog`, `jsonBytes`/`checkJsonBytes`, `pageItems`,
155
+ `resolveProfile({ includeLeafContent })`.
156
+
157
+ ## Выпуск 0.1.0-alpha.9
158
+
159
+ Нейтральное планирование: ведущий агент сам составляет draft графа.
160
+ Подробно — [заметки выпуска](docs/release-notes/0.1.0-alpha.9.md).
161
+
162
+ - `harness plan-request` — prompt и факты проекта для плана, только чтение.
163
+ - `harness plan-check` — проверка draft против фактов и сборка `WorkGraph`;
164
+ неизвестные роли/gates/контракты и выдуманные digest — явные проблемы,
165
+ без подстановки и снижения требований.
166
+ - Общие операции планирования для хостов и схема `plan-draft`.
167
+
168
+ ## Выпуск 0.1.0-alpha.8
169
+
170
+ Самостоятельный маршрут для агента пользователя и общие операции для хостов.
171
+ Подробно — [заметки выпуска](docs/release-notes/0.1.0-alpha.8.md).
172
+
173
+ - `harness init` готовит существующий Git npm/pnpm-репозиторий create-only:
174
+ `.harness/` с политикой из профиля и toolchain inspection, state вне
175
+ репозитория, повтор и продолжение после прерывания без перезаписи
176
+ ([standalone](docs/standalone.md)).
177
+ - `harness explain` объясняет остановки: код, причина, фаза, кто действует,
178
+ допустимый шаг и evidence — только чтение, без повторов и вызовов моделей.
179
+ - Отказы TLS/DNS/соединения (`EPROTO`, `ECONNREFUSED`, `ENOTFOUND`,
180
+ `EAI_AGAIN`, `ETIMEDOUT`, `EHOSTUNREACH`, `ENETUNREACH`, `TLS handshake
181
+ failed/timeout`) — класс `environment` с обычным ограниченным повтором.
182
+ - Общие операции для хостов: безопасная подготовка файлов и проекции
183
+ диагностики (`devcontour-harness/projections`, без `node:*`).
184
+
185
+ ## Выпуск 0.1.0-alpha.7
186
+
187
+ Исправление учёта команд reviewer в `inspection` ревью кода. Подробно —
188
+ [заметки выпуска](docs/release-notes/0.1.0-alpha.7.md).
189
+
190
+ - `inspection` собирается controller из событий runtime и журнала проверок
191
+ `run_check` одного вызова reviewer: запуски probe теперь засчитываются, а
192
+ команда с ненулевым кодом — выполнение, а не `diff-only`
193
+ ([review-probes](docs/review-probes.md#итог-inspection-что-reviewer-действительно-выполнил)).
194
+ - Старт probe подтверждается на границе исполнения; отказ до старта, отменённый
195
+ до запуска вызов и резерв бюджета выполнением не считаются. Уже отменённый
196
+ вызов больше не запускает команду.
197
+ - Gates, бюджеты, правила находок и принятия не менялись: `inspection` по-прежнему
198
+ не влияет на решение.
199
+
200
+ Записи alpha.6 читаются без пересчёта; состояние с новыми записями `inspection`
201
+ alpha.6 не читает — откат только через копию ([upgrade](docs/upgrade.md)).
202
+
203
+ ## Выпуск 0.1.0-alpha.6
204
+
205
+ Ядро работает как прежде; всё новое подключается явно. Подробно —
206
+ [заметки выпуска](docs/release-notes/0.1.0-alpha.6.md).
207
+
208
+ - Инструменты целевого проекта: npm, pnpm, Turborepo, Go/gotestsum,
209
+ Python/uv — явными шагами `prepare`, gates и `repositories[].toolchain`;
210
+ `doctor` и обязательный preflight `run` ([toolchains](docs/toolchains.md)).
211
+ - Рецепт Turbo Starter с lifecycle-мостом Docker
212
+ ([turbo-starter](docs/turbo-starter.md)).
213
+ - Коннектор задач с транспортами Relay v1 и Relay-2: команды `source-*`,
214
+ `run --source`, доставка с намерением, read-back и явным разбором
215
+ неизвестного исхода ([connectors](docs/connectors.md)).
216
+ - Протокол ревью кода: ID и переходы находок, ограниченный повтор reviewer,
217
+ `REVIEW_PROTOCOL_INVALID` ([review-protocol](docs/review-protocol.md));
218
+ объявленные gates в проверках reviewer ([review-probes](docs/review-probes.md)).
219
+ - Точка подключения внешней памяти — договор без готового адаптера
220
+ ([hindsight](docs/integrations/hindsight.md)).
221
+
222
+ Состояние alpha.5 читается без преобразования. Standalone-состояние с новыми записями
223
+ alpha.5 не читает; прежний DevContour его открывает без отказа — откат только через копию ([upgrade](docs/upgrade.md)).
224
+
225
+ ## Выпуск 0.1.0-alpha.5
226
+
227
+ Первая публикация в npm. Движок, форматы состояния, политики и договоры — те
228
+ же, что в `0.1.0-alpha.4`; меняется поставка: пакет публикуется под тегом
229
+ `alpha`, архив собирается со свежей сборкой и проверенными схемами. Номер
230
+ версии движка при этом меняется, поэтому обновление с alpha.4 проходит по
231
+ процедуре [docs/upgrade.md](docs/upgrade.md): остановка writers, копия
232
+ состояния, активные попытки alpha.4 не продолжаются новой версией, а
233
+ завершаются через recovery.
234
+
235
+ Ограничения выпуска:
236
+
237
+ - Тесты и проверка архива используют fixture runtime: они подтверждают
238
+ механику (gates, область записи, fencing, recovery, результат), но не
239
+ качество живой модели.
240
+ - Готовых коннекторов к внешним сервисам задач, памяти и обмена сообщениями
241
+ выпуск не содержит: источники и получатели подключаются через порты библиотеки
242
+ ([examples/external-connector](examples/external-connector/README.md)).
243
+
244
+ ## Документация
245
+
246
+ - [Быстрый старт по шагам](docs/quickstart.md)
247
+ - [Установка, первая настройка и обновление версии — skill harness-setup](skills/harness-setup/SKILL.md)
248
+ - [Самостоятельный проект: init, планирование (plan-request, plan-check), explain, capabilities, проекции](docs/standalone.md)
249
+ - [Архитектура и границы доверия](docs/architecture.md)
250
+ - [Договоры: входы, выходы, порты, ошибки, CLI](docs/contracts.md)
251
+ - [Совместимость форматов](docs/compatibility.md)
252
+ - [Обновление и откат](docs/upgrade.md)
253
+ - [Примеры конфигурации](examples/README.md)
254
+
255
+ ## Разработка
256
+
257
+ ```sh
258
+ npm ci
259
+ npm run check # lint, typecheck, схемы, сборка, тесты, проверка архива
260
+ npm run format:check
261
+ ```
262
+
263
+ Тесты используют настоящие временные Git-репозитории, SQLite и fixture
264
+ executables CLI codex/claude; живые модели не вызываются. Результаты
265
+ fixture-тестов не являются проверкой качества моделей.
266
+
267
+ ## Лицензия
268
+
269
+ MIT, см. [LICENSE](LICENSE).