Skip to content

Saved reports

The CLI prints an HTML report path after each browser run. Open index.html directly after Dyno stops to search tests, read failures and source excerpts, inspect console output and timings, and view screenshots.

Reports live in .dyno/reports/<run-id>/. Change that with reportDir or --report-dir path. Copy the whole folder to share a report; its images live in images/. Old reports stay until you remove them.

Each folder includes run.json, junit.xml, schedule.json, and session.json. JSON output emits a report-saved event. run.json uses schemaVersion: 1, stable test descriptors, outcomes, summary counts, and relative image paths.

Runs are completed or interrupted; tests without accepted results are not-run. Failures retain their phase and source context. JUnit adds an error case for interruption, so an unfinished run can’t look green.

Dyno saves results before reporting completion, including accepted outcomes on signals, browser loss, and app failure. A force kill or machine failure can’t flush results. Storage errors fail the CLI, and partially written run folders aren’t published as reports. A source image removed before saving appears as Screenshot unavailable.

Reports contain test output and source excerpts. Dyno doesn’t save config, fixtures, connection keys, or launch tokens in them.

--repeat writes .dyno/reports/repeat-<session-id>/. Open its index.html for aggregate counts and the first failure. batch.json records the root seed, test-bundle fingerprint, browser identity, original selection, and observed outcomes. Skipped and unfinished tests stay separate from passes. The batch’s junit.xml gives each test execution its round number, so a later pass cannot replace an earlier failure.

rounds.jsonl records completed and interrupted rounds, per-test outcomes, and paths to their worker schedules under schedules/. Full portable reports and images are retained under runs/ for failed or interrupted rounds and the final round. Successful intermediate rounds keep compact evidence; their screenshots are discarded. Session timing lives once in the batch folder.

Round evidence and retained reports share a 256 MiB budget. Reaching it stops repetition, marks unavailable evidence explicitly, and preserves accepted counts in batch.json. The aggregate summary, final compact outcome record, and session timing are saved outside that budget so a limit cannot hide a failure or stop reason. Batch metadata updates after each saved round; HTML and JUnit are finalized on shutdown. Storage failures also fail the command. Copy the whole batch folder to keep its relative report and image links; printed commands refer to the original local paths.