@bugmole/cli 0.4.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 (308) hide show
  1. package/.bugmole.env.example +20 -0
  2. package/LICENSE +7 -0
  3. package/README.md +293 -0
  4. package/TESTING.md +117 -0
  5. package/bugmole.config.yaml +39 -0
  6. package/package.json +85 -0
  7. package/scripts/billing/paypal-setup.mjs +121 -0
  8. package/scripts/bugmole-continue.ts +318 -0
  9. package/scripts/bugmole-init.ts +188 -0
  10. package/scripts/bugmole.cjs +17 -0
  11. package/scripts/bugmole.test.ts +344 -0
  12. package/scripts/bugmole.ts +657 -0
  13. package/scripts/ensure-maestro.cjs +79 -0
  14. package/scripts/ios-tunnel-keeper.sh +45 -0
  15. package/scripts/ios-wda-keeper.sh +66 -0
  16. package/scripts/sync-plan-catalog.d.mts +3 -0
  17. package/scripts/sync-plan-catalog.mjs +16 -0
  18. package/scripts/ui-parity-diff.py +65 -0
  19. package/scripts/ui-parity-requirements.txt +1 -0
  20. package/scripts/verify-manage-to-plans.mts +194 -0
  21. package/spec/app-ui-audit.schema.json +176 -0
  22. package/spec/blockers.yaml +79 -0
  23. package/spec/bugs.index.json +42 -0
  24. package/spec/design-dna.schema.json +38 -0
  25. package/spec/domain_rules.yaml +24 -0
  26. package/spec/flows/flow_manage-to-plans-64c3c61b.yaml +8 -0
  27. package/spec/flows/flow_screen-to-evidence-6c3ab309.yaml +7 -0
  28. package/spec/journey_graph.yaml +126 -0
  29. package/spec/journeys.graph.json +2618 -0
  30. package/spec/plans/dashboard-smoke.flow.yaml +20 -0
  31. package/spec/plans/example.flow.yaml +99 -0
  32. package/spec/plans/flow_api-keys-to-logout-7396cd5d.flow.yaml +33 -0
  33. package/spec/plans/flow_api-keys-to-screen-157e10a6.flow.yaml +33 -0
  34. package/spec/plans/flow_manage-to-audits-176c1eb8.flow.yaml +33 -0
  35. package/spec/plans/flow_manage-to-blockers-633282c8.flow.yaml +112 -0
  36. package/spec/plans/flow_manage-to-devices-ad57e202.flow.yaml +33 -0
  37. package/spec/plans/flow_manage-to-logout-86c54656.flow.yaml +33 -0
  38. package/spec/plans/flow_manage-to-manage-resource-action-6325f99a.flow.yaml +185 -0
  39. package/spec/plans/flow_manage-to-parity-issues-01fa2579.flow.yaml +34 -0
  40. package/spec/plans/flow_manage-to-plans-64c3c61b.flow.yaml +123 -0
  41. package/spec/plans/flow_manage-to-screen-6857f915.flow.yaml +106 -0
  42. package/spec/plans/flow_manage-to-tasks-c5791c95.flow.yaml +33 -0
  43. package/spec/plans/flow_profile-to-screen-6045aa3d.flow.yaml +33 -0
  44. package/spec/plans/flow_register-to-api-auth-login-460a9cc8.flow.yaml +34 -0
  45. package/spec/plans/flow_screen-to-audits-07666356.flow.yaml +33 -0
  46. package/spec/plans/flow_screen-to-blockers-091d258b.flow.yaml +33 -0
  47. package/spec/plans/flow_screen-to-devices-cad72f75.flow.yaml +33 -0
  48. package/spec/plans/flow_screen-to-evidence-6c3ab309.flow.yaml +126 -0
  49. package/spec/plans/flow_screen-to-parity-issues-2218e3ad.flow.yaml +34 -0
  50. package/spec/plans/flow_screen-to-plans-8232a94f.flow.yaml +33 -0
  51. package/spec/plans/flow_screen-to-tasks-540671d1.flow.yaml +33 -0
  52. package/spec/plans/login.flow.yaml +22 -0
  53. package/spec/plans/owner-operations.flow.yaml +20 -0
  54. package/spec/project_config.yaml +55 -0
  55. package/spec/roles.yaml +30 -0
  56. package/spec/schema.md +394 -0
  57. package/spec/test-case-results.schema.json +62 -0
  58. package/spec/test-cases.schema.json +85 -0
  59. package/spec/ui-parity-audit.schema.json +194 -0
  60. package/spec/ui-reverse-engineering.schema.json +94 -0
  61. package/src/billing/plan-catalog.test.ts +46 -0
  62. package/src/billing/plan-catalog.ts +199 -0
  63. package/src/integrations/aws-sigv4.test.ts +42 -0
  64. package/src/integrations/aws-sigv4.ts +72 -0
  65. package/src/integrations/device-farm.ts +155 -0
  66. package/src/integrations/github-app.test.ts +57 -0
  67. package/src/integrations/github-app.ts +143 -0
  68. package/src/integrations/gitlab.ts +81 -0
  69. package/src/integrations/temp-email.test.ts +123 -0
  70. package/src/integrations/temp-email.ts +175 -0
  71. package/src/integrations/testflight-feedback.test.ts +51 -0
  72. package/src/integrations/testflight-feedback.ts +173 -0
  73. package/src/integrations/webdriver-client.ts +131 -0
  74. package/src/mcp/server.test.ts +1220 -0
  75. package/src/mcp/server.ts +3064 -0
  76. package/src/mcp/write-test-cases.test.ts +287 -0
  77. package/src/registry/api-key-client.ts +39 -0
  78. package/src/registry/control-plane-client.ts +212 -0
  79. package/src/registry/migrations/0001_registry.sql +47 -0
  80. package/src/registry/migrations/0002_device_authorizations.sql +23 -0
  81. package/src/registry/migrations/0003_project_environments.sql +25 -0
  82. package/src/registry/migrations/0004_device_authorization_email.sql +1 -0
  83. package/src/registry/migrations/0005_testing_control_plane.sql +55 -0
  84. package/src/registry/migrations/0006_workspaces.sql +36 -0
  85. package/src/registry/migrations/0007_project_apps.sql +26 -0
  86. package/src/registry/migrations/0008_agent_tasks.sql +30 -0
  87. package/src/registry/migrations/0009_journey_revisions.sql +17 -0
  88. package/src/registry/migrations/0010_agent_task_journey.sql +2 -0
  89. package/src/registry/migrations/0011_run_journey_revision.sql +1 -0
  90. package/src/registry/migrations/0012_canonical_flow_execution.sql +10 -0
  91. package/src/registry/migrations/0013_device_sessions.sql +22 -0
  92. package/src/registry/migrations/0014_agent_task_step.sql +1 -0
  93. package/src/registry/migrations/0015_agent_task_attempts.sql +6 -0
  94. package/src/registry/migrations/0016_github_issue_tracker.sql +54 -0
  95. package/src/registry/migrations/0017_run_targets.sql +7 -0
  96. package/src/registry/migrations/0018_run_fix_from.sql +4 -0
  97. package/src/registry/migrations/0019_workspace_flags.sql +9 -0
  98. package/src/registry/migrations/0020_orgs.sql +40 -0
  99. package/src/registry/migrations/0021_billing_core.sql +58 -0
  100. package/src/registry/migrations/0022_cloud_runners.sql +19 -0
  101. package/src/registry/migrations/0023_signup.sql +4 -0
  102. package/src/registry/migrations/0024_billing.sql +67 -0
  103. package/src/registry/migrations/0025_notifications.sql +47 -0
  104. package/src/registry/migrations/0026_repo_bindings.sql +28 -0
  105. package/src/registry/migrations/0027_feedback.sql +29 -0
  106. package/src/registry/migrations/0028_devices.sql +48 -0
  107. package/src/registry/migrations/0029_sso.sql +31 -0
  108. package/src/registry/migrations/0030_workspace_domains.sql +18 -0
  109. package/src/registry/migrations/0031_gitlab_and_teams.sql +45 -0
  110. package/src/registry/migrations/0032_personas.sql +15 -0
  111. package/src/registry/migrations/0033_bugmole_rename.sql +11 -0
  112. package/src/registry/task-scheduling.test.ts +100 -0
  113. package/src/registry/task-scheduling.ts +80 -0
  114. package/src/registry-worker/ai/platform-model.ts +77 -0
  115. package/src/registry-worker/ai/routes.test.ts +88 -0
  116. package/src/registry-worker/ai/routes.ts +90 -0
  117. package/src/registry-worker/artifacts.test.ts +98 -0
  118. package/src/registry-worker/artifacts.ts +85 -0
  119. package/src/registry-worker/billing/billing-core.test.ts +175 -0
  120. package/src/registry-worker/billing/checkout-routes.ts +209 -0
  121. package/src/registry-worker/billing/enforcement.ts +69 -0
  122. package/src/registry-worker/billing/entitlements.ts +108 -0
  123. package/src/registry-worker/billing/ledger.ts +186 -0
  124. package/src/registry-worker/billing/paypal/api.ts +259 -0
  125. package/src/registry-worker/billing/paypal/client.ts +91 -0
  126. package/src/registry-worker/billing/paypal/provider.ts +143 -0
  127. package/src/registry-worker/billing/paypal.test.ts +466 -0
  128. package/src/registry-worker/billing/provider.ts +114 -0
  129. package/src/registry-worker/billing/routes.ts +66 -0
  130. package/src/registry-worker/billing/subscriptions.ts +780 -0
  131. package/src/registry-worker/billing/thresholds.ts +107 -0
  132. package/src/registry-worker/core.ts +308 -0
  133. package/src/registry-worker/devices/devices.test.ts +185 -0
  134. package/src/registry-worker/devices/policy.ts +71 -0
  135. package/src/registry-worker/devices/routes.ts +453 -0
  136. package/src/registry-worker/domains/domains.test.ts +210 -0
  137. package/src/registry-worker/domains/routes.ts +139 -0
  138. package/src/registry-worker/domains.ts +88 -0
  139. package/src/registry-worker/email/sender.ts +75 -0
  140. package/src/registry-worker/env.d.ts +14716 -0
  141. package/src/registry-worker/features.ts +20 -0
  142. package/src/registry-worker/feedback/feedback.test.ts +230 -0
  143. package/src/registry-worker/feedback/format.ts +148 -0
  144. package/src/registry-worker/feedback/routes.ts +386 -0
  145. package/src/registry-worker/flags.ts +39 -0
  146. package/src/registry-worker/github/checks.test.ts +177 -0
  147. package/src/registry-worker/github/checks.ts +374 -0
  148. package/src/registry-worker/gitlab/checks.test.ts +141 -0
  149. package/src/registry-worker/gitlab/checks.ts +349 -0
  150. package/src/registry-worker/hooks.ts +54 -0
  151. package/src/registry-worker/index.ts +2077 -0
  152. package/src/registry-worker/jobs/index.ts +29 -0
  153. package/src/registry-worker/jobs/retention.ts +68 -0
  154. package/src/registry-worker/mcp/mcp.test.ts +355 -0
  155. package/src/registry-worker/mcp/routes.ts +215 -0
  156. package/src/registry-worker/mcp/token.ts +126 -0
  157. package/src/registry-worker/mcp/tools.ts +563 -0
  158. package/src/registry-worker/notifications/alerts.ts +212 -0
  159. package/src/registry-worker/notifications/notifications.test.ts +298 -0
  160. package/src/registry-worker/notifications/outbox.ts +83 -0
  161. package/src/registry-worker/notifications/routes.ts +280 -0
  162. package/src/registry-worker/notifications/secrets.ts +49 -0
  163. package/src/registry-worker/notifications/slack.ts +96 -0
  164. package/src/registry-worker/notifications/teams.ts +46 -0
  165. package/src/registry-worker/org/audit.ts +116 -0
  166. package/src/registry-worker/org/routes.test.ts +163 -0
  167. package/src/registry-worker/org/routes.ts +302 -0
  168. package/src/registry-worker/personas/personas.test.ts +78 -0
  169. package/src/registry-worker/personas/routes.ts +100 -0
  170. package/src/registry-worker/repo-triggers.ts +20 -0
  171. package/src/registry-worker/routes/index.ts +74 -0
  172. package/src/registry-worker/run-events.ts +24 -0
  173. package/src/registry-worker/runner/dispatch.ts +219 -0
  174. package/src/registry-worker/runner/jobs.ts +43 -0
  175. package/src/registry-worker/runner/metering.ts +82 -0
  176. package/src/registry-worker/runner/policy.ts +59 -0
  177. package/src/registry-worker/runner/routes.ts +171 -0
  178. package/src/registry-worker/runner/runner.test.ts +358 -0
  179. package/src/registry-worker/runner/tokens.ts +93 -0
  180. package/src/registry-worker/runs.test.ts +60 -0
  181. package/src/registry-worker/signup/policy.ts +57 -0
  182. package/src/registry-worker/signup/routes.ts +106 -0
  183. package/src/registry-worker/signup/signup.test.ts +81 -0
  184. package/src/registry-worker/sso/aegis.ts +141 -0
  185. package/src/registry-worker/sso/membership.ts +157 -0
  186. package/src/registry-worker/sso/routes.ts +458 -0
  187. package/src/registry-worker/sso/sso.test.ts +344 -0
  188. package/src/registry-worker/testing/d1-shim.ts +180 -0
  189. package/src/registry-worker/testing/harness.ts +137 -0
  190. package/src/runner-worker/index.ts +108 -0
  191. package/src/runtime/ai-analysis.ts +97 -0
  192. package/src/runtime/ai-exploration.test.ts +32 -0
  193. package/src/runtime/ai-exploration.ts +69 -0
  194. package/src/runtime/ai-repair.ts +74 -0
  195. package/src/runtime/ai-work.test.ts +99 -0
  196. package/src/runtime/android-screen-record.test.ts +75 -0
  197. package/src/runtime/android-screen-record.ts +192 -0
  198. package/src/runtime/app-understanding.test.ts +123 -0
  199. package/src/runtime/app-understanding.ts +201 -0
  200. package/src/runtime/appium-driver.test.ts +179 -0
  201. package/src/runtime/appium-driver.ts +295 -0
  202. package/src/runtime/blocker-resolution.test.ts +113 -0
  203. package/src/runtime/blocker-resolution.ts +111 -0
  204. package/src/runtime/browser-matrix.integration.test.ts +212 -0
  205. package/src/runtime/browser-matrix.test.ts +143 -0
  206. package/src/runtime/browser-matrix.ts +200 -0
  207. package/src/runtime/canonical-flow.test.ts +52 -0
  208. package/src/runtime/config-validate.ts +185 -0
  209. package/src/runtime/continuous-execution.ts +291 -0
  210. package/src/runtime/cursor-applescript.ts +573 -0
  211. package/src/runtime/cursor-cli-driver.test.ts +78 -0
  212. package/src/runtime/cursor-cli-driver.ts +156 -0
  213. package/src/runtime/cursor-driver-example.ts +117 -0
  214. package/src/runtime/cursor-driver-index.ts +65 -0
  215. package/src/runtime/cursor-driver-init.ts +277 -0
  216. package/src/runtime/cursor-driver-run.test.ts +15 -0
  217. package/src/runtime/cursor-driver-run.ts +323 -0
  218. package/src/runtime/cursor-driver.ts +332 -0
  219. package/src/runtime/cursor-llm-example.ts +90 -0
  220. package/src/runtime/cursor-llm.ts +206 -0
  221. package/src/runtime/cursor-mcp-monitor.ts +386 -0
  222. package/src/runtime/device-clouds/browserstack.ts +73 -0
  223. package/src/runtime/device-clouds/device-farm.ts +52 -0
  224. package/src/runtime/device-clouds/index.ts +92 -0
  225. package/src/runtime/device-clouds/kobiton.ts +70 -0
  226. package/src/runtime/device-clouds/targets.ts +44 -0
  227. package/src/runtime/device-clouds/types.ts +62 -0
  228. package/src/runtime/diff-proposal.ts +84 -0
  229. package/src/runtime/discovery-task.test.ts +29 -0
  230. package/src/runtime/discovery-task.ts +284 -0
  231. package/src/runtime/driver-recovery.ts +69 -0
  232. package/src/runtime/driver.ts +79 -0
  233. package/src/runtime/environment.test.ts +104 -0
  234. package/src/runtime/environment.ts +137 -0
  235. package/src/runtime/executor.test.ts +509 -0
  236. package/src/runtime/executor.ts +921 -0
  237. package/src/runtime/explorer.test.ts +101 -0
  238. package/src/runtime/explorer.ts +1013 -0
  239. package/src/runtime/failure-analysis.test.ts +111 -0
  240. package/src/runtime/failure-analysis.ts +272 -0
  241. package/src/runtime/fixtures/fake-maestro.sh +36 -0
  242. package/src/runtime/flow-language.test.ts +268 -0
  243. package/src/runtime/flow-language.ts +414 -0
  244. package/src/runtime/init-wizard.ts +354 -0
  245. package/src/runtime/ios-screen-record.test.ts +68 -0
  246. package/src/runtime/ios-screen-record.ts +155 -0
  247. package/src/runtime/journey-editor.ts +452 -0
  248. package/src/runtime/journey-evidence.test.ts +161 -0
  249. package/src/runtime/journey-evidence.ts +180 -0
  250. package/src/runtime/journey-graph.test.ts +257 -0
  251. package/src/runtime/journey-graph.ts +170 -0
  252. package/src/runtime/legacy-names.ts +32 -0
  253. package/src/runtime/llm-example.ts +105 -0
  254. package/src/runtime/llm.ts +527 -0
  255. package/src/runtime/local-browser.test.ts +45 -0
  256. package/src/runtime/local-browser.ts +48 -0
  257. package/src/runtime/local-registry-stub.test.ts +325 -0
  258. package/src/runtime/local-registry-stub.ts +803 -0
  259. package/src/runtime/maestro-driver.test.ts +84 -0
  260. package/src/runtime/maestro-driver.ts +209 -0
  261. package/src/runtime/mole-voice.ts +21 -0
  262. package/src/runtime/nav-crawl.test.ts +100 -0
  263. package/src/runtime/nav-crawl.ts +153 -0
  264. package/src/runtime/pipeline.test.ts +405 -0
  265. package/src/runtime/pipeline.ts +833 -0
  266. package/src/runtime/planner.test.ts +37 -0
  267. package/src/runtime/planner.ts +274 -0
  268. package/src/runtime/platform-ai.ts +76 -0
  269. package/src/runtime/playwright-driver.test.ts +93 -0
  270. package/src/runtime/playwright-driver.ts +620 -0
  271. package/src/runtime/project-spec.ts +140 -0
  272. package/src/runtime/record-run-verdicts.ts +68 -0
  273. package/src/runtime/reporter.test.ts +56 -0
  274. package/src/runtime/reporter.ts +158 -0
  275. package/src/runtime/reset.test.ts +44 -0
  276. package/src/runtime/reset.ts +61 -0
  277. package/src/runtime/reviewer.test.ts +73 -0
  278. package/src/runtime/reviewer.ts +158 -0
  279. package/src/runtime/run-job.ts +136 -0
  280. package/src/runtime/run-once.test.ts +207 -0
  281. package/src/runtime/run-once.ts +168 -0
  282. package/src/runtime/run.ts +132 -0
  283. package/src/runtime/screen-recording.ts +34 -0
  284. package/src/runtime/serve-gateway.test.ts +74 -0
  285. package/src/runtime/serve-gateway.ts +164 -0
  286. package/src/runtime/serve-worker.test.ts +23 -0
  287. package/src/runtime/serve-worker.ts +278 -0
  288. package/src/runtime/site-discovery.test.ts +168 -0
  289. package/src/runtime/site-discovery.ts +308 -0
  290. package/src/runtime/target-runner.ts +144 -0
  291. package/src/runtime/test-case-verdicts.test.ts +94 -0
  292. package/src/runtime/test-case-verdicts.ts +120 -0
  293. package/src/runtime/ui-reverse-engineering/coordinator.test.ts +59 -0
  294. package/src/runtime/ui-reverse-engineering/coordinator.ts +391 -0
  295. package/src/runtime/ui-reverse-engineering/types.ts +197 -0
  296. package/src/runtime/web-suite.test.ts +97 -0
  297. package/src/runtime/web-suite.ts +176 -0
  298. package/src/storage/create-object-store.ts +144 -0
  299. package/src/storage/keys.ts +34 -0
  300. package/src/storage/local-artifact-server.test.ts +314 -0
  301. package/src/storage/local-artifact-server.ts +357 -0
  302. package/src/storage/object-store.test.ts +28 -0
  303. package/src/storage/object-store.ts +101 -0
  304. package/src/storage/registry-object-store.ts +88 -0
  305. package/src/storage/remote-object-store.ts +104 -0
  306. package/src/storage/storage-directory.test.ts +43 -0
  307. package/src/storage/storage-directory.ts +24 -0
  308. package/tsconfig.json +24 -0
@@ -0,0 +1,123 @@
1
+ version: 2
2
+ id: flow_manage-to-plans-64c3c61b
3
+ name: "Journey: Open Manage → Open Plans"
4
+ description: >
5
+ Executable plan for flow:manage-to-plans-64c3c61b (revision 3) derived from
6
+ grounded test case assumptions in flow-manage-to-plans-64c3c61b.json.
7
+ Covers the resource management hub at /manage, sidebar Test plans navigation,
8
+ the Test plans coverage workspace, plan selection, run start behavior, and
9
+ unauthenticated redirect.
10
+ driver: playwright
11
+ platform: web
12
+ target:
13
+ base_url: http://localhost:3020
14
+ flow: flows/flow_manage-to-plans-64c3c61b.yaml
15
+ recovery:
16
+ enabled: false
17
+ max_attempts: 1
18
+ timeout_ms: 30000
19
+ journey_revision: 3
20
+ case_set_id: flow-manage-to-plans-64c3c61b
21
+ suites:
22
+ - id: default
23
+ runs: on_demand
24
+ journeys:
25
+ - id: flow:manage-to-plans-64c3c61b
26
+ actor: user
27
+ goal: "Open /manage hub and navigate to Test plans workspace"
28
+ capabilities_required:
29
+ - auth.login
30
+ preconditions:
31
+ - Aegis-authenticated dashboard session is active (sign in through dashboard OAuth)
32
+ - Local QA dashboard is running at http://localhost:3020
33
+ - Actor user is defined in roles.yaml with project membership
34
+ - Project context bugmole is selected (?project=bugmole) for full plans panel data
35
+ steps:
36
+ - node_id: screen:/manage
37
+ case_id: TC-MANAGE-ENTRANCE
38
+ action: navigate:/manage
39
+ proofs:
40
+ - type: dom
41
+ expects: "visible:.auth-eyebrow[text*='RESOURCE MANAGEMENT']"
42
+ - type: dom
43
+ expects: "visible:.auth-title[text='Manage Bugmole']"
44
+ - type: dom
45
+ expects: "visible:a.management-hub-card[href='/manage/workspaces']"
46
+ - type: dom
47
+ expects: "visible:a.management-hub-card[href='/manage/projects']"
48
+ - type: dom
49
+ expects: "visible:a.management-hub-card[href='/manage/apps']"
50
+ - type: dom
51
+ expects: "visible:a.management-hub-card[href='/manage/environments']"
52
+ - type: dom
53
+ expects: "visible:a.auth-back[href='/'][text*='Back to dashboard']"
54
+ - type: navigation
55
+ expects: screen:/manage
56
+ - node_id: screen:/manage
57
+ case_id: TC-MANAGE-NAV-PLANS
58
+ edge_id: screen:/manage->screen:/plans:dom-1
59
+ action: navigate:Test plans
60
+ proofs:
61
+ - type: navigation
62
+ expects: screen:/plans
63
+ - type: dom
64
+ expects: "visible:nav a[href='/plans'][aria-current='page']"
65
+ - type: dom
66
+ expects: "visible:h1[text='Coverage, as paths.']"
67
+ - type: dom
68
+ expects: "visible:section#plans.panel:not(.route-panel-hidden)"
69
+ - node_id: screen:/plans
70
+ case_id: TC-PLANS-GOAL
71
+ action: verify:plans-workspace
72
+ proofs:
73
+ - type: dom
74
+ expects: "visible:h1[text='Coverage, as paths.']"
75
+ - type: dom
76
+ expects: "visible:section#plans .panel-heading[text*='Test plans']"
77
+ - type: dom
78
+ expects: "visible:section#plans .plan-list"
79
+ - type: dom
80
+ expects: "screen source: apps/qa/src/app/plans/page.tsx section=plans"
81
+ - node_id: screen:/plans
82
+ case_id: TC-PLANS-SELECT-PLAN
83
+ action: verify:plan-selection
84
+ proofs:
85
+ - type: dom
86
+ expects: "visible:button.plan-row"
87
+ - type: interaction
88
+ expects: "click:button.plan-row → aria-pressed='true'"
89
+ - type: dom
90
+ expects: "visible:button.plan-start-button:not([disabled])"
91
+ - node_id: screen:/plans
92
+ case_id: TC-PLANS-START-BLOCKED
93
+ action: verify:start-plan-queue
94
+ proofs:
95
+ - type: network
96
+ expects: "POST /api/projects/bugmole/runs → 201 queued"
97
+ - type: dom
98
+ expects: "optional:panel-foot warns when no bugmole serve worker connected"
99
+ variants:
100
+ - id: unauthenticated_plans_redirect
101
+ case_id: TC-PLANS-AUTH-REDIRECT
102
+ preconditions:
103
+ - Aegis session cookie is cleared or absent
104
+ steps:
105
+ - node_id: screen:/plans
106
+ action: navigate:/plans
107
+ proofs:
108
+ - type: navigation
109
+ expects: screen:/login
110
+ - type: dom
111
+ expects: "screen source: apps/qa/src/app/login/page.tsx"
112
+ - id: plans_direct_load
113
+ case_id: TC-PLANS-GOAL-direct
114
+ preconditions:
115
+ - Authenticated session active
116
+ steps:
117
+ - node_id: screen:/plans
118
+ action: navigate:/plans?project=bugmole
119
+ proofs:
120
+ - type: dom
121
+ expects: "visible:h1[text='Coverage, as paths.']"
122
+ - type: dom
123
+ expects: "visible:section#plans .plan-list"
@@ -0,0 +1,106 @@
1
+ version: 2
2
+ id: flow_manage-to-screen-6857f915
3
+ name: "Journey: Open Manage → Open the app"
4
+ description: >
5
+ Executable plan for flow:manage-to-screen-6857f915 (revision 1) derived from
6
+ grounded test case assumptions in flow-manage-to-screen-6857f915.json.
7
+ Covers the resource-management hub at /manage, hub-card navigation targets,
8
+ sign-out affordance, and the back-to-dashboard journey transition to /.
9
+ driver: maestro
10
+ platform: web
11
+ target:
12
+ base_url: http://localhost:3020
13
+ flow: null
14
+ recovery:
15
+ enabled: false
16
+ max_attempts: 1
17
+ timeout_ms: 30000
18
+ journey_revision: 1
19
+ case_set_id: flow-manage-to-screen-6857f915
20
+ suites:
21
+ - id: default
22
+ runs: on_demand
23
+ journeys:
24
+ - id: flow:manage-to-screen-6857f915
25
+ actor: user
26
+ goal: "Open /manage hub and return to dashboard home via ← Back to dashboard"
27
+ capabilities_required:
28
+ - auth.login
29
+ preconditions:
30
+ - Aegis-authenticated dashboard session is active (sign in through dashboard OAuth)
31
+ - Local QA dashboard is running at http://localhost:3020
32
+ - Actor user is defined in roles.yaml with project membership
33
+ steps:
34
+ - node_id: screen:/manage
35
+ case_id: TC-manage-hub-renders
36
+ action: navigate:/manage
37
+ proofs:
38
+ - type: dom
39
+ expects: "visible:.auth-eyebrow[text*='RESOURCE MANAGEMENT']"
40
+ - type: dom
41
+ expects: "visible:.auth-title[text='Manage Bugmole']"
42
+ - type: dom
43
+ expects: "visible:.management-hub-card[href='/manage/workspaces']"
44
+ - type: dom
45
+ expects: "visible:.management-hub-card[href='/manage/projects']"
46
+ - type: dom
47
+ expects: "visible:.management-hub-card[href='/manage/environments']"
48
+ - type: dom
49
+ expects: "visible:.qa-header"
50
+ - node_id: screen:/manage
51
+ case_id: TC-manage-workspaces-card
52
+ action: inspect:hub-card-workspaces
53
+ proofs:
54
+ - type: dom
55
+ expects: "visible:a.management-hub-card[href='/manage/workspaces'] strong[text='Workspaces']"
56
+ - node_id: screen:/manage
57
+ case_id: TC-manage-projects-card
58
+ action: inspect:hub-card-projects
59
+ proofs:
60
+ - type: dom
61
+ expects: "visible:a.management-hub-card[href='/manage/projects'] strong[text='Projects']"
62
+ - node_id: screen:/manage
63
+ case_id: TC-manage-environments-card
64
+ action: inspect:hub-card-environments
65
+ proofs:
66
+ - type: dom
67
+ expects: "visible:a.management-hub-card[href='/manage/environments'] strong[text='Environments']"
68
+ - node_id: screen:/manage
69
+ case_id: TC-manage-sign-out-link
70
+ action: inspect:sign-out-link
71
+ proofs:
72
+ - type: dom
73
+ expects: "visible:a.auth-link[href='/logout'][text='Sign out']"
74
+ - node_id: screen:/manage
75
+ case_id: TC-manage-back-to-dashboard
76
+ action: navigate:/
77
+ proofs:
78
+ - type: navigation
79
+ expects: screen:/
80
+ - type: dom
81
+ expects: "screen source: src/app/page.tsx via dashboard-route overview"
82
+ - node_id: screen:/
83
+ case_id: TC-dashboard-home-overview
84
+ action: verify:overview
85
+ proofs:
86
+ - type: dom
87
+ expects: "visible:.qa-header"
88
+ - type: dom
89
+ expects: "visible:nav a[href='/']"
90
+ - type: dom
91
+ expects: "visible:nav a[href='/plans']"
92
+ - type: dom
93
+ expects: "visible:nav a[href='/tasks']"
94
+ variants:
95
+ - id: unauthenticated_redirect
96
+ case_id: TC-dashboard-auth-redirect
97
+ preconditions:
98
+ - Aegis session cookie is cleared or absent
99
+ steps:
100
+ - node_id: screen:/
101
+ action: navigate:/
102
+ proofs:
103
+ - type: navigation
104
+ expects: screen:/login
105
+ - type: dom
106
+ expects: "screen source: src/app/login/page.tsx"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_manage-to-tasks-c5791c95
3
+ name: "Journey: flow:manage-to-tasks-c5791c95"
4
+ description: Generated plan for journey flow:manage-to-tasks-c5791c95 with actor user
5
+ driver: maestro
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:manage-to-tasks-c5791c95
20
+ actor: user
21
+ goal: "Complete journey: flow:manage-to-tasks-c5791c95"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/manage
28
+ action: navigate:Agent tasks
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/tasks
32
+ - type: dom
33
+ expects: "screen source: rendered-dom"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_profile-to-screen-6045aa3d
3
+ name: "Journey: flow:profile-to-screen-6045aa3d"
4
+ description: Generated plan for journey flow:profile-to-screen-6045aa3d with actor user
5
+ driver: maestro
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:profile-to-screen-6045aa3d
20
+ actor: user
21
+ goal: "Complete journey: flow:profile-to-screen-6045aa3d"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/profile
28
+ action: navigate:/
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/
32
+ - type: dom
33
+ expects: "screen source: discovered application code"
@@ -0,0 +1,34 @@
1
+ version: 2
2
+ id: flow_register-to-api-auth-login-460a9cc8
3
+ name: "Journey: flow:register-to-api-auth-login-460a9cc8"
4
+ description: Generated plan for journey flow:register-to-api-auth-login-460a9cc8
5
+ with actor user
6
+ driver: maestro
7
+ platform: web
8
+ target:
9
+ base_url: http://localhost:3020
10
+ flow: null
11
+ recovery:
12
+ enabled: false
13
+ max_attempts: 1
14
+ timeout_ms: 30000
15
+ journey_revision: 3
16
+ suites:
17
+ - id: default
18
+ runs: on_demand
19
+ journeys:
20
+ - id: flow:register-to-api-auth-login-460a9cc8
21
+ actor: user
22
+ goal: "Complete journey: flow:register-to-api-auth-login-460a9cc8"
23
+ capabilities_required: []
24
+ preconditions:
25
+ - Test tenant / sandbox is active
26
+ - Actor account exists
27
+ steps:
28
+ - node_id: screen:/register
29
+ action: navigate:Re-authenticate with Aegis for this project
30
+ proofs:
31
+ - type: navigation
32
+ expects: screen:/api/auth/login
33
+ - type: dom
34
+ expects: "screen source: discovered application code"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_screen-to-audits-07666356
3
+ name: "Journey: flow:screen-to-audits-07666356"
4
+ description: Generated plan for journey flow:screen-to-audits-07666356 with actor user
5
+ driver: playwright
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:screen-to-audits-07666356
20
+ actor: user
21
+ goal: "Complete journey: flow:screen-to-audits-07666356"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/
28
+ action: navigate:App Audit
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/audits
32
+ - type: dom
33
+ expects: "screen source: discovered application code"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_screen-to-blockers-091d258b
3
+ name: "Journey: flow:screen-to-blockers-091d258b"
4
+ description: Generated plan for journey flow:screen-to-blockers-091d258b with actor user
5
+ driver: maestro
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:screen-to-blockers-091d258b
20
+ actor: user
21
+ goal: "Complete journey: flow:screen-to-blockers-091d258b"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/
28
+ action: navigate:Blockers
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/blockers
32
+ - type: dom
33
+ expects: "screen source: runtime-verified"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_screen-to-devices-cad72f75
3
+ name: "Journey: flow:screen-to-devices-cad72f75"
4
+ description: Generated plan for journey flow:screen-to-devices-cad72f75 with actor user
5
+ driver: playwright
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:screen-to-devices-cad72f75
20
+ actor: user
21
+ goal: "Complete journey: flow:screen-to-devices-cad72f75"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/
28
+ action: navigate:Devices
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/devices
32
+ - type: dom
33
+ expects: "screen source: rendered-dom"
@@ -0,0 +1,126 @@
1
+ version: 2
2
+ id: flow_screen-to-evidence-6c3ab309
3
+ name: "Journey: Open the app → Open Evidence"
4
+ description: >
5
+ Executable plan for flow:screen-to-evidence-6c3ab309 (revision 2) derived from
6
+ grounded test case assumptions in flow-screen-to-evidence-6c3ab309.json and
7
+ App UI audit flow-screen-to-evidence-6c3ab309 (62 controls audited across
8
+ overview, App Audit, and evidence routes). Key finding: /evidence mounts
9
+ section=audits so the dedicated screenshot evidence list is hidden until fixed.
10
+ driver: playwright
11
+ platform: web
12
+ target:
13
+ base_url: http://localhost:3020
14
+ flow: flows/flow_screen-to-evidence-6c3ab309.yaml
15
+ recovery:
16
+ enabled: false
17
+ max_attempts: 1
18
+ timeout_ms: 30000
19
+ journey_revision: 2
20
+ case_set_id: flow-screen-to-evidence-6c3ab309
21
+ suites:
22
+ - id: default
23
+ runs: on_demand
24
+ journeys:
25
+ - id: flow:screen-to-evidence-6c3ab309
26
+ actor: user
27
+ goal: "Navigate overview → App Audit → Open screenshot evidence at /evidence"
28
+ capabilities_required:
29
+ - auth.login
30
+ preconditions:
31
+ - Aegis-authenticated dashboard session is active (sign in through dashboard OAuth)
32
+ - Local QA dashboard is running at http://localhost:3020
33
+ - Actor user is defined in roles.yaml with project membership
34
+ - Project context bugmole is selected (?project=bugmole)
35
+ steps:
36
+ - node_id: screen:/
37
+ case_id: TC-overview-renders
38
+ action: navigate:/
39
+ proofs:
40
+ - type: dom
41
+ expects: "visible:h1[text='Quality, as a flow.']"
42
+ - type: dom
43
+ expects: "visible:.qa-header"
44
+ - type: dom
45
+ expects: "visible:nav a[href*='/audits']"
46
+ - type: navigation
47
+ expects: screen:/
48
+ - node_id: screen:/
49
+ case_id: TC-overview-to-app-audit
50
+ edge_id: screen:/->screen:/audits:dom-4
51
+ action: navigate:/audits
52
+ proofs:
53
+ - type: navigation
54
+ expects: screen:/audits
55
+ - type: dom
56
+ expects: "visible:h1[text='Every control, accounted for.']"
57
+ - type: dom
58
+ expects: "visible:.evidence-summary"
59
+ - type: dom
60
+ expects: "visible:a.text-link[href*='/evidence'][text*='Open screenshot evidence']"
61
+ - node_id: screen:/audits
62
+ case_id: TC-audits-workspace-renders
63
+ action: verify:app-audit-panel
64
+ proofs:
65
+ - type: dom
66
+ expects: "visible:.panel.evidence-panel"
67
+ - type: dom
68
+ expects: "visible:.run-summary strong"
69
+ - type: dom
70
+ expects: "screen source: apps/qa/src/app/audits/page.tsx section=audits"
71
+ - node_id: screen:/audits
72
+ case_id: TC-audits-to-evidence-link
73
+ edge_id: screen:/audits->screen:/evidence:dom-7
74
+ action: click:open-screenshot-evidence
75
+ proofs:
76
+ - type: navigation
77
+ expects: screen:/evidence
78
+ - type: dom
79
+ expects: "url contains /evidence?project=bugmole"
80
+ - type: dom
81
+ expects: "visible:.evidence-summary"
82
+ - node_id: screen:/evidence
83
+ case_id: TC-evidence-route-section-bug
84
+ action: verify:evidence-section-regression
85
+ proofs:
86
+ - type: dom
87
+ expects: "visible:.evidence-summary"
88
+ - type: dom
89
+ expects: "absent:.evidence-list .evidence-row"
90
+ - type: dom
91
+ expects: "absent:a.text-link[text*='Browse all test cases']"
92
+ - type: dom
93
+ expects: "screen source: apps/qa/src/app/evidence/page.tsx section=audits"
94
+ variants:
95
+ - id: unauthenticated_redirect
96
+ case_id: TC-dashboard-auth-redirect
97
+ preconditions:
98
+ - Aegis session cookie is cleared or absent
99
+ steps:
100
+ - node_id: screen:/
101
+ action: navigate:/
102
+ proofs:
103
+ - type: navigation
104
+ expects: screen:/login
105
+ - type: dom
106
+ expects: "screen source: src/app/login/page.tsx"
107
+ - id: evidence_list_after_section_fix
108
+ case_id: TC-evidence-list-blocked
109
+ preconditions:
110
+ - apps/qa/src/app/evidence/page.tsx passes section='evidence'
111
+ - bugmole serve handoff provides local screenshot artifacts for project bugmole
112
+ steps:
113
+ - node_id: screen:/evidence
114
+ action: navigate:/evidence
115
+ proofs:
116
+ - type: dom
117
+ expects: "visible:.evidence-list .evidence-row"
118
+ - type: dom
119
+ expects: "visible:a.text-link[href*='/plans'][text*='Browse all test cases']"
120
+ - node_id: screen:/evidence
121
+ action: click:first-evidence-row
122
+ proofs:
123
+ - type: dom
124
+ expects: "visible:.evidence-modal"
125
+ - type: dom
126
+ expects: "visible:button.close-button"
@@ -0,0 +1,34 @@
1
+ version: 2
2
+ id: flow_screen-to-parity-issues-2218e3ad
3
+ name: "Journey: flow:screen-to-parity-issues-2218e3ad"
4
+ description: Generated plan for journey flow:screen-to-parity-issues-2218e3ad
5
+ with actor user
6
+ driver: maestro
7
+ platform: web
8
+ target:
9
+ base_url: http://localhost:3020
10
+ flow: null
11
+ recovery:
12
+ enabled: false
13
+ max_attempts: 1
14
+ timeout_ms: 30000
15
+ journey_revision: 2
16
+ suites:
17
+ - id: default
18
+ runs: on_demand
19
+ journeys:
20
+ - id: flow:screen-to-parity-issues-2218e3ad
21
+ actor: user
22
+ goal: "Complete journey: flow:screen-to-parity-issues-2218e3ad"
23
+ capabilities_required: []
24
+ preconditions:
25
+ - Test tenant / sandbox is active
26
+ - Actor account exists
27
+ steps:
28
+ - node_id: screen:/
29
+ action: navigate:Parity bugs
30
+ proofs:
31
+ - type: navigation
32
+ expects: screen:/parity/issues
33
+ - type: dom
34
+ expects: "screen source: rendered-dom"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_screen-to-plans-8232a94f
3
+ name: "Journey: flow:screen-to-plans-8232a94f"
4
+ description: Generated plan for journey flow:screen-to-plans-8232a94f with actor user
5
+ driver: maestro
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 3
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:screen-to-plans-8232a94f
20
+ actor: user
21
+ goal: "Complete journey: flow:screen-to-plans-8232a94f"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/
28
+ action: navigate:Test plans
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/plans
32
+ - type: dom
33
+ expects: "screen source: discovered application code"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_screen-to-tasks-540671d1
3
+ name: "Journey: flow:screen-to-tasks-540671d1"
4
+ description: Generated plan for journey flow:screen-to-tasks-540671d1 with actor user
5
+ driver: maestro
6
+ platform: web
7
+ target:
8
+ base_url: http://localhost:3020
9
+ flow: null
10
+ recovery:
11
+ enabled: false
12
+ max_attempts: 1
13
+ timeout_ms: 30000
14
+ journey_revision: 2
15
+ suites:
16
+ - id: default
17
+ runs: on_demand
18
+ journeys:
19
+ - id: flow:screen-to-tasks-540671d1
20
+ actor: user
21
+ goal: "Complete journey: flow:screen-to-tasks-540671d1"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/
28
+ action: navigate:Agent tasks
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/tasks
32
+ - type: dom
33
+ expects: "screen source: rendered-dom"
@@ -0,0 +1,22 @@
1
+ version: 1
2
+ id: login
3
+ name: "Journey: login"
4
+ description: Generated plan for journey login with actor public_customer
5
+ suites:
6
+ - id: default
7
+ runs: on_demand
8
+ journeys:
9
+ - id: login
10
+ actor: public_customer
11
+ goal: "Complete journey: login"
12
+ capabilities_required: []
13
+ preconditions:
14
+ - Test tenant / sandbox is active
15
+ - Actor account exists
16
+ steps:
17
+ - action: navigate:/api/auth/login
18
+ proofs:
19
+ - type: navigation
20
+ expects: screen:/api/auth/login
21
+ - type: dom
22
+ expects: "screen source: src/app/login/page.tsx"