@probelabs/visor 0.1.106 → 0.1.111

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 (530) hide show
  1. package/README.md +71 -2
  2. package/action.yml +1 -1
  3. package/defaults/code-refiner.yaml +114 -0
  4. package/defaults/{.visor.yaml → code-review.yaml} +35 -226
  5. package/defaults/override.yaml +52 -0
  6. package/defaults/task-refinement.yaml +624 -0
  7. package/defaults/visor.tests.yaml +685 -0
  8. package/defaults/visor.yaml +483 -0
  9. package/dist/action-cli-bridge.d.ts +11 -82
  10. package/dist/action-cli-bridge.d.ts.map +1 -1
  11. package/dist/ai-review-service.d.ts +28 -9
  12. package/dist/ai-review-service.d.ts.map +1 -1
  13. package/dist/check-execution-engine.d.ts +19 -331
  14. package/dist/check-execution-engine.d.ts.map +1 -1
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts +0 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/config.d.ts +16 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/cron-scheduler.d.ts +3 -3
  21. package/dist/cron-scheduler.d.ts.map +1 -1
  22. package/dist/debug-visualizer/ws-server.d.ts +7 -1
  23. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  24. package/dist/defaults/code-refiner.yaml +114 -0
  25. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  26. package/dist/defaults/override.yaml +52 -0
  27. package/dist/defaults/task-refinement.yaml +624 -0
  28. package/dist/defaults/visor.tests.yaml +685 -0
  29. package/dist/defaults/visor.yaml +483 -0
  30. package/dist/docs/DEPLOYMENT.md +118 -0
  31. package/dist/docs/GITHUB_CHECKS.md +280 -0
  32. package/dist/docs/NPM_USAGE.md +208 -0
  33. package/dist/docs/action-reference.md +19 -0
  34. package/dist/docs/advanced-ai.md +237 -0
  35. package/dist/docs/ai-configuration.md +535 -0
  36. package/dist/docs/ai-custom-tools-usage.md +261 -0
  37. package/dist/docs/ai-custom-tools.md +392 -0
  38. package/dist/docs/author-permissions.md +610 -0
  39. package/dist/docs/bot-transports-rfc.md +23 -0
  40. package/dist/docs/ci-cli-mode.md +34 -0
  41. package/dist/docs/claude-code.md +74 -0
  42. package/dist/docs/command-provider.md +559 -0
  43. package/dist/docs/commands.md +8 -0
  44. package/dist/docs/configuration.md +324 -0
  45. package/dist/docs/custom-tools.md +424 -0
  46. package/dist/docs/dashboards/README.md +23 -0
  47. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  48. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  49. package/dist/docs/debug-visualizer-progress.md +572 -0
  50. package/dist/docs/debug-visualizer-rfc.md +691 -0
  51. package/dist/docs/debug-visualizer.md +114 -0
  52. package/dist/docs/debugging.md +636 -0
  53. package/dist/docs/default-output-schema.md +28 -0
  54. package/dist/docs/dependencies.md +369 -0
  55. package/dist/docs/dev-playbook.md +9 -0
  56. package/dist/docs/engine-pause-resume-rfc.md +192 -0
  57. package/dist/docs/engine-state-machine-plan.md +333 -0
  58. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  59. package/dist/docs/event-triggers.md +292 -0
  60. package/dist/docs/execution-statistics-rfc.md +290 -0
  61. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  62. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  63. package/dist/docs/fail-if.md +95 -0
  64. package/dist/docs/failure-conditions-implementation.md +271 -0
  65. package/dist/docs/failure-conditions-schema.md +173 -0
  66. package/dist/docs/failure-routing-rfc.md +193 -0
  67. package/dist/docs/failure-routing.md +507 -0
  68. package/dist/docs/foreach-dependency-propagation.md +473 -0
  69. package/dist/docs/github-ops.md +89 -0
  70. package/dist/docs/goto-forward-run-plan.md +113 -0
  71. package/dist/docs/guides/criticality-modes.md +332 -0
  72. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  73. package/dist/docs/guides/workflow-style-guide.md +224 -0
  74. package/dist/docs/http.md +299 -0
  75. package/dist/docs/human-input-provider.md +372 -0
  76. package/dist/docs/lifecycle-hooks.md +253 -0
  77. package/dist/docs/limits.md +64 -0
  78. package/dist/docs/liquid-templates.md +490 -0
  79. package/dist/docs/loop-routing-refactor.md +89 -0
  80. package/dist/docs/mcp-provider.md +557 -0
  81. package/dist/docs/mcp.md +124 -0
  82. package/dist/docs/memory.md +903 -0
  83. package/dist/docs/observability.md +12 -0
  84. package/dist/docs/output-formats.md +20 -0
  85. package/dist/docs/output-formatting.md +29 -0
  86. package/dist/docs/output-history.md +383 -0
  87. package/dist/docs/performance.md +6 -0
  88. package/dist/docs/pluggable.md +124 -0
  89. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  90. package/dist/docs/providers/git-checkout.md +589 -0
  91. package/dist/docs/recipes.md +474 -0
  92. package/dist/docs/rfc/git-checkout-step.md +601 -0
  93. package/dist/docs/rfc/on_init-hook.md +1294 -0
  94. package/dist/docs/rfc/workspace-isolation.md +216 -0
  95. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  96. package/dist/docs/router-patterns.md +339 -0
  97. package/dist/docs/schema-next-pr.md +10 -0
  98. package/dist/docs/schema-templates.md +68 -0
  99. package/dist/docs/script.md +34 -0
  100. package/dist/docs/sdk.md +222 -0
  101. package/dist/docs/security.md +7 -0
  102. package/dist/docs/suppressions.md +89 -0
  103. package/dist/docs/tag-filtering.md +258 -0
  104. package/dist/docs/telemetry-setup.md +119 -0
  105. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  106. package/dist/docs/test-framework-rfc.md +680 -0
  107. package/dist/docs/testing/assertions.md +85 -0
  108. package/dist/docs/testing/ci.md +44 -0
  109. package/dist/docs/testing/cli.md +41 -0
  110. package/dist/docs/testing/cookbook.md +172 -0
  111. package/dist/docs/testing/dsl-reference.md +199 -0
  112. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  113. package/dist/docs/testing/flows.md +92 -0
  114. package/dist/docs/testing/getting-started.md +93 -0
  115. package/dist/docs/testing/troubleshooting.md +55 -0
  116. package/dist/docs/timeouts.md +50 -0
  117. package/dist/docs/troubleshooting.md +7 -0
  118. package/dist/docs/visor-sdk-rfc.md +186 -0
  119. package/dist/docs/workflows.md +569 -0
  120. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  121. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  122. package/dist/engine/on-finish/utils.d.ts +44 -0
  123. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  124. package/dist/event-bus/event-bus.d.ts +13 -0
  125. package/dist/event-bus/event-bus.d.ts.map +1 -0
  126. package/dist/event-bus/types.d.ts +71 -0
  127. package/dist/event-bus/types.d.ts.map +1 -0
  128. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  129. package/dist/examples/.mcp.json +34 -0
  130. package/dist/examples/CALCULATOR-SDK.md +364 -0
  131. package/dist/examples/README.md +384 -0
  132. package/dist/examples/ai-custom-tools-example.yaml +206 -0
  133. package/dist/examples/ai-custom-tools-simple.yaml +76 -0
  134. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  135. package/dist/examples/ai-with-bash.yaml +126 -0
  136. package/dist/examples/ai-with-mcp.yaml +82 -0
  137. package/dist/examples/basic-human-input.yaml +15 -0
  138. package/dist/examples/bedrock-config.yaml +77 -0
  139. package/dist/examples/calculator-config.yaml +133 -0
  140. package/dist/examples/calculator-json-output-guide.md +311 -0
  141. package/dist/examples/calculator-sdk-automated.ts +340 -0
  142. package/dist/examples/calculator-sdk-example.ts +275 -0
  143. package/dist/examples/calculator-sdk-json.ts +331 -0
  144. package/dist/examples/calculator-sdk-real.ts +374 -0
  145. package/dist/examples/calculator-sdk-test.ts +148 -0
  146. package/dist/examples/claude-code-config.yaml +191 -0
  147. package/dist/examples/cron-webhook-config.yaml +215 -0
  148. package/dist/examples/custom-template.liquid +57 -0
  149. package/dist/examples/custom-tools-example.yaml +281 -0
  150. package/dist/examples/enhanced-config.yaml +165 -0
  151. package/dist/examples/environments/visor.base.yaml +92 -0
  152. package/dist/examples/environments/visor.dev.yaml +33 -0
  153. package/dist/examples/environments/visor.prod.yaml +95 -0
  154. package/dist/examples/environments/visor.staging.yaml +46 -0
  155. package/dist/examples/fact-validator.yaml +361 -0
  156. package/dist/examples/fail-if-simple.yaml +90 -0
  157. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  158. package/dist/examples/failure-conditions-basic.yaml +48 -0
  159. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  160. package/dist/examples/failure-conditions-migration.yaml +74 -0
  161. package/dist/examples/for-loop-example.yaml +176 -0
  162. package/dist/examples/forEach-example.yaml +120 -0
  163. package/dist/examples/git-checkout-basic.yaml +32 -0
  164. package/dist/examples/git-checkout-compare.yaml +59 -0
  165. package/dist/examples/git-checkout-cross-repo.yaml +76 -0
  166. package/dist/examples/github-workflow-with-tags.yml +163 -0
  167. package/dist/examples/http-integration-config.yaml +240 -0
  168. package/dist/examples/https-server-config.yaml +209 -0
  169. package/dist/examples/human-input-example.yaml +63 -0
  170. package/dist/examples/if-conditions.yaml +173 -0
  171. package/dist/examples/jira-simple-example.yaml +56 -0
  172. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  173. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  174. package/dist/examples/mcp/analyzer.py +119 -0
  175. package/dist/examples/mcp-provider-example.yaml +301 -0
  176. package/dist/examples/memory-counter.yaml +99 -0
  177. package/dist/examples/memory-error-collection.yaml +104 -0
  178. package/dist/examples/memory-exec-js.yaml +247 -0
  179. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  180. package/dist/examples/memory-retry-counter.yaml +65 -0
  181. package/dist/examples/memory-state-machine.yaml +170 -0
  182. package/dist/examples/on-init-import-demo.yaml +179 -0
  183. package/dist/examples/outputs-raw-basic.yaml +26 -0
  184. package/dist/examples/project-with-tools.yaml +174 -0
  185. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  186. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  187. package/dist/examples/quick-start-tags.yaml +53 -0
  188. package/dist/examples/reusable-tools.yaml +92 -0
  189. package/dist/examples/reusable-workflows.yaml +88 -0
  190. package/dist/examples/routing-basic.yaml +35 -0
  191. package/dist/examples/routing-dynamic-js.yaml +46 -0
  192. package/dist/examples/routing-foreach.yaml +34 -0
  193. package/dist/examples/routing-goto-event.yaml +34 -0
  194. package/dist/examples/routing-on-success.yaml +25 -0
  195. package/dist/examples/run-calculator-demo.sh +71 -0
  196. package/dist/examples/sdk-basic.mjs +10 -0
  197. package/dist/examples/sdk-cjs.cjs +10 -0
  198. package/dist/examples/sdk-comprehensive.mjs +175 -0
  199. package/dist/examples/sdk-manual-config.mjs +65 -0
  200. package/dist/examples/sdk-typescript.js +81 -0
  201. package/dist/examples/sdk-typescript.ts +92 -0
  202. package/dist/examples/session-reuse-config.yaml +151 -0
  203. package/dist/examples/session-reuse-self.yaml +81 -0
  204. package/dist/examples/slack-simple-chat.yaml +775 -0
  205. package/dist/examples/templates/security-report.liquid +137 -0
  206. package/dist/examples/tools-library.yaml +281 -0
  207. package/dist/examples/transform-example.yaml +199 -0
  208. package/dist/examples/visor-with-tags.yaml +198 -0
  209. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  210. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  211. package/dist/examples/workflows/code-quality.yaml +222 -0
  212. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  213. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  214. package/dist/failure-condition-evaluator.d.ts +3 -0
  215. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  216. package/dist/frontends/github-frontend.d.ts +58 -0
  217. package/dist/frontends/github-frontend.d.ts.map +1 -0
  218. package/dist/frontends/host.d.ts +47 -0
  219. package/dist/frontends/host.d.ts.map +1 -0
  220. package/dist/frontends/ndjson-sink.d.ts +12 -0
  221. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  222. package/dist/frontends/slack-frontend.d.ts +58 -0
  223. package/dist/frontends/slack-frontend.d.ts.map +1 -0
  224. package/dist/generated/config-schema.d.ts +967 -57
  225. package/dist/generated/config-schema.d.ts.map +1 -1
  226. package/dist/generated/config-schema.json +1033 -56
  227. package/dist/github-check-service.d.ts +4 -6
  228. package/dist/github-check-service.d.ts.map +1 -1
  229. package/dist/github-comments.d.ts +2 -4
  230. package/dist/github-comments.d.ts.map +1 -1
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +134327 -99004
  233. package/dist/liquid-extensions.d.ts.map +1 -1
  234. package/dist/logger.d.ts +2 -0
  235. package/dist/logger.d.ts.map +1 -1
  236. package/dist/memory-store.d.ts +6 -0
  237. package/dist/memory-store.d.ts.map +1 -1
  238. package/dist/output/assistant-json/template.liquid +0 -0
  239. package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  240. package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  241. package/dist/output-formatters.d.ts +1 -1
  242. package/dist/output-formatters.d.ts.map +1 -1
  243. package/dist/providers/ai-check-provider.d.ts +12 -0
  244. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  245. package/dist/providers/check-provider-registry.d.ts +6 -0
  246. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  247. package/dist/providers/check-provider.interface.d.ts +43 -1
  248. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  249. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  250. package/dist/providers/command-check-provider.d.ts +1 -1
  251. package/dist/providers/command-check-provider.d.ts.map +1 -1
  252. package/dist/providers/custom-tool-executor.d.ts +61 -0
  253. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  254. package/dist/providers/git-checkout-provider.d.ts +25 -0
  255. package/dist/providers/git-checkout-provider.d.ts.map +1 -0
  256. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  257. package/dist/providers/http-client-provider.d.ts +4 -4
  258. package/dist/providers/http-client-provider.d.ts.map +1 -1
  259. package/dist/providers/human-input-check-provider.d.ts +5 -0
  260. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  261. package/dist/providers/index.d.ts +1 -0
  262. package/dist/providers/index.d.ts.map +1 -1
  263. package/dist/providers/log-check-provider.d.ts +2 -5
  264. package/dist/providers/log-check-provider.d.ts.map +1 -1
  265. package/dist/providers/mcp-check-provider.d.ts +10 -4
  266. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  267. package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
  268. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
  269. package/dist/providers/memory-check-provider.d.ts +2 -8
  270. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  271. package/dist/providers/script-check-provider.d.ts +25 -0
  272. package/dist/providers/script-check-provider.d.ts.map +1 -0
  273. package/dist/providers/workflow-check-provider.d.ts +56 -0
  274. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  275. package/dist/reviewer.d.ts +2 -1
  276. package/dist/reviewer.d.ts.map +1 -1
  277. package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
  278. package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
  279. package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
  280. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
  281. package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
  282. package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
  283. package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
  284. package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
  285. package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
  286. package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
  287. package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
  288. package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
  289. package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
  290. package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
  291. package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
  292. package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
  293. package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
  294. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  295. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  296. package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
  297. package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
  298. package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
  299. package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
  300. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  301. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  302. package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
  303. package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
  304. package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
  305. package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
  306. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  307. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  308. package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
  309. package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
  310. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  311. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  312. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  313. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  314. package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
  315. package/dist/sdk/config-YNC2EOOT.mjs +16 -0
  316. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  317. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  318. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  319. package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
  320. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  321. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  322. package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
  323. package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
  324. package/dist/sdk/host-DXUYTNMU.mjs +52 -0
  325. package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
  326. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
  327. package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
  328. package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
  329. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  330. package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
  331. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  332. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  333. package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
  334. package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
  335. package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
  336. package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
  337. package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
  338. package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
  339. package/dist/sdk/sdk.d.mts +541 -22
  340. package/dist/sdk/sdk.d.ts +541 -22
  341. package/dist/sdk/sdk.js +27963 -16505
  342. package/dist/sdk/sdk.js.map +1 -1
  343. package/dist/sdk/sdk.mjs +1116 -2169
  344. package/dist/sdk/sdk.mjs.map +1 -1
  345. package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
  346. package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
  347. package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
  348. package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
  349. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  350. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  351. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
  352. package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
  353. package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
  354. package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
  355. package/dist/sdk.d.ts.map +1 -1
  356. package/dist/slack/adapter.d.ts +36 -0
  357. package/dist/slack/adapter.d.ts.map +1 -0
  358. package/dist/slack/cache-prewarmer.d.ts +31 -0
  359. package/dist/slack/cache-prewarmer.d.ts.map +1 -0
  360. package/dist/slack/client.d.ts +77 -0
  361. package/dist/slack/client.d.ts.map +1 -0
  362. package/dist/slack/markdown.d.ts +45 -0
  363. package/dist/slack/markdown.d.ts.map +1 -0
  364. package/dist/slack/prompt-state.d.ts +33 -0
  365. package/dist/slack/prompt-state.d.ts.map +1 -0
  366. package/dist/slack/rate-limiter.d.ts +56 -0
  367. package/dist/slack/rate-limiter.d.ts.map +1 -0
  368. package/dist/slack/signature.d.ts +2 -0
  369. package/dist/slack/signature.d.ts.map +1 -0
  370. package/dist/slack/socket-runner.d.ts +42 -0
  371. package/dist/slack/socket-runner.d.ts.map +1 -0
  372. package/dist/slack/thread-cache.d.ts +51 -0
  373. package/dist/slack/thread-cache.d.ts.map +1 -0
  374. package/dist/snapshot-store.d.ts +59 -0
  375. package/dist/snapshot-store.d.ts.map +1 -0
  376. package/dist/state-machine/context/build-engine-context.d.ts +17 -0
  377. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  378. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  379. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  380. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  381. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  382. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  383. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  384. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  385. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  386. package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
  387. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
  388. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  389. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  390. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  391. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  392. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  393. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  394. package/dist/state-machine/execution/summary.d.ts +8 -0
  395. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  396. package/dist/state-machine/runner.d.ts +79 -0
  397. package/dist/state-machine/runner.d.ts.map +1 -0
  398. package/dist/state-machine/states/check-running.d.ts +14 -0
  399. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  400. package/dist/state-machine/states/completed.d.ts +12 -0
  401. package/dist/state-machine/states/completed.d.ts.map +1 -0
  402. package/dist/state-machine/states/error.d.ts +11 -0
  403. package/dist/state-machine/states/error.d.ts.map +1 -0
  404. package/dist/state-machine/states/init.d.ts +11 -0
  405. package/dist/state-machine/states/init.d.ts.map +1 -0
  406. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  407. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  408. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  409. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  410. package/dist/state-machine/states/routing.d.ts +52 -0
  411. package/dist/state-machine/states/routing.d.ts.map +1 -0
  412. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  413. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  414. package/dist/state-machine/workflow-projection.d.ts +47 -0
  415. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  416. package/dist/state-machine-execution-engine.d.ts +159 -0
  417. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  418. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  419. package/dist/telemetry/state-capture.d.ts +5 -0
  420. package/dist/telemetry/state-capture.d.ts.map +1 -1
  421. package/dist/test-runner/assertions.d.ts +59 -0
  422. package/dist/test-runner/assertions.d.ts.map +1 -0
  423. package/dist/test-runner/core/environment.d.ts +8 -0
  424. package/dist/test-runner/core/environment.d.ts.map +1 -0
  425. package/dist/test-runner/core/fixture.d.ts +3 -0
  426. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  427. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  428. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  429. package/dist/test-runner/core/mocks.d.ts +8 -0
  430. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  431. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  432. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  433. package/dist/test-runner/evaluators.d.ts +45 -0
  434. package/dist/test-runner/evaluators.d.ts.map +1 -0
  435. package/dist/test-runner/fixture-loader.d.ts +30 -0
  436. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  437. package/dist/test-runner/index.d.ts +127 -0
  438. package/dist/test-runner/index.d.ts.map +1 -0
  439. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  440. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  441. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  442. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  443. package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
  444. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
  445. package/dist/test-runner/utils/selectors.d.ts +2 -0
  446. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  447. package/dist/test-runner/validator.d.ts +8 -0
  448. package/dist/test-runner/validator.d.ts.map +1 -0
  449. package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  450. package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  451. package/dist/types/bot.d.ts +109 -0
  452. package/dist/types/bot.d.ts.map +1 -0
  453. package/dist/types/cli.d.ts +8 -1
  454. package/dist/types/cli.d.ts.map +1 -1
  455. package/dist/types/config.d.ts +459 -9
  456. package/dist/types/config.d.ts.map +1 -1
  457. package/dist/types/engine.d.ts +177 -0
  458. package/dist/types/engine.d.ts.map +1 -0
  459. package/dist/types/execution.d.ts +73 -0
  460. package/dist/types/execution.d.ts.map +1 -0
  461. package/dist/types/git-checkout.d.ts +76 -0
  462. package/dist/types/git-checkout.d.ts.map +1 -0
  463. package/dist/types/github.d.ts +51 -0
  464. package/dist/types/github.d.ts.map +1 -0
  465. package/dist/types/workflow.d.ts +237 -0
  466. package/dist/types/workflow.d.ts.map +1 -0
  467. package/dist/utils/command-executor.d.ts +43 -0
  468. package/dist/utils/command-executor.d.ts.map +1 -0
  469. package/dist/utils/comment-metadata.d.ts +21 -0
  470. package/dist/utils/comment-metadata.d.ts.map +1 -0
  471. package/dist/utils/config-loader.d.ts.map +1 -1
  472. package/dist/utils/config-merger.d.ts.map +1 -1
  473. package/dist/utils/env-exposure.d.ts +3 -0
  474. package/dist/utils/env-exposure.d.ts.map +1 -0
  475. package/dist/utils/file-exclusion.d.ts.map +1 -1
  476. package/dist/utils/interactive-prompt.d.ts +1 -1
  477. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  478. package/dist/utils/json-text-extractor.d.ts +17 -0
  479. package/dist/utils/json-text-extractor.d.ts.map +1 -0
  480. package/dist/utils/sandbox.d.ts +10 -0
  481. package/dist/utils/sandbox.d.ts.map +1 -1
  482. package/dist/utils/script-memory-ops.d.ts +21 -0
  483. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  484. package/dist/utils/template-context.d.ts +8 -0
  485. package/dist/utils/template-context.d.ts.map +1 -0
  486. package/dist/utils/tracer-init.d.ts.map +1 -1
  487. package/dist/utils/workspace-manager.d.ts +118 -0
  488. package/dist/utils/workspace-manager.d.ts.map +1 -0
  489. package/dist/utils/worktree-cleanup.d.ts +33 -0
  490. package/dist/utils/worktree-cleanup.d.ts.map +1 -0
  491. package/dist/utils/worktree-manager.d.ts +153 -0
  492. package/dist/utils/worktree-manager.d.ts.map +1 -0
  493. package/dist/webhook-server.d.ts +3 -3
  494. package/dist/webhook-server.d.ts.map +1 -1
  495. package/dist/workflow-executor.d.ts +81 -0
  496. package/dist/workflow-executor.d.ts.map +1 -0
  497. package/dist/workflow-registry.d.ts +79 -0
  498. package/dist/workflow-registry.d.ts.map +1 -0
  499. package/package.json +12 -5
  500. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  501. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  502. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  503. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  504. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  505. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  506. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  507. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  508. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  509. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  510. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  511. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  512. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  513. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  514. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  515. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  516. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  517. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  518. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  519. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  520. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  521. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  522. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  523. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  524. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  525. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
  526. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
  527. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
  528. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  529. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
  530. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
@@ -0,0 +1,685 @@
1
+ version: "1.0"
2
+ extends: "visor.yaml"
3
+
4
+ # Integration test suite for Visor default configuration
5
+ # - Driven by events + fixtures; no manual step lists
6
+ # - Strict by default: every executed step must have an expect
7
+ # - AI mocks accept structured JSON when a schema is defined; plain uses text
8
+ # - GitHub calls are recorded by default by the test runner (no network)
9
+
10
+ tests:
11
+ defaults:
12
+ strict: true
13
+ ai_provider: mock
14
+ fail_on_unexpected_calls: true
15
+ # Enable GitHub + Slack frontends for PR stages in this suite.
16
+ # Slack is disabled automatically for non‑PR events in tests.
17
+ frontends:
18
+ - name: github
19
+ - name: slack
20
+ config:
21
+ defaultChannel: C_TEST
22
+ # Run GitHub-tagged checks in tests (e.g., label application)
23
+ tags: "github"
24
+ # Example: enable negative GitHub recorder for all tests
25
+ # github_recorder: { error_code: 429 }
26
+ # Built-in fixtures are provided by the test runner (gh.* namespace).
27
+ # Custom fixtures may still be added here if needed.
28
+ fixtures: []
29
+
30
+ cases:
31
+ - name: label-flow
32
+ description: |
33
+ Validates the happy path for PR open:
34
+ - overview runs and emits tags.label and tags.review-effort (mocked)
35
+ - apply-overview-labels adds two labels (feature and review/effort:2)
36
+ - overview prompt includes PR title and unified diff header
37
+ event: pr_opened
38
+ fixture: gh.pr_open.minimal
39
+ mocks:
40
+ overview:
41
+ text: |
42
+ High‑level summary of the changes and impact.
43
+ tags:
44
+ label: feature
45
+ review-effort: 2
46
+ expect:
47
+ calls:
48
+ - step: overview
49
+ exactly: 1
50
+ - step: apply-overview-labels
51
+ exactly: 1
52
+ - provider: github
53
+ op: labels.add
54
+ at_least: 1
55
+ args:
56
+ contains:
57
+ - feature
58
+ - "review/effort:2"
59
+ outputs:
60
+ - step: overview
61
+ path: "tags.label"
62
+ equals: feature
63
+ - step: overview
64
+ path: "tags['review-effort']"
65
+ equals: 2
66
+ prompts:
67
+ - step: overview
68
+ contains:
69
+ - "feat: add user search"
70
+
71
+ - name: references-example-link-issue
72
+ description: Ensure issue-assistant prompt renders example with HEAD fallback and includes References section.
73
+ event: issue_opened
74
+ fixture: gh.issue_open.minimal
75
+ ai_include_code_context: true
76
+ strict: false
77
+ expect:
78
+ prompts:
79
+ - step: issue-assistant
80
+ contains:
81
+ - "References:"
82
+ - "https://github.com/owner/repo/blob/HEAD/path/to/file.ext#LSTART-LEND"
83
+
84
+ - name: references-example-link-comment
85
+ description: Ensure comment-assistant prompt renders example with HEAD fallback and includes References section.
86
+ event: issue_comment
87
+ fixture: gh.issue_comment.visor_help
88
+ ai_include_code_context: true
89
+ strict: false
90
+ expect:
91
+ prompts:
92
+ - step: comment-assistant
93
+ contains:
94
+ - "References:"
95
+ - "https://github.com/owner/repo/blob/HEAD/path/to/file.ext#LSTART-LEND"
96
+
97
+ - name: issue-triage
98
+ skip: true
99
+ description: |
100
+ Ensures the issue assistant triages a newly opened issue and applies labels.
101
+ Asserts the structured output (intent=issue_triage) and the GitHub label op.
102
+ event: issue_opened
103
+ fixture: gh.issue_open.minimal
104
+ mocks:
105
+ issue-assistant:
106
+ text: |
107
+ Thanks for the detailed report! We will investigate.
108
+ intent: issue_triage
109
+ labels: [bug, priority/medium]
110
+ expect:
111
+ calls:
112
+ - step: issue-assistant
113
+ exactly: 1
114
+ - step: apply-issue-labels
115
+ exactly: 1
116
+ - step: init-fact-validation
117
+ exactly: 1
118
+ - step: extract-facts
119
+ exactly: 1
120
+ - step: validate-fact
121
+ at_least: 1
122
+ - provider: github
123
+ op: labels.add
124
+ at_least: 1
125
+ args:
126
+ contains:
127
+ - bug
128
+ outputs:
129
+ - step: issue-assistant
130
+ path: intent
131
+ equals: issue_triage
132
+ prompts:
133
+ - step: issue-assistant
134
+ contains:
135
+ - "Bug: crashes on search edge case"
136
+
137
+ - name: issue-triage-labels
138
+ description: |
139
+ Minimal issue triage path to validate label application from issue-assistant output.
140
+ Provider derives labels from dependency outputs and normalizes them.
141
+ event: issue_opened
142
+ fixture: gh.issue_open.minimal
143
+ mocks:
144
+ issue-assistant:
145
+ text: |
146
+ Thanks for the report — we will triage shortly.
147
+ intent: issue_triage
148
+ labels: [bug, priority/medium]
149
+ expect:
150
+ calls:
151
+ - step: issue-assistant
152
+ exactly: 1
153
+ - step: apply-issue-labels
154
+ exactly: 1
155
+ - provider: github
156
+ op: labels.add
157
+ at_least: 1
158
+ args:
159
+ contains:
160
+ - bug
161
+
162
+ - name: pr-review-e2e-flow
163
+ description: |
164
+ End-to-end PR lifecycle covering multiple external events:
165
+ 1) PR opened → overview + labels
166
+ 2) Standard comment → no bot reply
167
+ 3) /visor help → single assistant reply (no retrigger)
168
+ 4) /visor Regenerate reviews → retrigger overview
169
+ 5) Fact validation enabled on comment → extract/validate/aggregate
170
+ 6) Fact validation disabled on comment → only assistant, no validation steps
171
+ 7) PR synchronized (new commit) → overview runs again
172
+ strict: true
173
+ flow:
174
+ - name: pr-open
175
+ description: |
176
+ PR open event. Mocks overview/security/quality/performance as empty issue lists.
177
+ Expects all review steps to run and labels to be added.
178
+ event: pr_opened
179
+ fixture: gh.pr_open.minimal
180
+ mocks:
181
+ overview:
182
+ text: "Overview body"
183
+ tags: { label: feature, review-effort: 2 }
184
+ security: { issues: [] }
185
+ architecture: { issues: [] }
186
+ quality: { issues: [] }
187
+ performance: { issues: [] }
188
+ expect:
189
+ calls:
190
+ - step: overview
191
+ at_least: 1
192
+ - step: security
193
+ exactly: 1
194
+ - step: architecture
195
+ exactly: 1
196
+ - step: performance
197
+ exactly: 1
198
+ - step: quality
199
+ exactly: 1
200
+ - step: apply-overview-labels
201
+ exactly: 1
202
+ - provider: github
203
+ op: issues.createComment
204
+ at_least: 1
205
+ - provider: github
206
+ op: labels.add
207
+ at_least: 1
208
+ args:
209
+ contains: [feature]
210
+ prompts:
211
+ - step: overview
212
+ contains:
213
+ - "feat: add user search"
214
+
215
+ - name: standard-comment
216
+ description: |
217
+ A regular human comment on a PR should not produce a bot reply.
218
+ event: issue_comment
219
+ fixture: gh.issue_comment.standard
220
+ mocks:
221
+ comment-assistant:
222
+ text: "" # empty text to avoid posting a reply
223
+ intent: comment_reply
224
+ expect:
225
+ no_calls:
226
+ - provider: github
227
+ op: issues.createComment
228
+ - provider: slack
229
+ op: chat.postMessage
230
+ - provider: slack
231
+ op: chat.update
232
+ calls:
233
+ - step: comment-assistant
234
+ exactly: 1
235
+
236
+ - name: visor-plain
237
+ description: |
238
+ A "/visor help" comment should be recognized and answered once by the assistant.
239
+ event: issue_comment
240
+ fixture: gh.issue_comment.visor_help
241
+ mocks:
242
+ comment-assistant:
243
+ text: "Sure, here’s how I can help."
244
+ intent: comment_reply
245
+ expect:
246
+ calls:
247
+ - step: comment-assistant
248
+ exactly: 1
249
+ - provider: github
250
+ op: issues.createComment
251
+ exactly: 1
252
+ outputs:
253
+ - step: comment-assistant
254
+ path: intent
255
+ equals: comment_reply
256
+ prompts:
257
+ - step: comment-assistant
258
+ matches: "(?i)\\/visor\\s+help"
259
+
260
+ - name: visor-retrigger
261
+ description: |
262
+ A "/visor Regenerate reviews" comment should set intent=comment_retrigger
263
+ and schedule a new overview.
264
+ event: issue_comment
265
+ fixture: gh.issue_comment.visor_regenerate
266
+ mocks:
267
+ comment-assistant:
268
+ text: "Regenerating."
269
+ intent: comment_retrigger
270
+ overview:
271
+ text: "Overview (regenerated)"
272
+ tags: { label: feature, review-effort: 2 }
273
+ expect:
274
+ calls:
275
+ - step: comment-assistant
276
+ exactly: 1
277
+ - step: overview
278
+ exactly: 1
279
+ - step: security
280
+ exactly: 1
281
+ - step: architecture
282
+ exactly: 1
283
+ - step: performance
284
+ exactly: 1
285
+ - step: quality
286
+ exactly: 1
287
+ - provider: github
288
+ op: issues.createComment
289
+ at_least: 1
290
+ outputs:
291
+ - step: comment-assistant
292
+ path: intent
293
+ equals: comment_retrigger
294
+ prompts:
295
+ - step: comment-assistant
296
+ contains: ["Regenerate reviews"]
297
+
298
+ - name: facts-enabled (comment)
299
+ description: |
300
+ With fact validation enabled, the assistant reply is followed by
301
+ extract-facts and validate-fact (per fact). No aggregator is required for routing.
302
+ event: issue_comment
303
+ fixture: gh.issue_comment.visor_help
304
+ env:
305
+ ENABLE_FACT_VALIDATION: "true"
306
+ mocks:
307
+ comment-assistant:
308
+ text: "We rely on defaults/visor.yaml line 11 for max_parallelism=4."
309
+ intent: comment_reply
310
+ extract-facts:
311
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
312
+ validate-fact[]:
313
+ - fact_id: f1
314
+ claim: "max_parallelism defaults to 4"
315
+ is_valid: true
316
+ confidence: high
317
+ evidence: "defaults/visor.yaml:11"
318
+ expect:
319
+ calls:
320
+ - step: comment-assistant
321
+ exactly: 1
322
+ - step: extract-facts
323
+ exactly: 1
324
+ - step: validate-fact
325
+ at_least: 1
326
+ # Prompt assertions are validated separately in stage-level prompt tests
327
+
328
+ - name: facts-invalid (comment)
329
+ description: |
330
+ Invalid fact path: after assistant reply, extract-facts finds one claim and
331
+ validate-fact returns is_valid=false; the runner detects problems from
332
+ validate-fact history and reruns the assistant once with correction context.
333
+ Due to goto forward-running dependents, extract-facts and validate-fact also run again.
334
+ event: issue_comment
335
+ fixture: gh.issue_comment.visor_help
336
+ env:
337
+ ENABLE_FACT_VALIDATION: "true"
338
+ routing:
339
+ max_loops: 1
340
+ mocks:
341
+ comment-assistant:
342
+ text: "We rely on defaults/visor.yaml line 11 for max_parallelism=4."
343
+ intent: comment_reply
344
+ extract-facts:
345
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
346
+ validate-fact[]:
347
+ - fact_id: f1
348
+ claim: "max_parallelism defaults to 4"
349
+ is_valid: false
350
+ confidence: high
351
+ evidence: "defaults/visor.yaml:11 does not set 4"
352
+ correction: "max_parallelism defaults to 3"
353
+ expect:
354
+ calls:
355
+ - step: comment-assistant
356
+ exactly: 2
357
+ - step: extract-facts
358
+ exactly: 2
359
+ - step: validate-fact
360
+ exactly: 2
361
+ - step: aggregate
362
+ exactly: 1
363
+ outputs:
364
+ - step: validate-fact
365
+ where: { path: fact_id, equals: f1 }
366
+ path: correction
367
+ equals: "max_parallelism defaults to 3"
368
+
369
+ - name: facts-two-items (comment)
370
+ description: |
371
+ Two facts extracted; only the invalid fact should appear in the correction pass.
372
+ Due to goto forward-running dependents, extract-facts and validate-fact run again on retry.
373
+ event: issue_comment
374
+ fixture: gh.issue_comment.visor_help
375
+ env:
376
+ ENABLE_FACT_VALIDATION: "true"
377
+ routing:
378
+ max_loops: 1
379
+ mocks:
380
+ comment-assistant:
381
+ text: "We rely on defaults/visor.yaml for concurrency defaults."
382
+ intent: comment_reply
383
+ extract-facts:
384
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
385
+ - { id: f2, category: Feature, claim: "Fast mode is enabled by default", verifiable: true }
386
+ validate-fact[]:
387
+ - { fact_id: f1, claim: "max_parallelism defaults to 4", is_valid: false, confidence: high, evidence: "defaults/visor.yaml:11", correction: "max_parallelism defaults to 3" }
388
+ - { fact_id: f2, claim: "Fast mode is enabled by default", is_valid: true, confidence: high, evidence: "src/config.ts:FAST_MODE=true" }
389
+ expect:
390
+ calls:
391
+ - step: comment-assistant
392
+ exactly: 2
393
+ - step: extract-facts
394
+ exactly: 2
395
+ - step: validate-fact
396
+ exactly: 4
397
+ - step: aggregate
398
+ exactly: 1
399
+ outputs:
400
+ - step: validate-fact
401
+ where: { path: fact_id, equals: f1 }
402
+ path: is_valid
403
+ equals: false
404
+ - step: validate-fact
405
+ where: { path: fact_id, equals: f2 }
406
+ path: is_valid
407
+ equals: true
408
+ - step: validate-fact
409
+ where: { path: fact_id, equals: f1 }
410
+ path: correction
411
+ equals: "max_parallelism defaults to 3"
412
+
413
+ - name: facts-disabled
414
+ description: |
415
+ With fact validation disabled, only the assistant runs; no validation steps execute.
416
+ event: issue_comment
417
+ fixture: gh.issue_comment.standard
418
+ env:
419
+ ENABLE_FACT_VALIDATION: "false"
420
+ expect:
421
+ calls:
422
+ - step: comment-assistant
423
+ exactly: 1
424
+ no_calls:
425
+ - step: extract-facts
426
+ - step: validate-fact
427
+
428
+ - name: facts-enabled (issue)
429
+ description: Fact validation runs from an issue creation path.
430
+ event: issue_opened
431
+ fixture: gh.issue_open.minimal
432
+ env:
433
+ ENABLE_FACT_VALIDATION: "true"
434
+ mocks:
435
+ issue-assistant:
436
+ text: "Opening issue with claim about defaults/visor.yaml"
437
+ intent: issue_triage
438
+ labels: ["bug", "triage"]
439
+ extract-facts:
440
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
441
+ validate-fact[]:
442
+ - fact_id: f1
443
+ claim: "max_parallelism defaults to 4"
444
+ is_valid: true
445
+ confidence: high
446
+ evidence: "defaults/visor.yaml:11"
447
+ expect:
448
+ calls:
449
+ - step: issue-assistant
450
+ at_least: 1
451
+ - step: apply-issue-labels
452
+ exactly: 1
453
+ - step: extract-facts
454
+ exactly: 1
455
+ - step: validate-fact
456
+ at_least: 1
457
+
458
+ - name: facts-invalid (issue)
459
+ description: |
460
+ Invalid claim triggers correction by rerunning issue-assistant.
461
+ Due to goto forward-running dependents, extract-facts and validate-fact also run again.
462
+ event: issue_opened
463
+ fixture: gh.issue_open.minimal
464
+ env:
465
+ ENABLE_FACT_VALIDATION: "true"
466
+ routing:
467
+ max_loops: 1
468
+ mocks:
469
+ issue-assistant:
470
+ text: "Claim: max_parallelism defaults to 4"
471
+ intent: issue_triage
472
+ labels: ["bug", "triage"]
473
+ extract-facts:
474
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
475
+ validate-fact[]:
476
+ - fact_id: f1
477
+ claim: "max_parallelism defaults to 4"
478
+ is_valid: false
479
+ confidence: high
480
+ evidence: "defaults/visor.yaml:11 does not set 4"
481
+ correction: "max_parallelism defaults to 3"
482
+ expect:
483
+ calls:
484
+ - step: issue-assistant
485
+ exactly: 2
486
+ - step: apply-issue-labels
487
+ exactly: 2
488
+ - step: extract-facts
489
+ exactly: 2
490
+ - step: validate-fact
491
+ exactly: 2
492
+ - step: aggregate
493
+ exactly: 1
494
+ outputs:
495
+ - step: validate-fact
496
+ where: { path: fact_id, equals: f1 }
497
+ path: correction
498
+ equals: "max_parallelism defaults to 3"
499
+
500
+ - name: pr-updated
501
+ description: |
502
+ When a new commit is pushed (synchronize), overview should run again
503
+ and post/refresh a comment.
504
+ event: pr_updated
505
+ fixture: gh.pr_sync.minimal
506
+ mocks:
507
+ overview:
508
+ text: "Overview for new commit"
509
+ tags: { label: feature, review-effort: 3 }
510
+ expect:
511
+ calls:
512
+ - step: overview
513
+ exactly: 1
514
+ - step: security
515
+ exactly: 1
516
+ - step: architecture
517
+ exactly: 1
518
+ - step: performance
519
+ exactly: 1
520
+ - step: quality
521
+ exactly: 1
522
+
523
+ - name: security-fail-if
524
+ description: |
525
+ Verifies that the global fail_if trips when security produces an error‑severity issue.
526
+ event: pr_opened
527
+ fixture: gh.pr_open.minimal
528
+ mocks:
529
+ overview:
530
+ text: "Overview text"
531
+ tags:
532
+ label: bug
533
+ review-effort: 3
534
+ security:
535
+ issues:
536
+ - id: S-001
537
+ file: src/search.ts
538
+ line: 10
539
+ message: "Command injection risk"
540
+ severity: error
541
+ category: security
542
+ expect:
543
+ calls:
544
+ - step: overview
545
+ exactly: 1
546
+ - step: security
547
+ exactly: 1
548
+ outputs:
549
+ - step: security
550
+ path: "issues[0].severity"
551
+ equals: error
552
+ fail:
553
+ message_contains: "fail_if"
554
+
555
+ - name: strict-mode-example
556
+ skip: true
557
+ description: |
558
+ Demonstrates strict mode: a step executed without a corresponding expect
559
+ (apply-overview-labels) triggers a strict_violation with a helpful message.
560
+ event: pr_opened
561
+ fixture: gh.pr_open.minimal
562
+ mocks:
563
+ overview:
564
+ text: "Short overview"
565
+ tags:
566
+ label: chore
567
+ review-effort: 1
568
+ expect:
569
+ calls:
570
+ - step: overview
571
+ exactly: 1
572
+ strict_violation:
573
+ for_step: apply-overview-labels
574
+ message_contains: "Add an expect for this step or set strict: false"
575
+
576
+ - name: visor-plain-prompt
577
+ description: |
578
+ Standalone prompt check for a "/visor help" comment.
579
+ event: issue_comment
580
+ fixture: gh.issue_comment.visor_help
581
+ mocks:
582
+ comment-assistant:
583
+ text: "Here is how I can help."
584
+ intent: comment_reply
585
+ expect:
586
+ calls:
587
+ - step: comment-assistant
588
+ exactly: 1
589
+ prompts:
590
+ - step: comment-assistant
591
+ matches: "(?i)\\/visor\\s+help"
592
+
593
+ - name: visor-retrigger-prompt
594
+ description: |
595
+ Standalone prompt check for "/visor Regenerate reviews".
596
+ event: issue_comment
597
+ fixture: gh.issue_comment.visor_regenerate
598
+ strict: false
599
+ mocks:
600
+ comment-assistant:
601
+ text: "Regenerating."
602
+ intent: comment_retrigger
603
+ expect:
604
+ calls:
605
+ - step: comment-assistant
606
+ exactly: 1
607
+ prompts:
608
+ - step: comment-assistant
609
+ contains: ["Regenerate reviews"]
610
+
611
+ - name: command-mock-shape
612
+ description: |
613
+ Illustrates command provider mocking and output assertions.
614
+ Skipped by default; enable when command steps exist.
615
+ skip: true # illustrative only, enable when a command step exists
616
+ event: pr_opened
617
+ fixture: gh.pr_open.minimal
618
+ mocks:
619
+ unit-tests:
620
+ stdout: '{"passed": 128, "failed": 0, "duration_sec": 1.2}'
621
+ exit_code: 0
622
+ expect:
623
+ calls:
624
+ - step: unit-tests
625
+ exactly: 1
626
+ outputs:
627
+ - step: unit-tests
628
+ path: failed
629
+ equals: 0
630
+
631
+ - name: github-negative-mode
632
+ description: |
633
+ Demonstrates negative GitHub recorder mode: simulate a 429 error and assert failure path.
634
+ event: pr_opened
635
+ fixture: gh.pr_open.minimal
636
+ github_recorder: { error_code: 429 }
637
+ # Override defaults for this case only by specifying a local recorder via env-like knob
638
+ # The runner reads tests.defaults.github_recorder; we provide it at the suite level by default.
639
+ mocks:
640
+ overview:
641
+ text: "Overview body"
642
+ tags: { label: feature, review-effort: 2 }
643
+ expect:
644
+ calls:
645
+ - step: overview
646
+ exactly: 1
647
+ - step: apply-overview-labels
648
+ exactly: 1
649
+ fail:
650
+ message_contains: "github/op_failed"
651
+
652
+ - name: facts-invalid
653
+ skip: true
654
+ description: |
655
+ With fact validation enabled and an invalid fact, aggregate-validations should detect
656
+ not-all-valid and route back to the assistant for a correction pass in the same stage.
657
+ event: issue_comment
658
+ fixture: gh.issue_comment.visor_help
659
+ env:
660
+ ENABLE_FACT_VALIDATION: "true"
661
+ mocks:
662
+ comment-assistant:
663
+ text: "We rely on defaults/visor.yaml line 11 for max_parallelism=4."
664
+ intent: comment_reply
665
+ extract-facts:
666
+ - { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
667
+ validate-fact[]:
668
+ - fact_id: f1
669
+ claim: "max_parallelism defaults to 4"
670
+ is_valid: false
671
+ confidence: high
672
+ evidence: "defaults/visor.yaml:11 does not set 4"
673
+ correction: "max_parallelism defaults to 3"
674
+ expect:
675
+ calls:
676
+ - step: comment-assistant
677
+ exactly: 1
678
+ - step: extract-facts
679
+ exactly: 1
680
+ - step: validate-fact
681
+ at_least: 1
682
+ - step: aggregate-validations
683
+ exactly: 1
684
+ - step: init-fact-validation
685
+ exactly: 1