@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,20 @@
1
+ version: 1
2
+ id: dashboard-smoke
3
+ name: "Journey: dashboard-smoke"
4
+ description: Generated plan for journey dashboard-smoke with actor qa-agent
5
+ suites:
6
+ - id: default
7
+ runs: on_demand
8
+ journeys:
9
+ - id: dashboard-smoke
10
+ actor: qa-agent
11
+ goal: "Complete journey: dashboard-smoke"
12
+ capabilities_required: []
13
+ preconditions:
14
+ - Test tenant / sandbox is active
15
+ - Actor account exists
16
+ steps:
17
+ - action: auth.login
18
+ proofs:
19
+ - type: navigation
20
+ expects: screen:dashboard
@@ -0,0 +1,99 @@
1
+ version: 1
2
+ id: example.core
3
+ name: Example Core Journeys
4
+ description: >
5
+ Example plan file showing the structure of a journey plan.
6
+ Replace this with your application's actual core journeys.
7
+
8
+ TEMPLATE: This is a domain-agnostic example. Adapt the journey steps,
9
+ actions, and proofs to match your application's actual workflows.
10
+
11
+ suites:
12
+ - id: daily_core
13
+ runs: daily
14
+ journeys:
15
+ # Example: Basic happy-path journey
16
+ - id: user.login.create_content.view_content.logout
17
+ actor: user
18
+ goal: "Complete a basic content creation workflow from start to finish"
19
+ capabilities_required:
20
+ - auth.login
21
+ - content.create
22
+ - content.view
23
+ - auth.logout
24
+ preconditions:
25
+ - "Test tenant / sandbox is active"
26
+ - "Test user account exists (watermarked or in test data)"
27
+ - "Application is accessible and responsive"
28
+ steps:
29
+ - action: auth.login
30
+ proofs:
31
+ - type: navigation
32
+ expects: "screen:dashboard"
33
+ - action: content.create
34
+ proofs:
35
+ - type: navigation
36
+ expects: "screen:content_editor"
37
+ - action: content.fill_form
38
+ params:
39
+ title: "Test Content"
40
+ body: "Test body text"
41
+ proofs:
42
+ - type: dom
43
+ expects: "visible:[data-testid='content-title'][value='Test Content']"
44
+ - action: content.submit
45
+ proofs:
46
+ - type: network
47
+ expects: "POST /api/content status 200"
48
+ - type: dom
49
+ expects: "content_status == PUBLISHED"
50
+ - action: content.view
51
+ proofs:
52
+ - type: navigation
53
+ expects: "screen:content_view"
54
+ - type: dom
55
+ expects: "visible:[data-testid='content-title'][text='Test Content']"
56
+ - action: auth.logout
57
+ proofs:
58
+ - type: navigation
59
+ expects: "screen:login"
60
+
61
+ # Example: Negative case - permission denied
62
+ - id: viewer.cannot_create_content
63
+ actor: viewer
64
+ goal: "Verify that viewers cannot create content"
65
+ capabilities_required:
66
+ - auth.login
67
+ - content.view
68
+ preconditions:
69
+ - "Viewer account exists"
70
+ - "Viewer is logged in"
71
+ steps:
72
+ - action: content.create
73
+ expected_outcome: blocked
74
+ proofs:
75
+ - type: dom
76
+ expects: "visible:[data-testid='error-message'][text*='permission']"
77
+ - type: navigation
78
+ expects: "screen != content_editor"
79
+
80
+ # Example: Variant with different preconditions
81
+ - id: admin.can_override_restrictions
82
+ actor: admin
83
+ goal: "Verify admin can override restrictions"
84
+ capabilities_required:
85
+ - auth.login
86
+ - admin.override_restrictions
87
+ - content.create
88
+ variants:
89
+ - id: admin_override_when_restricted
90
+ preconditions:
91
+ - "Content creation is restricted for standard users"
92
+ - "Admin account exists"
93
+ steps:
94
+ - action: content.create
95
+ proofs:
96
+ - type: navigation
97
+ expects: "screen:content_editor"
98
+ - type: dom
99
+ expects: "visible:[data-testid='admin-override-badge']"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_api-keys-to-logout-7396cd5d
3
+ name: "Journey: flow:api-keys-to-logout-7396cd5d"
4
+ description: Generated plan for journey flow:api-keys-to-logout-7396cd5d 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:api-keys-to-logout-7396cd5d
20
+ actor: user
21
+ goal: "Complete journey: flow:api-keys-to-logout-7396cd5d"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/api-keys
28
+ action: navigate:/logout
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/logout
32
+ - type: dom
33
+ expects: "screen source: src/app/api-keys/page.tsx"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_api-keys-to-screen-157e10a6
3
+ name: "Journey: flow:api-keys-to-screen-157e10a6"
4
+ description: Generated plan for journey flow:api-keys-to-screen-157e10a6 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:api-keys-to-screen-157e10a6
20
+ actor: user
21
+ goal: "Complete journey: flow:api-keys-to-screen-157e10a6"
22
+ capabilities_required: []
23
+ preconditions:
24
+ - Test tenant / sandbox is active
25
+ - Actor account exists
26
+ steps:
27
+ - node_id: screen:/api-keys
28
+ action: navigate:/
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/
32
+ - type: dom
33
+ expects: "screen source: src/app/api-keys/page.tsx"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_manage-to-audits-176c1eb8
3
+ name: "Journey: flow:manage-to-audits-176c1eb8"
4
+ description: Generated plan for journey flow:manage-to-audits-176c1eb8 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-audits-176c1eb8
20
+ actor: user
21
+ goal: "Complete journey: flow:manage-to-audits-176c1eb8"
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:App Audit
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/audits
32
+ - type: dom
33
+ expects: "screen source: runtime-verified"
@@ -0,0 +1,112 @@
1
+ version: 2
2
+ id: flow_manage-to-blockers-633282c8
3
+ name: "Journey: Open Manage → Open Blockers"
4
+ description: >
5
+ Executable plan for flow:manage-to-blockers-633282c8 (revision 1) derived from
6
+ grounded test case assumptions in flow-manage-to-blockers-633282c8.json.
7
+ Covers the resource management hub at /manage, sidebar Blockers navigation,
8
+ and the blockers catalog panels on /blockers.
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-blockers-633282c8
20
+ suites:
21
+ - id: default
22
+ runs: on_demand
23
+ journeys:
24
+ - id: flow:manage-to-blockers-633282c8
25
+ actor: user
26
+ goal: "Open /manage hub and navigate to blockers via sidebar"
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
+ - Project context bugmole is selected (?project=bugmole) for full blockers panel data
34
+ steps:
35
+ - node_id: screen:/manage
36
+ case_id: TC-MANAGE-ENTRANCE
37
+ action: navigate:/manage
38
+ proofs:
39
+ - type: dom
40
+ expects: "visible:.auth-eyebrow[text*='RESOURCE MANAGEMENT']"
41
+ - type: dom
42
+ expects: "visible:.auth-title[text='Manage Bugmole']"
43
+ - type: dom
44
+ expects: "visible:a.management-hub-card[href='/manage/workspaces']"
45
+ - type: dom
46
+ expects: "visible:a.management-hub-card[href='/manage/projects']"
47
+ - type: dom
48
+ expects: "visible:a.management-hub-card[href='/manage/apps']"
49
+ - type: dom
50
+ expects: "visible:a.management-hub-card[href='/manage/environments']"
51
+ - type: dom
52
+ expects: "visible:a.auth-back[href='/'][text*='Back to dashboard']"
53
+ - type: navigation
54
+ expects: screen:/manage
55
+ - node_id: screen:/manage
56
+ case_id: TC-MANAGE-NAV-BLOCKERS
57
+ edge_id: screen:/manage->screen:/blockers:dom-6
58
+ action: navigate:Blockers
59
+ proofs:
60
+ - type: navigation
61
+ expects: screen:/blockers
62
+ - type: dom
63
+ expects: "visible:nav a[href='/blockers'][aria-current='page']"
64
+ - type: dom
65
+ expects: "visible:h1[text='What is gating the graph.']"
66
+ - node_id: screen:/blockers
67
+ case_id: TC-BLOCKERS-GOAL
68
+ action: verify:blockers-panels
69
+ proofs:
70
+ - type: dom
71
+ expects: "visible:#blockers.panel"
72
+ - type: dom
73
+ expects: "visible:#blockers .eyebrow[text='Hard stops']"
74
+ - type: dom
75
+ expects: "visible:#blockers h2[text='The run ends here']"
76
+ - type: dom
77
+ expects: "visible:#blockers-documented.panel"
78
+ - type: dom
79
+ expects: "visible:#blockers-documented .eyebrow[text='Documented and continued']"
80
+ - type: dom
81
+ expects: "visible:#blockers-documented h2[text='Setup and data states']"
82
+ - type: dom
83
+ expects: "visible:#blockers .panel-foot[text*='spec/blockers.yaml']"
84
+ - type: dom
85
+ expects: "screen source: apps/qa/src/app/blockers/page.tsx section=blockers"
86
+ variants:
87
+ - id: unauthenticated_manage_redirect
88
+ case_id: TC-manage-auth-redirect
89
+ preconditions:
90
+ - Aegis session cookie is cleared or absent
91
+ steps:
92
+ - node_id: screen:/manage
93
+ action: navigate:/manage
94
+ proofs:
95
+ - type: navigation
96
+ expects: screen:/login
97
+ - type: dom
98
+ expects: "screen source: apps/qa/src/app/login/page.tsx"
99
+ - id: blockers_direct_load
100
+ case_id: TC-BLOCKERS-GOAL-direct
101
+ preconditions:
102
+ - Authenticated session active
103
+ steps:
104
+ - node_id: screen:/blockers
105
+ action: navigate:/blockers?project=bugmole
106
+ proofs:
107
+ - type: dom
108
+ expects: "visible:h1[text='What is gating the graph.']"
109
+ - type: dom
110
+ expects: "visible:#blockers"
111
+ - type: dom
112
+ expects: "visible:#blockers-documented"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_manage-to-devices-ad57e202
3
+ name: "Journey: flow:manage-to-devices-ad57e202"
4
+ description: Generated plan for journey flow:manage-to-devices-ad57e202 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-devices-ad57e202
20
+ actor: user
21
+ goal: "Complete journey: flow:manage-to-devices-ad57e202"
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:Devices
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/devices
32
+ - type: dom
33
+ expects: "screen source: rendered-dom"
@@ -0,0 +1,33 @@
1
+ version: 2
2
+ id: flow_manage-to-logout-86c54656
3
+ name: "Journey: flow:manage-to-logout-86c54656"
4
+ description: Generated plan for journey flow:manage-to-logout-86c54656 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-logout-86c54656
20
+ actor: user
21
+ goal: "Complete journey: flow:manage-to-logout-86c54656"
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:/logout
29
+ proofs:
30
+ - type: navigation
31
+ expects: screen:/logout
32
+ - type: dom
33
+ expects: "screen source: src/app/manage/page.tsx"
@@ -0,0 +1,185 @@
1
+ version: 2
2
+ id: flow_manage-to-manage-resource-action-6325f99a
3
+ name: "Journey: Open Manage → Open resource management"
4
+ description: >
5
+ Executable plan for flow:manage-to-manage-resource-action-6325f99a (revision 3) derived from
6
+ grounded test case assumptions in flow-manage-to-manage-resource-action-6325f99a.json.
7
+ Covers the resource management hub at /manage, hub-card navigation to workspaces/projects/apps/environments,
8
+ resource list screens, back-to-hub navigation, and unauthenticated redirect.
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: 3
19
+ case_set_id: flow-manage-to-manage-resource-action-6325f99a
20
+ suites:
21
+ - id: default
22
+ runs: on_demand
23
+ journeys:
24
+ - id: flow:manage-to-manage-resource-action-6325f99a
25
+ actor: user
26
+ goal: "Open /manage hub and navigate to resource management list pages"
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:a.management-hub-card[href='/manage/workspaces']"
44
+ - type: dom
45
+ expects: "visible:a.management-hub-card[href='/manage/projects']"
46
+ - type: dom
47
+ expects: "visible:a.management-hub-card[href='/manage/apps']"
48
+ - type: dom
49
+ expects: "visible:a.management-hub-card[href='/manage/environments']"
50
+ - type: dom
51
+ expects: "visible:.qa-header"
52
+ - type: navigation
53
+ expects: screen:/manage
54
+ - node_id: screen:/manage
55
+ case_id: TC-manage-workspaces-nav
56
+ edge_id: screen:/manage->screen:/manage/:resource/:[...action]:1
57
+ action: navigate:/manage/workspaces
58
+ proofs:
59
+ - type: navigation
60
+ expects: screen:/manage/:resource/:[...action]
61
+ - type: dom
62
+ expects: "visible:.auth-eyebrow[text='WORKSPACES']"
63
+ - type: dom
64
+ expects: "visible:a.auth-back[href='/manage'][text*='Resource management']"
65
+ - type: network
66
+ expects: "GET /manage/workspaces → 200"
67
+ - node_id: screen:/manage/:resource/:[...action]
68
+ case_id: TC-resource-workspaces-list
69
+ action: verify:workspaces-list
70
+ proofs:
71
+ - type: dom
72
+ expects: "visible:.management-table-header"
73
+ - type: dom
74
+ expects: "visible:a.auth-button[href='/manage/workspaces/new']"
75
+ - type: network
76
+ expects: "GET /api/workspaces → 200"
77
+ - node_id: screen:/manage/:resource/:[...action]
78
+ case_id: TC-resource-back-to-hub
79
+ action: navigate:/manage
80
+ proofs:
81
+ - type: navigation
82
+ expects: screen:/manage
83
+ - type: dom
84
+ expects: "visible:.auth-title[text='Manage Bugmole']"
85
+ variants:
86
+ - id: projects_hub_nav
87
+ case_id: TC-manage-projects-nav
88
+ preconditions:
89
+ - Authenticated session active
90
+ steps:
91
+ - node_id: screen:/manage
92
+ action: navigate:/manage/projects
93
+ proofs:
94
+ - type: navigation
95
+ expects: screen:/manage/:resource/:[...action]
96
+ - type: dom
97
+ expects: "visible:.auth-eyebrow[text='PROJECTS']"
98
+ - type: dom
99
+ expects: "visible:label.auth-label:has-text('Workspace')"
100
+ - type: network
101
+ expects: "GET /manage/projects → 200"
102
+ - node_id: screen:/manage/:resource/:[...action]
103
+ case_id: TC-resource-projects-list
104
+ action: verify:projects-list
105
+ proofs:
106
+ - type: dom
107
+ expects: "visible:.management-table-header"
108
+ - type: network
109
+ expects: "GET /api/projects → 200"
110
+ - id: apps_hub_nav
111
+ case_id: TC-manage-apps-nav
112
+ preconditions:
113
+ - Authenticated session active
114
+ - Project context bugmole selected (?project=bugmole)
115
+ steps:
116
+ - node_id: screen:/manage
117
+ action: navigate:/manage/apps
118
+ proofs:
119
+ - type: navigation
120
+ expects: screen:/manage/:resource/:[...action]
121
+ - type: dom
122
+ expects: "visible:.auth-eyebrow[text='APPS']"
123
+ - type: dom
124
+ expects: "visible:label.auth-label:has-text('Project')"
125
+ - type: network
126
+ expects: "GET /manage/apps → 200"
127
+ - node_id: screen:/manage/:resource/:[...action]
128
+ case_id: TC-resource-apps-list
129
+ action: verify:apps-list
130
+ proofs:
131
+ - type: dom
132
+ expects: "visible:.management-table-header"
133
+ - type: dom
134
+ expects: "visible:a.table-action[href*='/manage/apps/'][href*='/edit']"
135
+ - id: environments_hub_nav
136
+ case_id: TC-manage-environments-nav
137
+ preconditions:
138
+ - Authenticated session active
139
+ - Project context bugmole selected (?project=bugmole)
140
+ steps:
141
+ - node_id: screen:/manage
142
+ action: navigate:/manage/environments
143
+ proofs:
144
+ - type: navigation
145
+ expects: screen:/manage/:resource/:[...action]
146
+ - type: dom
147
+ expects: "visible:.auth-eyebrow[text='ENVIRONMENTS']"
148
+ - type: dom
149
+ expects: "visible:label.auth-label:has-text('Project')"
150
+ - type: network
151
+ expects: "GET /manage/environments → 200"
152
+ - node_id: screen:/manage/:resource/:[...action]
153
+ case_id: TC-resource-environments-list
154
+ action: verify:environments-list
155
+ proofs:
156
+ - type: dom
157
+ expects: "visible:.management-table-header"
158
+ - type: dom
159
+ expects: "visible:a.table-action[href*='/manage/environments/'][href*='/edit']"
160
+ - id: unauthenticated_manage_redirect
161
+ case_id: TC-manage-auth-gate
162
+ preconditions:
163
+ - Aegis session cookie is cleared or absent
164
+ steps:
165
+ - node_id: screen:/manage
166
+ action: navigate:/manage
167
+ proofs:
168
+ - type: navigation
169
+ expects: screen:/login
170
+ - type: dom
171
+ expects: "screen source: apps/qa/src/app/login/page.tsx"
172
+ - id: create_workspace_form
173
+ case_id: TC-resource-create-nav
174
+ preconditions:
175
+ - Authenticated session active
176
+ steps:
177
+ - node_id: screen:/manage/:resource/:[...action]
178
+ action: navigate:/manage/workspaces/new
179
+ proofs:
180
+ - type: navigation
181
+ expects: screen:/manage/:resource/:[...action]
182
+ - type: dom
183
+ expects: "visible:h2[text*='Create workspace']"
184
+ - type: dom
185
+ expects: "visible:input[placeholder*='Workspace ID'], label:has-text('Workspace ID')"
@@ -0,0 +1,34 @@
1
+ version: 2
2
+ id: flow_manage-to-parity-issues-01fa2579
3
+ name: "Journey: flow:manage-to-parity-issues-01fa2579"
4
+ description: Generated plan for journey flow:manage-to-parity-issues-01fa2579
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:manage-to-parity-issues-01fa2579
21
+ actor: user
22
+ goal: "Complete journey: flow:manage-to-parity-issues-01fa2579"
23
+ capabilities_required: []
24
+ preconditions:
25
+ - Test tenant / sandbox is active
26
+ - Actor account exists
27
+ steps:
28
+ - node_id: screen:/manage
29
+ action: navigate:Parity bugs
30
+ proofs:
31
+ - type: navigation
32
+ expects: screen:/parity/issues
33
+ - type: dom
34
+ expects: "screen source: runtime-verified"