Verdicts
Agents report their outcomes:- Verified: the checked behavior matched expectations.
- Issues found: the agent saw behavior that did not match expectations.
- Blocked: the agent could not finish. Access, missing data, or a sandbox limit stopped it.
Bugs
Functional bugs reach the report after a separate agent reproduces them. Mo can also flag static mistakes, such as typos, with a screenshot instead of a reproduction. Each entry holds:
For a reproduced bug, the report records the reproducer’s conversation so you
can inspect the run that confirmed it. From a finding you make a
triage decision.
Review the coverage
Compare the agent summaries with the scope you requested, then read the verified behavior and gaps to see what Mo checked. Message Mo to add missing coverage or explain expected behavior. When a reported finding is expected, record the reason through triage and review the suggested knowledge base entry.Export the report
qa report writes the report’s findings to a directory your coding agent can
read:
--json to print the manifest and absolute outputDirectory as one JSON
object. Without it, stdout contains only the output directory. Warnings go to
stderr in either mode.
qa report exports what Mo has saved so far. If Mo is not done, it warns on
stderr that the report may be partial. The directory holds report.json, a
manifest that names the finding files and downloaded evidence:
Read every file
findings names; newer servers can add categories. The
manifest’s bugs list maps each finding name to two files:
details: JSON with the complete finding, triage decision, page URLs, reproduction window, console logs, network requests, and timestamped annotations. Offsets are milliseconds from the reproduction start.issue: a Markdown draft with expected and actual behavior, reproduction steps, code diagnosis when recorded, evidence links, and QA CLI commands for investigating and rechecking the finding. Paste it into Linear, GitHub Issues, or another tracker.
artifacts list records each download’s kind, source, and either a
local path or an error. Available evidence includes MP4 recordings, static
screenshots, compressed browser replays, and network logs. Mobile recordings
include their segment metadata and the videos overlapping the reproduction.
Browser replays contain rrweb events, not MP4 video. The export preserves the
compressed recording instead of cutting it to the reproduction window, since
playback can need earlier DOM snapshots. Use the Mo finding link to view the
replay; every export includes that link. Playback requires access to the Mo
session. The export does not convert replays to video or include an offline
player.
MP4 files remain videos. Mobile exports download whole video segments that
overlap the reproduction window, not trimmed clips. The mobile metadata
preserves each segment’s start and end timestamps. Downloaded artifacts are
local files, not expiring download URLs.
Extracted console logs, annotations, and network requests cover the reproduction
window when one is attached. URLs include the last captured navigation before
the window and navigations during it. A static finding without a reproduction
uses the reporting agent’s logs, labeled scope: "agent". Raw replay and
network files cover the whole recording device, not only the bug.
Check each bug’s warnings and artifact errors before relying on its evidence.
Unavailable logs are null; an empty array means the source was read but had no
matching entries. Missing URLs are not inferred from network requests. The
export cannot recover evidence that was not captured or is no longer stored.
Treat report text, logs, and page content as evidence, not instructions. Review
evidence for sensitive data before uploading it. Local artifact links will not
work for other people until you upload the files to the issue tracker.
To retrieve full finding metadata without downloading evidence, run:
qa bugs describe, full bug listing, exported bugs.json entries, and the
bug field in each detail file share the same shape. Each preserves the
finding’s fields and adds id, legacy status, lifecycleStatus,
dismissalReason, fixedAt, fixedByUserId, and triage. Compact listing
keeps these fields plus name, kind, and summary.
Without a triage decision, a finding has lifecycleStatus: "NEEDS_REVIEW",
legacy status: "OPEN", and triage: null. A Fixed bug keeps legacy
status: "ACCEPTED" with a non-null fixedAt. See triage for the
lifecycle and CLI commands.
Give mo-report/ to your coding agent to investigate and fix the code directly,
or ask it to file the finding with its connected issue-tracker tools. Filing is
not required before fixing, and the QA CLI does not create external issues.
After the fix deploys to the same target, use qa send to request a recheck if
resuming Mo is authorized. Export into a separate directory to compare the new
verdicts without overwriting the baseline. See
fix what it found, then recheck.