E2E Test Dashboard

Circuitry.ai — automated end-to-end test suite

View by tenant

Home filter only — does not change which tenant runs in the sidebar.

Total Tests
Pass Rate
Failures
Skipped
Avg Duration
Tenant test history
Show

Pass rate trend

Outcomes per run

Last 7 runs
No run history yet. Complete a test run to record history.
Latest run — tests
No test results yet. Select a page from the nav and run tests.
Scheduled Runs
Upcoming
Running
Completed (recent)
Failed
Quick Presets
Agent Validation Results
No validation results yet. Run agents_history_validate or agents_pcmi_validate suites.
No test running
IDLE
No browser active

Check the boxes on the left to select tests,
then click Run.

Results appear in the panel below as each test finishes (~25s per test).

Agent browser
No browser active

Start the agent to see the browser here.

Start the agent — it will log in automatically

Test Creator

Generate Playwright test code from recordings, descriptions, or AI analysis

Switch to Agent Mode to get a live browser,
then come back here to generate tests.

⏺ Guided Record
✎ Describe
✦ AI Auto

Use the Agent Mode page to record interactions, then return here to generate the test.

General Settings

Per-Suite Test Timeouts (seconds)

The wall-clock limit before pytest-timeout kills a hung test's worker process (this is what causes the worker crash/restart behavior above). Each field below applies to every test in that suite — saving a value makes all of that suite's markers uniform. Stored in config/test_timeouts.yaml.
A test with its own hardcoded @pytest.mark.timeout(N) is never lowered below N by these fields — only raised.

Fallback for any suite without its own marker below. Default: 120s.

Covers advisor list, converse, and edit-shell tests (advisors_* markers).

Covers Power BI embed / vision tests (analysts_* markers) — these need more time for the PBI iframe to load.

Covers agent chat / validation tests (agents_* markers).

Visual-regression timeouts are normally computed from capture/settle/screenshot timing, not a flat number. Set a value here to force every visual-regression test to this timeout instead. 0 = use the computed defaults. Stored in config/visual_regression_config.py.

A different kind of timeout — how long a single click/wait_for_selector call waits, not how long the whole test runs. Default: 30 000 ms. Stored in config/tenants.yaml.

How many times a crashed worker is automatically restarted to complete its remaining tests. Set to 0 to disable restarts entirely.
Example: 5 = worker retries up to 5 times before remaining tests are marked not_executed.
Disabled when "Auto restart until complete" is on.

Maximum time to wait for the Power BI "Loading data…" spinner to clear before taking a vision screenshot. Default: 60 000 ms (1 min). Stored in config/test_timeouts.yaml.

Extra pause after the spinner disappears so charts finish rendering. Default: 3 000 ms. Set to 0 to skip the settle wait entirely.

Maximum time to wait for a History accordion field's loading spinner to clear before reading its text. Default: 15 000 ms. Stored in config/test_timeouts.yaml.

Extra pause after every History tab field finishes updating, before its section text is read for validation. Default: 5 000 ms (5 s).

Number of automatic retries for analyst vision and PBI tests when they fail or the PBI iframe is slow to load. Default: 2. Applies to all analyst test markers. Stored in config/test_timeouts.yaml.

Vision Screenshot — Scoring Thresholds

Minimum overall score a GPT-4o vision run must return to mark the test as passed. Default: 85. Stored in config/visual_regression_config.py.

Minimum content-relevance score. If the screenshot scores below this (e.g. login page, error state) the test fails immediately with score 0 — regardless of pass threshold. Default: 70.

Vision Screenshot — Analyst PBI Capture Timing

How long to wait for Power BI loading indicators to disappear before starting visual stability checks. Default: 45 000 ms.

How often a low-quality screenshot is taken during chart stability polling. Shorter = more responsive; longer = less CPU pressure on slow PBI pages. Default: 3 000 ms.

The page content hash must be unchanged for this long before the screenshot is accepted. Increase if charts are still animating. Default: 6 000 ms.

Hard cap on the stability-polling loop. If the page never stabilises within this time the screenshot is taken anyway. Default: 45 000 ms.

Vision Screenshot — Route Page Capture Timing

Fixed pause after the network goes idle so React finishes rendering before the stability poll begins (Dashboard, Advisors, Conversations…). Default: 5 000 ms.

Page content must be visually unchanged for this long on route pages. Default: 4 000 ms.

Hard cap on the stability-polling loop for route pages. Default: 20 000 ms.

JIRA Integration

Tenants

Manage which tenants appear on Home → View by tenant and in the Home sidebar. Names are copied from config/tenants.yaml when the list is empty. Add or remove tenants here only.

Home tenant list

Active run tenant

URL used for single-worker runs and when you click a tenant on Home.

sandbox.circuitry.ai
https://sandbox.circuitry.ai

How parallel runs work

Turn whole features on or off and set a safety cap. Saved to config/dashboard-features.json (editable on disk).

Counts all running pytest browsers. Example: 3 customers × 2 browsers each = 6 — must be ≤ this cap.

Test Presets

PCMI Config

Credentials for the PCMI portal used in 3-way agent validation tests.
One entry per tenant + environment combination.

Loading…
Add / Update Entry

Visual Regression

Capture JPEG baselines per environment and tenant. Compare runs use the active tenant pill or each tenant in a multi-customer run.

Loading…

Several customers

Check each customer that needs baselines. Same idea as Several customers… on the test page — one capture per selected page per customer.

One customer, faster: split the selected baseline pages across several browsers (same URL as the primary tenant above).

Start = missing selected pages only · Re-capture = all selected pages per customer. Counts are tenant-aware (only analysts/advisors on that customer via API).

Browser Settings

Controls how the Playwright browser behaves during test runs. Changes take effect on the next test run.

Headless Mode
ON — browser runs silently in the background (recommended for CI/automated runs).
OFF — a real browser window opens so you can watch each step. Best for debugging.
OFF
Slow Motion
Adds a pause between every browser action. Use Slow or Very Slow combined with Headless OFF to watch each step clearly.
Saved to settings.json. Overrides the defaults in config/tenants.yaml for each new test run.

Autoheal

When a locator fails after all retries, Autoheal captures the page HTML and asks AI to suggest a better locator. You review suggestions here and apply or reject them individually — or click Fix All to apply every pending suggestion at once.

Only register a candidate after at least this many failed attempts. Example: 3 = triggers on the 3rd failed attempt.

Suggestions

Loading…

Scheduled Runs

Create recurring test jobs that fire automatically. Each schedule uses a preset, tenant, and worker count you define.

Loading…

All 0
Dashboard 0
Advisors 0
Conversations 0
Agents 0
Settings 0
Navigation 0
API Health 0
📋

Select tests from the sidebar
and click Run to start

Ready Elapsed: —
— tests
0 passed
0 failed
0 skipped
OFFLINE