myrqen session finish builds one canonical report object and renders it four ways. All
four land in the project you scanned, and none of them require an account.
The four formats
HTML
A self-contained page: filter by severity and verification, expand a finding for
evidence and remediation, copy the fix prompt. No external scripts, stylesheets, or
fonts — it opens with the network off.
JSON
The canonical
ScanReport, validated against schemas/report.schema.json. This is
the machine-readable source of truth.Markdown
For a pull request, an issue, or a wiki.
SARIF
For code-scanning tooling that consumes SARIF.
What the canonical report contains
ScanReport in packages/contracts/src/domain.ts, schema version 1.0.0:
limitations is not an afterthought. The product’s stated position is that silence from a
scanner is not a clean bill of health, so a report that found nothing still says what it
covered and what it could not reach.Token usage is reported with provenance
tokenUsage.source is mandatory and is one of:
An exact count is never fabricated. Where the platform aggregates this, exact and
estimated counts are kept in separate columns and never averaged together.
The fix prompt
Synced reports and projections
A synced report can be opened in the dashboard and shared. What a given viewer receives is decided server-side by a projection policy — never by client-side hiding.ProjectionPolicy is deliberately a typed, testable structure rather than a programmable
policy language:
Hidden content is absent from the payload, not hidden in it. That holds for the page,
the JSON, and every export format — the export routes resolve the same projection the page
does, so no format is a bypass.
Report expiry
A synced report has a retention window from its plan (21 days on free). When it expires the worker deletes the body and its stored object, share links stop working, and the report page explains the expiry. Requests returnREPORT_EXPIRED (HTTP 410).
Your local files are untouched. That is the point of local-first.
Encryption at rest
In the hosted service, report bodies are encrypted withREPORT_ENCRYPTION_KEY before
they reach object storage, so the store never holds plaintext.
REPORT_ENCRYPTION_KEY_PREVIOUS accepts retired keys for reads only, which is what
makes key rotation possible — move the old key there when rotating, or every stored report
stops opening.
Related
Share a report
One URL that renders differently per recipient.
Report export API
GET /api/v1/reports/{id}/export/{format} and the share equivalent.