humanish 0.106.1 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (668) hide show
  1. package/ARCHITECTURE.md +38 -32
  2. package/CHANGELOG.md +28 -0
  3. package/CONTEXT.md +51 -41
  4. package/README.md +152 -174
  5. package/SECURITY.md +16 -26
  6. package/TELEMETRY.md +8 -6
  7. package/dist/actors/affordance.d.ts +4 -4
  8. package/dist/actors/affordance.js +12 -12
  9. package/dist/actors/agent-session.d.ts +2 -2
  10. package/dist/actors/agent-session.js +7 -7
  11. package/dist/actors/codex/app-server-actor-trace.d.ts +1 -1
  12. package/dist/actors/codex/app-server-actor-trace.js +1 -1
  13. package/dist/actors/codex/app-server-client.js +2 -1
  14. package/dist/actors/codex/app-server-trace.d.ts +0 -1
  15. package/dist/actors/codex/app-server-trace.js +1 -3
  16. package/dist/actors/codex/app-server-ui.js +1 -1
  17. package/dist/actors/codex/app-server.js +2 -1
  18. package/dist/actors/codex/codex-admission.d.ts +91 -0
  19. package/dist/actors/codex/codex-admission.js +150 -0
  20. package/dist/actors/codex/protocol-compat.d.ts +27 -0
  21. package/dist/actors/codex/protocol-compat.js +357 -0
  22. package/dist/actors/codex/protocol-contract.d.ts +61 -0
  23. package/dist/actors/codex/protocol-contract.js +471 -0
  24. package/dist/actors/codex/restricted-executable.d.ts +28 -4
  25. package/dist/actors/codex/restricted-executable.js +104 -29
  26. package/dist/actors/codex/restricted-launch.d.ts +9 -2
  27. package/dist/actors/codex/restricted-launch.js +43 -4
  28. package/dist/actors/codex/restricted-notifications.d.ts +101 -0
  29. package/dist/actors/codex/restricted-notifications.js +277 -0
  30. package/dist/actors/codex/restricted-participant.d.ts +30 -0
  31. package/dist/actors/codex/restricted-participant.js +66 -6
  32. package/dist/actors/codex/restricted-policy.d.ts +11 -3
  33. package/dist/actors/codex/restricted-policy.js +2 -2
  34. package/dist/actors/codex/restricted-session.d.ts +16 -3
  35. package/dist/actors/codex/restricted-session.js +60 -22
  36. package/dist/actors/codex/restricted-transport.d.ts +29 -0
  37. package/dist/actors/codex/restricted-transport.js +139 -27
  38. package/dist/actors/codex/restricted-turn.d.ts +19 -4
  39. package/dist/actors/codex/restricted-turn.js +43 -30
  40. package/dist/actors/computer-use/actor.d.ts +17 -17
  41. package/dist/actors/computer-use/actor.js +6 -6
  42. package/dist/actors/computer-use/admission-limit.d.ts +1 -1
  43. package/dist/actors/computer-use/admission-limit.js +1 -1
  44. package/dist/actors/computer-use/loop/actions.d.ts +3 -3
  45. package/dist/actors/computer-use/loop/actions.js +10 -10
  46. package/dist/actors/computer-use/loop/backstop.d.ts +3 -3
  47. package/dist/actors/computer-use/loop/backstop.js +15 -13
  48. package/dist/actors/computer-use/loop/ending.d.ts +7 -7
  49. package/dist/actors/computer-use/loop/ending.js +9 -9
  50. package/dist/actors/computer-use/loop/observation.d.ts +2 -2
  51. package/dist/actors/computer-use/loop/observation.js +9 -9
  52. package/dist/actors/computer-use/loop/provider-call.d.ts +1 -1
  53. package/dist/actors/computer-use/loop/provider-call.js +1 -1
  54. package/dist/actors/computer-use/loop/session.js +3 -3
  55. package/dist/actors/computer-use/loop/spend.d.ts +2 -2
  56. package/dist/actors/computer-use/loop/spend.js +4 -4
  57. package/dist/actors/computer-use/loop/trace.js +11 -10
  58. package/dist/actors/computer-use/loop/types.d.ts +37 -26
  59. package/dist/actors/computer-use/loop/usage.js +2 -2
  60. package/dist/actors/computer-use/loop.js +4 -4
  61. package/dist/actors/computer-use/openai-context.d.ts +37 -0
  62. package/dist/actors/computer-use/openai-context.js +214 -0
  63. package/dist/actors/computer-use/openai-provider.d.ts +12 -9
  64. package/dist/actors/computer-use/openai-provider.js +47 -36
  65. package/dist/actors/computer-use/openai-requests.d.ts +36 -10
  66. package/dist/actors/computer-use/openai-requests.js +82 -15
  67. package/dist/actors/computer-use/openai-wire.d.ts +19 -7
  68. package/dist/actors/computer-use/openai-wire.js +36 -34
  69. package/dist/actors/contract.d.ts +86 -49
  70. package/dist/actors/contract.js +29 -23
  71. package/dist/actors/local-agent/claude-session.d.ts +1 -1
  72. package/dist/actors/local-agent/claude-session.js +10 -9
  73. package/dist/actors/local-agent/cli.d.ts +8 -6
  74. package/dist/actors/local-agent/cli.js +24 -28
  75. package/dist/actors/local-agent/readiness.d.ts +2 -2
  76. package/dist/actors/local-agent/readiness.js +4 -4
  77. package/dist/actors/reasoning-effort.js +6 -6
  78. package/dist/actors/registry.d.ts +10 -10
  79. package/dist/actors/registry.js +18 -17
  80. package/dist/actors/scripted-browser/actor.d.ts +8 -8
  81. package/dist/actors/scripted-browser/actor.js +16 -16
  82. package/dist/actors/scripted-browser/browser-command.js +1 -1
  83. package/dist/actors/scripted-browser/journey.js +15 -4
  84. package/dist/actors/scripted-browser/steps.js +19 -1
  85. package/dist/actors/scripted-browser/types.d.ts +12 -2
  86. package/dist/actors/stop-conditions.d.ts +1 -1
  87. package/dist/actors/stop-conditions.js +1 -3
  88. package/dist/analysis/automatic-completion.d.ts +13 -8
  89. package/dist/analysis/automatic-completion.js +14 -8
  90. package/dist/analysis/automatic-config.d.ts +1 -1
  91. package/dist/analysis/automatic-config.js +2 -2
  92. package/dist/analysis/automatic.d.ts +10 -4
  93. package/dist/analysis/automatic.js +17 -13
  94. package/dist/analysis/codex-config.d.ts +6 -2
  95. package/dist/analysis/codex-config.js +22 -14
  96. package/dist/analysis/diagnostics.d.ts +23 -0
  97. package/dist/analysis/diagnostics.js +112 -0
  98. package/dist/analysis/evidence-sources.js +2 -2
  99. package/dist/analysis/evidence.js +6 -6
  100. package/dist/analysis/execute.d.ts +7 -1
  101. package/dist/analysis/execute.js +39 -12
  102. package/dist/analysis/job.d.ts +8 -5
  103. package/dist/analysis/job.js +15 -14
  104. package/dist/analysis/load.d.ts +1 -1
  105. package/dist/analysis/load.js +5 -5
  106. package/dist/analysis/provider.d.ts +9 -1
  107. package/dist/analysis/restricted-codex.d.ts +2 -0
  108. package/dist/analysis/restricted-codex.js +10 -1
  109. package/dist/analysis/service.d.ts +2 -0
  110. package/dist/analysis/service.js +35 -16
  111. package/dist/analysis/sharing.d.ts +2 -2
  112. package/dist/analysis/sharing.js +5 -5
  113. package/dist/analysis/store-executions.d.ts +5 -5
  114. package/dist/analysis/store-executions.js +12 -12
  115. package/dist/analysis/store.d.ts +4 -4
  116. package/dist/analysis/store.js +13 -13
  117. package/dist/cli/commands/analysis-signals.d.ts +2 -1
  118. package/dist/cli/commands/analysis-signals.js +4 -1
  119. package/dist/cli/commands/analyze.js +23 -18
  120. package/dist/cli/commands/codex.js +9 -9
  121. package/dist/cli/commands/comms.js +62 -34
  122. package/dist/cli/commands/feedback.js +20 -21
  123. package/dist/cli/commands/lab-format.d.ts +5 -4
  124. package/dist/cli/commands/lab-format.js +35 -23
  125. package/dist/cli/commands/lab-route-computer-use.d.ts +0 -2
  126. package/dist/cli/commands/lab-route-computer-use.js +32 -21
  127. package/dist/cli/commands/lab-route-preview.d.ts +1 -3
  128. package/dist/cli/commands/lab-route-preview.js +7 -7
  129. package/dist/cli/commands/lab-route-run.d.ts +6 -4
  130. package/dist/cli/commands/lab-route-run.js +6 -2
  131. package/dist/cli/commands/lab-route-scripted.d.ts +0 -2
  132. package/dist/cli/commands/lab-route-scripted.js +0 -1
  133. package/dist/cli/commands/lab-route-shared-world.d.ts +0 -2
  134. package/dist/cli/commands/lab-route-shared-world.js +3 -4
  135. package/dist/cli/commands/lab-route-terminal.d.ts +0 -2
  136. package/dist/cli/commands/lab-route-terminal.js +0 -1
  137. package/dist/cli/commands/lab-run.js +84 -54
  138. package/dist/cli/commands/lab-scorer.d.ts +2 -4
  139. package/dist/cli/commands/lab-scorer.js +1 -1
  140. package/dist/cli/commands/migrate.d.ts +4 -0
  141. package/dist/cli/commands/migrate.js +65 -0
  142. package/dist/cli/commands/observe.js +168 -107
  143. package/dist/cli/commands/run-command.d.ts +10 -0
  144. package/dist/cli/commands/run-command.js +85 -0
  145. package/dist/cli/commands/run-signals.d.ts +30 -0
  146. package/dist/cli/commands/run-signals.js +146 -0
  147. package/dist/cli/commands/runs.js +137 -136
  148. package/dist/cli/commands/setup.d.ts +2 -2
  149. package/dist/cli/commands/setup.js +26 -21
  150. package/dist/cli/commands/study.d.ts +3 -0
  151. package/dist/cli/commands/study.js +182 -0
  152. package/dist/cli/commands/tui.d.ts +4 -4
  153. package/dist/cli/commands/tui.js +21 -21
  154. package/dist/cli/commands/watch.js +64 -77
  155. package/dist/cli/deprecations.d.ts +18 -0
  156. package/dist/cli/deprecations.js +48 -0
  157. package/dist/cli/doctor.d.ts +18 -5
  158. package/dist/cli/doctor.js +111 -48
  159. package/dist/cli/first-run-path.d.ts +12 -10
  160. package/dist/cli/first-run-path.js +30 -28
  161. package/dist/cli/io.d.ts +46 -10
  162. package/dist/cli/io.js +109 -30
  163. package/dist/cli/observer-follow.d.ts +2 -2
  164. package/dist/cli/observer-follow.js +5 -6
  165. package/dist/cli/orientation.d.ts +6 -3
  166. package/dist/cli/orientation.js +43 -39
  167. package/dist/cli/product-sentence.d.ts +6 -0
  168. package/dist/cli/product-sentence.js +6 -0
  169. package/dist/cli/program.d.ts +6 -1
  170. package/dist/cli/program.js +112 -43
  171. package/dist/cli/telemetry.d.ts +17 -17
  172. package/dist/cli/telemetry.js +49 -41
  173. package/dist/cli.js +1 -1
  174. package/dist/comms/capture-surface.d.ts +14 -13
  175. package/dist/comms/capture-surface.js +23 -22
  176. package/dist/comms/catch-host.d.ts +8 -8
  177. package/dist/comms/catch-host.js +14 -14
  178. package/dist/comms/connections.js +4 -4
  179. package/dist/comms/email-catch.d.ts +3 -3
  180. package/dist/comms/email-catch.js +8 -8
  181. package/dist/comms/external-evidence.d.ts +27 -0
  182. package/dist/comms/external-evidence.js +93 -0
  183. package/dist/comms/extract.js +2 -2
  184. package/dist/comms/fake-inbox.d.ts +2 -2
  185. package/dist/comms/fake-inbox.js +2 -2
  186. package/dist/comms/lease-store.js +7 -7
  187. package/dist/comms/receiving-render.d.ts +1 -1
  188. package/dist/comms/receiving-render.js +2 -2
  189. package/dist/comms/sandbox-catch-script.d.ts +6 -6
  190. package/dist/comms/sandbox-catch-script.js +6 -6
  191. package/dist/comms/sandbox-catch.d.ts +36 -37
  192. package/dist/comms/sandbox-catch.js +34 -35
  193. package/dist/comms/setup.js +42 -8
  194. package/dist/comms/thread-evidence.d.ts +1 -1
  195. package/dist/comms/thread-evidence.js +6 -6
  196. package/dist/comms/types.d.ts +6 -6
  197. package/dist/comms/types.js +4 -4
  198. package/dist/evidence/browser-hygiene.d.ts +1 -1
  199. package/dist/evidence/browser-hygiene.js +1 -1
  200. package/dist/evidence/frame-signature.d.ts +1 -1
  201. package/dist/evidence/frame-signature.js +4 -4
  202. package/dist/evidence/redaction.d.ts +3 -3
  203. package/dist/evidence/redaction.js +5 -5
  204. package/dist/evidence/secret-scrub.d.ts +9 -0
  205. package/dist/evidence/secret-scrub.js +96 -0
  206. package/dist/feedback/draft.js +41 -85
  207. package/dist/feedback/export-bundle.js +5 -5
  208. package/dist/feedback/export.d.ts +5 -1
  209. package/dist/feedback/export.js +16 -17
  210. package/dist/feedback/feedback.d.ts +3 -3
  211. package/dist/feedback/feedback.js +21 -3
  212. package/dist/guest/chromium-text.js +2 -2
  213. package/dist/guest/desktop-native.d.ts +1 -1
  214. package/dist/guest/runtime.js +1 -1
  215. package/dist/index.d.ts +14 -15
  216. package/dist/index.js +10 -11
  217. package/dist/keys/key-resolution.d.ts +7 -5
  218. package/dist/keys/key-resolution.js +40 -38
  219. package/dist/lab/adapter-extension.d.ts +35 -13
  220. package/dist/lab/adapter-extension.js +50 -134
  221. package/dist/lab/adapter-scorer-loader.d.ts +32 -12
  222. package/dist/lab/adapter-scorer-loader.js +56 -32
  223. package/dist/lab/composition-rules.js +58 -58
  224. package/dist/lab/config.js +85 -43
  225. package/dist/lab/deprecated-fields.d.ts +10 -0
  226. package/dist/lab/deprecated-fields.js +24 -0
  227. package/dist/lab/device-presets.d.ts +10 -10
  228. package/dist/lab/device-presets.js +11 -11
  229. package/dist/lab/discover.d.ts +13 -9
  230. package/dist/lab/discover.js +118 -60
  231. package/dist/lab/doctor.d.ts +53 -11
  232. package/dist/lab/doctor.js +193 -47
  233. package/dist/lab/init-plan.js +1 -3
  234. package/dist/lab/init-templates.js +147 -147
  235. package/dist/lab/init.d.ts +1 -1
  236. package/dist/lab/init.js +41 -9
  237. package/dist/lab/keys.d.ts +2 -0
  238. package/dist/lab/keys.js +43 -9
  239. package/dist/lab/lab-deps.d.ts +80 -0
  240. package/dist/lab/lab-deps.js +4 -0
  241. package/dist/lab/parse/actors.js +17 -16
  242. package/dist/lab/parse/comms.js +8 -7
  243. package/dist/lab/parse/execution.js +15 -14
  244. package/dist/lab/parse/study-v3.d.ts +23 -0
  245. package/dist/lab/parse/study-v3.js +259 -0
  246. package/dist/lab/parse/subject-state.d.ts +7 -7
  247. package/dist/lab/parse/subject-state.js +18 -17
  248. package/dist/lab/parse/subject.js +30 -29
  249. package/dist/lab/parse/values.d.ts +1 -2
  250. package/dist/lab/parse/values.js +3 -6
  251. package/dist/lab/persona-resolve.d.ts +7 -7
  252. package/dist/lab/persona-resolve.js +8 -8
  253. package/dist/lab/persona.js +1 -3
  254. package/dist/lab/plan-base.d.ts +0 -2
  255. package/dist/lab/plan-base.js +6 -4
  256. package/dist/lab/plan-participants.d.ts +7 -7
  257. package/dist/lab/plan-participants.js +2 -2
  258. package/dist/lab/plan-types.d.ts +26 -8
  259. package/dist/lab/plan.d.ts +4 -18
  260. package/dist/lab/plan.js +24 -79
  261. package/dist/lab/preflight-probes.js +11 -11
  262. package/dist/lab/preflight-result.d.ts +2 -1
  263. package/dist/lab/preflight-result.js +5 -6
  264. package/dist/lab/preflight.d.ts +7 -8
  265. package/dist/lab/preflight.js +6 -6
  266. package/dist/lab/requirements.d.ts +20 -0
  267. package/dist/lab/requirements.js +54 -0
  268. package/dist/lab/route-inputs.d.ts +23 -12
  269. package/dist/lab/route-inputs.js +48 -51
  270. package/dist/lab/routing.d.ts +42 -41
  271. package/dist/lab/routing.js +66 -68
  272. package/dist/lab/run-lab-events.d.ts +3 -11
  273. package/dist/lab/run-lab-events.js +2 -16
  274. package/dist/lab/run-lab-homes.d.ts +76 -0
  275. package/dist/lab/run-lab-homes.js +7 -0
  276. package/dist/lab/run-lab-options.d.ts +12 -66
  277. package/dist/lab/run-lab-options.js +58 -285
  278. package/dist/lab/summary.d.ts +15 -9
  279. package/dist/lab/summary.js +24 -17
  280. package/dist/lab/tasks.d.ts +15 -15
  281. package/dist/lab/tasks.js +14 -14
  282. package/dist/lab/types.d.ts +201 -195
  283. package/dist/lab/types.js +2 -0
  284. package/dist/lab/validation.d.ts +21 -21
  285. package/dist/lab/validation.js +61 -59
  286. package/dist/lab/warnings.d.ts +10 -0
  287. package/dist/lab/warnings.js +70 -41
  288. package/dist/library-aliases.d.ts +56 -0
  289. package/dist/library-aliases.js +22 -0
  290. package/dist/observer/artifact.d.ts +2 -2
  291. package/dist/observer/artifact.js +9 -9
  292. package/dist/observer/data.d.ts +6 -6
  293. package/dist/observer/data.js +7 -6
  294. package/dist/observer/exposure.d.ts +1 -1
  295. package/dist/observer/exposure.js +11 -11
  296. package/dist/observer/http.js +1 -1
  297. package/dist/observer/library.d.ts +1 -1
  298. package/dist/observer/library.js +4 -2
  299. package/dist/observer/listen.js +5 -4
  300. package/dist/observer/render.d.ts +1 -1
  301. package/dist/observer/render.js +12 -7
  302. package/dist/observer/run-routes.d.ts +4 -4
  303. package/dist/observer/run-routes.js +6 -6
  304. package/dist/observer/serve.d.ts +17 -0
  305. package/dist/observer/serve.js +41 -6
  306. package/dist/observer/tunnel.js +1 -1
  307. package/dist/observer-app.html +4 -4
  308. package/dist/routes/computer-use/bundle-parts.d.ts +9 -9
  309. package/dist/routes/computer-use/bundle-parts.js +24 -17
  310. package/dist/routes/computer-use/bundle.d.ts +4 -11
  311. package/dist/routes/computer-use/bundle.js +12 -18
  312. package/dist/routes/computer-use/diagnostics.d.ts +1 -1
  313. package/dist/routes/computer-use/diagnostics.js +1 -1
  314. package/dist/routes/computer-use/e2b-desktop/comms.d.ts +11 -11
  315. package/dist/routes/computer-use/e2b-desktop/comms.js +24 -27
  316. package/dist/routes/computer-use/e2b-desktop/desktop.d.ts +2 -2
  317. package/dist/routes/computer-use/e2b-desktop/desktop.js +8 -11
  318. package/dist/routes/computer-use/e2b-desktop/fidelity.d.ts +16 -15
  319. package/dist/routes/computer-use/e2b-desktop/fidelity.js +20 -19
  320. package/dist/routes/computer-use/e2b-desktop/prepare.d.ts +3 -3
  321. package/dist/routes/computer-use/e2b-desktop/prepare.js +40 -43
  322. package/dist/routes/computer-use/e2b-desktop/start.d.ts +1 -1
  323. package/dist/routes/computer-use/e2b-desktop/start.js +32 -30
  324. package/dist/routes/computer-use/e2b-desktop/state.d.ts +5 -4
  325. package/dist/routes/computer-use/e2b-desktop/state.js +5 -3
  326. package/dist/routes/computer-use/e2b-desktop/teardown.d.ts +1 -1
  327. package/dist/routes/computer-use/e2b-desktop/teardown.js +33 -20
  328. package/dist/routes/computer-use/external-comms.d.ts +4 -4
  329. package/dist/routes/computer-use/external-comms.js +19 -43
  330. package/dist/routes/computer-use/fanout-bundle.d.ts +3 -3
  331. package/dist/routes/computer-use/fanout-bundle.js +38 -42
  332. package/dist/routes/computer-use/{fanout-lanes.js → fanout-records.js} +33 -28
  333. package/dist/routes/computer-use/in-process-desktop.d.ts +3 -10
  334. package/dist/routes/computer-use/in-process-desktop.js +3 -9
  335. package/dist/routes/computer-use/live-flush.d.ts +7 -5
  336. package/dist/routes/computer-use/live-flush.js +20 -28
  337. package/dist/routes/computer-use/{run-lanes.d.ts → live-phase.d.ts} +4 -2
  338. package/dist/routes/computer-use/{run-lanes.js → live-phase.js} +17 -16
  339. package/dist/routes/computer-use/local-tree-pack.d.ts +3 -3
  340. package/dist/routes/computer-use/local-tree-pack.js +4 -5
  341. package/dist/routes/computer-use/local-vm.d.ts +11 -8
  342. package/dist/routes/computer-use/local-vm.js +40 -67
  343. package/dist/routes/computer-use/participant-desktop.d.ts +8 -23
  344. package/dist/routes/computer-use/participant-desktop.js +5 -25
  345. package/dist/routes/computer-use/{lanes.d.ts → participant-execution.d.ts} +11 -11
  346. package/dist/routes/computer-use/{lanes.js → participant-execution.js} +39 -26
  347. package/dist/routes/computer-use/participant-facts.d.ts +7 -1
  348. package/dist/routes/computer-use/participant-facts.js +12 -1
  349. package/dist/routes/computer-use/participant-model.d.ts +25 -11
  350. package/dist/routes/computer-use/participant-model.js +76 -34
  351. package/dist/routes/computer-use/participant-prompt.d.ts +13 -13
  352. package/dist/routes/computer-use/participant-prompt.js +8 -8
  353. package/dist/routes/computer-use/participant-runs.d.ts +11 -11
  354. package/dist/routes/computer-use/participant-runs.js +18 -18
  355. package/dist/routes/computer-use/plan.d.ts +21 -29
  356. package/dist/routes/computer-use/plan.js +70 -78
  357. package/dist/routes/computer-use/preflight.d.ts +3 -5
  358. package/dist/routes/computer-use/preflight.js +40 -36
  359. package/dist/routes/computer-use/rerun-selection.js +11 -7
  360. package/dist/routes/computer-use/result.d.ts +1 -1
  361. package/dist/routes/computer-use/result.js +48 -38
  362. package/dist/routes/computer-use/route.d.ts +5 -5
  363. package/dist/routes/computer-use/route.js +36 -33
  364. package/dist/routes/computer-use/self-report.d.ts +8 -8
  365. package/dist/routes/computer-use/self-report.js +33 -33
  366. package/dist/routes/computer-use/setup.d.ts +9 -15
  367. package/dist/routes/computer-use/setup.js +106 -83
  368. package/dist/routes/computer-use/single-bundle.d.ts +13 -16
  369. package/dist/routes/computer-use/single-bundle.js +46 -53
  370. package/dist/routes/computer-use/subject-projection.d.ts +6 -8
  371. package/dist/routes/computer-use/subject-projection.js +24 -23
  372. package/dist/routes/computer-use/types.d.ts +195 -238
  373. package/dist/routes/computer-use/types.js +21 -13
  374. package/dist/routes/preview.d.ts +8 -2
  375. package/dist/routes/preview.js +8 -5
  376. package/dist/routes/scripted/bundle.d.ts +5 -8
  377. package/dist/routes/scripted/bundle.js +23 -27
  378. package/dist/routes/scripted/plan.d.ts +6 -8
  379. package/dist/routes/scripted/plan.js +15 -13
  380. package/dist/routes/scripted/result.d.ts +4 -1
  381. package/dist/routes/scripted/result.js +15 -11
  382. package/dist/routes/scripted/route.js +15 -17
  383. package/dist/routes/scripted/scenario.d.ts +1 -1
  384. package/dist/routes/scripted/scenario.js +3 -3
  385. package/dist/routes/scripted/setup.d.ts +3 -2
  386. package/dist/routes/scripted/setup.js +27 -26
  387. package/dist/routes/scripted/subject.d.ts +8 -3
  388. package/dist/routes/scripted/subject.js +10 -6
  389. package/dist/routes/scripted/surface-records.js +4 -4
  390. package/dist/routes/scripted/surface-sessions.d.ts +2 -2
  391. package/dist/routes/scripted/surface-sessions.js +4 -4
  392. package/dist/routes/scripted/types.d.ts +21 -40
  393. package/dist/routes/scripted/types.js +2 -3
  394. package/dist/routes/shared-world/{seat-records.js → bundle-records.js} +17 -16
  395. package/dist/routes/shared-world/bundle.d.ts +7 -7
  396. package/dist/routes/shared-world/bundle.js +60 -62
  397. package/dist/routes/shared-world/checkpoints.d.ts +5 -5
  398. package/dist/routes/shared-world/checkpoints.js +5 -5
  399. package/dist/routes/shared-world/comms.d.ts +8 -7
  400. package/dist/routes/shared-world/comms.js +38 -51
  401. package/dist/routes/shared-world/external-public.d.ts +6 -5
  402. package/dist/routes/shared-world/external-public.js +28 -25
  403. package/dist/routes/shared-world/handoff.d.ts +10 -9
  404. package/dist/routes/shared-world/handoff.js +89 -81
  405. package/dist/routes/shared-world/lobby-code.d.ts +7 -7
  406. package/dist/routes/shared-world/lobby-code.js +22 -22
  407. package/dist/routes/shared-world/{seats.d.ts → participant-specs.d.ts} +15 -12
  408. package/dist/routes/shared-world/{seats.js → participant-specs.js} +65 -63
  409. package/dist/routes/shared-world/plan.d.ts +2 -6
  410. package/dist/routes/shared-world/plan.js +8 -9
  411. package/dist/routes/shared-world/provenance.d.ts +4 -4
  412. package/dist/routes/shared-world/provenance.js +4 -4
  413. package/dist/routes/shared-world/provisioned.d.ts +3 -2
  414. package/dist/routes/shared-world/provisioned.js +55 -48
  415. package/dist/routes/shared-world/result.js +47 -36
  416. package/dist/routes/shared-world/route.js +54 -57
  417. package/dist/routes/shared-world/setup.d.ts +6 -5
  418. package/dist/routes/shared-world/setup.js +16 -18
  419. package/dist/routes/shared-world/types.d.ts +70 -141
  420. package/dist/routes/shared-world/types.js +5 -5
  421. package/dist/routes/terminal/adapter.d.ts +10 -10
  422. package/dist/routes/terminal/adapter.js +32 -129
  423. package/dist/routes/terminal/bundle.d.ts +10 -15
  424. package/dist/routes/terminal/bundle.js +43 -52
  425. package/dist/routes/terminal/credentials.d.ts +4 -4
  426. package/dist/routes/terminal/credentials.js +20 -20
  427. package/dist/routes/terminal/dry-run.d.ts +1 -1
  428. package/dist/routes/terminal/dry-run.js +13 -15
  429. package/dist/routes/terminal/encoding.d.ts +1 -1
  430. package/dist/routes/terminal/encoding.js +4 -4
  431. package/dist/routes/terminal/ledger.d.ts +8 -8
  432. package/dist/routes/terminal/ledger.js +22 -22
  433. package/dist/routes/terminal/live-finish.d.ts +1 -2
  434. package/dist/routes/terminal/live-finish.js +24 -23
  435. package/dist/routes/terminal/live-sandbox.d.ts +3 -2
  436. package/dist/routes/terminal/live-sandbox.js +31 -32
  437. package/dist/routes/terminal/participant-text.d.ts +23 -0
  438. package/dist/routes/terminal/participant-text.js +165 -0
  439. package/dist/routes/terminal/persona.js +1 -1
  440. package/dist/routes/terminal/plan.d.ts +2 -6
  441. package/dist/routes/terminal/plan.js +23 -19
  442. package/dist/routes/terminal/recorder.d.ts +6 -1
  443. package/dist/routes/terminal/recorder.js +12 -4
  444. package/dist/routes/terminal/result.js +12 -12
  445. package/dist/routes/terminal/route.js +30 -31
  446. package/dist/routes/terminal/runtime.d.ts +3 -2
  447. package/dist/routes/terminal/runtime.js +3 -3
  448. package/dist/routes/terminal/sandbox.d.ts +4 -4
  449. package/dist/routes/terminal/sandbox.js +10 -10
  450. package/dist/routes/terminal/session.js +22 -19
  451. package/dist/routes/terminal/token-usage.d.ts +1 -1
  452. package/dist/routes/terminal/token-usage.js +10 -11
  453. package/dist/routes/terminal/trace.d.ts +7 -10
  454. package/dist/routes/terminal/trace.js +11 -66
  455. package/dist/routes/terminal/types.d.ts +104 -114
  456. package/dist/routes/terminal/types.js +12 -7
  457. package/dist/run/active-runs.d.ts +13 -0
  458. package/dist/run/active-runs.js +12 -0
  459. package/dist/run/bundle-shape.d.ts +2 -1
  460. package/dist/run/bundle-shape.js +7 -7
  461. package/dist/run/bundle.d.ts +99 -92
  462. package/dist/run/bundle.js +10 -8
  463. package/dist/run/cost-summary.js +6 -5
  464. package/dist/run/costs.d.ts +6 -6
  465. package/dist/run/costs.js +17 -11
  466. package/dist/run/detail.d.ts +9 -9
  467. package/dist/run/detail.js +10 -10
  468. package/dist/run/dry-run-inputs.js +1 -1
  469. package/dist/run/dry-run.js +23 -30
  470. package/dist/run/{study-files.d.ts → evidence-files.d.ts} +4 -4
  471. package/dist/run/{study-files.js → evidence-files.js} +5 -5
  472. package/dist/run/feedback-shape.js +1 -1
  473. package/dist/run/judge.d.ts +34 -16
  474. package/dist/run/judge.js +41 -14
  475. package/dist/run/locate.d.ts +2 -0
  476. package/dist/run/locate.js +3 -1
  477. package/dist/run/outcomes.d.ts +3 -3
  478. package/dist/run/outcomes.js +3 -3
  479. package/dist/run/participant-records.d.ts +2 -2
  480. package/dist/run/participant-records.js +2 -2
  481. package/dist/run/paths.d.ts +1 -1
  482. package/dist/run/paths.js +2 -2
  483. package/dist/run/pricing.d.ts +30 -15
  484. package/dist/run/pricing.js +49 -30
  485. package/dist/run/projection.d.ts +27 -27
  486. package/dist/run/projection.js +23 -23
  487. package/dist/run/reclaim.d.ts +6 -0
  488. package/dist/run/reclaim.js +15 -5
  489. package/dist/run/results.d.ts +5 -5
  490. package/dist/run/run-index.d.ts +9 -7
  491. package/dist/run/run-index.js +24 -25
  492. package/dist/run/run-not-found.d.ts +5 -0
  493. package/dist/run/run-not-found.js +15 -0
  494. package/dist/run/run.d.ts +7 -4
  495. package/dist/run/run.js +10 -6
  496. package/dist/run/sandbox-receipts.d.ts +5 -5
  497. package/dist/run/sandbox-receipts.js +6 -6
  498. package/dist/run/shared-world-evidence.d.ts +67 -66
  499. package/dist/run/shared-world-evidence.js +4 -4
  500. package/dist/run/shared-world-shape.d.ts +3 -3
  501. package/dist/run/shared-world-shape.js +16 -16
  502. package/dist/run/stats.d.ts +17 -11
  503. package/dist/run/stats.js +124 -66
  504. package/dist/run/status.d.ts +21 -32
  505. package/dist/run/status.js +34 -33
  506. package/dist/run/stored-runs.js +2 -1
  507. package/dist/run/stream-shape.js +1 -1
  508. package/dist/run/streams.d.ts +29 -22
  509. package/dist/run/study-provenance.d.ts +47 -0
  510. package/dist/run/study-provenance.js +63 -0
  511. package/dist/run/study-result.d.ts +16 -0
  512. package/dist/run/study-result.js +9 -0
  513. package/dist/run/terminal-contract.d.ts +5 -5
  514. package/dist/run/terminal-contract.js +4 -4
  515. package/dist/run/text.d.ts +2 -0
  516. package/dist/run/text.js +4 -0
  517. package/dist/run/transient-comms-secrets.d.ts +5 -0
  518. package/dist/run/transient-comms-secrets.js +12 -0
  519. package/dist/run-lab.d.ts +40 -38
  520. package/dist/run-lab.js +42 -40
  521. package/dist/study/convert.d.ts +33 -0
  522. package/dist/study/convert.js +432 -0
  523. package/dist/study/field-paths.d.ts +12 -0
  524. package/dist/study/field-paths.js +126 -0
  525. package/dist/study/files.d.ts +26 -0
  526. package/dist/study/files.js +43 -0
  527. package/dist/study/migrate.d.ts +48 -0
  528. package/dist/study/migrate.js +408 -0
  529. package/dist/study/owned-files.d.ts +38 -0
  530. package/dist/study/owned-files.js +182 -0
  531. package/dist/subject/clone.d.ts +1 -1
  532. package/dist/subject/desktop-cli.d.ts +2 -2
  533. package/dist/subject/desktop-cli.js +3 -3
  534. package/dist/subject/local-tree-archive.d.ts +1 -1
  535. package/dist/subject/local-tree-archive.js +5 -5
  536. package/dist/subject/local-tree.d.ts +3 -3
  537. package/dist/subject/local-tree.js +1 -1
  538. package/dist/subject/node-bootstrap.d.ts +1 -1
  539. package/dist/subject/node-bootstrap.js +4 -4
  540. package/dist/subject/runtime.js +10 -11
  541. package/dist/subject/serve.d.ts +1 -1
  542. package/dist/subject/serve.js +4 -4
  543. package/dist/subject/state.d.ts +1 -1
  544. package/dist/subject/steps.d.ts +8 -8
  545. package/dist/subject/steps.js +7 -7
  546. package/dist/substrates/command-failure.d.ts +3 -3
  547. package/dist/substrates/command-failure.js +3 -3
  548. package/dist/substrates/detached.d.ts +6 -6
  549. package/dist/substrates/detached.js +7 -7
  550. package/dist/substrates/e2b/cdp-probe.d.ts +11 -11
  551. package/dist/substrates/e2b/cdp-probe.js +15 -18
  552. package/dist/substrates/e2b/desktop-browser.d.ts +5 -5
  553. package/dist/substrates/e2b/desktop-browser.js +12 -12
  554. package/dist/substrates/e2b/desktop-cdp.d.ts +15 -15
  555. package/dist/substrates/e2b/desktop-cdp.js +11 -11
  556. package/dist/substrates/e2b/desktop-executor.d.ts +1 -1
  557. package/dist/substrates/e2b/desktop-executor.js +1 -1
  558. package/dist/substrates/e2b/desktop-geometry.d.ts +6 -6
  559. package/dist/substrates/e2b/desktop-geometry.js +9 -9
  560. package/dist/substrates/e2b/desktop-media.d.ts +1 -1
  561. package/dist/substrates/e2b/desktop-media.js +3 -3
  562. package/dist/substrates/e2b/desktop-screenshot-cleanup.d.ts +3 -3
  563. package/dist/substrates/e2b/desktop-screenshot-cleanup.js +3 -3
  564. package/dist/substrates/e2b/sandbox.d.ts +1 -1
  565. package/dist/substrates/e2b/sandbox.js +2 -2
  566. package/dist/substrates/e2b/sdk.d.ts +11 -11
  567. package/dist/substrates/e2b/sdk.js +8 -8
  568. package/dist/substrates/local/runtime-host.d.ts +2 -0
  569. package/dist/substrates/local/runtime-host.js +6 -0
  570. package/dist/tui/actions.d.ts +8 -6
  571. package/dist/tui/actions.js +31 -22
  572. package/dist/tui/contract.d.ts +16 -16
  573. package/dist/tui/contract.js +10 -10
  574. package/dist/tui/launch.d.ts +4 -4
  575. package/dist/tui/launch.js +18 -19
  576. package/dist/tui/project.js +5 -5
  577. package/dist/tui-app.js +83 -83
  578. package/dist/verify/actor.d.ts +14 -14
  579. package/dist/verify/actor.js +45 -45
  580. package/dist/verify/artifacts.d.ts +3 -3
  581. package/dist/verify/artifacts.js +6 -6
  582. package/dist/verify/context-growth.d.ts +9 -0
  583. package/dist/verify/context-growth.js +62 -0
  584. package/dist/verify/costs.d.ts +7 -7
  585. package/dist/verify/costs.js +9 -9
  586. package/dist/verify/liveness.d.ts +1 -1
  587. package/dist/verify/liveness.js +4 -1
  588. package/dist/verify/rerun.d.ts +1 -1
  589. package/dist/verify/rerun.js +1 -1
  590. package/dist/verify/shared-world-concurrent.d.ts +2 -2
  591. package/dist/verify/shared-world-concurrent.js +79 -76
  592. package/dist/verify/shared-world.d.ts +2 -2
  593. package/dist/verify/shared-world.js +18 -18
  594. package/dist/verify/subject.d.ts +4 -4
  595. package/dist/verify/subject.js +18 -18
  596. package/dist/verify/verify.js +98 -49
  597. package/docs/README.md +26 -33
  598. package/docs/architecture/actor-contract.md +105 -98
  599. package/docs/architecture/desktop-sessions.md +14 -14
  600. package/docs/architecture/external-public-shared-world.md +66 -59
  601. package/docs/architecture/github-feedback-loop.md +1 -4
  602. package/docs/architecture/guest-desktop.md +2 -2
  603. package/docs/architecture/observer.md +37 -37
  604. package/docs/architecture/restricted-codex-analysis.md +70 -30
  605. package/docs/architecture/serve.md +34 -37
  606. package/docs/architecture/state-driven-executor.md +55 -59
  607. package/docs/architecture/task-protocol-support.md +7 -9
  608. package/docs/architecture/{terminal-product-lane.md → terminal-product-route.md} +83 -115
  609. package/docs/contracts/README.md +24 -0
  610. package/docs/contracts/adapter-admission.md +3 -3
  611. package/docs/contracts/adapter-fixtures.md +2 -5
  612. package/docs/contracts/core.md +1 -3
  613. package/docs/contracts/errors.md +62 -0
  614. package/docs/contracts/feedback.md +8 -9
  615. package/docs/contracts/policy.md +7 -12
  616. package/docs/contracts/run-bundle.md +54 -51
  617. package/docs/contracts/schemas.md +505 -390
  618. package/docs/contracts/study-analysis.md +26 -2
  619. package/docs/contracts/study-costs.md +11 -7
  620. package/docs/decisions/0001-run-bundle-is-the-source-of-truth.md +1 -1
  621. package/docs/decisions/0002-observer-is-one-self-contained-file.md +2 -2
  622. package/docs/decisions/0003-contained-paths-and-cleanup-authority.md +3 -3
  623. package/docs/decisions/0004-participant-desktops-stay-in-the-route.md +2 -1
  624. package/docs/principles/actor-fidelity.md +4 -4
  625. package/docs/principles/engineering.md +3 -3
  626. package/docs/principles/invariants-and-defaults.md +38 -38
  627. package/docs/principles/self-driving-harness.md +1 -5
  628. package/docs/principles/three-roles.md +1 -1
  629. package/docs/product/automatic-analysis.md +8 -7
  630. package/examples/participant/README.md +5 -5
  631. package/examples/participant/run.mjs +11 -10
  632. package/examples/scorer/README.md +3 -3
  633. package/examples/scorer/run.mjs +11 -12
  634. package/package.json +16 -17
  635. package/skills/humanish/SKILL.md +63 -60
  636. package/skills/humanish/agents/openai.yaml +1 -1
  637. package/AGENTS.md +0 -99
  638. package/CONTRIBUTING.md +0 -148
  639. package/dist/actors/codex/qualified-versions.d.ts +0 -45
  640. package/dist/actors/codex/qualified-versions.js +0 -87
  641. package/dist/cli/commands/lab.d.ts +0 -3
  642. package/dist/cli/commands/lab.js +0 -193
  643. package/dist/deprecated.d.ts +0 -90
  644. package/dist/deprecated.js +0 -106
  645. package/dist/lab/bag-overrides.d.ts +0 -18
  646. package/dist/lab/bag-overrides.js +0 -121
  647. package/dist/observer/static.d.ts +0 -39
  648. package/dist/observer/static.js +0 -369
  649. package/dist/routes/computer-use/legacy-lane-spec.d.ts +0 -62
  650. package/dist/routes/computer-use/legacy-lane-spec.js +0 -39
  651. package/docs/architecture/comms-inbox.md +0 -122
  652. package/docs/architecture/desktop-recording.md +0 -80
  653. package/docs/architecture/local-browser-runtime.md +0 -178
  654. package/docs/architecture/observer-review.md +0 -144
  655. package/docs/architecture/participant-media.md +0 -90
  656. package/docs/architecture/project-layout.md +0 -62
  657. package/docs/architecture/real-email-receiving.md +0 -136
  658. package/docs/assets/humanish-drawdb-hero.png +0 -0
  659. package/docs/assets/humanish-observer-hero.png +0 -0
  660. package/docs/goals/current.md +0 -207
  661. package/docs/product/lobby-trivia-3player-external-public.md +0 -77
  662. package/docs/product/open-source-install-experience.md +0 -240
  663. package/docs/ramp/README.md +0 -294
  664. package/docs/release/open-source-readiness.md +0 -222
  665. package/docs/release/public-readiness-standard.md +0 -210
  666. package/docs/roadmap/world-class-open-source-v0.md +0 -311
  667. /package/dist/routes/computer-use/{fanout-lanes.d.ts → fanout-records.d.ts} +0 -0
  668. /package/dist/routes/shared-world/{seat-records.d.ts → bundle-records.d.ts} +0 -0
package/dist/run/costs.js CHANGED
@@ -2,11 +2,11 @@ import { round6 } from "./pricing.js";
2
2
  import { bindExistingRunArtifactPaths } from "./paths.js";
3
3
  import { contradictsAccountBilling } from "../verify/costs.js";
4
4
  import { EVIDENCE_LIMITS } from "../analysis/evidence.js";
5
- import { readBoundedStudyFile } from "./study-files.js";
6
- import { readAutomaticStudyAnalysisAccounting } from "../analysis/job.js";
7
- import { readStudyAnalysisAccountingRecords } from "../analysis/store-executions.js";
5
+ import { readBoundedFile } from "./evidence-files.js";
6
+ import { readAutomaticAnalysisAccounting } from "../analysis/job.js";
7
+ import { readAnalysisAccountingRecords } from "../analysis/store-executions.js";
8
8
  import { RUN_BUNDLE_FILE } from "./bundle.js";
9
- export function emptyStudyCosts() {
9
+ export function emptyCostTotals() {
10
10
  return {
11
11
  estimatedTotalUsd: null,
12
12
  runEstimatedUsd: null,
@@ -24,7 +24,7 @@ const isKnownUsd = (value) => typeof value === "number" && Number.isFinite(value
24
24
  function sumKnown(a, b) {
25
25
  return a === null && b === null ? null : round6((a ?? 0) + (b ?? 0));
26
26
  }
27
- export function addStudyCosts(into, next) {
27
+ export function addCostTotals(into, next) {
28
28
  for (const key of ["estimatedTotalUsd", "runEstimatedUsd", "analysisEstimatedUsd"]) {
29
29
  into[key] = sumKnown(into[key], next[key]);
30
30
  }
@@ -41,16 +41,22 @@ export function addStudyCosts(into, next) {
41
41
  }
42
42
  }
43
43
  /** A read-only, bounded accounting pass. Never validates findings, dispatches, repairs or writes. */
44
- export async function readStudyCosts(cwd, entry) {
45
- const costs = emptyStudyCosts();
44
+ export async function readCostTotals(cwd, entry) {
45
+ const costs = emptyCostTotals();
46
46
  // Run-cost and analysis-history warnings stay apart: only the second kind makes the history
47
47
  // uncertain, whatever a run-cost warning is named.
48
48
  const runWarnings = [];
49
49
  const analysisWarnings = [];
50
- costs.runEstimatedUsd = isKnownUsd(entry.estimatedCostUsd) ? entry.estimatedCostUsd : null;
50
+ // A dry run makes no model request and creates no desktop, so with no figure it costs $0. A
51
+ // recorded unknown (null) figure stays unknown.
52
+ costs.runEstimatedUsd = isKnownUsd(entry.estimatedCostUsd)
53
+ ? entry.estimatedCostUsd
54
+ : entry.estimatedCostUsd === undefined && entry.mode === "dry-run"
55
+ ? 0
56
+ : null;
51
57
  try {
52
58
  const prepared = await bindExistingRunArtifactPaths(cwd, entry.runId);
53
- const bytes = await readBoundedStudyFile(prepared, RUN_BUNDLE_FILE, EVIDENCE_LIMITS.sourceBytes);
59
+ const bytes = await readBoundedFile(prepared, RUN_BUNDLE_FILE, EVIDENCE_LIMITS.sourceBytes);
54
60
  let bundle = null;
55
61
  try {
56
62
  bundle = bytes ? JSON.parse(bytes.toString("utf8")) : null;
@@ -82,8 +88,8 @@ export async function readStudyCosts(cwd, entry) {
82
88
  runWarnings.push("RUN_COST_COMPLETENESS_UNKNOWN");
83
89
  }
84
90
  const [history, automatic] = await Promise.all([
85
- readStudyAnalysisAccountingRecords(prepared),
86
- readAutomaticStudyAnalysisAccounting(prepared),
91
+ readAnalysisAccountingRecords(prepared),
92
+ readAutomaticAnalysisAccounting(prepared),
87
93
  ]);
88
94
  analysisWarnings.push(...history.warnings);
89
95
  const records = new Map(history.records.map((record) => [record.id, record]));
@@ -9,19 +9,19 @@ interface RunThought {
9
9
  at?: string;
10
10
  }
11
11
  export interface RunParticipant {
12
- /** Stream id — stable within a run, and what distinguishes lanes of one study. */
12
+ /** Stream id: stable within a run, and what distinguishes participants of one study. */
13
13
  id: string;
14
- /** What to call them on screen: the lane's own label, else the persona id. */
14
+ /** What to call them on screen: the participant's own label, else the persona id. */
15
15
  label: string;
16
16
  /** The persona id, when the trace recorded one. */
17
17
  personaId?: string;
18
18
  /**
19
19
  * The persona's declared traits (`patience:medium`, `skill:medium`, …). This is the abbreviated
20
- * persona a reader actually wants beside a live thought — it says who is struggling, which a
20
+ * persona a reader actually wants beside a live thought. It says who is struggling, which a
21
21
  * name alone does not.
22
22
  */
23
23
  traits: string[];
24
- /** `running`, `passed`, `failed`, `contract_proof_only` — the lane's own word for itself. */
24
+ /** `running`, `passed`, `failed`, `contract_proof_only`: the participant's own word for itself. */
25
25
  status?: string;
26
26
  /** Why the actor stopped, when it has. */
27
27
  completionReason?: string;
@@ -29,8 +29,8 @@ export interface RunParticipant {
29
29
  turns?: number;
30
30
  actions?: number;
31
31
  /**
32
- * Thoughts recorded so far. The mid-run flush carries the trace ITEMS but not the `counts` block,
33
- * so a live participant has no turn count to show — but the thoughts can be counted directly, and
32
+ * Thoughts recorded so far. The mid-run flush carries the trace items but not the `counts` block,
33
+ * so a live participant has no turn count to show, but the thoughts can be counted directly, and
34
34
  * "8 thoughts" is a true statement about progress rather than an inferred turn number.
35
35
  */
36
36
  thoughts?: number;
@@ -49,13 +49,13 @@ export interface RunDetail {
49
49
  observerPath?: string;
50
50
  }
51
51
  /**
52
- * Read one run's participants. Returns null when the run has no readable bundle yet — an ordinary
52
+ * Read one run's participants. Returns null when the run has no readable bundle yet, an ordinary
53
53
  * state for a run that has just started, not a failure.
54
54
  *
55
- * Reads the bundle NARROWLY rather than through `loadRunBundle`, which applies the strict
55
+ * Reads the bundle narrowly rather than through `loadRunBundle`, which applies the strict
56
56
  * evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
57
57
  * a partial document by definition, so validating it as a complete bundle would make the live view
58
- * — the only view that needs this — the one case that never renders. Nothing read here is treated
58
+ * (the only view that needs this) the one case that never renders. Nothing read here is treated
59
59
  * as a claim about what a participant did; it is what to put on a screen.
60
60
  */
61
61
  export declare function readRunDetail(cwdInput: string, runId: string): Promise<RunDetail | null>;
@@ -1,4 +1,4 @@
1
- // What ONE run is doing right now: who is in it, what they are thinking, how far they have got.
1
+ // What one run is doing right now: who is in it, what they are thinking, how far they have got.
2
2
  // Unlike the run index, it opens the bundle, which is affordable for the one run someone is
3
3
  // looking at.
4
4
  //
@@ -7,7 +7,7 @@
7
7
  // - `stream.actor` once it has finished.
8
8
  // Reading both means the same screen renders a run the whole way through rather than going blank
9
9
  // at the moment it completes.
10
- import { readAutomaticStudyAnalysis } from "../analysis/automatic.js";
10
+ import { readAutomaticAnalysis } from "../analysis/automatic.js";
11
11
  import path from "node:path";
12
12
  import { estimateActorCostForExecution } from "./pricing.js";
13
13
  import { resolveRunPath } from "./locate.js";
@@ -18,9 +18,9 @@ const RUN_DETAIL_SCHEMA = "humanish.run-detail.v1";
18
18
  /**
19
19
  * The latest reasoning a participant has recorded.
20
20
  *
21
- * Takes the LAST reasoning item rather than the newest by timestamp: the trace is append-ordered by
21
+ * Takes the last reasoning item rather than the newest by timestamp: the trace is append-ordered by
22
22
  * construction, and half of a live flush may not carry `at` yet. An item still in flight is skipped
23
- * — a partial thought read mid-write would be quoted as though the participant had finished it.
23
+ * because a partial thought read mid-write would be quoted as though the participant had finished it.
24
24
  */
25
25
  function latestThought(trace) {
26
26
  const items = trace.items ?? [];
@@ -68,9 +68,9 @@ function participantFrom(stream, index) {
68
68
  /**
69
69
  * What a participant has spent, priced the same way whether the run is finished or in flight.
70
70
  *
71
- * A finished trace carries its own `estimatedCost`. A live one carries the RUNNING usage and the
71
+ * A finished trace carries its own `estimatedCost`. A live one carries the running usage and the
72
72
  * model it prices at, so the same estimator gives a figure mid-run instead of the screen reporting
73
- * the cost as unknown until the moment the run ends — which is the half of a run where knowing what
73
+ * the cost as unknown until the moment the run ends. That is the half of a run where knowing what
74
74
  * it is costing actually changes what you do.
75
75
  */
76
76
  function costOf(trace) {
@@ -95,13 +95,13 @@ function costOf(trace) {
95
95
  }
96
96
  }
97
97
  /**
98
- * Read one run's participants. Returns null when the run has no readable bundle yet — an ordinary
98
+ * Read one run's participants. Returns null when the run has no readable bundle yet, an ordinary
99
99
  * state for a run that has just started, not a failure.
100
100
  *
101
- * Reads the bundle NARROWLY rather than through `loadRunBundle`, which applies the strict
101
+ * Reads the bundle narrowly rather than through `loadRunBundle`, which applies the strict
102
102
  * evidence-of-record guard. That guard is right for verification and wrong here: a mid-run flush is
103
103
  * a partial document by definition, so validating it as a complete bundle would make the live view
104
- * — the only view that needs this — the one case that never renders. Nothing read here is treated
104
+ * (the only view that needs this) the one case that never renders. Nothing read here is treated
105
105
  * as a claim about what a participant did; it is what to put on a screen.
106
106
  */
107
107
  export async function readRunDetail(cwdInput, runId) {
@@ -126,7 +126,7 @@ export async function readRunDetail(cwdInput, runId) {
126
126
  }
127
127
  const streams = Array.isArray(bundle.streams) ? bundle.streams : [];
128
128
  const observerAbsolute = path.join(runPaths.absoluteRunRoot, "observer", "index.html");
129
- const automaticAnalysis = await readAutomaticStudyAnalysis(cwd, runId);
129
+ const automaticAnalysis = await readAutomaticAnalysis(cwd, runId);
130
130
  return {
131
131
  ...(automaticAnalysis === undefined ? {} : { automaticAnalysis }),
132
132
  schema: RUN_DETAIL_SCHEMA,
@@ -12,7 +12,7 @@ const builtinPersona = {
12
12
  const builtinScenario = {
13
13
  id: "builtin-first-run-smoke",
14
14
  title: "Built-in First-Run Smoke",
15
- goal: "Create a public-safe dry-run contract bundle from built-in defaults.",
15
+ goal: "Write a public-safe dry-run bundle from built-in defaults.",
16
16
  source: "builtin:first-run-smoke",
17
17
  sourceDigest: "builtin",
18
18
  };
@@ -9,7 +9,7 @@ import {} from "./streams.js";
9
9
  import { participantEvent, participantIdsOf, participantRecord, participantStream, } from "./participant-records.js";
10
10
  import { implicitProjectDirectoryExists, readPackageName, validateCwd } from "./project.js";
11
11
  import { loadDryRunInputs } from "./dry-run-inputs.js";
12
- import { judgeExecution, judgePreview, OUTCOME_POLICIES, resultOk } from "./judge.js";
12
+ import { judgeExecution, judgePreview, OUTCOME_POLICIES, resultOk, verdictText, } from "./judge.js";
13
13
  /**
14
14
  * The preview route's run. The run scope closes the run it started on every exit, including
15
15
  * the fail-closed ones. It renders an Observer only when `options.observer` asks for one.
@@ -33,11 +33,11 @@ async function runDryRunInScope(options, scope) {
33
33
  const warnings = [];
34
34
  if (cwdError)
35
35
  return refused(requestedCwd, warnings, cwdError);
36
- const participants = normalizeParticipantCount(options.simCount);
36
+ const participants = normalizeParticipantCount(options.participantCount);
37
37
  if (participants === null) {
38
38
  return refused(requestedCwd, warnings, {
39
- code: "HUMANISH_INVALID_SIM_COUNT",
40
- message: "--sims must be a positive integer.",
39
+ code: "HUMANISH_INVALID_PARTICIPANT_COUNT",
40
+ message: "--count must be a positive integer.",
41
41
  });
42
42
  }
43
43
  // Bind the physical project, as the lab routes do: a symlinked cwd retargeted mid-run cannot
@@ -48,7 +48,7 @@ async function runDryRunInScope(options, scope) {
48
48
  if (!options.dryRun) {
49
49
  return refused(requestedCwd, warnings, {
50
50
  code: "HUMANISH_LIVE_RUN_UNIMPLEMENTED",
51
- message: "Only run --dry-run is implemented here. Run a lab for a live study.",
51
+ message: "humanish run needs a study. List studies with humanish study list, or run humanish run --dry-run for a sample bundle.",
52
52
  });
53
53
  }
54
54
  const createdAt = new Date().toISOString();
@@ -66,6 +66,8 @@ async function runDryRunInScope(options, scope) {
66
66
  mode: options.dryRun ? "dry-run" : "live",
67
67
  lab: options.lab,
68
68
  renderReview: renderReviewMarkdown,
69
+ // The run starts at the time its id and source were stamped with.
70
+ now: () => Date.parse(createdAt),
69
71
  ...(options.observer === undefined ? {} : { observer: { open: options.observer.open } }),
70
72
  });
71
73
  if (!started.ok)
@@ -85,23 +87,14 @@ async function runDryRunInScope(options, scope) {
85
87
  });
86
88
  const judgment = judgePreview();
87
89
  const bundle = {
88
- ...bundleHead({
89
- runId,
90
- mode: "dry-run",
91
- participants,
92
- createdAt,
93
- cwd,
94
- artifactRoot,
95
- ...(options.lab === undefined ? {} : { lab: options.lab }),
96
- source,
97
- }),
90
+ ...bundleHead(run, { participants, cwd, artifactRoot, source }),
98
91
  persona: inputs.persona,
99
92
  scenario: inputs.scenario,
100
93
  lifecycle: [
101
94
  {
102
95
  at: createdAt,
103
96
  event: "run.created",
104
- message: `Synthetic dry-run contract bundle created with ${participants} simulated participant${participants === 1 ? "" : "s"}.`,
97
+ message: `Synthetic dry-run bundle created with ${participants} simulated participant${participants === 1 ? "" : "s"}.`,
105
98
  },
106
99
  {
107
100
  at: createdAt,
@@ -124,7 +117,7 @@ async function runDryRunInScope(options, scope) {
124
117
  events: observerFixtures.events,
125
118
  redaction: {
126
119
  status: "passed",
127
- notes: "Dry-run bundle contains synthetic contract proof only.",
120
+ notes: "Dry-run bundle: synthetic data only, nothing from a product.",
128
121
  },
129
122
  artifacts: bundleArtifacts(),
130
123
  review: createReviewSummary(judgment.verdict),
@@ -157,14 +150,14 @@ async function runDryRunInScope(options, scope) {
157
150
  };
158
151
  }
159
152
  /**
160
- * The preview's review, with the verdict judgePreview gave it. It claims artifact plumbing only,
161
- * never product behavior.
153
+ * The preview's review, with the verdict judgePreview gave it. It claims only that the run's
154
+ * files were written, never product behavior.
162
155
  */
163
156
  function createReviewSummary(verdict) {
164
157
  return {
165
158
  schema: REVIEW_SCHEMA,
166
159
  verdict,
167
- summary: "Synthetic dry-run bundle was generated. This proves humanish artifact plumbing, not product behavior.",
160
+ summary: "Dry run: humanish wrote a synthetic run bundle. No product behavior was tested.",
168
161
  gaps: [
169
162
  "No browser was launched.",
170
163
  "No product state was verified.",
@@ -180,7 +173,7 @@ Run: ${bundle.runId}
180
173
 
181
174
  Mode: ${bundle.mode}
182
175
 
183
- Verdict: ${bundle.review.verdict}
176
+ Verdict: ${verdictText(bundle.review.verdict, bundle.mode)}
184
177
 
185
178
  ${bundle.review.summary}
186
179
 
@@ -211,13 +204,13 @@ async function renderPreviewObserver(finished, warnings) {
211
204
  return undefined;
212
205
  }
213
206
  }
214
- /** One synthetic stream per lane kind; the preview cycles through them. */
207
+ /** One synthetic stream per stream kind (UI, terminal and the rest); the preview cycles through them. */
215
208
  const SYNTHETIC_STREAM_TEMPLATES = [
216
209
  {
217
210
  kind: "ui",
218
211
  mode: "browser-sim",
219
212
  label: "UI journey",
220
- currentStep: "Route and viewport contract captured",
213
+ currentStep: "Route and viewport recorded",
221
214
  summary: "Simulated browser participant reserved for VNC playback, screenshots, route state, and interaction trace.",
222
215
  tail: "open target app\nresolve first-run route\ncapture viewport state\nrecord interaction trace",
223
216
  viewport: { width: 1440, height: 960, deviceScaleFactor: 1 },
@@ -226,19 +219,19 @@ const SYNTHETIC_STREAM_TEMPLATES = [
226
219
  kind: "terminal",
227
220
  mode: "cli-sim",
228
221
  label: "CLI actor",
229
- currentStep: "Command transcript contract captured",
222
+ currentStep: "Command transcript recorded",
230
223
  summary: "Simulated CLI participant reserved for command-by-command persona runs with stdout/stderr and artifact links.",
231
224
  // Every command in a shipped sample tail must be one the CLI actually accepts: participants
232
225
  // read and run them. tests/surface/shipped-command-strings.test.ts checks this against the
233
226
  // command table.
234
- tail: "$ humanish doctor\nok target cwd\nok humanish source\n$ humanish run first-run\ncontract proof emitted",
227
+ tail: "$ humanish doctor\nok target cwd\nok humanish source\n$ humanish run first-run\nhumanish run dry-run",
235
228
  viewport: undefined,
236
229
  },
237
230
  {
238
231
  kind: "tui",
239
232
  mode: "tui-sim",
240
233
  label: "TUI actor",
241
- currentStep: "Terminal UI frame contract captured",
234
+ currentStep: "Terminal UI frame recorded",
242
235
  summary: "Simulated TUI participant reserved for PTY bytes, ANSI rendering, focus replay, and optional assisted attach.",
243
236
  tail: "\u001b[2mhumanish TUI frame\u001b[0m\n> persona: skeptical-power-user\n> scenario: onboarding-regression\nstatus: awaiting live PTY transport",
244
237
  viewport: undefined,
@@ -247,9 +240,9 @@ const SYNTHETIC_STREAM_TEMPLATES = [
247
240
  kind: "codex-ui",
248
241
  mode: "codex-app-sim",
249
242
  label: "Codex UI",
250
- currentStep: "App-server embed contract captured",
243
+ currentStep: "App-server embed recorded",
251
244
  summary: "Simulated Codex UI participant reserved for app-server sessions that can be watched beside terminal evidence.",
252
- tail: "codex-app-server session contract\nstate: not_connected\nembed: pending provider URL\nreceipts: planned",
245
+ tail: "codex-app-server session (dry run)\nstate: not_connected\nembed: pending provider URL\nreceipts: planned",
253
246
  viewport: { width: 1280, height: 900, deviceScaleFactor: 1 },
254
247
  },
255
248
  ];
@@ -262,7 +255,7 @@ function buildSyntheticObserverFixtures(args) {
262
255
  at: args.createdAt,
263
256
  level: "info",
264
257
  type: "observer.contract.created",
265
- message: "Created public-safe observer stream contract.",
258
+ message: "Created the public-safe Observer streams.",
266
259
  },
267
260
  ];
268
261
  for (let index = 0; index < args.count; index += 1) {
@@ -331,7 +324,7 @@ function buildSyntheticObserverFixtures(args) {
331
324
  at: args.createdAt,
332
325
  level: "info",
333
326
  type: "sim.contract.ready",
334
- message: `${template.label} stream contract ready.`,
327
+ message: `${template.label} stream ready.`,
335
328
  }), participantEvent(ids, {
336
329
  id: `event-${String(index + 1).padStart(3, "0")}-b`,
337
330
  at: args.createdAt,
@@ -4,7 +4,7 @@ import { type PreparedOutputRoot } from "./contained-output.js";
4
4
  * percent-decoded up to five times, and each round must still be a plain relative path, so an
5
5
  * encoded `..` or separator cannot survive into a later decode.
6
6
  */
7
- export declare function isStudyEvidencePath(value: string): boolean;
7
+ export declare function isEvidencePath(value: string): boolean;
8
8
  /**
9
9
  * True when `value` (at most `maxLength` characters) stays a plain relative path through up to five
10
10
  * rounds of percent-decoding: no round may match `unsafe`, have an empty, `.` or `..` segment, or
@@ -16,13 +16,13 @@ export declare function decodesToPlainRelativePath(value: string, maxLength: num
16
16
  * not turn an analysis budget into an unbounded read. No returned bytes have
17
17
  * authority to select another file or initiate a network request.
18
18
  */
19
- export declare function readBoundedStudyFile(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<Buffer | null>;
19
+ export declare function readBoundedFile(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<Buffer | null>;
20
20
  /**
21
21
  * After a bounded read returned nothing: true when the file is absent, false when something is
22
22
  * there that could not be read. Errors other than ENOENT propagate.
23
23
  */
24
24
  export declare function pathMissing(filePath: string): Promise<boolean>;
25
- export type BoundedStudyFileResult = {
25
+ export type BoundedFileResult = {
26
26
  state: "read";
27
27
  bytes: Buffer;
28
28
  } | {
@@ -32,4 +32,4 @@ export type BoundedStudyFileResult = {
32
32
  state: "unavailable";
33
33
  };
34
34
  /** Size refusals are distinguished only after the same contained regular-file checks. */
35
- export declare function readBoundedStudyFileResult(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<BoundedStudyFileResult>;
35
+ export declare function readBoundedFileResult(root: PreparedOutputRoot, relativePath: string, maxBytes: number): Promise<BoundedFileResult>;
@@ -12,7 +12,7 @@ import { isNodeError } from "./type-guards.js";
12
12
  * percent-decoded up to five times, and each round must still be a plain relative path, so an
13
13
  * encoded `..` or separator cannot survive into a later decode.
14
14
  */
15
- export function isStudyEvidencePath(value) {
15
+ export function isEvidencePath(value) {
16
16
  return decodesToPlainRelativePath(value, 1024, /[\\:\x00-\x1f\x7f]|^\//);
17
17
  }
18
18
  /**
@@ -54,8 +54,8 @@ export function decodesToPlainRelativePath(value, maxLength, unsafe) {
54
54
  * not turn an analysis budget into an unbounded read. No returned bytes have
55
55
  * authority to select another file or initiate a network request.
56
56
  */
57
- export async function readBoundedStudyFile(root, relativePath, maxBytes) {
58
- const result = await readBoundedStudyFileResult(root, relativePath, maxBytes);
57
+ export async function readBoundedFile(root, relativePath, maxBytes) {
58
+ const result = await readBoundedFileResult(root, relativePath, maxBytes);
59
59
  return result.state === "read" ? result.bytes : null;
60
60
  }
61
61
  /**
@@ -89,8 +89,8 @@ export async function pathMissing(filePath) {
89
89
  }
90
90
  const unavailable = { state: "unavailable" };
91
91
  /** Size refusals are distinguished only after the same contained regular-file checks. */
92
- export async function readBoundedStudyFileResult(root, relativePath, maxBytes) {
93
- if (!isStudyEvidencePath(relativePath) || !Number.isSafeInteger(maxBytes) || maxBytes < 1)
92
+ export async function readBoundedFileResult(root, relativePath, maxBytes) {
93
+ if (!isEvidencePath(relativePath) || !Number.isSafeInteger(maxBytes) || maxBytes < 1)
94
94
  return unavailable;
95
95
  const validateRoot = async () => {
96
96
  if ("physicalRunRoot" in root) {
@@ -31,7 +31,7 @@ export function isRunFeedbackCandidate(value) {
31
31
  isFeedbackNextState(value.proposed_next_state) &&
32
32
  Array.isArray(value.acceptance_proof) &&
33
33
  value.acceptance_proof.every((item) => typeof item === "string") &&
34
- // Optional, adapter-namespaced product-noun block: when present, validate only its SHAPE
34
+ // Optional, adapter-namespaced product-noun block: when present, validate only its shape
35
35
  // (a non-empty namespace + a data record). Core never inspects the keys inside `data`.
36
36
  (value.adapter === undefined || isFeedbackAdapterBlock(value.adapter)));
37
37
  }
@@ -6,7 +6,7 @@ export interface BlockerFacts {
6
6
  completionReason: ActorCompletionReason;
7
7
  /** A harness-owned stop condition ended the session: a matched stopWhen or a completed dwell window. */
8
8
  stopConditionMatched: boolean;
9
- /** What the participant declared in a field, when its provider has one (#570). */
9
+ /** What the participant declared in a field, when its provider has one. */
10
10
  declaredOutcome?: ParticipantDeclaredOutcome;
11
11
  /** The route's reading of the closing report: it describes a blocker or asks for instructions. */
12
12
  closingReportReadsBlocked: boolean;
@@ -23,7 +23,7 @@ export interface SessionEnding extends BlockerFacts {
23
23
  export declare function hollowCompletion(ending: SessionEnding): boolean;
24
24
  /**
25
25
  * The participant said it reached the goal but reported a blocker. A declared outcome is its own
26
- * word and wins (#570). Without one, the closing report is read, unless a stop condition ended the
26
+ * word and wins. Without one, the closing report is read, unless a stop condition ended the
27
27
  * session: a matched stopWhen is structured completion evidence and overrides the text.
28
28
  */
29
29
  export declare function selfReportedBlocker(ending: BlockerFacts): boolean;
@@ -60,12 +60,18 @@ export declare function participantHarnessFailed(participant: ParticipantFacts):
60
60
  * goal_satisfied claim with zero engagement is a session that ran out before anything happened;
61
61
  * one whose final message describes a blocker is a participant who could not proceed and said so.
62
62
  * Both keep their trace status (the claim is evidence); neither is a participant who reached the
63
- * goal. One rule for the single lane and the fan-out roll-up (#476).
63
+ * goal. One rule for the single participant and the fan-out roll-up.
64
64
  */
65
65
  export declare function participantStatus(status: ActorStatus, judgments: {
66
66
  noEngagement: boolean;
67
67
  selfReportedBlocker: boolean;
68
68
  } | undefined): ActorStatus;
69
+ /**
70
+ * A verdict as review.md prints it. The schema keeps `contract_proof_only`, which a dry run always
71
+ * gets and a live run gets while it is in progress or when no participant result came back, so
72
+ * the reader sees "dry run" or "no verdict" by the run's mode.
73
+ */
74
+ export declare function verdictText(verdict: Verdict, mode: "dry-run" | "live"): string;
69
75
  /** The review verdict for one participant's status. */
70
76
  export declare function verdictForStatus(status: ActorStatus): Verdict;
71
77
  declare const judged: unique symbol;
@@ -77,7 +83,7 @@ export interface Judgment {
77
83
  readonly verdict: Verdict;
78
84
  /**
79
85
  * The run met its route's pass rule: every expected participant passed and, on shared-world,
80
- * the seats showed the concurrency verify requires. A dry run passes as a contract.
86
+ * the participants showed the concurrency verify requires. A dry run passes as a contract.
81
87
  */
82
88
  readonly passed: boolean;
83
89
  /** A type-only mark that judgmentOf made this judgment; it does not exist at runtime. */
@@ -86,7 +92,7 @@ export interface Judgment {
86
92
  /** The judgment for a verdict: a run passes when its verdict is pass, and a dry run passes. */
87
93
  export declare function judgmentOf(verdict: Verdict, dryRun: boolean): Judgment;
88
94
  /** What kind of execution failure a run recorded. */
89
- type ExecutionFailureKind = "harness" | "provider-cleanup" | "sandbox-cleanup" | "evidence" | "cap" | "run";
95
+ type ExecutionFailureKind = "harness" | "provider-cleanup" | "provider-policy" | "sandbox-cleanup" | "evidence" | "cap" | "run";
90
96
  /** One way the run failed as an execution. The message is scrubbed; status.json shows it. */
91
97
  export interface ExecutionFailure {
92
98
  kind: ExecutionFailureKind;
@@ -98,7 +104,19 @@ export interface ExecutionOutcome {
98
104
  succeeded: boolean;
99
105
  /** The failures the policy counts, in the order the route recorded them. */
100
106
  failures: ExecutionFailure[];
107
+ /**
108
+ * The failures the policy lets warn, such as a sandbox whose release is unconfirmed on a route
109
+ * whose evidence stands. They leave `succeeded` and the result's ok alone but stay visible in
110
+ * status.json. Omitted when there are none.
111
+ */
112
+ warnings?: ExecutionFailure[];
101
113
  }
114
+ /**
115
+ * The execution failure for one sandbox whose release is unconfirmed. `warning` is the route's
116
+ * release warning, already scrubbed. `recovery` says how to release it by hand; without one,
117
+ * reclaim kills by the id the run recorded at create time.
118
+ */
119
+ export declare function sandboxCleanupFailure(owner: string, warning: string | undefined, runId: string, recovery?: string): ExecutionFailure;
102
120
  /**
103
121
  * How a route turns the facts into its result's ok. A gate route needs every participant to
104
122
  * pass. On an evidence route a participant that failed, was blocked or timed out is captured
@@ -114,13 +132,13 @@ export interface OutcomePolicy {
114
132
  export type JudgedRoute = "computer-use" | "shared-world" | "terminal" | "scripted" | "preview";
115
133
  /** Each route's outcome policy, in one place. */
116
134
  export declare const OUTCOME_POLICIES: Readonly<Record<JudgedRoute, OutcomePolicy>>;
117
- /** What a shared-world run observed about its one world, beside how each seat ended. */
135
+ /** What a shared-world run observed about its one world, beside how each participant ended. */
118
136
  export interface SharedWorldFacts {
119
- /** Two or more seats were live at the same time. */
137
+ /** Two or more participants were live at the same time. */
120
138
  overlap: boolean;
121
139
  /** Provisioned plane only: the shared state changed at or after the first overlap started. */
122
140
  stateChangedUnderOverlap?: boolean;
123
- /** External-public plane only: every seat reached one lobby. */
141
+ /** External-public plane only: every participant reached one lobby. */
124
142
  lobbyConvergence?: boolean;
125
143
  }
126
144
  /** A shared-world run's judgment, with the world facts its review and result also report. */
@@ -131,7 +149,7 @@ export interface SharedWorldJudgment extends Judgment {
131
149
  * A run with one participant: its tallied status is the verdict, so a hollow pass fails and a
132
150
  * self-reported blocker reads as blocked. Without a session, a harness failure fails the run and
133
151
  * a dry run is a contract. A run still in progress is a contract until it finishes. Computer-use
134
- * calls it for one lane with no rerun, and terminal calls it through judgeTerminal.
152
+ * calls it for one participant with no rerun, and terminal calls it through judgeTerminal.
135
153
  */
136
154
  export declare function judgeOneParticipant(args: {
137
155
  dryRun: boolean;
@@ -150,15 +168,15 @@ export declare function judgeParticipants(args: {
150
168
  participants: ParticipantFacts[];
151
169
  }): Judgment;
152
170
  /**
153
- * Why a shared-world run whose seats all passed still fails, or undefined when its world facts
154
- * meet what verify's shared-world check requires of a pass: two seats live at the same time and,
155
- * on the provisioned plane, a shared-state change at or after the first overlap started.
171
+ * Why a shared-world run whose participants all passed still fails, or undefined when its world
172
+ * facts meet what verify's shared-world check requires of a pass: two participants live at the same
173
+ * time and, on the provisioned plane, a shared-state change at or after the first overlap started.
156
174
  */
157
175
  export declare function sharedWorldShortfall(world: SharedWorldFacts): string | undefined;
158
176
  /**
159
- * A shared-world run: it passes only when every expected seat passed and the world facts have no
160
- * shortfall, and otherwise fails (this route has no timed_out verdict). A dry run and a run still
161
- * in progress are contracts. Lobby convergence is recorded but not read.
177
+ * A shared-world run: it passes only when every expected participant passed and the world facts
178
+ * have no shortfall, and otherwise fails (this route has no timed_out verdict). A dry run and a run
179
+ * still in progress are contracts. Lobby convergence is recorded but not read.
162
180
  */
163
181
  export declare function judgeSharedWorld(args: {
164
182
  dryRun: boolean;
@@ -195,7 +213,7 @@ export declare function judgePreview(): Judgment;
195
213
  * stays as it was, so scoring can never improve a verdict. No failures returns the review as is.
196
214
  */
197
215
  export declare function foldScorerFailures(review: ReviewSummary, failures: readonly string[]): ReviewSummary;
198
- /** The run's execution outcome under its route's policy. A failure of a kind the policy lets warn is dropped. */
216
+ /** The run's execution outcome under its route's policy. A failure of a kind the policy lets warn is a warning. */
199
217
  export declare function judgeExecution(failures: readonly ExecutionFailure[], policy: OutcomePolicy): ExecutionOutcome;
200
218
  /**
201
219
  * The result's ok: the run worked as an execution, no scorer failed it, and on a gate route every