SnagBadgerA little help for every snag.

Reports, checkpoints and bundle formats#

Serialized formatVersion: 1 is a data-format version, independent of repository package releases. Parsers reject unsupported versions and unknown/malformed contracts explicitly. Use supported parse/export APIs rather than assembling a guessed manifest.

Portable bug report#

BugReport retains stable identity, revision, timestamps, narrative, established/proposed expectation, actual behavior, hypotheses, reproduction steps, recorded interactions, evidence, optional executable reproduction and detached source context.

parseBugReport rejects duplicate identities, dangling references, invalid readiness claims and unsupported JSON data. reviseBugReport preserves identity/source snapshots while incrementing revision and invalidating verification. Reports/evidence concepts explains the distinctions.

Test-run model and checkpoint#

A run contains policy and results. Each result retains a test-definition snapshot, attempts and independent comments. The runner's authoritative checkpoint.json stores a validated view, section hierarchy, hook events, warnings/processing status, and an attachment index keyed by result/attempt/evidence identity.

Attachment paths are relative to the run directory under raw-evidence/. Bytes are stored before checkpoint references are published. Atomic replacement leaves the previous complete snapshot readable if interrupted. Raw output is private and not equivalent to a reviewed export.

Legacy run.json/execution.json/attachments.json output remains readable by report when model/view agree; it is not silently migrated. Legacy retries or incompatible definition revisions need a new run. Canonical checkpoint detail is authoritative.

Reviewed portable bundle#

createReportBundle returns reviewed relative files: report.json, a script-free semantic index.html, and optional generated attachments/<n>.<ext> paths. The manifest records reviewed/redacted/omitted/unavailable evidence without removed values. The host chooses transport and preserves the complete directory.

The viewer escapes report text, previews supported raster/video types and offers other attachments as downloads. It is a portable offline viewer, not the final interactive reporter. importReportBundle validates paths, references, byte lengths, versions and viewer consistency; extra/hidden files are rejected and imported bytes are copied. Scripts remain data.

Initial limits include 10 million JSON characters, 50 nesting levels, and 250 MB attachment bytes; export defaults limit individual attachments to 100 MB and can tighten limits. Byte-length consistency does not establish cryptographic authenticity or trust.

Review and delivery#

prepareReportExport prepares reviewed manifest/files without rendering a viewer. Bug and test-run exports share review preparation while retaining distinct models. Provider delivery uses that same boundary and returns report/export identity plus a host-provided receipt. A partial delivery preserves its created ticket reference rather than automatically retrying.

Read canonical portable format and limits, sanitization guide, and the illustrative artifact.