@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,505 @@
1
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { copyFile, mkdir, mkdtemp, rm } from "node:fs/promises";
3
+ import { tmpdir } from "node:os";
4
+ import { basename, dirname, join } from "node:path";
5
+ import { assertNoSecretInPayload, redactText, redactUrl } from "@jevitate/ai-core";
6
+ import { fileDraft, fingerprintMarker, targetsFor, clock } from "@jevitate/domain";
7
+ import { DemoOverlay, PageSignalCollector, assertAuthorizedExploreTarget, monitorFor, observeAfterStep, perceive, signalFingerprint, } from "@jevitate/explore";
8
+ import { RecordingInterpreter } from "@jevitate/interpreter";
9
+ import { describeStep } from "@jevitate/journey";
10
+ import { PlaywrightBrowserPort } from "@jevitate/playwright";
11
+ import { BrowseTheWeb, CastActor } from "@jevitate/screenplay";
12
+ import { sessionLaunchOptions } from "./browser-run-options.js";
13
+ import { captureStepScreenshot, maskingPort, SecretPixelMask } from "./demo-capture.js";
14
+ import { findFinding, parsePersistedMission } from "./verify-fix-api.js";
15
+ import { writeIssueDrafts } from "./findings-filing.js";
16
+ /**
17
+ * #250 — defect evidence: per defect, its minimal repro Recording (the one `verify-fix` replays:
18
+ * the finding's own, else the run's, up to `repro.recordingStepIndex`) is replayed in a FRESH
19
+ * session with the demo overlay and a video. Each step is captioned with what it does (its
20
+ * objective, else its label, else a value-free description); the failing step is marked with the
21
+ * defect's actual signal ("Save → server returned 500 (PUT /api/profile)", "invariant `x`
22
+ * violated", …) and whether this replay saw it fire again. Two key screenshots — just before the
23
+ * failing step and at it, the failing element highlighted — have the overlay hidden.
24
+ *
25
+ * Secrets are masked in pixels by the display-only mask layer (`demo-capture.ts`) from the video's
26
+ * first paint; the mask is re-proven at every step. FAIL CLOSED: a clip whose mask could not be
27
+ * proven at some step is deleted and the reason recorded; a screenshot that cannot be proven is not
28
+ * written. Nothing here reaches a model; every string written is redacted.
29
+ *
30
+ * The media are attached as `defects[].evidence.{videoPath, screenshots[]}` (additive, schemaVersion
31
+ * 1), appended to the defect's issue draft, and read by `report` / `check` (JUnit, SARIF). GitHub's
32
+ * API cannot upload media: drafts and filed issues LINK to the files (commit them under `.jevitate/`
33
+ * or publish them as CI artifacts).
34
+ */
35
+ /** Caption time per step in an evidence clip (ms). */
36
+ export const EVIDENCE_PACE_MS = 700;
37
+ /** At most this many defects get a clip per run (hard defects first). */
38
+ export const EVIDENCE_MAX_DEFECTS = 5;
39
+ const sleep = (ms) => clock.sleep(ms);
40
+ function oneLine(s) {
41
+ return s.replace(/\s+/g, " ").trim();
42
+ }
43
+ function cut(s, n) {
44
+ const t = oneLine(s);
45
+ return t.length <= n ? t : `${t.slice(0, n - 1)}…`;
46
+ }
47
+ function errText(e) {
48
+ return (e instanceof Error ? e.message : String(e)).split("\n")[0] ?? "unknown error";
49
+ }
50
+ function isRecord(v) {
51
+ return v !== null && typeof v === "object" && !Array.isArray(v);
52
+ }
53
+ function str(v) {
54
+ return typeof v === "string" && v !== "" ? v : undefined;
55
+ }
56
+ function pathOf(url) {
57
+ try {
58
+ return new URL(url).pathname;
59
+ }
60
+ catch {
61
+ return url;
62
+ }
63
+ }
64
+ /** A recorded step's caption: its objective, else its label, else a value-free description. */
65
+ export function stepCaption(recorded) {
66
+ const pick = [recorded.objective, recorded.step.label].map((t) => (t ?? "").trim()).find((t) => t !== "");
67
+ return oneLine(pick ?? describeStep(recorded.step));
68
+ }
69
+ function targetOf(recorded) {
70
+ const step = recorded?.step;
71
+ return step?.target ?? null;
72
+ }
73
+ /** Kinds whose fingerprint is a page signal's (`signalFingerprint`): a replay can see them fire again. */
74
+ const SIGNAL_KINDS = new Set(["http-5xx", "console-error", "page-error", "failed-request"]);
75
+ /** Whether a replay's page signals can show a defect of this kind fire again. */
76
+ export function signalCheckable(kind) {
77
+ return SIGNAL_KINDS.has(kind);
78
+ }
79
+ /** The persisted defect (or hang) record with this fingerprint in a raw `<stem>.result.json`. */
80
+ export function persistedDefect(raw, fingerprint) {
81
+ const result = isRecord(raw) && isRecord(raw.result) ? raw.result : undefined;
82
+ // `serverLogDefects` is no longer written (removed in 0.3.0); read it so older results still resolve.
83
+ for (const list of [result?.defects, result?.hangs, result?.serverLogDefects]) {
84
+ if (!Array.isArray(list))
85
+ continue;
86
+ const hit = list.filter(isRecord).find((d) => d.fingerprint === fingerprint || (Array.isArray(d.related) && d.related.includes(fingerprint)));
87
+ if (hit !== undefined)
88
+ return hit;
89
+ }
90
+ return undefined;
91
+ }
92
+ /** What a defect's failing step is marked with: its actual signal, in one line (redacted). */
93
+ export function defectSignalText(d, secrets) {
94
+ const kind = str(d.kind) ?? "defect";
95
+ const signals = Array.isArray(d.signals) ? d.signals.filter(isRecord) : [];
96
+ const own = signals.find((s) => s.kind === kind) ?? signals[0];
97
+ // The request's method: the defect's own (goal/usability runners), else its signal's (adversarial).
98
+ const method = str(d.method) ?? str(own?.method);
99
+ let text;
100
+ if (kind === "http-5xx") {
101
+ const url = str(own?.url) ?? str(d.url) ?? "";
102
+ const status = typeof own?.status === "number" ? own.status : undefined;
103
+ text = `server returned ${status ?? "5xx"} (${method === undefined ? "" : `${method} `}${pathOf(url)})`;
104
+ }
105
+ else if (kind === "invariant") {
106
+ const inv = isRecord(d.invariant) ? d.invariant : undefined;
107
+ text = `invariant \`${str(inv?.id) ?? "?"}\` violated`;
108
+ }
109
+ else if (kind === "console-error")
110
+ text = `console error: ${str(own?.detail) ?? str(d.title) ?? ""}`;
111
+ else if (kind === "page-error")
112
+ text = `uncaught page error: ${str(own?.detail) ?? str(d.title) ?? ""}`;
113
+ else if (kind === "failed-request")
114
+ text = `request failed (${pathOf(str(own?.url) ?? "")})`;
115
+ else if (kind === "horizontal-overflow")
116
+ text = `horizontal overflow${typeof own?.overflowPx === "number" ? ` (${own.overflowPx}px)` : ""}`;
117
+ else if (kind === "vertical-clipping")
118
+ text = `text cut off${typeof own?.clippedPx === "number" ? ` (${own.clippedPx}px)` : ""}`;
119
+ else if (kind === "server-log")
120
+ text = `server log error: ${str(d.title) ?? ""}`;
121
+ else if (kind === "hang")
122
+ text = `the page hung: ${str(d.title) ?? ""}`;
123
+ else
124
+ text = str(d.title) ?? kind;
125
+ return cut(redactText(redactUrl(text), secrets), 160);
126
+ }
127
+ /**
128
+ * Replays `recording` up to `stepIndex` with captions, the failing step marked, key screenshots and
129
+ * (when `video`) a clip — see the module comment. Never throws: a failure is `skipped` / `captureSkips`.
130
+ */
131
+ export async function replayWithEvidence(input) {
132
+ const secrets = input.secrets;
133
+ const redact = (s) => redactText(s, secrets);
134
+ const flat = input.recording.pages.flatMap((p) => p.steps);
135
+ const idx = Math.min(input.stepIndex, flat.length - 1);
136
+ if (idx < 0)
137
+ return { screenshots: [], skipped: "the repro Recording has no steps" };
138
+ let origin;
139
+ try {
140
+ origin = assertAuthorizedExploreTarget(input.seedUrl, [...input.allowlist]);
141
+ }
142
+ catch (e) {
143
+ return { screenshots: [], skipped: redact(errText(e)) };
144
+ }
145
+ if (input.storageState !== undefined && !existsSync(input.storageState)) {
146
+ return { screenshots: [], skipped: "the run's storage state file is gone" };
147
+ }
148
+ await mkdir(input.outDir, { recursive: true });
149
+ const work = await mkdtemp(join(tmpdir(), "jevitate-evidence-"));
150
+ const mask = new SecretPixelMask(secrets);
151
+ const base = (input.browserPortFactory ?? (() => new PlaywrightBrowserPort()))();
152
+ const port = maskingPort(base, mask);
153
+ const { recordVideo: _rv, ...shown } = input.browser ?? {};
154
+ const pace = input.paceMs ?? EVIDENCE_PACE_MS;
155
+ const screenshots = [];
156
+ const captureSkips = [];
157
+ let tainted;
158
+ let session;
159
+ try {
160
+ session = await port.open({
161
+ ...sessionLaunchOptions(shown, input.video ? work : undefined),
162
+ allowedOrigins: [...input.allowlist],
163
+ baseUrl: origin,
164
+ ...input.emulation,
165
+ ...(input.storageState === undefined ? {} : { storageState: input.storageState }),
166
+ });
167
+ }
168
+ catch (e) {
169
+ await rm(work, { recursive: true, force: true });
170
+ return { screenshots: [], skipped: `could not open a masked session: ${redact(errText(e))}` };
171
+ }
172
+ const page = session.page;
173
+ const overlay = new DemoOverlay(secrets);
174
+ const fired = new Set();
175
+ let collector;
176
+ const drain = () => {
177
+ for (const s of collector?.drain() ?? [])
178
+ fired.add(signalFingerprint(s));
179
+ };
180
+ const reproducedNow = () => {
181
+ drain();
182
+ if (input.fingerprints.some((f) => fired.has(f)))
183
+ return true;
184
+ return input.signalCheckable ? false : undefined;
185
+ };
186
+ /** The video is only kept if the mask was proven at every step (fail closed). */
187
+ const proveMask = async () => {
188
+ if (!input.video || !mask.active || tainted !== undefined)
189
+ return;
190
+ const r = await mask.verify(page);
191
+ if (!r.ok)
192
+ tainted = r.reason ?? "the mask could not be proven";
193
+ };
194
+ const shoot = async (moment, step) => {
195
+ const file = join(input.outDir, `${moment}-step-${step}.png`);
196
+ try {
197
+ await captureStepScreenshot(page, file, { step }, [mask.layer()]);
198
+ screenshots.push(file);
199
+ }
200
+ catch (e) {
201
+ captureSkips.push(`${moment} step ${step}: ${redact(errText(e))}`);
202
+ }
203
+ };
204
+ let reproduced;
205
+ const total = idx + 1;
206
+ const observer = {
207
+ beforeStep: async ({ index }) => {
208
+ await proveMask();
209
+ const recorded = flat[index];
210
+ if (recorded === undefined)
211
+ return;
212
+ const caption = redact(stepCaption(recorded));
213
+ if (index === idx)
214
+ await shoot("before", index + 1);
215
+ await overlay.caption(page, { head: `step ${index + 1} of ${total}${index === idx ? " · the failing step" : ""}`, text: caption }, targetOf(recorded));
216
+ await sleep(pace);
217
+ },
218
+ afterStep: async ({ index, outcome }) => {
219
+ await overlay.refresh(page);
220
+ await proveMask();
221
+ const recorded = flat[index];
222
+ if (index === idx && recorded !== undefined) {
223
+ // Let the async work the step started (the late 500, the deferred error) land first.
224
+ await perceive(page, input.settleCeilingMs === undefined ? {} : { renderWaitMs: input.settleCeilingMs }).catch(() => undefined);
225
+ reproduced = reproducedNow();
226
+ const caption = redact(stepCaption(recorded));
227
+ const mark = reproduced === false ? `${caption} → did not fire on this replay (the run saw: ${input.signal})` : `${caption} → ${input.signal}`;
228
+ await overlay.caption(page, { head: `✗ step ${index + 1} of ${total} · the failing step`, text: mark });
229
+ const target = targetOf(recorded);
230
+ if (target !== null)
231
+ await mask.highlight(page, target);
232
+ await shoot("at", index + 1);
233
+ await mask.clearHighlight(page);
234
+ const card = input.finalCard?.(reproduced) ?? {
235
+ text: reproduced === false ? `Did not reproduce on this replay: ${input.signal}` : `Defect: ${mark}`,
236
+ ok: reproduced === false,
237
+ };
238
+ await overlay.card(page, card.text, card.ok ? "ok" : "bad");
239
+ await sleep(pace);
240
+ await proveMask();
241
+ }
242
+ await input.screenshots?.capture(page, {
243
+ step: index + 1,
244
+ what: `${recorded === undefined ? `step ${index + 1}` : stepCaption(recorded)}${outcome === "failed" ? " — failed" : ""}`,
245
+ });
246
+ },
247
+ };
248
+ let replay;
249
+ try {
250
+ collector = new PageSignalCollector(page, clock.now, input.allowlist);
251
+ await monitorFor(page).instrument();
252
+ const actor = CastActor.named("evidence").whoCan(new BrowseTheWeb(session, [...input.allowlist]));
253
+ const r = await new RecordingInterpreter({ observer }).runToCheckpoint(actor, observeAfterStep(input.recording, idx), idx);
254
+ replay =
255
+ r.outcome === "completed"
256
+ ? { outcome: "completed" }
257
+ : {
258
+ outcome: "stopped",
259
+ atStep: r.at + 1,
260
+ reason: cut(redact(r.outcome === "failed" ? r.error : "paused for a human hand-back"), 300),
261
+ };
262
+ if (r.outcome !== "completed" && r.at < idx) {
263
+ await overlay.card(page, `The replay stopped at step ${r.at + 1} of ${total}: the recorded path no longer reproduces`, "bad");
264
+ await sleep(pace);
265
+ }
266
+ await proveMask();
267
+ }
268
+ catch (e) {
269
+ replay = { outcome: "stopped", reason: cut(redact(errText(e)), 300) };
270
+ }
271
+ const videoTmp = session.videoPath;
272
+ await session.close().catch(() => undefined);
273
+ let videoPath;
274
+ if (input.video) {
275
+ if (tainted !== undefined)
276
+ captureSkips.push(`video: not kept — secret masking could not be proven (${redact(tainted)})`);
277
+ else if (videoTmp === undefined || !existsSync(videoTmp))
278
+ captureSkips.push("video: the replay recorded no video");
279
+ else {
280
+ videoPath = join(input.outDir, "clip.webm");
281
+ await copyFile(videoTmp, videoPath);
282
+ }
283
+ }
284
+ await rm(work, { recursive: true, force: true });
285
+ return {
286
+ ...(videoPath === undefined ? {} : { videoPath }),
287
+ screenshots,
288
+ failingStep: idx + 1,
289
+ signal: input.signal,
290
+ ...(reproduced === undefined ? {} : { reproduced }),
291
+ ...(replay === undefined ? {} : { replay }),
292
+ ...(captureSkips.length === 0 ? {} : { captureSkips }),
293
+ };
294
+ }
295
+ /** `<dir>/<stem>.result.json` → `<dir>/<stem>.evidence`. */
296
+ export function evidenceDirFor(resultPath) {
297
+ return join(dirname(resultPath), `${basename(resultPath).replace(/\.result\.json$/, "").replace(/\.json$/, "")}.evidence`);
298
+ }
299
+ /**
300
+ * Captures evidence for a finished run's defects (hard ones first, at most `maxDefects`), writes it
301
+ * into the persisted result (`defects[].evidence`) and the defects' issue drafts, and returns the
302
+ * updated result. A run with no defects is returned unchanged (nothing replayed).
303
+ */
304
+ export async function attachDefectEvidence(result, opts) {
305
+ const r = result;
306
+ const defects = Array.isArray(r.defects) ? r.defects.filter(isRecord) : [];
307
+ if (defects.length === 0)
308
+ return result;
309
+ let raw;
310
+ try {
311
+ raw = JSON.parse(readFileSync(opts.resultPath, "utf8"));
312
+ }
313
+ catch {
314
+ return result; // no persisted result: nothing to replay from
315
+ }
316
+ const secrets = opts.secrets ?? [];
317
+ let mission;
318
+ try {
319
+ mission = parsePersistedMission(raw);
320
+ }
321
+ catch {
322
+ return result;
323
+ }
324
+ const root = opts.dir ?? evidenceDirFor(opts.resultPath);
325
+ const max = opts.maxDefects ?? EVIDENCE_MAX_DEFECTS;
326
+ const order = [...defects].sort((a, b) => Number(a.advisory === true) - Number(b.advisory === true));
327
+ const chosen = new Set(order.slice(0, max).map((d) => d.fingerprint));
328
+ const byFp = new Map();
329
+ for (const d of defects) {
330
+ const fp = str(d.fingerprint);
331
+ if (fp === undefined)
332
+ continue;
333
+ if (!chosen.has(fp)) {
334
+ byFp.set(fp, { screenshots: [], skipped: `not captured: at most ${max} defects get evidence per run` });
335
+ continue;
336
+ }
337
+ const signal = defectSignalText(d, secrets);
338
+ const finding = findFinding(mission, fp);
339
+ const recording = finding?.recording ?? mission.recording;
340
+ if (finding === undefined || recording === null) {
341
+ byFp.set(fp, { screenshots: [], signal, skipped: "the defect has no repro Recording to replay" });
342
+ continue;
343
+ }
344
+ if (mission.fixtures !== undefined) {
345
+ byFp.set(fp, { screenshots: [], signal, skipped: "the run used mission fixtures; replay it with `verify-fix --record-video` (which restores them)" });
346
+ continue;
347
+ }
348
+ if ((mission.target.actors ?? []).some((a) => a.role === "observer")) {
349
+ byFp.set(fp, { screenshots: [], signal, skipped: "a cross-actor defect: replay it with `verify-fix --record-video`" });
350
+ continue;
351
+ }
352
+ const emu = recording.emulation;
353
+ const storageState = opts.storageState ?? mission.target.storageStatePath;
354
+ byFp.set(fp, await replayWithEvidence({
355
+ recording,
356
+ stepIndex: finding.repro.recordingStepIndex,
357
+ fingerprints: [fp, ...(finding.related ?? [])],
358
+ signalCheckable: SIGNAL_KINDS.has(finding.kind),
359
+ signal,
360
+ seedUrl: mission.target.seedUrl,
361
+ allowlist: mission.target.allowlist,
362
+ ...(storageState === undefined ? {} : { storageState }),
363
+ ...(emu === undefined ? {} : { emulation: emu.device !== undefined ? { device: emu.device } : { viewport: emu.viewport } }),
364
+ outDir: join(root, fp),
365
+ video: opts.video !== false,
366
+ secrets,
367
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
368
+ ...(opts.browserPortFactory === undefined ? {} : { browserPortFactory: opts.browserPortFactory }),
369
+ ...(opts.paceMs === undefined ? {} : { paceMs: opts.paceMs }),
370
+ ...(opts.settleCeilingMs === undefined ? {} : { settleCeilingMs: opts.settleCeilingMs }),
371
+ }));
372
+ }
373
+ const withEvidence = (list) => Array.isArray(list) ? list.map((d) => (isRecord(d) && typeof d.fingerprint === "string" && byFp.has(d.fingerprint) ? { ...d, evidence: byFp.get(d.fingerprint) } : d)) : list;
374
+ const updated = { ...r, defects: withEvidence(r.defects), ...(isRecord(r.issues) ? { issues: { ...r.issues } } : {}) };
375
+ appendEvidenceToDrafts(updated, byFp, secrets);
376
+ // The persisted file gets the same evidence and drafts (read back by report / check / verify-fix).
377
+ if (isRecord(raw) && isRecord(raw.result)) {
378
+ const file = {
379
+ ...raw,
380
+ result: { ...raw.result, defects: withEvidence(raw.result.defects), ...(isRecord(updated.issues) && isRecord(raw.result.issues) ? { issues: updated.issues } : {}) },
381
+ };
382
+ writeFileSync(opts.resultPath, `${JSON.stringify(file, null, 2)}\n`, "utf8");
383
+ }
384
+ return updated;
385
+ }
386
+ /** The heading of a draft's media section (#250). */
387
+ export const EVIDENCE_MEDIA_HEADING = "## Repro clip and screenshots";
388
+ /** The Markdown media section of an issue draft (paths only; redacted, proven secret-free). */
389
+ export function evidenceSection(e, secrets) {
390
+ const lines = [EVIDENCE_MEDIA_HEADING, ""];
391
+ if (e.videoPath !== undefined)
392
+ lines.push(`- Captioned repro clip: \`${e.videoPath}\`${e.signal === undefined ? "" : ` — step ${e.failingStep ?? "?"} is marked: ${e.signal}`}`);
393
+ for (const s of e.screenshots)
394
+ lines.push(`- Screenshot (${basename(s).startsWith("before") ? "just before the failing step" : "at the failing step, element highlighted"}): \`${s}\``);
395
+ if (e.reproduced === false)
396
+ lines.push("- Note: the defect did not fire on the evidence replay (it may be intermittent).");
397
+ if (e.skipped !== undefined)
398
+ lines.push(`- No media: ${e.skipped}`);
399
+ for (const s of e.captureSkips ?? [])
400
+ lines.push(`- Not captured: ${s}`);
401
+ lines.push("", "_GitHub's API cannot upload media, so these are links to files: commit them under the repo's `.jevitate/`, or publish them as CI artifacts and link those._");
402
+ const text = redactText(lines.join("\n"), secrets);
403
+ assertNoSecretInPayload(text, secrets, "defect evidence section");
404
+ return text;
405
+ }
406
+ /**
407
+ * Inserts the media section into each defect's written draft, before its fingerprint marker. A
408
+ * defect with media but no draft yet (a goal run drafts only crashes and hangs) gets one, when the
409
+ * result carries `issues` — a system-under-test draft naming the defect, its signal and its media.
410
+ */
411
+ function appendEvidenceToDrafts(result, byFp, secrets) {
412
+ const issues = isRecord(result.issues) ? result.issues : undefined;
413
+ if (issues === undefined)
414
+ return;
415
+ const drafts = Array.isArray(issues.drafts) ? issues.drafts.filter(isRecord) : [];
416
+ const drafted = new Set(drafts.map((d) => str(d.fingerprint)).filter((f) => f !== undefined));
417
+ const recordingPath = Array.isArray(result.recordingPaths) ? str(result.recordingPaths[0]) : str(result.recordingPath);
418
+ const defects = Array.isArray(result.defects) ? result.defects.filter(isRecord) : [];
419
+ const fresh = [];
420
+ for (const d of defects) {
421
+ const fp = str(d.fingerprint);
422
+ const e = fp === undefined ? undefined : byFp.get(fp);
423
+ if (fp === undefined || e === undefined || drafted.has(fp) || d.advisory === true)
424
+ continue;
425
+ if (e.videoPath === undefined && e.screenshots.length === 0)
426
+ continue;
427
+ const title = redactText(redactUrl(str(d.title) ?? `${str(d.kind) ?? "defect"} on ${str(d.route) ?? "?"}`), secrets);
428
+ const body = [
429
+ `jevitate observed **${title}** on \`${redactText(str(d.route) ?? "?", secrets)}\`: ${e.signal ?? str(d.kind) ?? "a defect"}.`,
430
+ `Fingerprint \`${fp}\`${typeof d.occurrences === "number" ? ` · ${d.occurrences} occurrence(s) in this run` : ""}.`,
431
+ ...(recordingPath === undefined ? [] : [`## Artifacts\n- Recording: \`${recordingPath}\` (replay it up to step ${e.failingStep ?? "?"} to reach the failing step)`]),
432
+ fingerprintMarker(fp),
433
+ ].join("\n\n");
434
+ fresh.push({ fingerprint: fp, title: `[jevitate] ${title}`, body: redactText(body, secrets), labels: ["jevitate", "defect"], attribution: "system-under-test", targets: targetsFor("system-under-test") });
435
+ }
436
+ const written = recordingPath === undefined ? [] : writeIssueDrafts(recordingPath, fresh);
437
+ const all = [...drafts, ...written.map((w) => ({ ...w }))];
438
+ if (written.length > 0)
439
+ issues.drafts = all;
440
+ for (const d of all) {
441
+ const fp = str(d.fingerprint);
442
+ const path = str(d.path);
443
+ const e = fp === undefined ? undefined : byFp.get(fp);
444
+ if (fp === undefined || path === undefined || e === undefined || !existsSync(path))
445
+ continue;
446
+ const md = readFileSync(path, "utf8");
447
+ if (md.includes(`\n${EVIDENCE_MEDIA_HEADING}\n`))
448
+ continue;
449
+ const marker = fingerprintMarker(fp);
450
+ const section = evidenceSection(e, secrets);
451
+ const at = md.lastIndexOf(marker);
452
+ writeFileSync(path, at < 0 ? `${md.trimEnd()}\n\n${section}\n` : `${md.slice(0, at)}${section}\n\n${md.slice(at)}`, "utf8");
453
+ }
454
+ }
455
+ /**
456
+ * Files the run's drafts AFTER their evidence was attached (the run itself wrote drafts only), so
457
+ * a filed issue links to the media. Returns the result with `issues.filing` replaced.
458
+ */
459
+ export async function fileDraftsWithEvidence(result, config, makeFiler, nowIso) {
460
+ const r = result;
461
+ const issues = isRecord(r.issues) ? r.issues : undefined;
462
+ const drafts = Array.isArray(issues?.drafts) ? issues.drafts.filter(isRecord) : [];
463
+ if (issues === undefined || drafts.length === 0)
464
+ return result;
465
+ const filing = [];
466
+ const filer = config.enabled ? makeFiler() : null;
467
+ for (const d of drafts) {
468
+ const fp = str(d.fingerprint);
469
+ const path = str(d.path);
470
+ if (fp === undefined || path === undefined || !existsSync(path))
471
+ continue;
472
+ const md = readFileSync(path, "utf8");
473
+ const heading = /^# (.*)\n\n/.exec(md);
474
+ const draft = {
475
+ fingerprint: fp,
476
+ title: str(d.title) ?? heading?.[1] ?? fp,
477
+ body: heading === null ? md.trim() : md.slice(heading[0].length).trim(),
478
+ labels: Array.isArray(d.labels) ? d.labels.filter((l) => typeof l === "string") : [],
479
+ attribution: d.attribution,
480
+ targets: (Array.isArray(d.targets) ? d.targets : []),
481
+ };
482
+ const outcomes = filer === null ? draft.targets.map((target) => ({ target, status: "draft-only", reason: "filing is disabled" })) : await fileDraft(filer, draft, config, nowIso);
483
+ filing.push({ fingerprint: fp, outcomes });
484
+ }
485
+ return { ...r, issues: { ...issues, filing } };
486
+ }
487
+ /** A runner's evidence settings: on only with `evidenceVideo`, over the run's own secrets. */
488
+ export function evidenceOf(opts, secrets) {
489
+ if (opts.evidenceVideo !== true)
490
+ return undefined;
491
+ return {
492
+ resultPath: "",
493
+ secrets,
494
+ ...(opts.browser === undefined ? {} : { browser: opts.browser }),
495
+ ...(opts.browserPortFactory === undefined ? {} : { browserPortFactory: opts.browserPortFactory }),
496
+ ...(opts.storageState === undefined ? {} : { storageState: opts.storageState }),
497
+ };
498
+ }
499
+ /** A written result with its defects' evidence attached (unchanged without `evidenceVideo`). */
500
+ export async function withRunEvidence(result, evidence) {
501
+ if (evidence === undefined)
502
+ return result;
503
+ return attachDefectEvidence(result, { ...evidence, resultPath: result.resultPath });
504
+ }
505
+ //# sourceMappingURL=defect-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defect-evidence.js","sourceRoot":"","sources":["../src/defect-evidence.ts"],"names":[],"mappings":"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"}