@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.
- package/.bugmole.env.example +20 -0
- package/LICENSE +7 -0
- package/README.md +293 -0
- package/TESTING.md +117 -0
- package/bugmole.config.yaml +39 -0
- package/package.json +85 -0
- package/scripts/billing/paypal-setup.mjs +121 -0
- package/scripts/bugmole-continue.ts +318 -0
- package/scripts/bugmole-init.ts +188 -0
- package/scripts/bugmole.cjs +17 -0
- package/scripts/bugmole.test.ts +344 -0
- package/scripts/bugmole.ts +657 -0
- package/scripts/ensure-maestro.cjs +79 -0
- package/scripts/ios-tunnel-keeper.sh +45 -0
- package/scripts/ios-wda-keeper.sh +66 -0
- package/scripts/sync-plan-catalog.d.mts +3 -0
- package/scripts/sync-plan-catalog.mjs +16 -0
- package/scripts/ui-parity-diff.py +65 -0
- package/scripts/ui-parity-requirements.txt +1 -0
- package/scripts/verify-manage-to-plans.mts +194 -0
- package/spec/app-ui-audit.schema.json +176 -0
- package/spec/blockers.yaml +79 -0
- package/spec/bugs.index.json +42 -0
- package/spec/design-dna.schema.json +38 -0
- package/spec/domain_rules.yaml +24 -0
- package/spec/flows/flow_manage-to-plans-64c3c61b.yaml +8 -0
- package/spec/flows/flow_screen-to-evidence-6c3ab309.yaml +7 -0
- package/spec/journey_graph.yaml +126 -0
- package/spec/journeys.graph.json +2618 -0
- package/spec/plans/dashboard-smoke.flow.yaml +20 -0
- package/spec/plans/example.flow.yaml +99 -0
- package/spec/plans/flow_api-keys-to-logout-7396cd5d.flow.yaml +33 -0
- package/spec/plans/flow_api-keys-to-screen-157e10a6.flow.yaml +33 -0
- package/spec/plans/flow_manage-to-audits-176c1eb8.flow.yaml +33 -0
- package/spec/plans/flow_manage-to-blockers-633282c8.flow.yaml +112 -0
- package/spec/plans/flow_manage-to-devices-ad57e202.flow.yaml +33 -0
- package/spec/plans/flow_manage-to-logout-86c54656.flow.yaml +33 -0
- package/spec/plans/flow_manage-to-manage-resource-action-6325f99a.flow.yaml +185 -0
- package/spec/plans/flow_manage-to-parity-issues-01fa2579.flow.yaml +34 -0
- package/spec/plans/flow_manage-to-plans-64c3c61b.flow.yaml +123 -0
- package/spec/plans/flow_manage-to-screen-6857f915.flow.yaml +106 -0
- package/spec/plans/flow_manage-to-tasks-c5791c95.flow.yaml +33 -0
- package/spec/plans/flow_profile-to-screen-6045aa3d.flow.yaml +33 -0
- package/spec/plans/flow_register-to-api-auth-login-460a9cc8.flow.yaml +34 -0
- package/spec/plans/flow_screen-to-audits-07666356.flow.yaml +33 -0
- package/spec/plans/flow_screen-to-blockers-091d258b.flow.yaml +33 -0
- package/spec/plans/flow_screen-to-devices-cad72f75.flow.yaml +33 -0
- package/spec/plans/flow_screen-to-evidence-6c3ab309.flow.yaml +126 -0
- package/spec/plans/flow_screen-to-parity-issues-2218e3ad.flow.yaml +34 -0
- package/spec/plans/flow_screen-to-plans-8232a94f.flow.yaml +33 -0
- package/spec/plans/flow_screen-to-tasks-540671d1.flow.yaml +33 -0
- package/spec/plans/login.flow.yaml +22 -0
- package/spec/plans/owner-operations.flow.yaml +20 -0
- package/spec/project_config.yaml +55 -0
- package/spec/roles.yaml +30 -0
- package/spec/schema.md +394 -0
- package/spec/test-case-results.schema.json +62 -0
- package/spec/test-cases.schema.json +85 -0
- package/spec/ui-parity-audit.schema.json +194 -0
- package/spec/ui-reverse-engineering.schema.json +94 -0
- package/src/billing/plan-catalog.test.ts +46 -0
- package/src/billing/plan-catalog.ts +199 -0
- package/src/integrations/aws-sigv4.test.ts +42 -0
- package/src/integrations/aws-sigv4.ts +72 -0
- package/src/integrations/device-farm.ts +155 -0
- package/src/integrations/github-app.test.ts +57 -0
- package/src/integrations/github-app.ts +143 -0
- package/src/integrations/gitlab.ts +81 -0
- package/src/integrations/temp-email.test.ts +123 -0
- package/src/integrations/temp-email.ts +175 -0
- package/src/integrations/testflight-feedback.test.ts +51 -0
- package/src/integrations/testflight-feedback.ts +173 -0
- package/src/integrations/webdriver-client.ts +131 -0
- package/src/mcp/server.test.ts +1220 -0
- package/src/mcp/server.ts +3064 -0
- package/src/mcp/write-test-cases.test.ts +287 -0
- package/src/registry/api-key-client.ts +39 -0
- package/src/registry/control-plane-client.ts +212 -0
- package/src/registry/migrations/0001_registry.sql +47 -0
- package/src/registry/migrations/0002_device_authorizations.sql +23 -0
- package/src/registry/migrations/0003_project_environments.sql +25 -0
- package/src/registry/migrations/0004_device_authorization_email.sql +1 -0
- package/src/registry/migrations/0005_testing_control_plane.sql +55 -0
- package/src/registry/migrations/0006_workspaces.sql +36 -0
- package/src/registry/migrations/0007_project_apps.sql +26 -0
- package/src/registry/migrations/0008_agent_tasks.sql +30 -0
- package/src/registry/migrations/0009_journey_revisions.sql +17 -0
- package/src/registry/migrations/0010_agent_task_journey.sql +2 -0
- package/src/registry/migrations/0011_run_journey_revision.sql +1 -0
- package/src/registry/migrations/0012_canonical_flow_execution.sql +10 -0
- package/src/registry/migrations/0013_device_sessions.sql +22 -0
- package/src/registry/migrations/0014_agent_task_step.sql +1 -0
- package/src/registry/migrations/0015_agent_task_attempts.sql +6 -0
- package/src/registry/migrations/0016_github_issue_tracker.sql +54 -0
- package/src/registry/migrations/0017_run_targets.sql +7 -0
- package/src/registry/migrations/0018_run_fix_from.sql +4 -0
- package/src/registry/migrations/0019_workspace_flags.sql +9 -0
- package/src/registry/migrations/0020_orgs.sql +40 -0
- package/src/registry/migrations/0021_billing_core.sql +58 -0
- package/src/registry/migrations/0022_cloud_runners.sql +19 -0
- package/src/registry/migrations/0023_signup.sql +4 -0
- package/src/registry/migrations/0024_billing.sql +67 -0
- package/src/registry/migrations/0025_notifications.sql +47 -0
- package/src/registry/migrations/0026_repo_bindings.sql +28 -0
- package/src/registry/migrations/0027_feedback.sql +29 -0
- package/src/registry/migrations/0028_devices.sql +48 -0
- package/src/registry/migrations/0029_sso.sql +31 -0
- package/src/registry/migrations/0030_workspace_domains.sql +18 -0
- package/src/registry/migrations/0031_gitlab_and_teams.sql +45 -0
- package/src/registry/migrations/0032_personas.sql +15 -0
- package/src/registry/migrations/0033_bugmole_rename.sql +11 -0
- package/src/registry/task-scheduling.test.ts +100 -0
- package/src/registry/task-scheduling.ts +80 -0
- package/src/registry-worker/ai/platform-model.ts +77 -0
- package/src/registry-worker/ai/routes.test.ts +88 -0
- package/src/registry-worker/ai/routes.ts +90 -0
- package/src/registry-worker/artifacts.test.ts +98 -0
- package/src/registry-worker/artifacts.ts +85 -0
- package/src/registry-worker/billing/billing-core.test.ts +175 -0
- package/src/registry-worker/billing/checkout-routes.ts +209 -0
- package/src/registry-worker/billing/enforcement.ts +69 -0
- package/src/registry-worker/billing/entitlements.ts +108 -0
- package/src/registry-worker/billing/ledger.ts +186 -0
- package/src/registry-worker/billing/paypal/api.ts +259 -0
- package/src/registry-worker/billing/paypal/client.ts +91 -0
- package/src/registry-worker/billing/paypal/provider.ts +143 -0
- package/src/registry-worker/billing/paypal.test.ts +466 -0
- package/src/registry-worker/billing/provider.ts +114 -0
- package/src/registry-worker/billing/routes.ts +66 -0
- package/src/registry-worker/billing/subscriptions.ts +780 -0
- package/src/registry-worker/billing/thresholds.ts +107 -0
- package/src/registry-worker/core.ts +308 -0
- package/src/registry-worker/devices/devices.test.ts +185 -0
- package/src/registry-worker/devices/policy.ts +71 -0
- package/src/registry-worker/devices/routes.ts +453 -0
- package/src/registry-worker/domains/domains.test.ts +210 -0
- package/src/registry-worker/domains/routes.ts +139 -0
- package/src/registry-worker/domains.ts +88 -0
- package/src/registry-worker/email/sender.ts +75 -0
- package/src/registry-worker/env.d.ts +14716 -0
- package/src/registry-worker/features.ts +20 -0
- package/src/registry-worker/feedback/feedback.test.ts +230 -0
- package/src/registry-worker/feedback/format.ts +148 -0
- package/src/registry-worker/feedback/routes.ts +386 -0
- package/src/registry-worker/flags.ts +39 -0
- package/src/registry-worker/github/checks.test.ts +177 -0
- package/src/registry-worker/github/checks.ts +374 -0
- package/src/registry-worker/gitlab/checks.test.ts +141 -0
- package/src/registry-worker/gitlab/checks.ts +349 -0
- package/src/registry-worker/hooks.ts +54 -0
- package/src/registry-worker/index.ts +2077 -0
- package/src/registry-worker/jobs/index.ts +29 -0
- package/src/registry-worker/jobs/retention.ts +68 -0
- package/src/registry-worker/mcp/mcp.test.ts +355 -0
- package/src/registry-worker/mcp/routes.ts +215 -0
- package/src/registry-worker/mcp/token.ts +126 -0
- package/src/registry-worker/mcp/tools.ts +563 -0
- package/src/registry-worker/notifications/alerts.ts +212 -0
- package/src/registry-worker/notifications/notifications.test.ts +298 -0
- package/src/registry-worker/notifications/outbox.ts +83 -0
- package/src/registry-worker/notifications/routes.ts +280 -0
- package/src/registry-worker/notifications/secrets.ts +49 -0
- package/src/registry-worker/notifications/slack.ts +96 -0
- package/src/registry-worker/notifications/teams.ts +46 -0
- package/src/registry-worker/org/audit.ts +116 -0
- package/src/registry-worker/org/routes.test.ts +163 -0
- package/src/registry-worker/org/routes.ts +302 -0
- package/src/registry-worker/personas/personas.test.ts +78 -0
- package/src/registry-worker/personas/routes.ts +100 -0
- package/src/registry-worker/repo-triggers.ts +20 -0
- package/src/registry-worker/routes/index.ts +74 -0
- package/src/registry-worker/run-events.ts +24 -0
- package/src/registry-worker/runner/dispatch.ts +219 -0
- package/src/registry-worker/runner/jobs.ts +43 -0
- package/src/registry-worker/runner/metering.ts +82 -0
- package/src/registry-worker/runner/policy.ts +59 -0
- package/src/registry-worker/runner/routes.ts +171 -0
- package/src/registry-worker/runner/runner.test.ts +358 -0
- package/src/registry-worker/runner/tokens.ts +93 -0
- package/src/registry-worker/runs.test.ts +60 -0
- package/src/registry-worker/signup/policy.ts +57 -0
- package/src/registry-worker/signup/routes.ts +106 -0
- package/src/registry-worker/signup/signup.test.ts +81 -0
- package/src/registry-worker/sso/aegis.ts +141 -0
- package/src/registry-worker/sso/membership.ts +157 -0
- package/src/registry-worker/sso/routes.ts +458 -0
- package/src/registry-worker/sso/sso.test.ts +344 -0
- package/src/registry-worker/testing/d1-shim.ts +180 -0
- package/src/registry-worker/testing/harness.ts +137 -0
- package/src/runner-worker/index.ts +108 -0
- package/src/runtime/ai-analysis.ts +97 -0
- package/src/runtime/ai-exploration.test.ts +32 -0
- package/src/runtime/ai-exploration.ts +69 -0
- package/src/runtime/ai-repair.ts +74 -0
- package/src/runtime/ai-work.test.ts +99 -0
- package/src/runtime/android-screen-record.test.ts +75 -0
- package/src/runtime/android-screen-record.ts +192 -0
- package/src/runtime/app-understanding.test.ts +123 -0
- package/src/runtime/app-understanding.ts +201 -0
- package/src/runtime/appium-driver.test.ts +179 -0
- package/src/runtime/appium-driver.ts +295 -0
- package/src/runtime/blocker-resolution.test.ts +113 -0
- package/src/runtime/blocker-resolution.ts +111 -0
- package/src/runtime/browser-matrix.integration.test.ts +212 -0
- package/src/runtime/browser-matrix.test.ts +143 -0
- package/src/runtime/browser-matrix.ts +200 -0
- package/src/runtime/canonical-flow.test.ts +52 -0
- package/src/runtime/config-validate.ts +185 -0
- package/src/runtime/continuous-execution.ts +291 -0
- package/src/runtime/cursor-applescript.ts +573 -0
- package/src/runtime/cursor-cli-driver.test.ts +78 -0
- package/src/runtime/cursor-cli-driver.ts +156 -0
- package/src/runtime/cursor-driver-example.ts +117 -0
- package/src/runtime/cursor-driver-index.ts +65 -0
- package/src/runtime/cursor-driver-init.ts +277 -0
- package/src/runtime/cursor-driver-run.test.ts +15 -0
- package/src/runtime/cursor-driver-run.ts +323 -0
- package/src/runtime/cursor-driver.ts +332 -0
- package/src/runtime/cursor-llm-example.ts +90 -0
- package/src/runtime/cursor-llm.ts +206 -0
- package/src/runtime/cursor-mcp-monitor.ts +386 -0
- package/src/runtime/device-clouds/browserstack.ts +73 -0
- package/src/runtime/device-clouds/device-farm.ts +52 -0
- package/src/runtime/device-clouds/index.ts +92 -0
- package/src/runtime/device-clouds/kobiton.ts +70 -0
- package/src/runtime/device-clouds/targets.ts +44 -0
- package/src/runtime/device-clouds/types.ts +62 -0
- package/src/runtime/diff-proposal.ts +84 -0
- package/src/runtime/discovery-task.test.ts +29 -0
- package/src/runtime/discovery-task.ts +284 -0
- package/src/runtime/driver-recovery.ts +69 -0
- package/src/runtime/driver.ts +79 -0
- package/src/runtime/environment.test.ts +104 -0
- package/src/runtime/environment.ts +137 -0
- package/src/runtime/executor.test.ts +509 -0
- package/src/runtime/executor.ts +921 -0
- package/src/runtime/explorer.test.ts +101 -0
- package/src/runtime/explorer.ts +1013 -0
- package/src/runtime/failure-analysis.test.ts +111 -0
- package/src/runtime/failure-analysis.ts +272 -0
- package/src/runtime/fixtures/fake-maestro.sh +36 -0
- package/src/runtime/flow-language.test.ts +268 -0
- package/src/runtime/flow-language.ts +414 -0
- package/src/runtime/init-wizard.ts +354 -0
- package/src/runtime/ios-screen-record.test.ts +68 -0
- package/src/runtime/ios-screen-record.ts +155 -0
- package/src/runtime/journey-editor.ts +452 -0
- package/src/runtime/journey-evidence.test.ts +161 -0
- package/src/runtime/journey-evidence.ts +180 -0
- package/src/runtime/journey-graph.test.ts +257 -0
- package/src/runtime/journey-graph.ts +170 -0
- package/src/runtime/legacy-names.ts +32 -0
- package/src/runtime/llm-example.ts +105 -0
- package/src/runtime/llm.ts +527 -0
- package/src/runtime/local-browser.test.ts +45 -0
- package/src/runtime/local-browser.ts +48 -0
- package/src/runtime/local-registry-stub.test.ts +325 -0
- package/src/runtime/local-registry-stub.ts +803 -0
- package/src/runtime/maestro-driver.test.ts +84 -0
- package/src/runtime/maestro-driver.ts +209 -0
- package/src/runtime/mole-voice.ts +21 -0
- package/src/runtime/nav-crawl.test.ts +100 -0
- package/src/runtime/nav-crawl.ts +153 -0
- package/src/runtime/pipeline.test.ts +405 -0
- package/src/runtime/pipeline.ts +833 -0
- package/src/runtime/planner.test.ts +37 -0
- package/src/runtime/planner.ts +274 -0
- package/src/runtime/platform-ai.ts +76 -0
- package/src/runtime/playwright-driver.test.ts +93 -0
- package/src/runtime/playwright-driver.ts +620 -0
- package/src/runtime/project-spec.ts +140 -0
- package/src/runtime/record-run-verdicts.ts +68 -0
- package/src/runtime/reporter.test.ts +56 -0
- package/src/runtime/reporter.ts +158 -0
- package/src/runtime/reset.test.ts +44 -0
- package/src/runtime/reset.ts +61 -0
- package/src/runtime/reviewer.test.ts +73 -0
- package/src/runtime/reviewer.ts +158 -0
- package/src/runtime/run-job.ts +136 -0
- package/src/runtime/run-once.test.ts +207 -0
- package/src/runtime/run-once.ts +168 -0
- package/src/runtime/run.ts +132 -0
- package/src/runtime/screen-recording.ts +34 -0
- package/src/runtime/serve-gateway.test.ts +74 -0
- package/src/runtime/serve-gateway.ts +164 -0
- package/src/runtime/serve-worker.test.ts +23 -0
- package/src/runtime/serve-worker.ts +278 -0
- package/src/runtime/site-discovery.test.ts +168 -0
- package/src/runtime/site-discovery.ts +308 -0
- package/src/runtime/target-runner.ts +144 -0
- package/src/runtime/test-case-verdicts.test.ts +94 -0
- package/src/runtime/test-case-verdicts.ts +120 -0
- package/src/runtime/ui-reverse-engineering/coordinator.test.ts +59 -0
- package/src/runtime/ui-reverse-engineering/coordinator.ts +391 -0
- package/src/runtime/ui-reverse-engineering/types.ts +197 -0
- package/src/runtime/web-suite.test.ts +97 -0
- package/src/runtime/web-suite.ts +176 -0
- package/src/storage/create-object-store.ts +144 -0
- package/src/storage/keys.ts +34 -0
- package/src/storage/local-artifact-server.test.ts +314 -0
- package/src/storage/local-artifact-server.ts +357 -0
- package/src/storage/object-store.test.ts +28 -0
- package/src/storage/object-store.ts +101 -0
- package/src/storage/registry-object-store.ts +88 -0
- package/src/storage/remote-object-store.ts +104 -0
- package/src/storage/storage-directory.test.ts +43 -0
- package/src/storage/storage-directory.ts +24 -0
- 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,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"]
|