Reports: one tab, reports that declare their kind, every run kept, a timeline to scrub and play issue #127 open andymccall opened this · 1 comment
referenced by 3 changes on 10 Oct 2026
referenced by 4 changes on 11 Oct 2026
andymccall
Status 2026-10-13: built and live: RP1–RP4 (report storage, one Reports tab with Coverage and Tests built in, metrics and threshold checks, the timeline with play and compare, report.run()/history()), and retention (default bookmark keeps everything, other bookmarks the newest 50 runs, metrics forever). Still open: report pages on a separate origin (today a sandboxed frame with its own CSP), retention rules for proposals and tags and a per-repository setting, and oh report upload for reports other than coverage.
Design: docs/reports.md. A report is a directory (report.toml with kind, title, summary and headline metrics; for performance and custom kinds an index.html and data/), from a Flow job's
reportoutput oroh report upload. The hub keeps each run's bundle as a content-addressed tree in the repository's store (unchanged files cost nothing), indexes reports and metrics in the database, keeps bundles by policy and metrics forever, and roots them for gc. One Reports tab replaces Coverage and Tests (built-in kinds; today's coverage and junit artifacts are implicit declarations); pages render in a sandboxed frame on a separate origin; a timeline scrubs, plays and compares runs, with report.run()/report.history() for pages that animate; metrics with thresholds set checks. Andy asked for it 2026-10-10, with Metal Gear's performance report as the first user.