@jevitate/cli 0.2.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 (210) hide show
  1. package/dist/ai-cli.d.ts +31 -11
  2. package/dist/ai-cli.js +100 -67
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/author-journey-cli.js +3 -1
  5. package/dist/author-journey-cli.js.map +1 -1
  6. package/dist/bin.js +48218 -39969
  7. package/dist/browser-run-options.d.ts +32 -1
  8. package/dist/browser-run-options.js +69 -0
  9. package/dist/browser-run-options.js.map +1 -1
  10. package/dist/build-info.generated.js +2 -2
  11. package/dist/campaign-api.d.ts +151 -0
  12. package/dist/campaign-api.js +446 -0
  13. package/dist/campaign-api.js.map +1 -0
  14. package/dist/campaign-cli.d.ts +6 -0
  15. package/dist/campaign-cli.js +66 -0
  16. package/dist/campaign-cli.js.map +1 -0
  17. package/dist/check-api.js +3 -2
  18. package/dist/check-api.js.map +1 -1
  19. package/dist/check-budget.js +2 -1
  20. package/dist/check-budget.js.map +1 -1
  21. package/dist/check-execute.d.ts +4 -0
  22. package/dist/check-execute.js +41 -6
  23. package/dist/check-execute.js.map +1 -1
  24. package/dist/check-plan.d.ts +5 -0
  25. package/dist/check-plan.js +72 -4
  26. package/dist/check-plan.js.map +1 -1
  27. package/dist/check-suite.d.ts +14 -1
  28. package/dist/check-suite.js +26 -1
  29. package/dist/check-suite.js.map +1 -1
  30. package/dist/cli-output.d.ts +4 -0
  31. package/dist/cli-output.js +52 -5
  32. package/dist/cli-output.js.map +1 -1
  33. package/dist/cli-shared.d.ts +13 -3
  34. package/dist/cli-shared.js +52 -7
  35. package/dist/cli-shared.js.map +1 -1
  36. package/dist/defect-evidence.js +6 -3
  37. package/dist/defect-evidence.js.map +1 -1
  38. package/dist/demo-aspect-api.js +2 -1
  39. package/dist/demo-aspect-api.js.map +1 -1
  40. package/dist/demo-aspect-cli.js +3 -1
  41. package/dist/demo-aspect-cli.js.map +1 -1
  42. package/dist/demo-capture.d.ts +37 -3
  43. package/dist/demo-capture.js +119 -20
  44. package/dist/demo-capture.js.map +1 -1
  45. package/dist/explore-adversarial.d.ts +11 -4
  46. package/dist/explore-adversarial.js +21 -12
  47. package/dist/explore-adversarial.js.map +1 -1
  48. package/dist/explore-cli.js +262 -26
  49. package/dist/explore-cli.js.map +1 -1
  50. package/dist/explore-coverage.d.ts +17 -2
  51. package/dist/explore-coverage.js +19 -13
  52. package/dist/explore-coverage.js.map +1 -1
  53. package/dist/explore-feature.d.ts +0 -2
  54. package/dist/explore-feature.js +6 -8
  55. package/dist/explore-feature.js.map +1 -1
  56. package/dist/explore-goal.d.ts +25 -7
  57. package/dist/explore-goal.js +61 -18
  58. package/dist/explore-goal.js.map +1 -1
  59. package/dist/explore-shared.d.ts +27 -2
  60. package/dist/explore-shared.js +21 -1
  61. package/dist/explore-shared.js.map +1 -1
  62. package/dist/fixture-auth.d.ts +13 -2
  63. package/dist/fixture-auth.js +19 -6
  64. package/dist/fixture-auth.js.map +1 -1
  65. package/dist/fixture-cli.d.ts +29 -0
  66. package/dist/fixture-cli.js +121 -7
  67. package/dist/fixture-cli.js.map +1 -1
  68. package/dist/github-issue-filer.js +2 -1
  69. package/dist/github-issue-filer.js.map +1 -1
  70. package/dist/host-health-run.d.ts +2 -1
  71. package/dist/host-health-run.js +8 -2
  72. package/dist/host-health-run.js.map +1 -1
  73. package/dist/init-cli.js +34 -5
  74. package/dist/init-cli.js.map +1 -1
  75. package/dist/init-keys.d.ts +11 -0
  76. package/dist/init-keys.js +5 -2
  77. package/dist/init-keys.js.map +1 -1
  78. package/dist/journey-annotate-api.js +17 -4
  79. package/dist/journey-annotate-api.js.map +1 -1
  80. package/dist/journey-annotate-cli.js +3 -1
  81. package/dist/journey-annotate-cli.js.map +1 -1
  82. package/dist/journey-api.d.ts +26 -1
  83. package/dist/journey-api.js +51 -25
  84. package/dist/journey-api.js.map +1 -1
  85. package/dist/journey-cli.d.ts +1 -1
  86. package/dist/journey-cli.js +44 -3
  87. package/dist/journey-cli.js.map +1 -1
  88. package/dist/journey-demo-api.d.ts +2 -0
  89. package/dist/journey-demo-api.js +23 -10
  90. package/dist/journey-demo-api.js.map +1 -1
  91. package/dist/journey-demo-cli.js +5 -2
  92. package/dist/journey-demo-cli.js.map +1 -1
  93. package/dist/journey-prefix.d.ts +194 -0
  94. package/dist/journey-prefix.js +279 -0
  95. package/dist/journey-prefix.js.map +1 -0
  96. package/dist/key-report.d.ts +49 -0
  97. package/dist/key-report.js +101 -0
  98. package/dist/key-report.js.map +1 -0
  99. package/dist/kill-signal.js +0 -1
  100. package/dist/kill-signal.js.map +1 -1
  101. package/dist/ledger-api.js +3 -1
  102. package/dist/ledger-api.js.map +1 -1
  103. package/dist/log-correlation.d.ts +54 -1
  104. package/dist/log-correlation.js +83 -14
  105. package/dist/log-correlation.js.map +1 -1
  106. package/dist/log-sources.js +6 -5
  107. package/dist/log-sources.js.map +1 -1
  108. package/dist/log-trace.d.ts +80 -0
  109. package/dist/log-trace.js +210 -0
  110. package/dist/log-trace.js.map +1 -0
  111. package/dist/logs-retention.js +2 -1
  112. package/dist/logs-retention.js.map +1 -1
  113. package/dist/masked-input.d.ts +22 -0
  114. package/dist/masked-input.js +99 -0
  115. package/dist/masked-input.js.map +1 -0
  116. package/dist/mcp-api.d.ts +3 -1
  117. package/dist/mcp-api.js +49 -7
  118. package/dist/mcp-api.js.map +1 -1
  119. package/dist/mcp-args.d.ts +12 -0
  120. package/dist/mcp-args.js +33 -0
  121. package/dist/mcp-args.js.map +1 -1
  122. package/dist/mcp-cli-tools.d.ts +5 -1
  123. package/dist/mcp-cli-tools.js +73 -16
  124. package/dist/mcp-cli-tools.js.map +1 -1
  125. package/dist/mission-api.js +2 -1
  126. package/dist/mission-api.js.map +1 -1
  127. package/dist/mission-cli.js +2 -1
  128. package/dist/mission-cli.js.map +1 -1
  129. package/dist/mission-fixtures.d.ts +10 -1
  130. package/dist/mission-fixtures.js +49 -15
  131. package/dist/mission-fixtures.js.map +1 -1
  132. package/dist/mission-queue-runner.js +11 -2
  133. package/dist/mission-queue-runner.js.map +1 -1
  134. package/dist/multi-run-cli.js +7 -1
  135. package/dist/multi-run-cli.js.map +1 -1
  136. package/dist/openrouter-call.js +3 -2
  137. package/dist/openrouter-call.js.map +1 -1
  138. package/dist/program.js +4 -0
  139. package/dist/program.js.map +1 -1
  140. package/dist/project-dir.js +3 -2
  141. package/dist/project-dir.js.map +1 -1
  142. package/dist/record-api.d.ts +3 -1
  143. package/dist/record-api.js +5 -2
  144. package/dist/record-api.js.map +1 -1
  145. package/dist/record-cli.js +14 -2
  146. package/dist/record-cli.js.map +1 -1
  147. package/dist/regression-api.d.ts +6 -0
  148. package/dist/regression-api.js +4 -2
  149. package/dist/regression-api.js.map +1 -1
  150. package/dist/regression-cli.js +56 -4
  151. package/dist/regression-cli.js.map +1 -1
  152. package/dist/report-api.js +2 -1
  153. package/dist/report-api.js.map +1 -1
  154. package/dist/resource-preflight.d.ts +87 -0
  155. package/dist/resource-preflight.js +160 -0
  156. package/dist/resource-preflight.js.map +1 -0
  157. package/dist/result-schema.d.ts +1 -1
  158. package/dist/result-schema.js +1 -1
  159. package/dist/run-key-preflight.d.ts +42 -0
  160. package/dist/run-key-preflight.js +82 -0
  161. package/dist/run-key-preflight.js.map +1 -0
  162. package/dist/run-screenshots.js +11 -5
  163. package/dist/run-screenshots.js.map +1 -1
  164. package/dist/runtime-env.js +3 -2
  165. package/dist/runtime-env.js.map +1 -1
  166. package/dist/server-log-verify.d.ts +2 -0
  167. package/dist/server-log-verify.js +8 -3
  168. package/dist/server-log-verify.js.map +1 -1
  169. package/dist/site-gate-cli.js +2 -1
  170. package/dist/site-gate-cli.js.map +1 -1
  171. package/dist/source-api.js +2 -1
  172. package/dist/source-api.js.map +1 -1
  173. package/dist/suite-explore-options.d.ts +32 -0
  174. package/dist/suite-explore-options.js +22 -0
  175. package/dist/suite-explore-options.js.map +1 -1
  176. package/dist/target-config.d.ts +6 -0
  177. package/dist/target-config.js +9 -0
  178. package/dist/target-config.js.map +1 -1
  179. package/dist/type-fixture-file.d.ts +9 -0
  180. package/dist/type-fixture-file.js +48 -0
  181. package/dist/type-fixture-file.js.map +1 -0
  182. package/dist/ui-api.js +4 -3
  183. package/dist/ui-api.js.map +1 -1
  184. package/dist/usability-capture.js +4 -3
  185. package/dist/usability-capture.js.map +1 -1
  186. package/dist/usage-config.d.ts +1 -1
  187. package/dist/usage-config.js +1 -1
  188. package/dist/ux-claim-probe.d.ts +45 -0
  189. package/dist/ux-claim-probe.js +386 -0
  190. package/dist/ux-claim-probe.js.map +1 -0
  191. package/dist/ux-cli.js +8 -1
  192. package/dist/ux-cli.js.map +1 -1
  193. package/dist/ux-product.d.ts +14 -0
  194. package/dist/ux-product.js +39 -0
  195. package/dist/ux-product.js.map +1 -0
  196. package/dist/ux-review.d.ts +4 -0
  197. package/dist/ux-review.js +27 -7
  198. package/dist/ux-review.js.map +1 -1
  199. package/dist/ux-usability.d.ts +34 -9
  200. package/dist/ux-usability.js +100 -14
  201. package/dist/ux-usability.js.map +1 -1
  202. package/dist/verify-fix-api.d.ts +21 -0
  203. package/dist/verify-fix-api.js +85 -33
  204. package/dist/verify-fix-api.js.map +1 -1
  205. package/dist/verify-fix-cli.js +7 -2
  206. package/dist/verify-fix-cli.js.map +1 -1
  207. package/package.json +9 -9
  208. package/skills/jevitate-explore/SKILL.md +8 -0
  209. package/skills/jevitate-getting-started/SKILL.md +2 -1
  210. package/skills/jevitate-test-campaign/SKILL.md +203 -0
@@ -1 +1 @@
1
- {"version":3,"file":"explore-adversarial.js","sourceRoot":"","sources":["../src/explore-adversarial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"explore-adversarial.js","sourceRoot":"","sources":["../src/explore-adversarial.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAwC,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAA0B,MAAM,0BAA0B,CAAC;AAChK,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAI/D,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAK7B,eAAe,EAGf,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIgB,KAAK,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAGrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,eAAe,EAEf,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,oCAAoC,EACpC,mBAAmB,EACnB,gBAAgB,EAEhB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA8B;IACnE,uEAAuE;IACvE,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,8CAA8C;IAC9C,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,uBAAuB;IACvB,oBAAoB;IACpB,sFAAsF;IACtF,aAAa;CACd,CAAC;AAuHF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAqC;IAErC,wEAAwE;IACxE,MAAM,MAAM,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,oCAAoC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5D,+FAA+F;IAC/F,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,mGAAmG;IACnG,2FAA2F;IAC3F,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS;QACrD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa;QACzC,KAAK,EAAE,sBAAsB,IAAI,CAAC,OAAO,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;IACtD,iFAAiF;IACjF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,oFAAoF;IACpF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG;QACb,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,OAAO,EAAE,MAAM;QACf,GAAG,IAAI,CAAC,SAAS;QACjB,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChF,CAAC;IACF,oFAAoF;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IACrC,uGAAuG;IACvG,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,CAAC;QAC3E,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,SAAS;QACrD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnB,wFAAwF;YACxF,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACnK,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC/C,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU;YACpC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;SAC5H,CAAC;KACH,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC;QACrC,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IACH,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,iBAAiB,GAAG,CAAC,KAAsB,EAAE,GAA+B,EAAQ,EAAE;QAC1F,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,SAAS,EAAE,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxE,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,oGAAoG;IACpG,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,0FAA0F;QAC1F,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9G,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;YAC1C,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClF,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5E,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC7D,mGAAmG;YACnG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjG,IAAI,EAAE,MAAM;YACZ,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,6EAA6E;YAC7E,gBAAgB,EAAE,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5E,iBAAiB;YACjB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpG,QAAQ,EAAE;gBACR,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACrG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAClG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC3G,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aACnF;SACF,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtG,8FAA8F;QAC9F,qGAAqG;QACrG,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAsB,CAAC;QACzF,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACpC,8FAA8F;QAC9F,8EAA8E;QAC9E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAClG,MAAM,cAAc,GAAmB,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACtG,MAAM,MAAM,GAAiB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,gCAAgC,UAAU,kBAAkB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC1H,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,gCAAgC,UAAU,kBAAkB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACvI,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,OAAO,CAAC,aAAa,EACrB,MAAM,EACN,IAAI,CAAC,MAAM,IAAI,WAAW,EAC1B,IAAI,CAAC,UAAU,IAAI,QAAQ,EAC3B,GAAG,CACJ,CAAC;QACF,0FAA0F;QAC1F,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG;YACb,GAAG,OAAO;YACV,aAAa,EAAE,6BAA6B;YAC5C,QAAQ,EAAE,aAAsB;YAChC,cAAc;YACd,cAAc,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;YACvC,GAAG,MAAM;YACT,GAAG,UAAU;YACb,qGAAqG;YACrG,SAAS,EAAE;gBACT,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACrI,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO;aAC1C;YACD,OAAO,EAAE,cAAc;YACvB,UAAU;YACV,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,QAAQ;YACR,MAAM;YACN,6FAA6F;YAC7F,sEAAsE;YACtE,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK,CAAC,GAAG;gBAClB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjG;YACD,GAAG,YAAY,CAAC,KAAK,CAAC;YACtB,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5E,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACjE,GAAG,eAAe,CAAC,YAAY,CAAC;YAChC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;YAC/D,UAAU;YACV,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACjG,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QACF,OAAO,MAAM,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACvL,CAAC;YAAS,CAAC;QACT,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { envCredentialStore, MissingCredentialError } from "@jevitate/ai-core";
3
3
  import { loadLocalCredentials } from "./credentials-file.js";
4
- import { FixtureNotFoundError, ScopeUnderivableError, UnauthorizedExploreTargetError, resolveCoverageThresholds, parseSecretField, SecretFieldSpecError, validateDenyPatterns, } from "@jevitate/explore";
4
+ import { FixtureNotFoundError, ScopeUnderivableError, UnauthorizedExploreTargetError, resolveCoverageThresholds, parseSecretField, SecretFieldSpecError, TypeFixtureSpecError, validateDenyPatterns, } from "@jevitate/explore";
5
+ import { loadTypeFixtures } from "./type-fixture-file.js";
5
6
  import { ok, fail } from "./envelope.js";
6
7
  import { SessionFileInProjectError, assertSessionFileOutsideProject } from "./project-dir.js";
7
8
  import { InvariantsFileError, loadInvariantFiles, resolveInvariantAuthTokens } from "./invariants-file.js";
@@ -10,8 +11,8 @@ import { fileDraftsWithEvidence } from "./defect-evidence.js";
10
11
  import { parseScreenshotsArg } from "./run-screenshots.js";
11
12
  import { GitHubIssueFiler } from "./github-issue-filer.js";
12
13
  import { TargetConfigError, loadTargetsFile, resolveTargetConfig } from "./target-config.js";
13
- import { buildMissionFixtures, checkSetupRefs, checkUrlRefOrigin, invariantSetupTexts, substituteSpecSetupRefs, fixtureSetupFailedResult, withFixtureFlags, } from "./fixture-cli.js";
14
- import { FixtureSetupError, FixtureSpecError, SETUP_REF, UnboundSetupRefError, substituteSetupRefs, } from "./mission-fixtures.js";
14
+ import { buildMissionFixtures, checkSetupRefs, checkUrlRefOrigin, substituteUrlSetupRefs, setupRefFreeUrl, invariantSetupTexts, substituteSpecSetupRefs, fixtureSetupFailedResult, withFixtureFlags, } from "./fixture-cli.js";
15
+ import { FixtureSetupError, FixtureSpecError, UnboundSetupRefError, substituteSetupRefs, } from "./mission-fixtures.js";
15
16
  import { LITERAL_SECRET_WARNING, SecretArgError, resolveSecretArgs } from "./secret-args.js";
16
17
  import { withEngine } from "./engine.js";
17
18
  import { setKillSwitchOutput } from "./kill-signal.js";
@@ -20,31 +21,62 @@ import { intArg, positiveNumberArg, nonNegativeIntArg, positiveIntArg, ratioArg
20
21
  import { formatMissionHuman, formatMultiRunHuman } from "./cli-output.js";
21
22
  import { runExploration, runCoverageMission, runAdversarialCliMission, CLI_ADVERSARIAL_STRATEGIES, runFeatureCliMission, parseSuccessSpec, resolveExploreAllowlist, } from "./explore-api.js";
22
23
  import { parseLogSourceSpecs, LogSourceSpecError } from "./log-sources.js";
23
- import { parseLogDefectSpecs, parseLogIgnoreSpecs } from "./log-correlation.js";
24
+ import { parseLogDefectSpecs, parseLogIgnoreSpecs, parseLogScopeSpecs } from "./log-correlation.js";
25
+ import { parseCorrelationHeaders, parseLogIdPatterns } from "./log-trace.js";
24
26
  import { LogSpecError } from "./log-lines.js";
25
27
  import { MultiRunArgsError, resolveMultiRunPlan, wantsMultiRun } from "./multi-run.js";
26
28
  import { MultiRunAbortedError, runExploreMultiRun } from "./multi-run-cli.js";
27
29
  import { checkActorsAgainstSpec, resolveMissionActors } from "./mission-actors.js";
28
30
  import { runUsabilityMission, UsabilityInvariantsUnsupportedError } from "./ux-api.js";
29
31
  import { UxConfigError } from "./ux-config.js";
30
- import { MinConfidenceError, QualityPolicyError, MaxFindingsPerRouteError } from "@jevitate/ux";
31
- import { withBrowserLaunchFlags, withDemoFlags, withScreenshotsFlag, browserRunFromFlags, withEmulationFlags, emulationFromFlags, emitCommandResult, stallTimeoutMs, EXPLORE_STRATEGIES, EXPLORE_OUTCOME_HELP, GatewaySelectionError, buildExploreGateways, } from "./cli-shared.js";
32
- import { multiWindowWarning } from "./browser-run-options.js";
32
+ import { MinConfidenceError, QualityPolicyError, MaxFindingsPerRouteError, ProductFactsError } from "@jevitate/ux";
33
+ import { withBrowserLaunchFlags, withDemoFlags, withScreenshotsFlag, browserRunFromFlags, withEmulationFlags, emulationFromFlags, emitCommandResult, collectParam, environmentSeams, resolveDbPath, resolveJourneysDir, resolveMissionTargetsDir, stallTimeoutMs, EXPLORE_STRATEGIES, EXPLORE_OUTCOME_HELP, GatewaySelectionError, buildExploreGateways, } from "./cli-shared.js";
34
+ import { allowWithExtensions, assertExtensionTargetLoaded, multiWindowWarning } from "./browser-run-options.js";
35
+ import { ParamValidationError } from "@jevitate/journey";
36
+ import { SiteGateRefusedError } from "@jevitate/runtime";
37
+ import { JourneyRequiresAuthError, UnknownJourneyError } from "./journey-api.js";
38
+ import { environmentFromFlags, isEnvironmentError, withEnvironmentFlags } from "./environments.js";
39
+ import { resolve as resolvePath } from "node:path";
40
+ import { CAMPAIGN_LIMITS, isSweepMode } from "@jevitate/journey";
41
+ import { CampaignSpecError, runCampaign, validateCampaignSpec } from "./campaign-api.js";
42
+ import { formatCampaignHuman } from "./campaign-cli.js";
43
+ import { forwardedArgv } from "./multi-run-cli.js";
44
+ import { ANCHORED_STRATEGIES, JourneyPrefixArgsError, JourneyPrefixStaleError, journeyStaleResult, resolveJourneyPrefix, } from "./journey-prefix.js";
45
+ import { clock } from "@jevitate/domain";
46
+ /**
47
+ * #293: the flags a sweep sets on each of its missions itself (the rest of the command line is
48
+ * forwarded to every mission as given).
49
+ */
50
+ const SWEEP_OWNED = new Set([
51
+ "fromJourney", "atStep", "strategy", "journeysDir", "param", "env", "baseUrl", "storageState", "maxActions", "maxDecisions",
52
+ "goal", "success", "appClass", "real", "fakeAi", "fixtures", "before", "after", "allowShellHooks", "hookTimeoutMs",
53
+ ]);
33
54
  /**
34
55
  * Registers `jevitate explore` (every strategy: goal, coverage, exploratory, adversarial, usability, feature, multi-run).
35
56
  * `buildProgram` builds a fresh program for each run of a multi-run (#141/#143).
36
57
  */
37
58
  export function registerExploreCommands(program, deps, buildProgram) {
38
- withScreenshotsFlag(withEmulationFlags(withFixtureFlags(withDemoFlags(withBrowserLaunchFlags(program
59
+ withEnvironmentFlags(withScreenshotsFlag(withEmulationFlags(withFixtureFlags(withDemoFlags(withBrowserLaunchFlags(program
39
60
  .command("explore")
40
- .description("goal-directed exploration -> a deterministic Recording (authoring/test plane)")), { recordVideo: true, overlay: true }))))
61
+ .description("goal-directed exploration -> a deterministic Recording (authoring/test plane)")), { recordVideo: true, overlay: true })))))
41
62
  .option("--url <url>", "target URL (must be an authorized origin)")
63
+ .option("--from-journey <id>", "journey-anchored exploration (#293): start from a PROMOTED Journey instead of --url — its first --at-step steps are replayed " +
64
+ "in the mission's own browser context (page, form contents and session kept; fail-closed, never self-healed; --env/--base-url apply), " +
65
+ "then the mission starts on the live page. A replay that stops before the anchor ends the run inconclusive (failure.kind journey-stale, exit 2). " +
66
+ "Strategies: goal, coverage, exploratory, adversarial, usability")
67
+ .option("--at-step <n|name|all|anchors>", "with --from-journey: the step to branch off — a 1-based top-level step number or an anchor name (`jevitate journey anchors <id>`); " +
68
+ "`all` sweeps every step and `anchors` every anchor: each a fresh session (restored by --fixtures), --max-actions/--max-decisions split evenly per stop, one deduped report")
69
+ .option("--param <kv>", "with --from-journey: a Journey param as key=value (repeatable); only the prefix's own params are required", collectParam, {})
70
+ .option("--journeys-dir <path>", "with --from-journey: the journeys directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
42
71
  .option("--strategy <name>", "exploration strategy: goal (default) | coverage | exploratory | adversarial | usability (UX review: ranked, cited findings)", "goal")
43
72
  .option("--goal <text>", "natural-language goal / job (required for --strategy goal and usability)")
44
73
  .option("--app-class <class>", "app class for UX calibration (required for --strategy usability), e.g. consumer|admin|internal")
45
74
  .option("--show <labels>", "opt-in filter on the quality grade (comma list of actionable,relevant-minor,generic,wrong); others are suppressed and counted; default JEVITATE_UX_SHOW, then ~/.jevitate/config.json ux.show, then ALL grades — the grader is uncalibrated (#133), so by default every finding is shown with its grade")
46
75
  .option("--min-confidence <n>", "(--strategy usability) findings below this FINDING confidence (0..1, a finding's own violation/applicability/grounding score — NOT its quality-grade confidence, a separate independent-grader number shown as finding.quality.confidence) are suppressed and counted in report.suppressed; default JEVITATE_UX_MIN_CONFIDENCE, then ~/.jevitate/config.json ux.minConfidence, then 0.3")
47
76
  .option("--max-findings-per-page <n>", "(--strategy usability) cap on UX findings per route/page, highest-confidence first; the rest are counted in report.suppressed as per-page-cap, never dropped silently; default JEVITATE_UX_MAX_FINDINGS_PER_PAGE, then ~/.jevitate/config.json ux.maxFindingsPerPage, then 5")
77
+ .option("--product <file>", "(--strategy usability) product facts JSON (plans/prices, key journeys, each page's intended next step) the review checks screens against in code; default .jevitate/product.json in the project when present (docs/ux-findings.md)")
78
+ .option("--probe-guards", "(--strategy usability) opt in to clicking each destructive control once to check for a confirmation step — fail-safe: every write and destructive-looking request is aborted, and a page with an open WebSocket/EventSource or a service worker is not probed; without it those claims are reported unverifiable (docs/ux-findings.md)")
79
+ .option("--polish", "(--strategy usability) polish each verified UX finding's recommendation with one generation call (opt-in; the default prose is built from templates)")
48
80
  .option("--success <spec>", [
49
81
  "independent success check (repeatable; every one must hold; --strategy goal and usability). Kinds:",
50
82
  "urlIncludes:<text> | visible:<d> | textIncludes:<d>|<text> (case-insensitive) | count:<d>|min=<n>,max=<n>",
@@ -64,6 +96,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
64
96
  .option("--success-when <when>", "when the --success page checks must hold: final (default; on the final page) | held (on the final page, or all together at any settled step — a one-time secret, a toast). reloadThen is always final")
65
97
  .option("--allow-vacuous-checks", "downgrade a vacuous --success check to a warning. By default a check satisfied before the run's first action — a page check that held on the seed page and never changed " +
66
98
  "(an empty result container), a requestMade/responseStatus matched only by a page-load or polling request — FAILS: it cannot verify the goal")
99
+ .option("--action-deltas", "opt-in (#303; every --strategy, not --feature): record what each action changed on the page — an accessibility snapshot before and after, announcements, " +
100
+ "the action's requests — redacted, with a code verdict per step (no-change | relevant-change | inconclusive) used by the goal loop's no-progress check and a persistence re-check after writes (goal), and as defect evidence (adversarial, coverage); " +
101
+ "adds `delta` to every transcript step (and Recording step, goal) and `actionDeltas` to the result. Costs about 50-100 ms per action on a small page, 0.3-0.5 s on a large one")
67
102
  .option("--feature <name>", "run the capability-scoped feature-testing mission (instead of --goal/--success)")
68
103
  .option("--route <glob>", "in-scope route glob (repeatable), e.g. /thread/** — for --feature it replaces the default scope (the start URL's route and everything under it); it widens --strategy adversarial/coverage/exploratory beyond the start URL's route", (v, prev) => [...prev, v], [])
69
104
  .option("--scope <mode>", "--strategy coverage/exploratory: 'app' widens containment to the whole app (same as --route '/**'); default: the start URL's route plus --route globs")
@@ -71,6 +106,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
71
106
  .option("--secret <value|env:VAR>", "REDACTION ONLY: a secret/PII value kept out of every model call and artifact (repeatable); env:VAR reads it from the environment (preferred: a literal is visible in the process list and shell history). It is never typed into a field — to log in, bind it with --secret-field (or start from --storage-state)", (v, prev) => [...prev, v], [])
72
107
  .option("--secret-field <binding>", "goal/usability strategy: '<label|testId|type|id|name>=<value>=env:<VAR>' (repeatable), e.g. 'label=Password=env:APP_PASSWORD'. When the run types into a matching field, code types $VAR itself; the model sees only «secret:VAR» and the Recording {redacted:true}", (v, prev) => [...prev, v], [])
73
108
  .option("--totp <binding>", "goal/usability strategy: '<descriptor>=env:<VAR>' with $VAR a base32 TOTP seed (repeatable), e.g. 'label=Authentication code=env:APP_TOTP_SEED'. The 6-digit code is computed locally (RFC 6238) when the field is typed; the seed never reaches a model or disk", (v, prev) => [...prev, v], [])
109
+ .option("--type-fixture <binding>", "goal strategy: '<label|testId|type|id|name>=<value>=<file>' (repeatable), e.g. 'label=Paste your text=./fixtures/import.txt'. When the run types into a matching field, code types the file's exact text verbatim (line breaks kept, never paraphrased or capped); the model sees only «fixture:<file name>». Recorded as typed unless it holds a --secret", (v, prev) => [...prev, v], [])
74
110
  .option("--fixture <path>", "local file the upload op attaches to a file input (goal and usability strategies); must exist")
75
111
  .option("--storage-state <file>", "Playwright storageState JSON to start the session authenticated (deterministic login pre-step); must exist")
76
112
  .option("--actor <name=storageState>", "multi-actor mission (#147, goal only; repeatable): the FIRST actor is the primary (the only one the model drives, " +
@@ -91,7 +127,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
91
127
  .option("--reply-ceiling-ms <ms>", "conversational pages: hard ceiling on one reply wait, however busy the page stays (default 180000; never below --reply-wait-ms)", positiveIntArg)
92
128
  .option("--reply-max-chars <n>", "conversational pages: cap on each generated chat message (goal and usability; default 300)", intArg({ min: 20, max: 2000 }))
93
129
  .option("--job-wait-ms <ms>", "goal and usability: while the page shows an in-progress status (\"Simulating…\", aria-busy, a job \"is running\"), " +
94
- "waits keep waiting with backoff — and a model 'blocked' is deferred — up to this budget (default: --reply-ceiling-ms, 180000)", positiveIntArg)
130
+ "waits keep waiting with backoff — and a model 'blocked' is deferred — up to this budget (default: --reply-ceiling-ms, 180000); " +
131
+ "it also bounds a busy indicator the app visibly keeps working behind (live progress, a job poll) before it is a hang, " +
132
+ "and a wait the page documents (\"usually takes a minute\") can raise it", positiveIntArg)
95
133
  .option("--deny <pattern>", "a control no mission may click (repeatable): an accessible-name regex (/Archive/i or Archive) or a descriptor role=button;name=Archive. " +
96
134
  "Session-ending (Sign out), destructive (Delete, Revoke, Rotate) and paid (Buy, Run simulation, Generate, Send invite) controls are refused by default", (v, prev) => [...prev, v], [])
97
135
  .option("--paid <pattern>", "an app control that costs money or credits (repeatable; same syntax as --deny), e.g. /^(Analyze|Draft|Improve)\\b/i: treated like the built-in paid " +
@@ -124,15 +162,18 @@ export function registerExploreCommands(program, deps, buildProgram) {
124
162
  .option("--log-defect <level|/regex/>", "backend log lines matching this (repeatable) become a server-log defect: a level (error|warn|info|debug, matched as level>=this) or a /regex/flags/ over the raw line. Its fingerprint is the normalized message (ids/numbers/uuids/timestamps stripped) plus the correlated route; verify-fix re-checks it by re-tailing the same --log-source(s)", (v, prev) => [...prev, v], [])
125
163
  .option("--log-quiet-ok <spec>", "declares a --log-source spec (exact match, repeatable) as legitimately quiet: zero lines from it does not make the --log-defect oracle unhealthy (#169). Without it, a declared source that opened but delivered not one line makes an otherwise-clean run inconclusive, same as one that failed to open", (v, prev) => [...prev, v], [])
126
164
  .option("--log-ignore <regex|substring>", "excludes known-noise backend log lines (repeatable, /regex/flags/ over the raw line or a plain substring) from BOTH correlation and the --log-defect oracle (#169 item 3) — e.g. a periodic background job's own expected error. Counted separately as serverLogs.ignoredLines; never makes --log-quiet-ok unnecessary, since an ignored line still proves the source is being tailed", (v, prev) => [...prev, v], [])
165
+ .option("--log-scope <regex|substring>", "attributes only backend log lines matching this (repeatable, /regex/flags/ or a plain substring, e.g. a tenant id) to the run (#282); the rest count as serverLogs.ignoredLines. For concurrent runs tailing one log. A line carrying one of the run's own correlation ids is in scope", (v, prev) => [...prev, v], [])
166
+ .option("--log-correlation-header <name>", "another request/response header that carries a correlation id (repeatable; built in: traceparent, x-request-id, x-correlation-id, request-id, x-amzn-trace-id, x-b3-traceid, x-cloud-trace-context). A log line carrying a request's id is attached to that exact request and the step that sent it, not by time (#204)", (v, prev) => [...prev, v], [])
167
+ .option("--log-id-pattern </regex/>", "how a correlation id is written in your log lines, when not as trace_id=/request_id=/correlation_id= or a traceparent (repeatable; the first capture group is the id). Once ids correlate, a line with another request's id is never attributed to the run (#204)", (v, prev) => [...prev, v], [])
127
168
  .option("--server-log-drain-ms <ms>", "how long to keep tailing --log-source after the run's last action, to catch async backend work that settles after the browser gave up (default 3000)", nonNegativeIntArg)
128
169
  .option("--repeat <n>", "run the mission N times, one after another, each in a fresh browser context, and vote (#141): findings seen in fewer than --min-agreement runs are reported as flaky, not counted")
129
170
  .option("--min-agreement <k>", "with --repeat: runs a finding (and the outcome) must recur in to count (default: a majority of N)")
130
171
  .option("--persona <name=storageState>", "run the same mission once per persona (repeatable), serially, each from its own storageState, and diff them (#143): requests, statuses (a 403 vs 200 is a candidate RBAC finding), controls, outcome", (v, prev) => [...prev, v], [])
131
172
  .option("--personas <file>", "personas JSON: {\"<name>\": \"<storageState>\"} or {\"personas\": [{\"name\", \"storageState\"}]}")
132
- .option("--check-overflow", "check the horizontal-overflow hard signal (#149) even at a desktop (>=1024px) viewport — --strategy coverage/exploratory " +
173
+ .option("--check-overflow", "check the horizontal-overflow (#149) and vertical-clipping (#302: text cut off by a fixed-height box or above the page top) hard signals even at a desktop (>=1024px) viewport — --strategy coverage/exploratory " +
133
174
  "(a defect), adversarial (a defect) or usability (a signal finding). " +
134
175
  "On by default whenever --viewport/--device emulates a viewport narrower than 1024px")
135
- .option("--ignore-overflow <selector>", "a CSS selector (repeatable) whose overflow is intentional — excluded from the horizontal-overflow signal, like --ignore-no-progress", (v, prev) => [...prev, v], [])
176
+ .option("--ignore-overflow <selector>", "a CSS selector (repeatable) whose overflow or clipping is intentional — excluded from the horizontal-overflow and vertical-clipping signals, like --ignore-no-progress", (v, prev) => [...prev, v], [])
136
177
  .option("--evidence-video", "per defect: replay its minimal repro with captions + the failing step marked, record a masked clip and before/at screenshots (defects[].evidence; linked from drafts)")
137
178
  .option("--json", "emit the JSON envelope (default: a human summary)")
138
179
  .addHelpText("after", [
@@ -178,12 +219,149 @@ export function registerExploreCommands(program, deps, buildProgram) {
178
219
  }
179
220
  }
180
221
  const strategy = o.strategy ?? "goal";
222
+ // #293 journey-anchored exploration: the Journey, step, params and environment are resolved (and
223
+ // refused, exit 64) before anything else — the start URL every later check uses is where the
224
+ // Journey's prefix lands.
225
+ let journeyPrefix;
226
+ const anchoredFlags = [o.fromJourney, o.atStep, o.journeysDir, o.env, o.baseUrl].some((v) => v !== undefined);
227
+ if (anchoredFlags || Object.keys(o.param).length > 0) {
228
+ const refuse = (message) => emitExplore(fail("E_EXPLORE_ARGS", message));
229
+ if (o.fromJourney === undefined || o.atStep === undefined) {
230
+ refuse("--from-journey and --at-step go together (and --param, --env, --base-url and --journeys-dir need them)");
231
+ return;
232
+ }
233
+ if (o.url !== undefined) {
234
+ refuse("--url cannot be combined with --from-journey: the mission starts where the Journey's prefix leaves the page");
235
+ return;
236
+ }
237
+ if (o.feature !== undefined || !ANCHORED_STRATEGIES.includes(strategy)) {
238
+ refuse(`--from-journey supports --strategy ${ANCHORED_STRATEGIES.join(", ")} (not --feature)`);
239
+ return;
240
+ }
241
+ if (wantsMultiRun(o) || o.actor.length > 0) {
242
+ refuse("--from-journey runs one anchored mission: --repeat, --persona, --personas and --actor are not supported with it (a campaign runs several)");
243
+ return;
244
+ }
245
+ // #293 sweep: `--at-step all|anchors` runs the strategy from EVERY step (or anchor), each in a
246
+ // fresh session with --fixtures restored around it, --max-actions/--max-decisions split evenly
247
+ // over the stop points, and reads them as one deduped report (a one-job campaign).
248
+ if (isSweepMode(o.atStep)) {
249
+ if (o.real !== true && o.fakeAi !== true) {
250
+ emitExplore(fail("E_AI_SETUP_REQUIRED", "a sweep's missions are model-driven: pass --real or --fake-ai"));
251
+ return;
252
+ }
253
+ const journeysDir = resolveJourneysDir(deps, o.journeysDir);
254
+ const abs = (p) => resolvePath(p);
255
+ const spec = {
256
+ version: 1,
257
+ name: `sweep of ${o.fromJourney} (${o.atStep}, ${strategy})`,
258
+ ...(o.env === undefined ? {} : { env: o.env }),
259
+ ...(o.baseUrl === undefined ? {} : { baseUrl: o.baseUrl }),
260
+ ...(o.storageState === undefined ? {} : { storageState: abs(o.storageState) }),
261
+ ...(o.fixtures === undefined ? {} : { fixtures: abs(o.fixtures) }),
262
+ ...(o.before === undefined ? {} : { before: o.before }),
263
+ ...(o.after === undefined ? {} : { after: o.after }),
264
+ discovery: false,
265
+ maxRuns: CAMPAIGN_LIMITS.maxRuns,
266
+ jobs: [
267
+ {
268
+ id: "sweep",
269
+ journey: o.fromJourney,
270
+ params: o.param,
271
+ anchors: o.atStep.trim(),
272
+ strategies: [strategy],
273
+ ...(o.goal === undefined ? {} : { goal: o.goal }),
274
+ ...(o.appClass === undefined ? {} : { appClass: o.appClass }),
275
+ ...(o.success.length === 0 ? {} : { success: o.success }),
276
+ ...(o.maxActions === undefined ? {} : { maxActions: Number(o.maxActions) }),
277
+ ...(o.maxDecisions === undefined ? {} : { maxDecisions: Number(o.maxDecisions) }),
278
+ },
279
+ ],
280
+ };
281
+ try {
282
+ const plan = await validateCampaignSpec(spec, resolvePath("explore-sweep.json"), {
283
+ journeysDir,
284
+ allowShellHooks: o.allowShellHooks === true,
285
+ environmentSeams: environmentSeams(deps),
286
+ });
287
+ const result = await runCampaign(plan, {
288
+ newProgram: () => buildProgram(deps),
289
+ journeysDir,
290
+ missionTargetsDir: resolveMissionTargetsDir(deps),
291
+ ...(o.out === undefined ? {} : { outDir: o.out }),
292
+ ...(o.real === true ? { real: true } : {}),
293
+ ...(o.fakeAi === true ? { fakeAi: true } : {}),
294
+ missionArgs: forwardedArgv(this, SWEEP_OWNED),
295
+ });
296
+ emitExplore(ok(withEngine({ sweep: { journeyId: o.fromJourney, mode: o.atStep.trim(), strategy, stops: plan.totalRuns, budgetPerStop: { maxActions: plan.jobs[0]?.maxActions, ...(plan.jobs[0]?.maxDecisions === undefined ? {} : { maxDecisions: plan.jobs[0].maxDecisions }) } }, ...result })), result.exitCode, formatCampaignHuman);
297
+ }
298
+ catch (err) {
299
+ if (err instanceof CampaignSpecError)
300
+ emitExplore(fail("E_EXPLORE_ARGS", err.message));
301
+ else
302
+ emitExplore(fail("E_EXPLORE_RUN", String(err instanceof Error ? err.message : err)));
303
+ }
304
+ return;
305
+ }
306
+ try {
307
+ const environment = environmentFromFlags({ ...(o.env === undefined ? {} : { env: o.env }), ...(o.baseUrl === undefined ? {} : { baseUrl: o.baseUrl }) }, environmentSeams(deps));
308
+ // The environment's own session applies when --storage-state names none (as `journey run`).
309
+ if (o.storageState === undefined && environment?.storageState !== undefined)
310
+ o.storageState = environment.storageState;
311
+ journeyPrefix = await resolveJourneyPrefix({
312
+ dir: resolveJourneysDir(deps, o.journeysDir),
313
+ id: o.fromJourney,
314
+ atStep: o.atStep,
315
+ params: o.param,
316
+ ...(environment === undefined ? {} : { environment }),
317
+ ...(o.storageState === undefined ? {} : { storageState: o.storageState }),
318
+ dbPath: resolveDbPath(deps),
319
+ environmentFlags: { ...(o.env === undefined ? {} : { env: o.env }), ...(o.baseUrl === undefined ? {} : { baseUrl: o.baseUrl }) },
320
+ });
321
+ }
322
+ catch (err) {
323
+ if (isEnvironmentError(err) || err instanceof JourneyPrefixArgsError)
324
+ emitExplore(fail(err.code, err.message));
325
+ else if (err instanceof UnknownJourneyError)
326
+ emitExplore(fail("E_UNKNOWN_JOURNEY", err.message));
327
+ else if (err instanceof ParamValidationError)
328
+ emitExplore(fail("E_INVALID_PARAMS", err.message));
329
+ else if (err instanceof JourneyRequiresAuthError)
330
+ emitExplore(fail("E_JOURNEY_REQUIRES_AUTH", err.message));
331
+ else
332
+ emitExplore(fail("E_EXPLORE_ARGS", err instanceof Error ? err.message : String(err)));
333
+ return;
334
+ }
335
+ // The prefix types its secret params into the page the mission perceives: they are redacted like
336
+ // --secret. Coverage/exploratory carry no redaction set, so a prefix with secrets refuses them.
337
+ if (journeyPrefix.secrets.length > 0 && (strategy === "coverage" || strategy === "exploratory")) {
338
+ refuse(`journey '${o.fromJourney}' types a secret param before step ${journeyPrefix.branch.step}: --strategy ${strategy} cannot redact it — use goal, adversarial or usability`);
339
+ return;
340
+ }
341
+ o.url = journeyPrefix.startUrl;
342
+ // Default allowlist: the origins the Journey's steps may be on (the environment's), not just the landing's.
343
+ if (o.allow.length === 0)
344
+ o.allow = [...journeyPrefix.allowedOrigins];
345
+ }
346
+ const withPrefix = journeyPrefix === undefined ? {} : { journeyPrefix };
347
+ /** #293: a prefix that no longer replays, or a site policy that refused it — typed, handled once for every strategy. */
348
+ const emitJourneyFailure = (err) => {
349
+ if (err instanceof JourneyPrefixStaleError) {
350
+ emitExplore(ok(withEngine(journeyStaleResult(err, strategy))), EXIT_CODES.inconclusive);
351
+ return true;
352
+ }
353
+ if (err instanceof SiteGateRefusedError) {
354
+ emitExplore(fail(err.code, err.message));
355
+ return true;
356
+ }
357
+ return false;
358
+ };
181
359
  // #195: `--secret env:VAR` is resolved from the environment before anything runs (fail closed).
182
360
  try {
183
361
  const resolved = resolveSecretArgs(o.secret, process.env, "--secret");
184
362
  if (resolved.literals > 0)
185
363
  program.configureOutput().writeErr?.(LITERAL_SECRET_WARNING);
186
- o.secret = resolved.secrets;
364
+ o.secret = [...resolved.secrets, ...(journeyPrefix?.secrets ?? [])];
187
365
  }
188
366
  catch (err) {
189
367
  if (!(err instanceof SecretArgError))
@@ -196,6 +374,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
196
374
  let browser;
197
375
  try {
198
376
  browser = browserRunFromFlags(o, deps.explore?.env ?? process.env);
377
+ // #256: a chrome-extension:// --url must be a loaded extension's; loaded extensions' origins are allowed.
378
+ assertExtensionTargetLoaded(o.url, browser);
379
+ o.allow = allowWithExtensions(o.url, o.allow, browser);
199
380
  }
200
381
  catch (err) {
201
382
  emitExplore(fail("E_EXPLORE_ARGS", err instanceof Error ? err.message : String(err)));
@@ -261,12 +442,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
261
442
  emitExplore(fail("E_EXPLORE_ARGS", "--job-wait-ms must be a positive integer"));
262
443
  return;
263
444
  }
264
- // #154: refused BEFORE any browser opens. 0 is valid: "don't replay" — a hang is then
445
+ // #154: refused BEFORE any browser opens — `nonNegativeIntArg` already rejects a bad value at
446
+ // parse time (#275: the value is a number here). 0 is valid: "don't replay" — a hang is then
265
447
  // reported unconfirmed (inconclusive), never replayed and never a crash.
266
- if (o.hangReplays !== undefined && !/^\d+$/.test(o.hangReplays.trim())) {
267
- emitExplore(fail("E_EXPLORE_ARGS", `--hang-replays must be a non-negative integer (0 = don't replay; the hang is reported unconfirmed), got "${o.hangReplays}"`));
268
- return;
269
- }
270
448
  try {
271
449
  validateDenyPatterns(o.deny);
272
450
  validateDenyPatterns(o.paid, "--paid");
@@ -293,7 +471,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
293
471
  ...(o.fileIssues === undefined ? {} : { fileIssues: o.fileIssues }),
294
472
  ...(o.issueRepo === undefined ? {} : { issueRepo: o.issueRepo }),
295
473
  ...(o.jevitateRepo === undefined ? {} : { jevitateRepo: o.jevitateRepo }),
296
- }, new URL(o.url).origin);
474
+ }, new URL(setupRefFreeUrl(o.url)).origin);
297
475
  }
298
476
  catch (err) {
299
477
  if (err instanceof FilingConfigError) {
@@ -309,7 +487,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
309
487
  let target;
310
488
  if (o.url !== undefined) {
311
489
  try {
312
- target = resolveTargetConfig(loadTargetsFile(deps.explore?.targetsConfigPath), new URL(o.url).origin, {
490
+ target = resolveTargetConfig(loadTargetsFile(deps.explore?.targetsConfigPath), new URL(setupRefFreeUrl(o.url)).origin, {
313
491
  settleIgnore: o.settleIgnore,
314
492
  ignoreNoProgress: o.ignoreNoProgress,
315
493
  apiPrefixes: o.apiPrefix,
@@ -343,7 +521,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
343
521
  return result;
344
522
  let out = result;
345
523
  if (filing?.enabled === true)
346
- out = await fileDraftsWithEvidence(out, filing, issueFiler, new Date().toISOString());
524
+ out = await fileDraftsWithEvidence(out, filing, issueFiler, clock.nowIso());
347
525
  return out;
348
526
  };
349
527
  // `--fixture` feeds the upload op, which only the explore loop (goal and
@@ -353,6 +531,11 @@ export function registerExploreCommands(program, deps, buildProgram) {
353
531
  emitExplore(fail("E_EXPLORE_ARGS", "--fixture is supported only with --strategy goal or usability"));
354
532
  return;
355
533
  }
534
+ // #198: product facts and polish shape the UX review's findings only.
535
+ if ((o.product !== undefined || o.polish === true || o.probeGuards === true) && (o.feature !== undefined || strategy !== "usability")) {
536
+ emitExplore(fail("E_EXPLORE_ARGS", "--product, --polish and --probe-guards are supported only with --strategy usability"));
537
+ return;
538
+ }
356
539
  // #225: success checks judge a goal / a usability job — every other strategy (and --feature) would
357
540
  // silently ignore them, so they are refused up front, never dropped.
358
541
  if ((o.success.length > 0 || o.successWhen !== undefined || o.allowVacuousChecks === true) &&
@@ -360,6 +543,12 @@ export function registerExploreCommands(program, deps, buildProgram) {
360
543
  emitExplore(fail("E_EXPLORE_ARGS", `--success, --success-when and --allow-vacuous-checks are supported only with --strategy goal or usability (not ${o.feature !== undefined ? "--feature" : `--strategy ${strategy}`})`));
361
544
  return;
362
545
  }
546
+ // #303: action deltas are recorded by the goal loop (goal and usability runs) only — refused
547
+ // elsewhere, never silently ignored.
548
+ if (o.actionDeltas === true && o.feature !== undefined) {
549
+ emitExplore(fail("E_EXPLORE_ARGS", "--action-deltas is not supported with --feature (goal, usability, coverage, exploratory and adversarial runs record deltas)"));
550
+ return;
551
+ }
363
552
  if (o.storageState !== undefined && !existsSync(o.storageState)) {
364
553
  emitExplore(fail("E_EXPLORE_ARGS", `storage state not found: ${o.storageState}`));
365
554
  return;
@@ -436,12 +625,18 @@ export function registerExploreCommands(program, deps, buildProgram) {
436
625
  const sources = parseLogSourceSpecs(o.logSource, o.allowLogCmd ?? false);
437
626
  const logDefect = parseLogDefectSpecs(o.logDefect);
438
627
  const logIgnore = parseLogIgnoreSpecs(o.logIgnore);
628
+ const logScope = parseLogScopeSpecs(o.logScope);
629
+ const correlationHeaders = parseCorrelationHeaders(o.logCorrelationHeader);
630
+ const idPatterns = parseLogIdPatterns(o.logIdPattern);
439
631
  serverLog = {
440
632
  sources,
441
633
  logDefect,
442
634
  allowLogCmd: o.allowLogCmd ?? false,
443
635
  quietOk: o.logQuietOk,
444
636
  logIgnore,
637
+ logScope,
638
+ correlationHeaders,
639
+ idPatterns,
445
640
  ...(o.serverLogDrainMs === undefined ? {} : { drainMs: Number(o.serverLogDrainMs) }),
446
641
  };
447
642
  }
@@ -474,6 +669,23 @@ export function registerExploreCommands(program, deps, buildProgram) {
474
669
  return;
475
670
  }
476
671
  }
672
+ // #281: fields typed with a file's exact text — read (and checked) before any browser opens.
673
+ let typeFixtures = [];
674
+ if (o.typeFixture.length > 0) {
675
+ if (o.feature !== undefined || strategy !== "goal") {
676
+ emitExplore(fail("E_EXPLORE_ARGS", "--type-fixture is supported only with --strategy goal"));
677
+ return;
678
+ }
679
+ try {
680
+ typeFixtures = loadTypeFixtures(o.typeFixture);
681
+ }
682
+ catch (err) {
683
+ if (!(err instanceof TypeFixtureSpecError))
684
+ throw err;
685
+ emitExplore(fail(err.code, err.message));
686
+ return;
687
+ }
688
+ }
477
689
  // Mission fixtures (#140/#144) run around the goal loop and its replays only.
478
690
  const fixtureFlagsGiven = o.fixtures !== undefined || o.before !== undefined || o.after !== undefined;
479
691
  if (fixtureFlagsGiven && (o.feature !== undefined || strategy !== "goal")) {
@@ -527,6 +739,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
527
739
  try {
528
740
  const result = await runCoverageMission({
529
741
  ...(target === undefined ? {} : { target }),
742
+ ...(o.actionDeltas === true ? { actionDeltas: true } : {}),
530
743
  url: o.url,
531
744
  allowlist: covAllowlist,
532
745
  judge: covJudge,
@@ -546,11 +759,14 @@ export function registerExploreCommands(program, deps, buildProgram) {
546
759
  ...(o.saveStorageState !== undefined ? { saveStorageState: o.saveStorageState } : {}),
547
760
  ...withInvariants,
548
761
  ...withServerLog,
762
+ ...withPrefix,
549
763
  });
550
764
  // Typed verdict → exit code (0 clean · 1 defects · 2 crashed; see exit-codes.ts).
551
765
  emitExplore(ok(await withEvidence(result)), result.exitCode);
552
766
  }
553
767
  catch (err) {
768
+ if (emitJourneyFailure(err))
769
+ return;
554
770
  if (err instanceof UnauthorizedExploreTargetError) {
555
771
  emitExplore(fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
556
772
  }
@@ -610,6 +826,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
610
826
  try {
611
827
  const result = await runAdversarialCliMission({
612
828
  ...(target === undefined ? {} : { target }),
829
+ ...(o.actionDeltas === true ? { actionDeltas: true } : {}),
613
830
  seedUrl: o.url,
614
831
  allowlist: advAllowlist,
615
832
  usage: advUsage,
@@ -619,7 +836,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
619
836
  secrets: o.secret.length > 0 ? o.secret : undefined,
620
837
  ...(runFiling === undefined ? {} : { filing: runFiling }),
621
838
  issueFiler,
622
- ...(o.hangReplays === undefined ? {} : { hangReplays: Number(o.hangReplays) }),
839
+ ...(o.hangReplays === undefined ? {} : { hangReplays: o.hangReplays }),
623
840
  strategies: CLI_ADVERSARIAL_STRATEGIES,
624
841
  judgment: advJudge,
625
842
  generation: advGen,
@@ -633,12 +850,15 @@ export function registerExploreCommands(program, deps, buildProgram) {
633
850
  ...(o.saveStorageState !== undefined ? { saveStorageState: o.saveStorageState } : {}),
634
851
  ...withInvariants,
635
852
  ...withServerLog,
853
+ ...withPrefix,
636
854
  });
637
855
  // The typed verdict gates CI: 0 clean · 1 defects found (a failing check) · 2 the run
638
856
  // itself broke (inconclusive/crashed) — see exit-codes.ts.
639
857
  emitExplore(ok(await withEvidence(result)), result.exitCode);
640
858
  }
641
859
  catch (err) {
860
+ if (emitJourneyFailure(err))
861
+ return;
642
862
  if (err instanceof UnauthorizedExploreTargetError) {
643
863
  emitExplore(fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
644
864
  }
@@ -720,6 +940,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
720
940
  ...(o.minConfidence !== undefined ? { minConfidence: o.minConfidence } : {}),
721
941
  ...(o.show !== undefined ? { show: o.show } : {}),
722
942
  ...(o.maxFindingsPerPage !== undefined ? { maxFindingsPerRoute: o.maxFindingsPerPage } : {}),
943
+ ...(o.product !== undefined ? { product: o.product } : {}),
944
+ ...(o.polish === true ? { polish: true } : {}),
945
+ ...(o.probeGuards === true ? { probeGuards: true } : {}),
723
946
  bounds: Object.keys(uxBounds).length > 0 ? uxBounds : undefined,
724
947
  conversation,
725
948
  secrets: o.secret.length > 0 ? o.secret : undefined,
@@ -738,12 +961,16 @@ export function registerExploreCommands(program, deps, buildProgram) {
738
961
  ...(uxSuccessChecks.length === 0 ? {} : { successChecks: uxSuccessChecks }),
739
962
  ...(o.successWhen === "held" || o.successWhen === "final" ? { successWhen: o.successWhen } : {}),
740
963
  ...(o.allowVacuousChecks === true ? { allowVacuousChecks: true } : {}),
964
+ ...withPrefix,
965
+ ...(o.actionDeltas === true ? { actionDeltas: true } : {}),
741
966
  });
742
967
  // UX findings are advisory (0); a failed --success check (#225) is 1, as on a goal run; a
743
968
  // broken run or an unavailable analysis is 2.
744
969
  emitExplore(ok(await withEvidence(result)), result.exitCode);
745
970
  }
746
971
  catch (err) {
972
+ if (emitJourneyFailure(err))
973
+ return;
747
974
  if (err instanceof UnauthorizedExploreTargetError) {
748
975
  emitExplore(fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
749
976
  }
@@ -760,6 +987,9 @@ export function registerExploreCommands(program, deps, buildProgram) {
760
987
  else if (err instanceof UsabilityInvariantsUnsupportedError) {
761
988
  emitExplore(fail("E_EXPLORE_ARGS", err.message));
762
989
  }
990
+ else if (err instanceof ProductFactsError) {
991
+ emitExplore(fail(err.code, err.message));
992
+ }
763
993
  else {
764
994
  emitExplore(fail("E_EXPLORE_RUN", String(err instanceof Error ? err.message : err)));
765
995
  }
@@ -840,7 +1070,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
840
1070
  return;
841
1071
  }
842
1072
  const successWhen = o.successWhen === "held" || o.successWhen === "final" ? o.successWhen : undefined;
843
- const allowlist = resolveExploreAllowlist(o.url, o.allow);
1073
+ const allowlist = resolveExploreAllowlist(setupRefFreeUrl(o.url), o.allow);
844
1074
  // Fixtures (#140/#144): the spec and every ${setup.x} reference are validated here, before any
845
1075
  // browser or request; the setup itself runs just before the mission (below).
846
1076
  let fx;
@@ -848,11 +1078,12 @@ export function registerExploreCommands(program, deps, buildProgram) {
848
1078
  checkUrlRefOrigin(o.url);
849
1079
  fx = buildMissionFixtures(o, {
850
1080
  allowlist,
851
- baseUrl: o.url.replace(SETUP_REF, "0"),
1081
+ baseUrl: setupRefFreeUrl(o.url),
852
1082
  ...(primaryStorageState === undefined ? {} : { storageState: primaryStorageState }),
853
1083
  secretFields,
854
1084
  secrets: o.secret,
855
1085
  ...(target?.fixtures === undefined ? {} : { targetFixtures: target.fixtures }),
1086
+ ...(target?.personas === undefined ? {} : { personas: target.personas }),
856
1087
  });
857
1088
  checkSetupRefs({ "--url": o.url, "--goal": o.goal, "--success": o.success, ...invariantSetupTexts(invariants) }, fx);
858
1089
  }
@@ -891,7 +1122,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
891
1122
  try {
892
1123
  await fx.setup();
893
1124
  const b = fx.bindings();
894
- url = substituteSetupRefs(o.url, b, { where: "--url" });
1125
+ url = substituteUrlSetupRefs(o.url, b);
895
1126
  goal = substituteSetupRefs(o.goal, b, { where: "--goal" });
896
1127
  successChecks = o.success.map((spec) => parseSuccessSpec(substituteSetupRefs(spec, b, { where: "--success" })));
897
1128
  // #187: ${setup.x} in the invariants (probe paths, deniedAs.open, capture routes), origin-fixed.
@@ -916,6 +1147,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
916
1147
  successChecks,
917
1148
  ...(successWhen === undefined ? {} : { successWhen }),
918
1149
  ...(o.allowVacuousChecks === true ? { allowVacuousChecks: true } : {}),
1150
+ ...(o.actionDeltas === true ? { actionDeltas: true } : {}),
919
1151
  allowlist,
920
1152
  judge,
921
1153
  gen,
@@ -923,6 +1155,7 @@ export function registerExploreCommands(program, deps, buildProgram) {
923
1155
  bounds: Object.keys(bounds).length > 0 ? bounds : undefined,
924
1156
  secrets: o.secret.length > 0 ? o.secret : undefined,
925
1157
  ...(secretFields.length > 0 ? { secretFields } : {}),
1158
+ ...(typeFixtures.length > 0 ? { typeFixtures } : {}),
926
1159
  fixture: o.fixture,
927
1160
  outDir: o.out,
928
1161
  browserPortFactory: deps.explore?.browserPortFactory,
@@ -934,16 +1167,19 @@ export function registerExploreCommands(program, deps, buildProgram) {
934
1167
  ...(actors === null ? {} : { actors }),
935
1168
  ...(runFiling === undefined ? {} : { filing: runFiling }),
936
1169
  issueFiler,
937
- ...(o.hangReplays === undefined ? {} : { hangReplays: Number(o.hangReplays) }),
1170
+ ...(o.hangReplays === undefined ? {} : { hangReplays: o.hangReplays }),
938
1171
  conversation,
939
1172
  ...runInvariants,
940
1173
  ...withServerLog,
941
1174
  ...(fx === undefined ? {} : { fixtures: fx }),
1175
+ ...withPrefix,
942
1176
  });
943
1177
  // 0 succeeded · 1 assertion not met · 2 the run broke (inconclusive/crashed).
944
1178
  emitExplore(ok(await withEvidence(result)), result.exitCode);
945
1179
  }
946
1180
  catch (err) {
1181
+ if (emitJourneyFailure(err))
1182
+ return;
947
1183
  if (err instanceof UnauthorizedExploreTargetError) {
948
1184
  emitExplore(fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
949
1185
  }