@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,79 @@
1
+ # Bugmole MCP Blockers Specification for Arion Rent
2
+ # Defines setup states and interruptions QA agents should treat carefully.
3
+
4
+ blockers:
5
+ - name: supabase_schema_missing
6
+ type: setup_state
7
+ description: The page shows a setup warning when the Supabase project has credentials but app tables are missing.
8
+ selectors:
9
+ - "[data-testid='setup-warning']"
10
+ - "[role='alert']"
11
+ resolution:
12
+ strategy: document_and_continue
13
+ steps:
14
+ - capture_screenshot
15
+ - log: "Supabase schema is not ready; verify that the page does not crash."
16
+ hard_stop: false
17
+ on_encounter: record_setup_gap
18
+
19
+ - name: owner_write_form_disabled
20
+ type: expected_disabled_state
21
+ description: Owner write forms are disabled when the schema or runtime configuration is missing.
22
+ selectors:
23
+ - "form [disabled]"
24
+ - "button[disabled]"
25
+ resolution:
26
+ strategy: verify_disabled_state
27
+ steps:
28
+ - capture_screenshot
29
+ - log: "Owner write form disabled as expected."
30
+ hard_stop: false
31
+
32
+ - name: payment_record_missing
33
+ type: data_state
34
+ description: The sample payment page handles an unknown paymentId or a missing booking_payments table.
35
+ selectors:
36
+ - "[role='alert']"
37
+ - "[data-testid='payment-error']"
38
+ resolution:
39
+ strategy: document_and_continue
40
+ steps:
41
+ - capture_screenshot
42
+ - log: "The payment page handles the data error clearly."
43
+ hard_stop: false
44
+
45
+ - name: destructive_confirmation
46
+ type: dialog
47
+ description: QA does not confirm destructive operations on persistent data without explicit instruction.
48
+ selectors:
49
+ - "[role='dialog'][aria-label*='confirm']"
50
+ - "[data-testid='confirmation-dialog']"
51
+ resolution:
52
+ strategy: hard_stop_and_report
53
+ steps:
54
+ - capture_screenshot
55
+ - log: "Stop before destructive confirmation."
56
+ hard_stop: true
57
+ on_encounter: fail_test
58
+
59
+ - name: secret_value_requested
60
+ type: policy
61
+ description: Do not read or print secret values from .env, service-role keys, webhook secrets, or LLM keys.
62
+ selectors: []
63
+ resolution:
64
+ strategy: refuse_secret_output
65
+ steps:
66
+ - log: "Only confirm whether a secret is present; never print its value."
67
+ hard_stop: true
68
+ on_encounter: fail_test
69
+
70
+ hard_stops:
71
+ - name: production_data_mutation
72
+ description: Stop if a QA flow is about to seed or write production/persistent Supabase data without confirmation.
73
+ condition: "environment == production OR target_database == persistent"
74
+ action: "fail_test_with_message Production or persistent data mutation needs explicit confirmation"
75
+
76
+ - name: secret_output
77
+ description: Stop if a step would print a local secret or server-only credential.
78
+ condition: "action == print_secret OR path matches .env"
79
+ action: "fail_test_with_message Secret output is not allowed"
@@ -0,0 +1,42 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "bugs": [],
4
+ "metadata": {
5
+ "created_at": "2025-01-27T00:00:00Z",
6
+ "last_updated": "2025-01-27T00:00:00Z",
7
+ "total_bugs": 0,
8
+ "severity_distribution": {
9
+ "critical": 0,
10
+ "high": 0,
11
+ "medium": 0,
12
+ "low": 0
13
+ },
14
+ "status_distribution": {
15
+ "open": 0,
16
+ "in_progress": 0,
17
+ "resolved": 0,
18
+ "closed": 0
19
+ }
20
+ },
21
+ "categories": {
22
+ "public_booking": [],
23
+ "payments": [],
24
+ "owner_dashboard": [],
25
+ "documents": [],
26
+ "tracking": [],
27
+ "finance": [],
28
+ "supabase_setup": [],
29
+ "data_integrity": [],
30
+ "ui_ux": [],
31
+ "performance": [],
32
+ "api": []
33
+ },
34
+ "tags": [],
35
+ "filters": {
36
+ "by_severity": {},
37
+ "by_status": {},
38
+ "by_category": {},
39
+ "by_journey": {},
40
+ "by_role": {}
41
+ }
42
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://app.bugmole.com/schemas/design-dna.schema.json",
4
+ "title": "Bugmole Project Design DNA",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schemaVersion", "revision", "projectId", "spacing", "radii", "elevation", "colors", "motion", "iconography", "typography"],
8
+ "properties": {
9
+ "schemaVersion": { "const": 1 },
10
+ "revision": { "type": "integer", "minimum": 1 },
11
+ "projectId": { "type": "string", "minLength": 1 },
12
+ "spacing": { "$ref": "#/$defs/tokens" },
13
+ "radii": { "$ref": "#/$defs/tokens" },
14
+ "elevation": { "$ref": "#/$defs/tokens" },
15
+ "colors": { "$ref": "#/$defs/tokens" },
16
+ "motion": { "$ref": "#/$defs/tokens" },
17
+ "iconography": { "$ref": "#/$defs/tokens" },
18
+ "typography": { "$ref": "#/$defs/tokens" },
19
+ "metadata": { "type": "object" }
20
+ },
21
+ "$defs": {
22
+ "tokens": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "object",
26
+ "required": ["id", "value", "provenance", "confidence"],
27
+ "properties": {
28
+ "id": { "type": "string" },
29
+ "value": {},
30
+ "aliases": { "type": "array", "items": { "type": "string" } },
31
+ "provenance": { "type": "array" },
32
+ "confidence": { "enum": ["high", "medium", "low", "blocked"] },
33
+ "locked": { "type": "boolean" }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,24 @@
1
+ domain_rules:
2
+ - name: vietnamese_only_user_copy
3
+ description: Rental-app UI, metadata, setup/error states, labels, and payment instructions stay in Vietnamese; the standalone QA framework UI and documentation are English.
4
+ rule: "Rental-app user-facing text must be Vietnamese; QA framework surfaces must be English. Code identifiers and storage enums may remain English."
5
+
6
+ - name: supabase_missing_schema_handling
7
+ description: App must not crash when Supabase credentials exist but app tables have not been migrated.
8
+ rule: "Public and owner pages show setup/error states, and owner write forms remain disabled when required schema is missing."
9
+
10
+ - name: private_storage
11
+ description: Identity, vehicle, intake, template and booking document files remain private.
12
+ rule: "Private files are served through server-side signed URL flows, not broad anonymous Storage policies."
13
+
14
+ - name: payment_provider_boundary
15
+ description: Current real payment mode is Vietnam bank QR/manual transfer.
16
+ rule: "Payment pages show bank transfer instructions without exposing server-only webhook or service-role secrets."
17
+
18
+ - name: om_tracking_secret_headers
19
+ description: OM/GPS webhook accepts current and compatibility secret headers when configured.
20
+ rule: "POST /api/tracking/om accepts x-arion-om-secret, bearer token, and compatibility x-arion-webhook-secret only when the configured secret matches."
21
+
22
+ - name: screenshot_evidence_manifest
23
+ description: Browser evidence is manifest-backed.
24
+ rule: "Screenshots live under qa/screenshots and the current manifest lives at qa/browser-evidence.json."
@@ -0,0 +1,8 @@
1
+ url: http://localhost:3020/plans?project=bugmole
2
+ ---
3
+ - launchApp
4
+ - assertVisible: "Coverage, as paths."
5
+ - assertVisible: "Test plans"
6
+ - tapOn: "Journey: flow:manage-to-plans-64c3c61b"
7
+ - assertVisible: "Run tests"
8
+ - tapOn: "Run tests"
@@ -0,0 +1,7 @@
1
+ url: http://localhost:3020/?project=bugmole
2
+ ---
3
+ - launchApp
4
+ - assertVisible: "Quality, as a flow."
5
+ - tapOn: "App Audit"
6
+ - assertVisible: "Every control, accounted for."
7
+ - tapOn: "Open screenshot evidence"
@@ -0,0 +1,126 @@
1
+ # Journey Graph - Arion Rent MVP Routes and User Journeys
2
+ # Keep this aligned with ../../QA_TEST_PLAN.md and qa/browser-evidence.json.
3
+
4
+ journeys:
5
+ - id: "marketing-entry"
6
+ name: "Marketing Entry"
7
+ description: "Customer visits the Arion Rent landing page and starts the booking flow."
8
+ screens:
9
+ - path: "/"
10
+ component: "LandingPage"
11
+ type: "marketing"
12
+ actions:
13
+ - type: "navigate"
14
+ target: "/book"
15
+
16
+ - id: "public-booking"
17
+ name: "Public Booking"
18
+ description: "Customer views vehicles, checks rental dates, submits a booking request, and views deposit payment instructions."
19
+ screens:
20
+ - path: "/book"
21
+ component: "PublicBookingPage"
22
+ type: "list"
23
+ - path: "/book/[vehicleId]"
24
+ component: "VehicleBookingPage"
25
+ type: "form"
26
+ - path: "/book/requested"
27
+ component: "BookingRequestedPage"
28
+ type: "confirmation"
29
+ - path: "/book/payments/[paymentId]"
30
+ component: "BookingPaymentPage"
31
+ type: "payment"
32
+ actions:
33
+ - type: "filter_availability"
34
+ - type: "preview_quote"
35
+ - type: "request_booking"
36
+ - type: "view_bank_transfer_instructions"
37
+
38
+ - id: "owner-operations"
39
+ name: "Owner Operations"
40
+ description: "Owner navigates the dashboard, calendar, bookings, vehicles, customers, documents, income and expenses, and tracking."
41
+ screens:
42
+ - path: "/owner#overview"
43
+ component: "OwnerDashboard"
44
+ type: "dashboard"
45
+ - path: "/owner#calendar"
46
+ component: "OwnerCalendarSection"
47
+ type: "schedule"
48
+ - path: "/owner#orders"
49
+ component: "OwnerOrdersSection"
50
+ type: "list"
51
+ - path: "/owner#vehicles"
52
+ component: "OwnerVehiclesSection"
53
+ type: "list"
54
+ - path: "/owner#customers"
55
+ component: "OwnerCustomersSection"
56
+ type: "list"
57
+ - path: "/owner#create-booking"
58
+ component: "OwnerCreateBookingSection"
59
+ type: "form"
60
+ - path: "/owner#documents"
61
+ component: "OwnerDocumentsSection"
62
+ type: "documents"
63
+ - path: "/owner#income-expense"
64
+ component: "OwnerIncomeExpenseSection"
65
+ type: "finance"
66
+ - path: "/owner#tracking"
67
+ component: "OwnerTrackingSection"
68
+ type: "tracking"
69
+ actions:
70
+ - type: "verify_setup_warning_when_schema_missing"
71
+ - type: "verify_write_forms_disabled_when_schema_missing"
72
+ - type: "capture_section_screenshots"
73
+
74
+ - id: "finance-reporting"
75
+ name: "Finance Reporting"
76
+ description: "Owner views ROI, CAC, cash flow, vehicle loans, and forecasts using typed sample data."
77
+ screens:
78
+ - path: "/owner/reports"
79
+ component: "OwnerReportsPage"
80
+ type: "report"
81
+ actions:
82
+ - type: "verify_report_cards"
83
+ - type: "verify_finance_calculations"
84
+
85
+ - id: "webhooks"
86
+ name: "Webhook Contracts"
87
+ description: "Verify payment and OM/GPS tracking webhook contracts without exposing secrets."
88
+ screens:
89
+ - path: "/api/payments/webhook"
90
+ component: "PaymentWebhookRoute"
91
+ type: "api"
92
+ - path: "/api/tracking/om"
93
+ component: "OmTrackingWebhookRoute"
94
+ type: "api"
95
+ actions:
96
+ - type: "validate_payment_webhook_secret_header"
97
+ - type: "validate_om_tracking_secret_headers"
98
+ - type: "verify_normalized_tracking_events"
99
+
100
+ screens:
101
+ - path: "/"
102
+ type: "marketing"
103
+ - path: "/book"
104
+ type: "public"
105
+ - path: "/book/[vehicleId]"
106
+ type: "public"
107
+ - path: "/book/requested"
108
+ type: "public"
109
+ - path: "/book/payments/[paymentId]"
110
+ type: "public"
111
+ - path: "/owner"
112
+ type: "owner"
113
+ - path: "/owner/reports"
114
+ type: "owner"
115
+ - path: "/api/payments/webhook"
116
+ type: "api"
117
+ - path: "/api/tracking/om"
118
+ type: "api"
119
+
120
+ navigation_groups:
121
+ - id: "public_booking"
122
+ items: ["landing", "book", "requested", "payment"]
123
+ - id: "owner_admin"
124
+ items: ["overview", "calendar", "orders", "vehicles", "customers", "documents", "tracking"]
125
+ - id: "finance"
126
+ items: ["income_expense", "reports"]