@jevitate/cli 0.1.0 → 0.3.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 (410) hide show
  1. package/README.md +23 -0
  2. package/dist/ai-cli.d.ts +31 -11
  3. package/dist/ai-cli.js +131 -88
  4. package/dist/ai-cli.js.map +1 -1
  5. package/dist/author-journey-cli.d.ts +4 -0
  6. package/dist/author-journey-cli.js +111 -0
  7. package/dist/author-journey-cli.js.map +1 -0
  8. package/dist/bin.js +60349 -16477
  9. package/dist/bin.js.map +1 -1
  10. package/dist/browser-run-options.d.ts +89 -0
  11. package/dist/browser-run-options.js +175 -0
  12. package/dist/browser-run-options.js.map +1 -0
  13. package/dist/build-info.generated.d.ts +2 -0
  14. package/dist/build-info.generated.js +10 -0
  15. package/dist/build-info.generated.js.map +1 -0
  16. package/dist/campaign-api.d.ts +151 -0
  17. package/dist/campaign-api.js +446 -0
  18. package/dist/campaign-api.js.map +1 -0
  19. package/dist/campaign-cli.d.ts +6 -0
  20. package/dist/campaign-cli.js +66 -0
  21. package/dist/campaign-cli.js.map +1 -0
  22. package/dist/check-api.d.ts +5 -0
  23. package/dist/check-api.js +234 -0
  24. package/dist/check-api.js.map +1 -0
  25. package/dist/check-budget.d.ts +26 -0
  26. package/dist/check-budget.js +90 -0
  27. package/dist/check-budget.js.map +1 -0
  28. package/dist/check-cli.d.ts +31 -0
  29. package/dist/check-cli.js +109 -0
  30. package/dist/check-cli.js.map +1 -0
  31. package/dist/check-execute.d.ts +29 -0
  32. package/dist/check-execute.js +420 -0
  33. package/dist/check-execute.js.map +1 -0
  34. package/dist/check-plan.d.ts +118 -0
  35. package/dist/check-plan.js +516 -0
  36. package/dist/check-plan.js.map +1 -0
  37. package/dist/check-suite.d.ts +184 -0
  38. package/dist/check-suite.js +540 -0
  39. package/dist/check-suite.js.map +1 -0
  40. package/dist/check-types.d.ts +181 -0
  41. package/dist/check-types.js +35 -0
  42. package/dist/check-types.js.map +1 -0
  43. package/dist/cli-args.d.ts +26 -0
  44. package/dist/cli-args.js +50 -0
  45. package/dist/cli-args.js.map +1 -0
  46. package/dist/cli-output.d.ts +106 -0
  47. package/dist/cli-output.js +563 -0
  48. package/dist/cli-output.js.map +1 -0
  49. package/dist/cli-reference.d.ts +3 -0
  50. package/dist/cli-reference.js +81 -0
  51. package/dist/cli-reference.js.map +1 -0
  52. package/dist/cli-refusal.d.ts +12 -0
  53. package/dist/cli-refusal.js +52 -0
  54. package/dist/cli-refusal.js.map +1 -0
  55. package/dist/cli-shared.d.ts +340 -0
  56. package/dist/cli-shared.js +537 -0
  57. package/dist/cli-shared.js.map +1 -0
  58. package/dist/cli-surface.d.ts +33 -0
  59. package/dist/cli-surface.js +48 -0
  60. package/dist/cli-surface.js.map +1 -0
  61. package/dist/conversation-options.d.ts +15 -0
  62. package/dist/conversation-options.js +10 -0
  63. package/dist/conversation-options.js.map +1 -0
  64. package/dist/credentials-file.d.ts +15 -0
  65. package/dist/credentials-file.js +56 -0
  66. package/dist/credentials-file.js.map +1 -0
  67. package/dist/data-dir.d.ts +1 -1
  68. package/dist/data-dir.js +1 -1
  69. package/dist/defect-evidence.d.ts +141 -0
  70. package/dist/defect-evidence.js +505 -0
  71. package/dist/defect-evidence.js.map +1 -0
  72. package/dist/demo-aspect-api.d.ts +209 -0
  73. package/dist/demo-aspect-api.js +398 -0
  74. package/dist/demo-aspect-api.js.map +1 -0
  75. package/dist/demo-aspect-cli.d.ts +3 -0
  76. package/dist/demo-aspect-cli.js +243 -0
  77. package/dist/demo-aspect-cli.js.map +1 -0
  78. package/dist/demo-capture.d.ts +142 -0
  79. package/dist/demo-capture.js +537 -0
  80. package/dist/demo-capture.js.map +1 -0
  81. package/dist/engine.d.ts +35 -0
  82. package/dist/engine.js +25 -0
  83. package/dist/engine.js.map +1 -0
  84. package/dist/environments.d.ts +155 -0
  85. package/dist/environments.js +364 -0
  86. package/dist/environments.js.map +1 -0
  87. package/dist/exit-codes.d.ts +46 -0
  88. package/dist/exit-codes.js +91 -0
  89. package/dist/exit-codes.js.map +1 -0
  90. package/dist/explore-adversarial.d.ts +144 -0
  91. package/dist/explore-adversarial.js +227 -0
  92. package/dist/explore-adversarial.js.map +1 -0
  93. package/dist/explore-api.d.ts +7 -187
  94. package/dist/explore-api.js +7 -301
  95. package/dist/explore-api.js.map +1 -1
  96. package/dist/explore-author.d.ts +79 -0
  97. package/dist/explore-author.js +86 -0
  98. package/dist/explore-author.js.map +1 -0
  99. package/dist/explore-cli.d.ts +7 -0
  100. package/dist/explore-cli.js +1199 -0
  101. package/dist/explore-cli.js.map +1 -0
  102. package/dist/explore-coverage.d.ts +173 -0
  103. package/dist/explore-coverage.js +246 -0
  104. package/dist/explore-coverage.js.map +1 -0
  105. package/dist/explore-feature.d.ts +125 -0
  106. package/dist/explore-feature.js +218 -0
  107. package/dist/explore-feature.js.map +1 -0
  108. package/dist/explore-goal.d.ts +271 -0
  109. package/dist/explore-goal.js +417 -0
  110. package/dist/explore-goal.js.map +1 -0
  111. package/dist/explore-shared.d.ts +177 -0
  112. package/dist/explore-shared.js +149 -0
  113. package/dist/explore-shared.js.map +1 -0
  114. package/dist/explore-specs.d.ts +53 -0
  115. package/dist/explore-specs.js +333 -0
  116. package/dist/explore-specs.js.map +1 -0
  117. package/dist/findings-filing.d.ts +64 -0
  118. package/dist/findings-filing.js +108 -0
  119. package/dist/findings-filing.js.map +1 -0
  120. package/dist/fixture-auth.d.ts +63 -0
  121. package/dist/fixture-auth.js +95 -0
  122. package/dist/fixture-auth.js.map +1 -0
  123. package/dist/fixture-cli.d.ts +99 -0
  124. package/dist/fixture-cli.js +292 -0
  125. package/dist/fixture-cli.js.map +1 -0
  126. package/dist/github-issue-filer.d.ts +62 -0
  127. package/dist/github-issue-filer.js +189 -0
  128. package/dist/github-issue-filer.js.map +1 -0
  129. package/dist/host-health-run.d.ts +25 -0
  130. package/dist/host-health-run.js +33 -0
  131. package/dist/host-health-run.js.map +1 -0
  132. package/dist/http-5xx-outcome.d.ts +6 -0
  133. package/dist/http-5xx-outcome.js +39 -0
  134. package/dist/http-5xx-outcome.js.map +1 -0
  135. package/dist/inbox-cli.d.ts +7 -0
  136. package/dist/inbox-cli.js +197 -0
  137. package/dist/inbox-cli.js.map +1 -0
  138. package/dist/index.d.ts +1 -0
  139. package/dist/index.js +1 -0
  140. package/dist/index.js.map +1 -1
  141. package/dist/init-cli.d.ts +4 -0
  142. package/dist/init-cli.js +156 -0
  143. package/dist/init-cli.js.map +1 -0
  144. package/dist/init-keys.d.ts +30 -2
  145. package/dist/init-keys.js +19 -5
  146. package/dist/init-keys.js.map +1 -1
  147. package/dist/init-next-steps.d.ts +35 -0
  148. package/dist/init-next-steps.js +79 -0
  149. package/dist/init-next-steps.js.map +1 -0
  150. package/dist/invariants-file.d.ts +34 -0
  151. package/dist/invariants-file.js +68 -0
  152. package/dist/invariants-file.js.map +1 -0
  153. package/dist/invariants-validate.d.ts +30 -0
  154. package/dist/invariants-validate.js +105 -0
  155. package/dist/invariants-validate.js.map +1 -0
  156. package/dist/journey-annotate-api.d.ts +76 -0
  157. package/dist/journey-annotate-api.js +269 -0
  158. package/dist/journey-annotate-api.js.map +1 -0
  159. package/dist/journey-annotate-cli.d.ts +9 -0
  160. package/dist/journey-annotate-cli.js +181 -0
  161. package/dist/journey-annotate-cli.js.map +1 -0
  162. package/dist/journey-api.d.ts +104 -2
  163. package/dist/journey-api.js +163 -20
  164. package/dist/journey-api.js.map +1 -1
  165. package/dist/journey-cli.d.ts +4 -0
  166. package/dist/journey-cli.js +411 -0
  167. package/dist/journey-cli.js.map +1 -0
  168. package/dist/journey-demo-api.d.ts +114 -0
  169. package/dist/journey-demo-api.js +405 -0
  170. package/dist/journey-demo-api.js.map +1 -0
  171. package/dist/journey-demo-cli.d.ts +10 -0
  172. package/dist/journey-demo-cli.js +158 -0
  173. package/dist/journey-demo-cli.js.map +1 -0
  174. package/dist/journey-prefix.d.ts +194 -0
  175. package/dist/journey-prefix.js +279 -0
  176. package/dist/journey-prefix.js.map +1 -0
  177. package/dist/key-report.d.ts +49 -0
  178. package/dist/key-report.js +101 -0
  179. package/dist/key-report.js.map +1 -0
  180. package/dist/kill-signal.d.ts +193 -0
  181. package/dist/kill-signal.js +283 -0
  182. package/dist/kill-signal.js.map +1 -0
  183. package/dist/launch-armed.d.ts +37 -0
  184. package/dist/launch-armed.js +31 -0
  185. package/dist/launch-armed.js.map +1 -0
  186. package/dist/ledger-api.d.ts +106 -0
  187. package/dist/ledger-api.js +239 -0
  188. package/dist/ledger-api.js.map +1 -0
  189. package/dist/ledger-cli.d.ts +18 -0
  190. package/dist/ledger-cli.js +107 -0
  191. package/dist/ledger-cli.js.map +1 -0
  192. package/dist/load-api.d.ts +29 -11
  193. package/dist/load-api.js +23 -15
  194. package/dist/load-api.js.map +1 -1
  195. package/dist/load-cli.d.ts +4 -0
  196. package/dist/load-cli.js +97 -0
  197. package/dist/load-cli.js.map +1 -0
  198. package/dist/log-correlation.d.ts +200 -0
  199. package/dist/log-correlation.js +394 -0
  200. package/dist/log-correlation.js.map +1 -0
  201. package/dist/log-lines.d.ts +131 -0
  202. package/dist/log-lines.js +389 -0
  203. package/dist/log-lines.js.map +1 -0
  204. package/dist/log-sources.d.ts +71 -0
  205. package/dist/log-sources.js +236 -0
  206. package/dist/log-sources.js.map +1 -0
  207. package/dist/log-trace.d.ts +80 -0
  208. package/dist/log-trace.js +210 -0
  209. package/dist/log-trace.js.map +1 -0
  210. package/dist/logs-cli.d.ts +3 -0
  211. package/dist/logs-cli.js +51 -0
  212. package/dist/logs-cli.js.map +1 -0
  213. package/dist/logs-retention.d.ts +28 -0
  214. package/dist/logs-retention.js +85 -0
  215. package/dist/logs-retention.js.map +1 -0
  216. package/dist/masked-input.d.ts +22 -0
  217. package/dist/masked-input.js +99 -0
  218. package/dist/masked-input.js.map +1 -0
  219. package/dist/mcp-api.d.ts +91 -1
  220. package/dist/mcp-api.js +514 -18
  221. package/dist/mcp-api.js.map +1 -1
  222. package/dist/mcp-args.d.ts +50 -0
  223. package/dist/mcp-args.js +164 -0
  224. package/dist/mcp-args.js.map +1 -0
  225. package/dist/mcp-cli-bridge.d.ts +34 -0
  226. package/dist/mcp-cli-bridge.js +62 -0
  227. package/dist/mcp-cli-bridge.js.map +1 -0
  228. package/dist/mcp-cli-runner.d.ts +29 -0
  229. package/dist/mcp-cli-runner.js +44 -0
  230. package/dist/mcp-cli-runner.js.map +1 -0
  231. package/dist/mcp-cli-tools.d.ts +129 -0
  232. package/dist/mcp-cli-tools.js +737 -0
  233. package/dist/mcp-cli-tools.js.map +1 -0
  234. package/dist/mcp-paths.d.ts +28 -0
  235. package/dist/mcp-paths.js +76 -0
  236. package/dist/mcp-paths.js.map +1 -0
  237. package/dist/mission-actors.d.ts +40 -0
  238. package/dist/mission-actors.js +72 -0
  239. package/dist/mission-actors.js.map +1 -0
  240. package/dist/mission-api.d.ts +35 -0
  241. package/dist/mission-api.js +60 -3
  242. package/dist/mission-api.js.map +1 -1
  243. package/dist/mission-cli.d.ts +4 -0
  244. package/dist/mission-cli.js +248 -0
  245. package/dist/mission-cli.js.map +1 -0
  246. package/dist/mission-exit.d.ts +22 -0
  247. package/dist/mission-exit.js +26 -0
  248. package/dist/mission-exit.js.map +1 -0
  249. package/dist/mission-fixtures.d.ts +234 -0
  250. package/dist/mission-fixtures.js +862 -0
  251. package/dist/mission-fixtures.js.map +1 -0
  252. package/dist/mission-journal.d.ts +60 -0
  253. package/dist/mission-journal.js +115 -0
  254. package/dist/mission-journal.js.map +1 -0
  255. package/dist/mission-queue-cli.d.ts +10 -0
  256. package/dist/mission-queue-cli.js +198 -0
  257. package/dist/mission-queue-cli.js.map +1 -0
  258. package/dist/mission-queue-runner.d.ts +126 -0
  259. package/dist/mission-queue-runner.js +406 -0
  260. package/dist/mission-queue-runner.js.map +1 -0
  261. package/dist/multi-run-cli.d.ts +37 -0
  262. package/dist/multi-run-cli.js +116 -0
  263. package/dist/multi-run-cli.js.map +1 -0
  264. package/dist/multi-run.d.ts +339 -0
  265. package/dist/multi-run.js +619 -0
  266. package/dist/multi-run.js.map +1 -0
  267. package/dist/openrouter-call.d.ts +22 -0
  268. package/dist/openrouter-call.js +64 -0
  269. package/dist/openrouter-call.js.map +1 -0
  270. package/dist/profile-cli.d.ts +4 -0
  271. package/dist/profile-cli.js +57 -0
  272. package/dist/profile-cli.js.map +1 -0
  273. package/dist/program.d.ts +3 -75
  274. package/dist/program.js +123 -1921
  275. package/dist/program.js.map +1 -1
  276. package/dist/project-dir.d.ts +96 -0
  277. package/dist/project-dir.js +221 -0
  278. package/dist/project-dir.js.map +1 -0
  279. package/dist/record-api.d.ts +13 -7
  280. package/dist/record-api.js +44 -30
  281. package/dist/record-api.js.map +1 -1
  282. package/dist/record-cli.d.ts +4 -0
  283. package/dist/record-cli.js +76 -0
  284. package/dist/record-cli.js.map +1 -0
  285. package/dist/recording-cli.d.ts +4 -0
  286. package/dist/recording-cli.js +248 -0
  287. package/dist/recording-cli.js.map +1 -0
  288. package/dist/regression-api.d.ts +107 -0
  289. package/dist/regression-api.js +387 -6
  290. package/dist/regression-api.js.map +1 -1
  291. package/dist/regression-cli.d.ts +4 -0
  292. package/dist/regression-cli.js +284 -0
  293. package/dist/regression-cli.js.map +1 -0
  294. package/dist/report-api.d.ts +146 -0
  295. package/dist/report-api.js +431 -0
  296. package/dist/report-api.js.map +1 -0
  297. package/dist/report-cli.d.ts +12 -0
  298. package/dist/report-cli.js +147 -0
  299. package/dist/report-cli.js.map +1 -0
  300. package/dist/resource-preflight.d.ts +87 -0
  301. package/dist/resource-preflight.js +160 -0
  302. package/dist/resource-preflight.js.map +1 -0
  303. package/dist/result-schema.d.ts +22 -0
  304. package/dist/result-schema.js +28 -0
  305. package/dist/result-schema.js.map +1 -0
  306. package/dist/run-index.d.ts +29 -0
  307. package/dist/run-index.js +70 -0
  308. package/dist/run-index.js.map +1 -0
  309. package/dist/run-key-preflight.d.ts +42 -0
  310. package/dist/run-key-preflight.js +82 -0
  311. package/dist/run-key-preflight.js.map +1 -0
  312. package/dist/run-screenshots.d.ts +123 -0
  313. package/dist/run-screenshots.js +235 -0
  314. package/dist/run-screenshots.js.map +1 -0
  315. package/dist/runtime-env.d.ts +8 -0
  316. package/dist/runtime-env.js +23 -0
  317. package/dist/runtime-env.js.map +1 -0
  318. package/dist/secret-args.d.ts +23 -0
  319. package/dist/secret-args.js +45 -0
  320. package/dist/secret-args.js.map +1 -0
  321. package/dist/serve-cli.d.ts +4 -0
  322. package/dist/serve-cli.js +95 -0
  323. package/dist/serve-cli.js.map +1 -0
  324. package/dist/server-log-verify.d.ts +36 -0
  325. package/dist/server-log-verify.js +120 -0
  326. package/dist/server-log-verify.js.map +1 -0
  327. package/dist/session-check.d.ts +14 -0
  328. package/dist/session-check.js +44 -0
  329. package/dist/session-check.js.map +1 -0
  330. package/dist/site-cli.d.ts +4 -0
  331. package/dist/site-cli.js +127 -0
  332. package/dist/site-cli.js.map +1 -0
  333. package/dist/site-gate-cli.d.ts +28 -0
  334. package/dist/site-gate-cli.js +59 -0
  335. package/dist/site-gate-cli.js.map +1 -0
  336. package/dist/source-api.js +20 -4
  337. package/dist/source-api.js.map +1 -1
  338. package/dist/source-cli.d.ts +4 -0
  339. package/dist/source-cli.js +284 -0
  340. package/dist/source-cli.js.map +1 -0
  341. package/dist/source-run-api.d.ts +27 -1
  342. package/dist/source-run-api.js +22 -11
  343. package/dist/source-run-api.js.map +1 -1
  344. package/dist/storage-state-snapshot.d.ts +50 -0
  345. package/dist/storage-state-snapshot.js +87 -0
  346. package/dist/storage-state-snapshot.js.map +1 -0
  347. package/dist/suite-explore-options.d.ts +321 -0
  348. package/dist/suite-explore-options.js +162 -0
  349. package/dist/suite-explore-options.js.map +1 -0
  350. package/dist/target-config.d.ts +115 -0
  351. package/dist/target-config.js +225 -0
  352. package/dist/target-config.js.map +1 -0
  353. package/dist/transcript-file.d.ts +12 -0
  354. package/dist/transcript-file.js +23 -0
  355. package/dist/transcript-file.js.map +1 -0
  356. package/dist/type-fixture-file.d.ts +9 -0
  357. package/dist/type-fixture-file.js +48 -0
  358. package/dist/type-fixture-file.js.map +1 -0
  359. package/dist/ui-api.d.ts +3 -0
  360. package/dist/ui-api.js +11 -4
  361. package/dist/ui-api.js.map +1 -1
  362. package/dist/usability-capture.d.ts +43 -0
  363. package/dist/usability-capture.js +327 -0
  364. package/dist/usability-capture.js.map +1 -0
  365. package/dist/usage-config.d.ts +36 -0
  366. package/dist/usage-config.js +114 -0
  367. package/dist/usage-config.js.map +1 -0
  368. package/dist/ux-api.d.ts +3 -75
  369. package/dist/ux-api.js +3 -220
  370. package/dist/ux-api.js.map +1 -1
  371. package/dist/ux-claim-probe.d.ts +45 -0
  372. package/dist/ux-claim-probe.js +386 -0
  373. package/dist/ux-claim-probe.js.map +1 -0
  374. package/dist/ux-cli.d.ts +4 -0
  375. package/dist/ux-cli.js +109 -0
  376. package/dist/ux-cli.js.map +1 -0
  377. package/dist/ux-config.d.ts +29 -0
  378. package/dist/ux-config.js +103 -0
  379. package/dist/ux-config.js.map +1 -0
  380. package/dist/ux-evidence.d.ts +54 -0
  381. package/dist/ux-evidence.js +197 -0
  382. package/dist/ux-evidence.js.map +1 -0
  383. package/dist/ux-product.d.ts +14 -0
  384. package/dist/ux-product.js +39 -0
  385. package/dist/ux-product.js.map +1 -0
  386. package/dist/ux-review.d.ts +116 -0
  387. package/dist/ux-review.js +171 -0
  388. package/dist/ux-review.js.map +1 -0
  389. package/dist/ux-usability.d.ts +263 -0
  390. package/dist/ux-usability.js +580 -0
  391. package/dist/ux-usability.js.map +1 -0
  392. package/dist/verify-fix-api.d.ts +194 -0
  393. package/dist/verify-fix-api.js +506 -0
  394. package/dist/verify-fix-api.js.map +1 -0
  395. package/dist/verify-fix-cli.d.ts +4 -0
  396. package/dist/verify-fix-cli.js +115 -0
  397. package/dist/verify-fix-cli.js.map +1 -0
  398. package/package.json +23 -18
  399. package/skills/jevitate-ci-check/SKILL.md +77 -0
  400. package/skills/jevitate-demo/SKILL.md +61 -0
  401. package/skills/jevitate-explore/SKILL.md +96 -87
  402. package/skills/jevitate-getting-started/SKILL.md +89 -0
  403. package/skills/jevitate-load-test/SKILL.md +11 -2
  404. package/skills/jevitate-mission-scope/SKILL.md +19 -11
  405. package/skills/jevitate-record/SKILL.md +23 -5
  406. package/skills/jevitate-run-journey/SKILL.md +61 -17
  407. package/skills/jevitate-sources/SKILL.md +57 -14
  408. package/skills/jevitate-test-campaign/SKILL.md +203 -0
  409. package/skills/jevitate-ux-review/SKILL.md +106 -16
  410. package/skills/jevitate-verify-fix/SKILL.md +76 -0
@@ -0,0 +1,506 @@
1
+ import { BranchReplayInputError, anchoredRecording, prefixFromBranch, prefixedOpener, recordedBranchOf } from "./journey-prefix.js";
2
+ import { readFile } from "node:fs/promises";
3
+ import { resolveTargetConfig } from "./target-config.js";
4
+ import { existsSync } from "node:fs";
5
+ import { InvariantSpecSchema, RecordingSchema, validateInvariantSpec } from "@jevitate/recording";
6
+ import { loadInvariantFiles, resolveInvariantAuthTokens } from "./invariants-file.js";
7
+ import { buildMissionFixtures } from "./fixture-cli.js";
8
+ import { observerSessions } from "./mission-actors.js";
9
+ import { FixtureSpecError, fixtureReplayOpener, hookHash, loadFixtureFile, parseFixtureSpec, secretFieldNames, } from "./mission-fixtures.js";
10
+ import { PlaywrightBrowserPort, resolveEmulation } from "@jevitate/playwright";
11
+ import { dirname as dirnameOf, join as joinPath, resolve as resolveFile } from "node:path";
12
+ import { assertSameExtensionBuild, listVideos, runVideoDir, sessionLaunchOptions } from "./browser-run-options.js";
13
+ import { artifactStamp } from "./mission-journal.js";
14
+ import { BrowseTheWeb, CastActor } from "@jevitate/screenplay";
15
+ import { assertAuthorizedExploreTarget, verifyFix, } from "@jevitate/explore";
16
+ import { verifyServerLogDefect } from "./server-log-verify.js";
17
+ import { defectSignalText, persistedDefect, replayWithEvidence, signalCheckable } from "./defect-evidence.js";
18
+ import { RunScreenshots, screenshotsDirFor } from "./run-screenshots.js";
19
+ import { clock } from "@jevitate/domain";
20
+ /**
21
+ * The programmatic surface behind `jevitate verify-fix` and the MCP `verify_fix` tool: loads a
22
+ * finished mission's persisted typed result (`<stem>.result.json`), finds the defect by
23
+ * fingerprint, and replays its reproduction in a FRESH browser session (`@jevitate/explore`'s
24
+ * `verifyFix`, which reuses the Recording interpreter). The replay is authorized against the
25
+ * mission's own allowlist before any browser opens.
26
+ *
27
+ * Exit codes: 0 fixed · 1 still reproduces · 2 inconclusive (the replay could not reach the
28
+ * defect's step, or the input was unusable) · 4 intermittent (the signal fired on some but not
29
+ * all fresh-context replays — #74; mirrors the mission `intermittent` hang outcome) — a broken or
30
+ * flaky check never reads as "fixed".
31
+ */
32
+ export const VERIFY_FIX_EXIT_CODES = {
33
+ fixed: 0,
34
+ "still-reproduces": 1,
35
+ inconclusive: 2,
36
+ intermittent: 4,
37
+ };
38
+ export class VerifyFixInputError extends Error {
39
+ code = "E_VERIFY_FIX_INPUT";
40
+ constructor(message) {
41
+ super(message);
42
+ this.name = "VerifyFixInputError";
43
+ }
44
+ }
45
+ const HANG_KINDS = new Set(["main-thread-unresponsive", "request-pending", "never-settled", "ui-no-progress"]);
46
+ /** A persisted hang signal, validated just enough to re-check it (fail closed otherwise). */
47
+ function asHangSignal(v) {
48
+ if (!isRecord(v) || typeof v.kind !== "string" || !HANG_KINDS.has(v.kind))
49
+ return null;
50
+ const last = v.lastState;
51
+ if (!isRecord(last) || typeof last.signature !== "string" || !Array.isArray(last.controls))
52
+ return null;
53
+ if (typeof v.detail !== "string" || typeof v.route !== "string" || typeof v.url !== "string" || !Array.isArray(v.pending)) {
54
+ return null;
55
+ }
56
+ return v;
57
+ }
58
+ function asPersistedFixtures(v) {
59
+ if (!isRecord(v) || typeof v.identity !== "string")
60
+ return undefined;
61
+ const hooks = isRecord(v.hooks) ? v.hooks : {};
62
+ const outputs = isRecord(v.outputs) ? v.outputs : {};
63
+ return {
64
+ identity: v.identity,
65
+ ...(v.spec === undefined ? {} : { spec: v.spec }),
66
+ hooks: {
67
+ ...(typeof hooks.before === "string" ? { before: hooks.before } : {}),
68
+ ...(typeof hooks.after === "string" ? { after: hooks.after } : {}),
69
+ },
70
+ outputs: Object.fromEntries(Object.entries(outputs).filter((e) => typeof e[1] === "string")),
71
+ ...(isRecord(v.identities)
72
+ ? { identities: Object.fromEntries(Object.entries(v.identities).filter((e) => typeof e[1] === "string")) }
73
+ : {}),
74
+ };
75
+ }
76
+ function isRecord(v) {
77
+ return v !== null && typeof v === "object" && !Array.isArray(v);
78
+ }
79
+ /** A persisted `server-log` defect's re-check spec (#142), validated just enough to replay it. */
80
+ function asServerLog(v) {
81
+ if (!isRecord(v))
82
+ return null;
83
+ if (!Array.isArray(v.sources) || !v.sources.every((s) => typeof s === "string"))
84
+ return null;
85
+ if (typeof v.matcher !== "string" || typeof v.normalizedMessage !== "string" || typeof v.drainMs !== "number")
86
+ return null;
87
+ // A scope that does not parse is refused (never dropped: that would widen what counts as a reproduction).
88
+ if (v.scope !== undefined && !(Array.isArray(v.scope) && v.scope.every((s) => typeof s === "string")))
89
+ return null;
90
+ const scope = v.scope === undefined ? {} : { scope: v.scope };
91
+ return { sources: v.sources, matcher: v.matcher, normalizedMessage: v.normalizedMessage, drainMs: v.drainMs, ...scope };
92
+ }
93
+ function asFinding(v) {
94
+ if (!isRecord(v) || typeof v.fingerprint !== "string" || typeof v.kind !== "string")
95
+ return null;
96
+ const repro = v.repro;
97
+ if (!isRecord(repro) || typeof repro.recordingStepIndex !== "number")
98
+ return null;
99
+ const hang = v.kind === "hang" ? asHangSignal(v.signal) : null;
100
+ if (v.kind === "hang" && hang === null)
101
+ return null;
102
+ const serverLog = v.kind === "server-log" ? asServerLog(v.serverLog) : null;
103
+ if (v.kind === "server-log" && serverLog === null)
104
+ return null;
105
+ const own = repro.recording === undefined ? undefined : RecordingSchema.safeParse(repro.recording);
106
+ if (own !== undefined && !own.success)
107
+ return null; // a finding whose repro cannot be trusted is skipped
108
+ return {
109
+ ...(own?.success === true ? { recording: own.data } : {}),
110
+ fingerprint: v.fingerprint,
111
+ kind: v.kind,
112
+ repro: { recordingStepIndex: repro.recordingStepIndex },
113
+ ...(hang === null ? {} : { hang }),
114
+ ...(serverLog === null ? {} : { serverLog }),
115
+ ...(Array.isArray(v.related) ? { related: v.related.filter((r) => typeof r === "string") } : {}),
116
+ ...(typeof v.title === "string" ? { title: v.title } : {}),
117
+ ...(typeof v.occurrences === "number" ? { occurrences: v.occurrences } : {}),
118
+ ...(v.kind === "invariant" && isRecord(v.invariant) && typeof v.invariant.id === "string" ? { invariantId: v.invariant.id } : {}),
119
+ };
120
+ }
121
+ /** Parses a persisted mission result, failing closed on anything it cannot trust. */
122
+ export function parsePersistedMission(raw) {
123
+ if (!isRecord(raw) || !isRecord(raw.result))
124
+ throw new VerifyFixInputError("not a mission result file");
125
+ const result = raw.result;
126
+ const target = result.target;
127
+ if (!isRecord(target) || typeof target.seedUrl !== "string" || !Array.isArray(target.allowlist)) {
128
+ throw new VerifyFixInputError("the mission result has no replay target (seedUrl/allowlist)");
129
+ }
130
+ // A run's own Recording (a coverage run has none; its findings carry their path).
131
+ const recording = result.recording === null || result.recording === undefined ? null : RecordingSchema.parse(result.recording);
132
+ const findings = [];
133
+ // `defects` holds every defect (#195). `serverLogDefects` is no longer written (removed in 0.3.0)
134
+ // but is still read: a 0.2.0 result carries it as an alias, a pre-#195 result as the only list
135
+ // of its server-log defects — each fingerprint is taken once.
136
+ for (const list of [result.defects, result.hangs, result.serverLogDefects]) {
137
+ if (!Array.isArray(list))
138
+ continue;
139
+ for (const item of list) {
140
+ const f = asFinding(item);
141
+ if (f !== null && !findings.some((g) => g.fingerprint === f.fingerprint))
142
+ findings.push(f);
143
+ }
144
+ }
145
+ // A persisted spec that no longer validates is dropped: its defects are then inconclusive, never fixed.
146
+ const spec = result.invariantSpec === undefined ? undefined : InvariantSpecSchema.safeParse(result.invariantSpec);
147
+ const fixtures = asPersistedFixtures(result.fixtures);
148
+ const actors = Array.isArray(target.actors)
149
+ ? target.actors.flatMap((a) => isRecord(a) && typeof a.name === "string" && typeof a.storageStatePath === "string" && (a.role === "primary" || a.role === "observer")
150
+ ? [{ name: a.name, storageStatePath: a.storageStatePath, role: a.role }]
151
+ : [])
152
+ : [];
153
+ return {
154
+ ...(spec?.success === true ? { invariantSpec: spec.data } : {}),
155
+ ...(fixtures === undefined ? {} : { fixtures }),
156
+ recording,
157
+ target: {
158
+ seedUrl: target.seedUrl,
159
+ allowlist: target.allowlist.filter((a) => typeof a === "string"),
160
+ ...(typeof target.storageStatePath === "string" ? { storageStatePath: target.storageStatePath } : {}),
161
+ ...(actors.length === 0 ? {} : { actors }),
162
+ },
163
+ findings,
164
+ };
165
+ }
166
+ /**
167
+ * The one place a mission's findings (declared-invariant defects, hangs, adversarial defects) are
168
+ * looked up by fingerprint — a fingerprint the CALLER supplied may equal the finding's own, or one
169
+ * of its `related` fingerprints (the same underlying defect observed at a different point). Shared
170
+ * by `verify-fix` and `regression capture` (#119/#129): the latter reuses this lookup rather than
171
+ * re-implementing "is this fingerprint a defect this mission found" itself.
172
+ */
173
+ export function findFinding(mission, fingerprint) {
174
+ return mission.findings.find((f) => f.fingerprint === fingerprint || (f.related ?? []).includes(fingerprint));
175
+ }
176
+ /** Whether an explicit `--viewport`/`--device` matches a finding's recorded emulation (#149). */
177
+ function emulationMatchesRecorded(explicit, recorded) {
178
+ if (explicit.device !== undefined || recorded.device !== undefined)
179
+ return explicit.device === recorded.device;
180
+ if (explicit.viewport === undefined)
181
+ return true;
182
+ return explicit.viewport.width === recorded.viewport.width && explicit.viewport.height === recorded.viewport.height;
183
+ }
184
+ /** The controls a persisted mission's side effects show firing a write (#181), for hang-replay withholding. */
185
+ function recordedWriters(raw) {
186
+ const r = raw;
187
+ const list = r?.sideEffects ?? r?.result?.sideEffects;
188
+ if (!Array.isArray(list))
189
+ return [];
190
+ return list.flatMap((e) => {
191
+ const control = e?.control;
192
+ return typeof control === "string" ? [control] : [];
193
+ });
194
+ }
195
+ function describeEmulation(e) {
196
+ return e.device !== undefined ? `--device "${e.device}"` : `--viewport ${e.viewport.width}x${e.viewport.height}`;
197
+ }
198
+ export async function runVerifyFix(opts) {
199
+ let raw;
200
+ try {
201
+ raw = JSON.parse(await readFile(opts.resultPath, "utf8"));
202
+ }
203
+ catch (e) {
204
+ throw new VerifyFixInputError(`cannot read mission result ${opts.resultPath}: ${e instanceof Error ? e.message : String(e)}`);
205
+ }
206
+ const mission = parsePersistedMission(raw);
207
+ const finding = findFinding(mission, opts.fingerprint);
208
+ if (finding === undefined) {
209
+ throw new VerifyFixInputError(`no finding with fingerprint ${opts.fingerprint} in ${opts.resultPath}`);
210
+ }
211
+ // Guardrail #1: the replay may only ever touch the mission's own authorized origins.
212
+ const origin = assertAuthorizedExploreTarget(mission.target.seedUrl, mission.target.allowlist);
213
+ const target = resolveTargetConfig(opts.targets ?? {}, origin);
214
+ // #175: the operator's targets.json session is the last fallback (verify_fix over MCP of a
215
+ // mission recorded without one); never an MCP argument.
216
+ const storageState = opts.storageState ?? mission.target.storageStatePath ?? target.storageState;
217
+ if (storageState !== undefined && !existsSync(storageState)) {
218
+ throw new VerifyFixInputError(`storage state not found: ${storageState}`);
219
+ }
220
+ const portFactory = opts.browserPortFactory ?? (() => new PlaywrightBrowserPort());
221
+ // #245: every replay (and observer) session is shown/recorded alike — videos in
222
+ // `verify-fix-<stamp>.videos/` beside the mission result (or under `--record-video <dir>`).
223
+ const vfArtifact = joinPath(dirnameOf(resolveFile(opts.resultPath)), `verify-fix-${artifactStamp(clock.nowIso())}.json`);
224
+ const videoDir = runVideoDir(opts.browser, vfArtifact);
225
+ const shown = sessionLaunchOptions(opts.browser, videoDir);
226
+ const perceiveOpts = {
227
+ ...(opts.settleCeilingMs === undefined ? {} : { renderWaitMs: opts.settleCeilingMs }),
228
+ ...(target.settle === undefined ? {} : { settleConfig: target.settle }),
229
+ ...(target.hangs === undefined ? {} : { hangConfig: target.hangs }),
230
+ };
231
+ const found = finding.recording ?? mission.recording;
232
+ if (found === null)
233
+ throw new VerifyFixInputError(`finding ${finding.fingerprint} has no Recording to replay`);
234
+ // #293: a finding from a branch point replays through its Journey prefix (resolved now, refused if
235
+ // its secret params are not given again), on the live anchor page — never from the anchor URL.
236
+ const branch = recordedBranchOf(raw?.result);
237
+ let prefix;
238
+ if (branch !== undefined) {
239
+ try {
240
+ prefix = await prefixFromBranch(branch, { ...(opts.journeyPrefix ?? {}), ...(storageState === undefined ? {} : { storageState }) });
241
+ }
242
+ catch (e) {
243
+ if (e instanceof BranchReplayInputError)
244
+ throw new VerifyFixInputError(e.message);
245
+ throw e;
246
+ }
247
+ }
248
+ const recording = prefix === undefined ? found : anchoredRecording(found);
249
+ // #256: replay only under the extension build the finding was recorded with (none ⇔ none).
250
+ try {
251
+ assertSameExtensionBuild(recording.extensions, opts.browser, `finding ${finding.fingerprint}`);
252
+ }
253
+ catch (e) {
254
+ throw new VerifyFixInputError(e instanceof Error ? e.message : String(e));
255
+ }
256
+ // #149: replay under the finding's OWN recorded emulation by default — a 375px defect reproduces
257
+ // at 375px, not the caller's desktop default. An explicit --viewport/--device that DIFFERS from
258
+ // it fails closed (never silently "verifies fixed" at the wrong device) unless overridden.
259
+ const recordedEmulation = recording.emulation;
260
+ let effectiveEmulation;
261
+ if (opts.emulation !== undefined) {
262
+ if (recordedEmulation !== undefined && !emulationMatchesRecorded(opts.emulation, recordedEmulation) && opts.allowEmulationOverride !== true) {
263
+ throw new VerifyFixInputError(`--viewport/--device differs from the finding's recorded emulation (${describeEmulation(recordedEmulation)}); ` +
264
+ "pass allowEmulationOverride (CLI --allow-emulation-override) to replay at a different emulation anyway");
265
+ }
266
+ effectiveEmulation = opts.emulation;
267
+ }
268
+ else if (recordedEmulation !== undefined) {
269
+ effectiveEmulation = recordedEmulation.device !== undefined ? { device: recordedEmulation.device } : { viewport: recordedEmulation.viewport };
270
+ }
271
+ resolveEmulation(effectiveEmulation); // refused BEFORE any browser opens (an unknown device, e.g.)
272
+ // A declared-invariant defect (#86) is re-checked with the same spec (or `--invariants`), its probes
273
+ // authorized against the MISSION's own origins before any browser opens.
274
+ let invariantSpec;
275
+ // #135: authFrom.secret refs (env:VAR), resolved from the environment HERE — the one place this
276
+ // package reads process.env for invariants — never inside @jevitate/explore or @jevitate/recording.
277
+ let invariantAuthTokens;
278
+ // #147: a cross-actor defect is re-checked from the SAME observers, each in a fresh context per replay.
279
+ const observers = (mission.target.actors ?? []).filter((a) => a.role === "observer");
280
+ for (const o of observers) {
281
+ if (!existsSync(o.storageStatePath))
282
+ throw new VerifyFixInputError(`actor ${o.name}: storage state not found: ${o.storageStatePath}`);
283
+ }
284
+ try {
285
+ const bounds = { allowlist: mission.target.allowlist, baseUrl: mission.target.seedUrl, observers: observers.map((o) => o.name) };
286
+ invariantSpec =
287
+ opts.invariantFiles !== undefined && opts.invariantFiles.length > 0
288
+ ? loadInvariantFiles(opts.invariantFiles, bounds)
289
+ : mission.invariantSpec === undefined
290
+ ? undefined
291
+ : validateInvariantSpec(mission.invariantSpec, bounds);
292
+ invariantAuthTokens = invariantSpec === undefined ? undefined : resolveInvariantAuthTokens(invariantSpec, process.env);
293
+ }
294
+ catch (e) {
295
+ throw new VerifyFixInputError(e instanceof Error ? e.message : String(e));
296
+ }
297
+ const authTokenValues = [...(invariantAuthTokens?.values() ?? [])];
298
+ const primaryActor = mission.target.actors?.find((a) => a.role === "primary")?.name;
299
+ const fx = missionFixtures(mission, opts.fixtureFlags ?? {}, storageState, [...(opts.secrets ?? []), ...authTokenValues], target.personas);
300
+ const declared = finding.kind === "invariant" && finding.invariantId !== undefined && invariantSpec !== undefined
301
+ ? {
302
+ spec: invariantSpec,
303
+ id: finding.invariantId,
304
+ allowlist: mission.target.allowlist,
305
+ baseUrl: mission.target.seedUrl,
306
+ ...(invariantAuthTokens === undefined || invariantAuthTokens.size === 0 ? {} : { authTokens: invariantAuthTokens }),
307
+ ...(observers.length === 0
308
+ ? {}
309
+ : {
310
+ openObservers: () => observerSessions(portFactory, { ...shown, allowedOrigins: [...mission.target.allowlist], baseUrl: origin }, observers.map((o) => ({ name: o.name, storageState: o.storageStatePath }))),
311
+ }),
312
+ ...(primaryActor === undefined ? {} : { primaryActor }),
313
+ }
314
+ : undefined;
315
+ const openSession = async () => {
316
+ const session = await portFactory().open({
317
+ ...shown,
318
+ allowedOrigins: [...mission.target.allowlist],
319
+ baseUrl: origin,
320
+ ...effectiveEmulation,
321
+ ...(storageState !== undefined ? { storageState } : {}),
322
+ });
323
+ const actor = CastActor.named("verify-fix").whoCan(new BrowseTheWeb(session, [...mission.target.allowlist]));
324
+ return { page: session.page, actor, close: () => session.close() };
325
+ };
326
+ // #293: every replay session first goes back through the finding's Journey prefix.
327
+ const prefixed = prefix === undefined ? undefined : prefixedOpener(openSession, prefix, mission.target.allowlist, opts.browser);
328
+ const branchOpen = prefixed?.open ?? openSession;
329
+ // Each replay restores the mission's fixture state first; a failed setup makes that replay
330
+ // "could not open a session" — no evidence, so never `fixed`.
331
+ const replaySession = fx === undefined ? branchOpen : fixtureReplayOpener(branchOpen, fx, recording.fixture?.outputs ?? mission.fixtures?.outputs ?? {});
332
+ let result;
333
+ try {
334
+ // A `server-log` defect (#142) is re-checked by REPLAYING and re-tailing the SAME log sources —
335
+ // never by `@jevitate/explore`'s `verifyFix`, which only looks at DOM/console/network signals.
336
+ if (finding.kind === "server-log") {
337
+ if (finding.serverLog === undefined) {
338
+ result = {
339
+ fingerprint: finding.fingerprint,
340
+ verdict: "inconclusive",
341
+ observedFingerprints: [],
342
+ replay: { outcome: "failed", at: -1, error: "not replayed" },
343
+ reason: "a server-log defect needs its log source(s) and matcher to be re-checked",
344
+ };
345
+ }
346
+ else {
347
+ result = await verifyServerLogDefect({
348
+ recording,
349
+ recordingStepIndex: finding.repro.recordingStepIndex,
350
+ fingerprint: finding.fingerprint,
351
+ sources: finding.serverLog.sources,
352
+ matcher: finding.serverLog.matcher,
353
+ normalizedMessage: finding.serverLog.normalizedMessage,
354
+ drainMs: finding.serverLog.drainMs,
355
+ ...(finding.serverLog.scope === undefined ? {} : { scope: finding.serverLog.scope }),
356
+ // #142 follow-up: an explicit --allow-log-cmd wins; otherwise the operator's own
357
+ // ~/.jevitate/targets.json entry for this origin may opt in (never an MCP argument).
358
+ allowLogCmd: opts.allowLogCmd === true || target.allowLogCmd === true,
359
+ ...(opts.settleCeilingMs === undefined ? {} : { settleCeilingMs: opts.settleCeilingMs }),
360
+ ...(opts.replays === undefined ? {} : { replays: opts.replays }),
361
+ openSession: replaySession,
362
+ });
363
+ }
364
+ }
365
+ else {
366
+ result = await verifyFix({
367
+ perceive: perceiveOpts,
368
+ recording,
369
+ recordingStepIndex: finding.repro.recordingStepIndex,
370
+ fingerprint: finding.fingerprint,
371
+ defectKind: finding.kind,
372
+ ...(declared === undefined ? {} : { invariant: declared }),
373
+ ...(finding.hang === undefined ? {} : { hang: finding.hang }),
374
+ // #153: never re-send a paid/destructive write unless the operator opted in.
375
+ safety: { ...(target.safety ?? {}), ...(opts.hangReplayWrites === true ? { hangReplayWrites: true } : {}) },
376
+ writtenBy: recordedWriters(raw),
377
+ ...(finding.occurrences === undefined ? {} : { occurrences: finding.occurrences }),
378
+ ...(opts.settleCeilingMs === undefined ? {} : { settleCeilingMs: opts.settleCeilingMs }),
379
+ ...(opts.replays === undefined ? {} : { replays: opts.replays }),
380
+ ...(opts.actionDeltas === true ? { actionDeltas: true, secrets: [...(opts.secrets ?? []), ...authTokenValues] } : {}),
381
+ openSession: replaySession,
382
+ });
383
+ }
384
+ }
385
+ finally {
386
+ await fx?.restore();
387
+ }
388
+ // #293: a prefix that no longer replays proved nothing: a typed inconclusive, never `fixed`.
389
+ const stale = prefixed?.stale();
390
+ if (stale !== undefined) {
391
+ result = { ...result, verdict: "inconclusive", reason: `journey-stale: ${stale.message}` };
392
+ }
393
+ // #250/#251: the captioned "after" replay (video and/or screenshots), paired with the run's own clip.
394
+ let evidence;
395
+ let shotFields = {};
396
+ if (opts.browser?.recordVideo !== undefined || opts.screenshots !== undefined) {
397
+ const secrets = [...(opts.secrets ?? []), ...authTokenValues];
398
+ const stored = persistedDefect(raw, finding.fingerprint);
399
+ const storedEvidence = stored !== undefined && isRecord(stored.evidence) ? stored.evidence : undefined;
400
+ const beforeVideo = typeof storedEvidence?.videoPath === "string" ? storedEvidence.videoPath : undefined;
401
+ const beforeShots = Array.isArray(storedEvidence?.screenshots) ? storedEvidence.screenshots.filter((x) => typeof x === "string") : [];
402
+ const shots = opts.screenshots === undefined
403
+ ? undefined
404
+ : new RunScreenshots({ spec: opts.screenshots, dir: screenshotsDirFor(opts.screenshots, vfArtifact), secrets, title: `verify-fix ${finding.fingerprint}` });
405
+ const verdictCard = () => result.verdict === "fixed"
406
+ ? { text: "After the fix: the defect no longer reproduces", ok: true }
407
+ : { text: `After: ${result.verdict === "still-reproduces" ? "still reproduces" : result.verdict}`, ok: false };
408
+ const after = prefix !== undefined
409
+ ? { screenshots: [], skipped: "a finding from a Journey branch point: the after-clip replay does not replay the prefix" }
410
+ : fx !== undefined || observers.length > 0
411
+ ? { screenshots: [], skipped: fx !== undefined ? "the run used mission fixtures: the after-clip replay does not restore them" : "a cross-actor defect: no after-clip replay" }
412
+ : await replayWithEvidence({
413
+ recording,
414
+ stepIndex: finding.repro.recordingStepIndex,
415
+ fingerprints: [finding.fingerprint, ...(finding.related ?? [])],
416
+ signalCheckable: signalCheckable(finding.kind),
417
+ signal: defectSignalText(stored ?? { kind: finding.kind, ...(finding.title === undefined ? {} : { title: finding.title }) }, secrets),
418
+ seedUrl: mission.target.seedUrl,
419
+ allowlist: mission.target.allowlist,
420
+ ...(storageState === undefined ? {} : { storageState }),
421
+ ...(effectiveEmulation === undefined ? {} : { emulation: effectiveEmulation }),
422
+ outDir: joinPath(dirnameOf(videoDir ?? vfArtifact), `${vfArtifact.replace(/^.*[\\/]/, "").replace(/\.json$/, "")}.evidence`),
423
+ video: opts.browser?.recordVideo !== undefined,
424
+ ...(shots === undefined ? {} : { screenshots: shots }),
425
+ secrets,
426
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
427
+ browserPortFactory: portFactory,
428
+ ...(opts.evidencePaceMs === undefined ? {} : { paceMs: opts.evidencePaceMs }),
429
+ ...(opts.settleCeilingMs === undefined ? {} : { settleCeilingMs: opts.settleCeilingMs }),
430
+ finalCard: verdictCard,
431
+ });
432
+ evidence = {
433
+ ...(beforeVideo === undefined && beforeShots.length === 0 ? {} : { before: { ...(beforeVideo === undefined ? {} : { videoPath: beforeVideo }), screenshots: beforeShots } }),
434
+ ...(beforeVideo === undefined ? { beforeMissing: "the run recorded no evidence clip for this defect (run it with --evidence-video)" } : {}),
435
+ after,
436
+ };
437
+ shotFields = shots === undefined ? {} : await shots.finish();
438
+ }
439
+ return {
440
+ ...result,
441
+ exitCode: VERIFY_FIX_EXIT_CODES[result.verdict],
442
+ ...(branch === undefined ? {} : { branch }),
443
+ ...(stale === undefined ? {} : { failure: { kind: "journey-stale", message: stale.message } }),
444
+ ...(evidence === undefined ? {} : { evidence }),
445
+ ...shotFields,
446
+ ...(finding.title === undefined ? {} : { title: finding.title }),
447
+ ...(fx === undefined ? {} : { fixtures: { ...fx.record(), missionIdentity: mission.fixtures?.identity ?? "none" } }),
448
+ // Every replay closed its own session (finalizing its video) before verifyFix returned.
449
+ ...(videoDir === undefined ? {} : { videoPaths: listVideos(videoDir) }),
450
+ };
451
+ }
452
+ /**
453
+ * The replay fixture: the mission's saved spec (re-validated against the MISSION's allowlist, never
454
+ * trusted as-is) or `--fixtures`, plus the operator's re-supplied shell hooks, which must match the
455
+ * mission's by hash. A mission that ran with a fixture never replays without one.
456
+ */
457
+ function missionFixtures(mission, flags, storageState, secrets,
458
+ /** #243: the origin's targets.json personas — bind a fixture identity no flag or saved path names. */
459
+ personas) {
460
+ const saved = mission.fixtures;
461
+ if (saved === undefined && flags.fixtures === undefined && flags.before === undefined && flags.after === undefined && (flags.fixtureIdentity ?? []).length === 0) {
462
+ return undefined;
463
+ }
464
+ const bounds = { allowlist: mission.target.allowlist, baseUrl: mission.target.seedUrl };
465
+ const hooks = saved?.hooks ?? {};
466
+ const given = {
467
+ ...(flags.before === undefined ? {} : { before: hookHash(flags.before) }),
468
+ ...(flags.after === undefined ? {} : { after: hookHash(flags.after) }),
469
+ };
470
+ if (given.before !== hooks.before || given.after !== hooks.after) {
471
+ throw new VerifyFixInputError(hooks.before === undefined && hooks.after === undefined
472
+ ? "the mission ran without shell hooks; do not pass --before/--after"
473
+ : "the mission ran with --before/--after shell hooks: re-supply the SAME commands with --allow-shell-hooks (they are never replayed from the result file)");
474
+ }
475
+ try {
476
+ const openRefs = { openRefs: hooks.before !== undefined };
477
+ const spec = flags.fixtures !== undefined
478
+ ? loadFixtureFile(flags.fixtures, bounds, openRefs)
479
+ : saved?.spec !== undefined
480
+ ? parseFixtureSpec(saved.spec, bounds, openRefs)
481
+ : undefined;
482
+ // `--secret-field` bindings a spec authenticates with come from the same environment variables.
483
+ const names = secretFieldNames(spec); // `auth: {from: "secretField"}` and `${secretField.VAR}` (#166)
484
+ const secretFields = names.flatMap((name) => {
485
+ const secret = process.env[name];
486
+ return secret === undefined ? [] : [{ descriptor: name, matcher: { key: "name", value: name }, name, kind: "value", secret }];
487
+ });
488
+ const { fixtures: _file, ...hookFlags } = flags;
489
+ return buildMissionFixtures(hookFlags, {
490
+ ...bounds,
491
+ ...(storageState === undefined ? {} : { storageState }),
492
+ secretFields,
493
+ secrets,
494
+ ...(spec === undefined ? {} : { spec }),
495
+ // #243: re-mint as the SAME identities (the saved paths), unless re-bound by flag or persona.
496
+ ...(saved?.identities === undefined ? {} : { identities: saved.identities }),
497
+ ...(personas === undefined ? {} : { personas }),
498
+ });
499
+ }
500
+ catch (e) {
501
+ if (e instanceof FixtureSpecError)
502
+ throw new VerifyFixInputError(`mission fixtures: ${e.message}`);
503
+ throw e;
504
+ }
505
+ }
506
+ //# sourceMappingURL=verify-fix-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-fix-api.js","sourceRoot":"","sources":["../src/verify-fix-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import { type CliDeps } from "./cli-shared.js";
3
+ /** Registers `jevitate verify-fix`. */
4
+ export declare function registerVerifyFixCommands(program: Command, deps: CliDeps): void;