Blog
Writing from Comma.
On sharing HTML reports, agents that publish and respond to feedback, scheduled routines, and honest comparisons with the tools next door.
Launches
Sharing & collaboration
Google Docs for HTML
Google Docs gave documents a comment layer. Comma does the same for HTML — dashboards, notebook outputs, AI tool exports, eval reports. Faithful rendering, anchored comments, stable share links.
Sep 11, 2026
How to Leave Anchored Comments on an HTML Report
Pin a comment to a paragraph or a table cell inside a rendered HTML report. Comma adds a Google-Docs-style anchored comment layer outside the iframe — the rendering stays intact.
Sep 11, 2026
How to Share an HTML Report with Your Team for Feedback
Sharing an HTML report shouldn't require a screenshot. Comma renders any HTML faithfully at a stable link, with anchored comments your team can pin to specific text and table cells.
Sep 11, 2026
Stop Screenshotting Reports Into Slack
The screenshot-into-Slack workflow loses detail, scatters feedback, and produces no canonical artifact. Comma keeps the report rendered live and the comments anchored — same link every time.
Sep 11, 2026
Share a bookdown Book
bookdown renders a multi-page site with cross-references and a search index. Publish the folder to Comma so the navigation and citations work at a URL.
Sep 8, 2026
Share a Burp Suite Report
Burp exports a self-contained HTML report with request and response evidence. Publish it to Comma for a revocable URL with a thread per issue instead of an emailed attachment.
Sep 8, 2026
Share a Catch2 Report
Catch2's best feature is showing you the values inside a failing assertion. Convert its XML to HTML and publish to Comma so that detail reaches the reader intact.
Sep 8, 2026
Share a Chart.js Chart
A Chart.js page is HTML plus a CDN script — trivial to build, awkward to send. Publish it to Comma for a URL where the tooltips and legend toggles still work.
Sep 8, 2026
Share a Clinic.js Report
clinic doctor writes an HTML report that only opens on the machine that made it. Publish it to Comma for a URL your team can open, and comment on the event-loop stall.
Sep 8, 2026
Share a Cobertura Coverage Report
Cobertura XML is a format, not a report. Render it with pycobertura or ReportGenerator and publish to Comma for a URL where the uncovered lines are actually visible.
Sep 8, 2026
Share a Criterion.rs Benchmark Report
cargo bench writes target/criterion/report — a folder of linked pages and SVG plots that breaks when opened from the filesystem. Publish it to Comma for a working URL.
Sep 8, 2026
Share a CTest Report
CTest writes XML for CDash, and most teams never deploy one. Convert the results to HTML and publish to Comma for a URL with the failing tests and a comment thread.
Sep 8, 2026
Share a D3 Visualization
A D3 visualization is the interaction. Publish it to Comma for a URL where the brush, the zoom and the transitions still work — instead of a GIF of them.
Sep 8, 2026
Share a Flame Graph
A flame graph SVG is interactive until you send it. GitHub strips its scripts, Slack flattens it to a preview. Publish it to Comma for a URL where click-to-zoom and Ctrl-F still work.
Sep 8, 2026
Share a GoogleTest Report
GoogleTest writes XML, not HTML. Convert it and publish to Comma so a C++ failure arrives as a readable report with a comment thread, instead of 4,000 lines of CI log.
Sep 8, 2026
Share a Grype Report
grype prints a table and writes JSON, neither of which survives a Slack paste. Render it to HTML and publish to Comma for a URL with a comment thread per CVE.
Sep 8, 2026
Share a Highcharts Chart
Highcharts' drilldown and range selector are the reason you chose it. Publish the HTML to Comma for a URL where they still work, rather than a flat export.
Sep 8, 2026
Share a JMH Benchmark Report
JMH prints a score and a ± that everyone drops when they quote it. Render the JSON with jmh-visualizer and publish to Comma for a URL where the confidence interval survives.
Sep 8, 2026
Share a License Report
license-checker, pip-licenses and cargo-about all dump a list nobody outside engineering can read. Render it and publish to Comma so legal gets a URL that stays current.
Sep 8, 2026
Share a Lightdash Dashboard Outside the dbt Team
Lightdash dashboards need a seat and a warehouse connection. Publish a snapshot to Comma so stakeholders get the metrics at a URL, with the dbt definitions attached.
Sep 8, 2026
Share a memray Report
memray flamegraph writes a self-contained HTML you cannot attach anywhere useful. Publish it to Comma for a URL where the allocation tree still expands, and the leak has a comment thread.
Sep 8, 2026
Share a Pentest Report
A penetration test report is the most sensitive document your team will circulate this quarter. Publish it to Comma with named-reviewer access, per-finding threads and a remediation trail.
Sep 8, 2026
Share a pkgdown Site
pkgdown builds a multi-page reference site with a search index that breaks from the filesystem. Publish the docs folder to Comma for a working URL, no GitHub Pages needed.
Sep 8, 2026
Share a py-spy Profile
py-spy record writes an interactive SVG that loses its zoom in GitHub and Slack. Publish it to Comma for a URL where the flame graph still zooms, searches and can be commented on.
Sep 8, 2026
Share a pydeck Map
deck.to_html() writes a WebGL map that only opens locally. Publish it to Comma for a URL where the layers, camera and tooltips still work for everyone.
Sep 8, 2026
Share a pyinstrument Report
pyinstrument --html writes a self-contained call tree you can only open locally. Publish it to Comma for a URL colleagues can expand, search and comment on.
Sep 8, 2026
Share a Redash Dashboard With Someone Who Has No Redash Account
Redash dashboards live behind a login and a data-source connection. Publish a snapshot to Comma so stakeholders get the numbers without a seat or a public share link.
Sep 8, 2026
Share a SARIF Report
SARIF is a machine format, not a report. Render it to HTML and publish to Comma so CodeQL, Semgrep and every other scanner's findings land somewhere people will actually read them.
Sep 8, 2026
Share a Scalene Report
Scalene writes an HTML profile that splits Python time from native time line by line. Publish it to Comma for a URL your team can read and annotate instead of a screenshot.
Sep 8, 2026
Share a speedscope Profile
speedscope keeps your profile local, which is great for privacy and terrible for review. Publish the viewer and the trace together to Comma for one URL that opens in any browser.
Sep 8, 2026
Share a TruffleHog Report
TruffleHog finds verified live credentials. Publishing that list needs more care than any other scan output — here is how to render it, redact it, and share it revocably.
Sep 8, 2026
Share an Amazon QuickSight Dashboard Without an AWS Account
QuickSight readers need an identity and a per-reader charge. Publish a snapshot to Comma so stakeholders get the numbers at a URL, with no IAM and no seat.
Sep 8, 2026
Share an Appium Report
A mobile test failure is unreadable without the screenshot and the device log. Publish the Appium report to Comma so the evidence travels with the result.
Sep 8, 2026
Share an AsciiDoc / Asciidoctor HTML Document
Asciidoctor renders one HTML file — until diagrams and includes turn it into a folder. Publish it to Comma for a URL with the TOC, the diagrams and a comment thread.
Sep 8, 2026
Share an async-profiler Report
async-profiler writes a self-contained interactive flame graph HTML. Publish it to Comma for a link where the zoom and search still work, instead of a screenshot in a channel.
Sep 8, 2026
Share an autocannon Report
autocannon prints a table that turns into unreadable ASCII in Slack. Render it to HTML and publish it to Comma for a URL with the percentiles intact and a place to argue about them.
Sep 8, 2026
Share an OpenVAS / Greenbone Report
Greenbone exports vulnerability reports as HTML, PDF or XML. Publish the HTML to Comma for a revocable URL with a thread per host instead of an attachment nobody can recall.
Sep 8, 2026
Share an SBOM
CycloneDX and SPDX are formats for machines. When a customer or auditor asks for your SBOM, render it and publish to Comma so they get a readable URL, not a 4 MB JSON file.
Sep 8, 2026
Box Won't Preview HTML Files
Box stores your HTML report and won't render it: viewers get a download or a blank preview. How to share an HTML report from Box so it opens as a page.
Sep 6, 2026
How to Share a Folder of HTML Files (index.html + assets) in 2026
Multi-file HTML output — index.html plus assets, images and sub-pages — breaks when you send one file. How to share a whole HTML folder so every relative link still works.
Sep 6, 2026
How to Share a Datadog Dashboard
Datadog's public dashboard sharing puts your metrics on an unauthenticated URL, and every other route costs a seat. What each option exposes, plus the scheduled HTML digest that keeps one commentable link.
Sep 4, 2026
How to Share a Deepnote Notebook or App With People Outside Your Workspace
Deepnote sharing is workspace-scoped, and publishing a notebook as an app makes it reachable by link. Where each option fits, and how to export an executed HTML copy for readers who should not have a workspace seat.
Sep 4, 2026
How to Share a Google Colab Notebook
Colab sharing runs on Drive permissions, so a reader still needs a Google account and the notebook may not include its outputs. What each option does, plus exporting an executed HTML copy anyone can open and comment on.
Sep 4, 2026
How to Share a Gradio App
Gradio's share=True link is a temporary tunnel to your laptop, and Hugging Face Spaces is public unless you pay for private. What each option really costs, plus publishing a static result page when the demo is over.
Sep 4, 2026
How to Share a Grafana Dashboard
A Grafana share link asks for a login, a snapshot strips the live data, and PDF export is an Enterprise feature. The realistic options compared, plus the scheduled HTML digest that gives you one stable URL people can comment on.
Sep 4, 2026
How to Share a Kaggle Notebook Outside Kaggle
A Kaggle notebook is either public to the whole community or shared with named Kaggle users — there is no middle. How the visibility settings work, and how to export an executed HTML copy for readers who are not on Kaggle.
Sep 4, 2026
How to Share a Kibana Dashboard With People Who Have No Kibana Access
Kibana share links require a login, PNG and PDF reporting sits behind a paid Elastic subscription tier, and a screenshot in Slack is unquotable. The realistic options, plus the scheduled HTML digest that keeps one commentable URL.
Sep 4, 2026
How to Share a Looker Studio Report
Looker Studio sharing depends on whether the data source uses owner or viewer credentials, and scheduled delivery lands as a flat PDF email. What each setting really does, plus the digest pattern that keeps one commentable URL.
Sep 4, 2026
How to Share a Metabase Dashboard
Metabase public links expose data to anyone with the URL, static embedding needs a signed token and an app to host it, and subscriptions land as flat email. The trade-offs compared, plus the digest pattern that keeps one link and a comment thread.
Sep 4, 2026
How to Share a Plotly Dash App Without Deploying a Server
Dash callbacks run in Flask, so there is no static export of a Dash app. When the reader only needs the figures, the same Plotly charts render to one self-contained HTML file you can publish and comment on.
Sep 4, 2026
How to Share a Power BI Report Without a Pro Licence for Every Reader
Sharing a Power BI report normally means a Pro licence per viewer, and Publish to web puts your data on the open internet. The licensing reality explained, plus the exported-digest pattern for readers you cannot license.
Sep 4, 2026
How to Share a Streamlit App
Streamlit apps need a running Python process, so there is no file you can send. Community Cloud is public and sleeps when idle; self-hosting is a service to own. Plus the static snapshot pattern for when the audience only needs the findings.
Sep 4, 2026
How to Share a Tableau Dashboard
Tableau Public makes everything world-readable, Tableau Server and Cloud need a licensed seat per viewer, and a .twbx needs Desktop or Reader. The options compared, plus the exported-digest pattern for readers you cannot license.
Sep 4, 2026
How to Share a Voilà Dashboard
Voilà turns a notebook into a dashboard by keeping a Jupyter kernel running per viewer, which is why there is no static export. Hosting options, the ipywidgets limitation, and the nbconvert route when readers only need the results.
Sep 4, 2026
How to Share an Amazon SageMaker Notebook Result Without an AWS Account
SageMaker Studio notebooks live behind IAM, so sharing means granting a role in your AWS account. How the shareable-notebook snapshot works, and how to publish an executed HTML render for readers who should never have IAM access.
Sep 4, 2026
How to Share an Apache Superset Dashboard Outside Your Superset
A Superset dashboard permalink still requires a login, and the Alerts & Reports screenshot path needs Celery plus a headless browser. What actually works for readers with no Superset account, and how to keep one link across weeks.
Sep 4, 2026
How to Share an Apache Zeppelin Notebook Outside the Cluster
Zeppelin notebooks live inside the server that runs your Spark cluster, and the paragraph publish feature is an iframe back into it. What actually reaches a reader with no cluster access, and how to keep one commentable URL.
Sep 4, 2026
How to Share an R Shiny App
Shiny needs a live R process, so shinyapps.io free tier is public with 25 active hours a month. Shinylive compiles to static WebAssembly, and an R Markdown render covers the case where readers only need the findings.
Sep 4, 2026
Share an MLflow Run Report Without Giving Out Tracking Server Access
The MLflow UI is a server on your network and its artifacts are objects in a bucket. Publish the run comparison as HTML so the people judging the model can actually open it.
Sep 2, 2026
Share a BackstopJS Report
BackstopJS writes an HTML report with reference, test and diff images side by side. Publish it to Comma so the approve-or-fix decision happens on the diff itself, with a revision per run.
Sep 1, 2026
Share a Codeception HTML Report
codecept run --html writes a browsable report with the failing steps expanded. Publish it to Comma for one URL per suite, comments on individual failures, and a revision per run.
Sep 1, 2026
Share a dependency-cruiser Report
dependency-cruiser writes an HTML report of your module graph and rule violations. Publish it to Comma so architecture arguments happen on the graph, with a revision per run.
Sep 1, 2026
Share a Gatsby Site Preview
gatsby build writes a static public/ directory. Publish it to Comma for a private preview link with anchored comments and a revision per build, instead of provisioning hosting for a review.
Sep 1, 2026
Share a HoloViews Plot
hv.save() writes a standalone HTML file with the Bokeh interactions intact. Publish it to Comma for a link where panning, hovering and linked selections still work — and people can comment on it.
Sep 1, 2026
Share a jscpd Duplication Report
jscpd's HTML reporter writes a browsable duplication report. Publish it to Comma so the refactor conversation happens on the clones themselves, with a revision per run to show the trend.
Sep 1, 2026
Share a jupyter nbconvert HTML Export
nbconvert --to html gives you one self-contained file. Publish it to Comma with one curl for a stable URL, anchored comments on individual cells, and a revision every time you re-run the notebook.
Sep 1, 2026
Share a Karate Test Report
Karate writes an HTML report per run with the full request and response for every step. Publish it to Comma for one URL per suite, threads on individual scenarios, and a revision per run.
Sep 1, 2026
Share a KICS Scan Report
KICS writes an HTML report of your Terraform, Kubernetes and CloudFormation findings. Publish it to Comma for a stable URL per stack, threads on individual queries, and a revision per scan.
Sep 1, 2026
Share a Kubescape Report
Kubescape scans a cluster or manifests against NSA, MITRE and CIS controls and writes an HTML report. Publish it to Comma for one URL per cluster, threads per control, and a revision per scan.
Sep 1, 2026
Share a MultiQC Report
MultiQC aggregates QC output into one interactive HTML report. Publish it to Comma so collaborators open a URL, annotate the outlier sample, and every re-run appends a revision.
Sep 1, 2026
Share a Next.js Static Export
next build with output: 'export' writes a static out/ directory. Publish it to Comma for a private preview link with anchored comments, without provisioning a deploy target.
Sep 1, 2026
Share a Nextflow Execution Report
nextflow run -with-report writes an HTML execution report with per-process resource usage. Publish it to Comma for one URL per pipeline, notes on the slow process, and a revision per run.
Sep 1, 2026
Share a Nightwatch HTML Report
Nightwatch's built-in HTML reporter writes a browsable report with screenshots. Publish it to Comma from CI for one URL per suite, threads on individual failures, and a revision per run.
Sep 1, 2026
Share a Nikto Scan Report
Nikto's -Format htm writes a self-contained report. Publish it to Comma so each scan has a URL, each finding can be triaged in a thread, and every re-scan appends a revision.
Sep 1, 2026
Share a Nuxt Static Site Preview
nuxt generate writes a prerendered site to .output/public. Publish it to Comma for a private preview link with anchored comments and a revision per build, no hosting to set up.
Sep 1, 2026
Share a Panel App as HTML
Panel's .save() writes a self-contained HTML file with the widgets embedded. Publish it to Comma so a dashboard is a link, with anchored comments and a revision each time the data refreshes.
Sep 1, 2026
Share a Papermill Notebook Run
Papermill executes a notebook with parameters; nbconvert renders it. Publish the result to Comma so every run has a link, a revision history, and somewhere for the reviewer to leave a note.
Sep 1, 2026
Share a pgBadger Report
pgBadger turns Postgres logs into one interactive HTML report. Publish it to Comma so the slow query gets a thread, the DBA and the app team read the same page, and each run is a revision.
Sep 1, 2026
Share a Rollup Visualizer Report
rollup-plugin-visualizer writes stats.html — an interactive treemap of your Rollup or Vite bundle. Publish it to Comma for one URL per app, threads on individual modules, and a size history.
Sep 1, 2026
Share a testssl.sh Report
testssl.sh writes an HTML file with --htmlfile. Publish it to Comma for one URL per host, anchored notes on individual cipher findings, and a revision every time you re-scan.
Sep 1, 2026
Share a Vegeta Load Test Plot
vegeta plot writes an interactive HTML latency chart. Publish it to Comma for one URL per scenario, comments anchored to the spike, and a revision per run to compare against.
Sep 1, 2026
Share a WebdriverIO Test Report
WebdriverIO's HTML reporters write a browsable run report. Publish it to Comma from CI so every run lands at the same URL, with anchored threads on failures and a revision history.
Sep 1, 2026
Share a Zola Site Preview
zola build writes a static public/ directory. Publish it to Comma for a private preview link with anchored comments and a revision per build, without setting up hosting first.
Sep 1, 2026
Share an Infracost Report
infracost output --format html writes a cost breakdown for a Terraform change. Publish it to Comma so the cost conversation happens on the line item, with a revision per plan.
Sep 1, 2026
Share an InSpec Report
inspec exec --reporter html2 writes a browsable control report. Publish it to Comma so auditors read a URL, exceptions are recorded on the control, and every run appends a revision.
Sep 1, 2026
Share an Unlighthouse Report
Unlighthouse scans every route and builds a static report. Publish it to Comma so the whole site's scores live at one URL, with threads on individual pages and a revision per scan.
Sep 1, 2026
Share Redoc API Docs
redocly build-docs bundles an OpenAPI spec into a single HTML file. Publish it to Comma so reviewers comment on the endpoint itself, and each spec change lands as a revision at one URL.
Sep 1, 2026
Share SchemaSpy Database Docs
SchemaSpy generates a browsable HTML view of a database schema with relationship diagrams. Publish it to Comma so the schema is a URL, questions land on the table, and each run is a revision.
Sep 1, 2026
Share Swagger UI Docs
Publish a Swagger UI build to Comma so reviewers read the rendered endpoints instead of the YAML, comment on the operation itself, and see each spec change as a revision at one URL.
Sep 1, 2026
Share a Behave HTML Report
behave -f html writes one self-contained page of Gherkin scenarios and failures. Publish it to Comma so non-engineers can read the run and comment on a scenario.
Aug 31, 2026
Share a Flutter Test and Coverage Report
flutter test --coverage writes lcov.info, which is not a report. Convert with genhtml, publish the folder, and get annotated Dart source at a URL with threads on the uncovered branch.
Aug 31, 2026
Share a Gitleaks Report
Gitleaks emits JSON and SARIF full of the secrets it found. Convert to HTML, publish it with the access set first, and triage on the finding — with redaction on, not off.
Aug 31, 2026
Share a golangci-lint HTML Report
golangci-lint writes HTML natively. Publish the page to Comma for a link the team can triage on, with anchored threads per finding and a revision per run.
Aug 31, 2026
Share a Jekyll Build
jekyll build writes _site/ with absolute asset paths that break outside a server root. Publish it to Comma for a preview URL with comments on the page.
Aug 31, 2026
Share a Maven Site Report
mvn site builds a whole project report — tests, coverage, static analysis, javadoc, dependencies — into target/site, then leaves it there. Publish the folder as one cross-linked link.
Aug 31, 2026
Share a PMD HTML Report
pmd check -f html writes a browsable violations report. Publish it to Comma for a URL with anchored threads per rule and a revision per run.
Aug 31, 2026
Share a Pylint HTML Report
pylint --output-format=json piped through pylint-json2html gives you a browsable report. Publish it to Comma so the cleanup conversation happens on the findings.
Aug 31, 2026
Share a Ruff Report as HTML
Ruff has no HTML writer, but it emits SARIF and JUnit. Convert either, publish the page to Comma, and the Python lint backlog becomes a URL people can triage on.
Aug 31, 2026
Share a Slidev Deck
slidev build writes an SPA to dist/. Publish it to Comma for a URL that keeps the animations, code highlighting and presenter navigation intact.
Aug 31, 2026
Share a source-map-explorer Report
source-map-explorer --html writes one self-contained treemap. Publish it to Comma so the bundle-size conversation happens on the treemap, not on a screenshot.
Aug 31, 2026
Share a TestCafe HTML Report
testcafe --reporter html writes one page of end-to-end results. Publish it to Comma for a URL with screenshots attached, anchored comments and a revision per run.
Aug 31, 2026
Share a VitePress Build
vitepress build writes an SPA under .vitepress/dist. Publish it to Comma for a preview URL where the sidebar, search and theme toggle all work.
Aug 31, 2026
Share an Android Test Report
connectedAndroidTest writes an HTML report into app/build/reports that dies with the CI runner. Publish it: one link per run, failure screenshots attached, threads on the flaky test.
Aug 31, 2026
Share an Antora Docs Site
Antora assembles docs from many repos into one site, which means nobody can preview their change without running the whole build. Publish build/site as a link and review the assembled result.
Aug 31, 2026
Share an Artillery Load Test Report
Artillery v2 removed the built-in HTML reporter, so the JSON output has nowhere to go. Generate a page from it, publish to a URL, and discuss the p99 next to the p99.
Aug 31, 2026
Share an Astro Build
astro build writes dist/ with absolute /_astro/ asset paths. Publish the folder to Comma for a preview URL where the islands hydrate and reviewers can comment.
Aug 31, 2026
Share an axe Accessibility Report
axe-core outputs JSON; axe-html-reporter turns it into a readable page. Publish it to Comma so design, engineering and QA triage the same violations together.
Aug 31, 2026
Share an ECharts HTML File
An ECharts page that loads the library from a CDN can render blank when the CDN is blocked. Vendor echarts.min.js, publish to Comma, and the chart stays interactive.
Aug 31, 2026
Share an Eleventy Build
Eleventy writes _site/ and hands you a folder. Publish it to Comma for a preview URL where reviewers can comment on the rendered page instead of the markdown.
Aug 31, 2026
Share an Istanbul / nyc Coverage Report
nyc writes a coverage/ folder with one HTML page per source file. Publish the tree to Comma for a URL that keeps the drill-down, the sorting and the per-line highlighting intact.
Aug 31, 2026
Share an mdBook
mdbook build writes book/ with a search index it loads at runtime. Publish the folder to Comma for a URL where navigation, search and themes work.
Aug 31, 2026
Share an NUnit HTML Report
NUnit writes TestResult.xml; the HTML comes from a logger or ReportUnit. Publish it to Comma for a link teammates can open and comment on, with a revision per run.
Aug 31, 2026
Share an Observable Framework Build
Observable Framework builds a static dist/ of interactive data pages. Publish it to Comma for a private URL with anchored comments on the charts.
Aug 31, 2026
Share an OSV-Scanner HTML Report
osv-scanner --format html writes a self-contained vulnerability report. Publish it to Comma for a link security and engineering can triage on together.
Aug 31, 2026
Share an xUnit HTML Report
xunit.runner.console -html writes one page; dotnet test --logger html does the same. Publish it to Comma for a URL with anchored comments and a revision per run.
Aug 31, 2026
Share Dokka HTML Docs
Dokka's HTML output fetches its navigation and search index, so it breaks on file://. Publish the folder to Comma and the whole site works at a URL.
Aug 31, 2026
Share JSDoc Output
jsdoc -d docs/ writes a multi-page site with its own CSS and scripts. Publish the folder to Comma for a URL where the nav and search still work.
Aug 31, 2026
Share phpDocumentor Output
phpDocumentor writes a multi-page docs/ site with its own assets and search. Publish the folder to Comma for a URL where navigation and search resolve.
Aug 31, 2026
Share Rustdoc
cargo doc builds target/doc and stops. docs.rs only serves published crates, so private and workspace crates have nowhere to live. Publish the folder: search intact, one link per release.
Aug 31, 2026
Share YARD Docs
yard doc writes a doc/ folder that needs a server to browse properly. Publish it to Comma for a URL where the index, search and frames all resolve.
Aug 31, 2026
Password-Protect an HTML Report (and Why You Often Shouldn't)
A password on a static HTML file is decoration — the JavaScript check ships with the page. What actually restricts a report: identity-based access, expiring links, and a server-side password gate.
Aug 30, 2026
Share a Brakeman Report
brakeman -f html -o brakeman.html produces a single self-contained file that still ends up as a screenshot in a channel. Publish it to Comma so each finding gets a thread and a decision.
Aug 30, 2026
Share a Checkov Report
Checkov scans Terraform and Kubernetes and hands you CLI output or JUnit XML. Convert to HTML, publish it from CI, and triage misconfigurations on the finding instead of in a spreadsheet.
Aug 30, 2026
Share a detekt HTML Report
detekt writes build/reports/detekt/detekt.html and Gradle promptly buries it. Publish the report to Comma for a URL where each finding gets a thread and a decision.
Aug 30, 2026
Share a Hugo Site Preview
hugo builds public/ in milliseconds and then you need somewhere to put it just so one person can look. Publish the build to Comma for a private preview URL with comments.
Aug 30, 2026
Share a Jupyter Book
jupyter-book build produces _build/html and then asks you to deploy it. Publish it in one drag instead: the whole book at a URL, search working, and comments anchored to the paragraph.
Aug 30, 2026
Share a marimo Notebook as HTML
marimo export html gives you a static notebook; html-wasm gives you a runnable one. Both are folders that need serving. Publish either to Comma for a URL with anchored comments.
Aug 30, 2026
Share a Pa11y CI Accessibility Report
pa11y-ci with the HTML reporter writes a report per page into a folder. Publish it to Comma so designers, engineers and the a11y reviewer argue about the same issues at one link.
Aug 30, 2026
Share a PIT Mutation Testing Report
PIT writes an HTML mutation report full of relative links and CSS. Publish the whole folder to Comma for a URL where the team can argue about which surviving mutants matter.
Aug 30, 2026
Share a promptfoo Eval Report
promptfoo eval -o results.html gives you a comparison grid nobody else can open. Publish it to Comma so the team can argue about the failing rows at a URL, run after run.
Aug 30, 2026
Share a Prowler Report
Prowler writes an HTML report per scan into output/. Publish it to Comma so auditors and engineers read the same findings at one URL — private, revisioned, and annotated in place.
Aug 30, 2026
Share a Quarto HTML Report
quarto render writes report.html plus a report_files/ folder, and the folder is why emailing the file never works. Publish the render to Comma for a URL with comments and revisions.
Aug 30, 2026
Share a RuboCop HTML Report
rubocop --format html --out rubocop.html turns 4,000 lines of terminal output into a browsable report. Publish it to Comma so the team can argue about the cops in one place.
Aug 30, 2026
Share a Rust Coverage Report
cargo tarpaulin and cargo llvm-cov both write HTML that dies with the CI runner. Publish it: annotated source at a stable link, threads on the uncovered branch, a revision per run.
Aug 30, 2026
Share a Scout Suite Report
Scout Suite writes an HTML report that loads its results from a sibling JavaScript folder, so it can't be emailed as one file. Publish the whole output directory to Comma.
Aug 30, 2026
Share a SimpleCov Coverage Report
SimpleCov writes coverage/index.html plus assets, and it never leaves the machine that ran the specs. Publish the folder to Comma for a link the whole team can open and annotate.
Aug 30, 2026
Share a sitespeed.io Report
sitespeed.io writes a whole static site of performance results, filmstrips and waterfalls. Publish the run folder to Comma for a URL the team can open and annotate.
Aug 30, 2026
Share a SpotBugs HTML Report
SpotBugs writes an HTML report into build/reports or target/site, where nobody reads it. Publish it to Comma so each bug pattern gets triaged in place instead of in a CI log.
Aug 30, 2026
Share a Stryker Mutation Report
Stryker's mutation.html is a single self-contained file that never leaves the runner. Publish it to Comma for a URL where surviving mutants get triaged instead of ignored.
Aug 30, 2026
Share a Vega-Lite Chart
A Vega-Lite chart exported to PNG loses the tooltips, the brushing and the linked selection that justified building it. Publish the HTML instead: one link, still interactive, comments on the mark.
Aug 30, 2026
Share an HTML Report in Slack
Slack won't render an .html upload — it becomes a download nobody opens. Post a link instead: a preview card in the channel, the real report one click away, and comments that outlive the scroll.
Aug 30, 2026
Share an Inspect AI Eval Log
inspect view bundle turns an eval log directory into a static site. Publish that bundle to Comma so reviewers can open the samples, read the transcripts, and comment — without installing Inspect.
Aug 30, 2026
Share an Xcode Test Report
An .xcresult bundle only opens in Xcode, on a Mac, by someone with the project. Convert it to HTML and publish it: one link per run, screenshots attached, threads on the failing test.
Aug 30, 2026
Share Doxygen Docs
Doxygen writes html/ with thousands of files and no host. Publish it in one drag: search intact, call graphs intact, one link per release, and comments on the function that needs explaining.
Aug 30, 2026
Dropbox Stopped Rendering HTML Files
Dropbox disabled HTML rendering on shared links in 2017. Why your report now downloads instead of opening, why the ?raw=1 trick no longer works, and how to publish the file as a real URL.
Aug 29, 2026
Google Drive Won't Render Your HTML File
Drive stopped serving HTML as web pages in 2016. Why your shared .html link downloads instead of rendering, the workarounds that don't work, and how to get a real URL that opens in a browser.
Aug 29, 2026
How To Open an HTML File on iPhone or Android
Mail and Files won't render an .html attachment on a phone — you get raw markup or a download with nowhere to go. What actually works on iOS and Android, and the one fix that works on both.
Aug 29, 2026
Share a Checkstyle, PMD or SpotBugs Report
Java static analysis writes HTML into build/reports and stops there. Publish it from CI so reviewers read findings at a URL — and argue with the rule on the finding, not in a Slack thread.
Aug 29, 2026
Share a Docusaurus Build
npm run build gives you a build/ folder and a hosting decision. Publish it as a link instead: the real site at a URL, comments anchored to the paragraph that is wrong, no deploy preview needed.
Aug 29, 2026
Share a Go Test Report
go test prints to a terminal and go tool cover writes a file only you can open. Generate the HTML, publish it from CI, and get one link per package with comments on the uncovered branch.
Aug 29, 2026
Share a Gradle Test Report
Gradle writes an HTML test report to build/reports/tests/test that only exists on the machine that ran the build. Publish it from CI: one URL per module, threads on failing tests, a revision per run.
Aug 29, 2026
Share a Karma or Angular Test Report
ng test --code-coverage writes a coverage folder that dies with the CI runner. Publish it to a URL: annotated source at a stable link, threads on the uncovered branch, a revision per run.
Aug 29, 2026
Share a PHPUnit Coverage Report
PHPUnit's --coverage-html writes a folder that only exists in your build. Publish it to a URL: annotated source at a stable link, threads on the uncovered branch, a revision per run.
Aug 29, 2026
Share a reveal.js Presentation
reveal.js decks are a folder of HTML, CSS and plugins that nobody can open from a zip. Publish the deck to a URL that keeps the transitions, the speaker notes and the fragments — and takes comments per slide.
Aug 29, 2026
Share a Semgrep Report
Semgrep emits JSON and SARIF, which nobody reads. Convert to HTML, publish it from CI, and get one link per scan with triage threads anchored to the finding instead of a spreadsheet.
Aug 29, 2026
Share a SonarQube Report
SonarQube's findings live behind a server login half your reviewers don't have. Generate an HTML issues report in CI, publish it to a URL, and let people comment on the findings they disagree with.
Aug 29, 2026
Share Javadoc
Javadoc builds a directory nobody outside your build can open. Publish it to a URL for a branch, an internal library, or a partner — with comments anchored to the class that needs a better doc.
Aug 29, 2026
Share Marp Slides
Marp turns markdown into an HTML deck. Publishing it is the missing step: one command from your build, a permanent URL per deck, and comments anchored to the slide someone is arguing with.
Aug 29, 2026
Share TypeDoc Output
TypeDoc builds a docs/ folder that needs hosting before anyone can read it. Publish it in one drag or one CI step: a link per release, search intact, comments on the type that needs explaining.
Aug 29, 2026
SharePoint and OneDrive Won't Open Your HTML File
Modern SharePoint blocks custom script, so .html in a document library downloads instead of rendering. Why NoScript is on by default, why turning it off is the wrong fix, and what to do instead.
Aug 29, 2026
Send a Report to a Client Without a PDF, a Login, or a 40 MB Attachment
Deliverables that arrive as email attachments get lost, and portals make the client sign up. Publish the HTML once: a link they open in one click, comments that land on the report, revisions that show what changed.
Aug 28, 2026
Serve an HTML File Locally
`python -m http.server` fixes the blank report in ten seconds. It does not fix sending it to anyone. What a local server does and doesn't solve, the tunnel option, and when to just publish.
Aug 28, 2026
Share a .NET Coverage Report
`dotnet test` gives you Cobertura XML; ReportGenerator turns it into a browsable HTML tree. Publish the tree to Comma — drill-down intact, one stable URL per branch, comments on the uncovered lines.
Aug 28, 2026
Share a Deepchecks Report
`suite_result.save_as_html()` gives you one self-contained file that only opens in your notebook environment. Publish it: a URL, anchored comments on the failing check, a revision every run.
Aug 28, 2026
Share a Pandas DataFrame as HTML
`df.to_html()` writes a bare <table> with no <head> and no CSS. What to send instead, how to keep the formatting with Styler, and how to turn the table into a link people can comment on.
Aug 28, 2026
Share a Serenity BDD Report
`mvn serenity:aggregate` writes target/site/serenity — hundreds of files whose whole value is the click-through. Publish the directory to Comma: one link, evidence intact, comments on the failing step.
Aug 28, 2026
Share Pandoc HTML Output
`pandoc --standalone --embed-resources` gives you a document that works anywhere except in someone else's inbox. Publish it to Comma: a URL, anchored comments, and revisions when you re-render.
Aug 28, 2026
Upload an HTML File and Get a Link
Turn an .html file into a URL you can send. Drag one file, a whole output directory, or a zip; keep the CSS and JS working; choose who can open it. No repo, no build, no bucket.
Aug 28, 2026
Where to Host a Single HTML File
GitHub Pages, S3, Netlify Drop, tiiny.host, ngrok, a local server. What each costs you for one HTML report — public by default, a repo you don't want, or an hour of setup — and what to use instead.
Aug 28, 2026
Emailing an HTML Report
HTML attachments get quarantined, pasted report markup gets mangled by Outlook, and 30 MB never arrives. Send a link that renders faithfully and collects comments instead.
Aug 25, 2026
Embed an HTML Report in Confluence
Confluence Cloud won't render an attached HTML file and has no HTML macro. Publish the report to Comma and iframe the embed URL with your Atlassian origin allow-listed — the page stays current on its own.
Aug 25, 2026
Embed an HTML Report in Notion
Notion won't render an uploaded .html file, and /embed needs a URL that allows framing. Publish the report to Comma, allow-list your Notion origin, and the block stays current on every refresh.
Aug 25, 2026
My HTML Report Lost Its CSS
An HTML report that renders as unstyled text or an empty page almost always fails for one of five reasons. How to tell which one, the fix for each, and how to stop it recurring.
Aug 25, 2026
Share a Bandit Report
bandit -f html writes a findings file that dies in the CI job. Publish it to Comma as a private report: one link for the reviewers, a thread per finding, and a revision per run.
Aug 25, 2026
Share a MkDocs Site Privately
mkdocs build gives you a site/ folder and then a hosting decision you didn't want to make. Publish the build to Comma for an access-controlled link with comments on the page itself.
Aug 25, 2026
Share a SHAP Plot
shap.save_html writes an interactive force plot that only opens on your machine. Publish it to Comma: a link the risk reviewer or product owner can open, with comments on the feature they're questioning.
Aug 25, 2026
Share a TestNG Report
TestNG writes index.html and emailable-report.html into test-output/, then the workspace is wiped. Publish the folder to Comma for a stable link, a revision per run, and comments on the failures.
Aug 25, 2026
Share an Altair Chart
chart.save('chart.html') gives you an interactive Vega-Lite chart in a file nobody can open. Publish it to Comma: a link with the zoom, tooltips and selections intact, and comments on the outlier.
Aug 25, 2026
Share an ESLint HTML Report
eslint -f html writes a single self-contained file that nobody ever looks at. Publish it to Comma: one link, a thread per rule you're arguing about, and a revision per run showing the count coming down.
Aug 25, 2026
Share an Extent Report
ExtentSparkReporter writes Spark.html into target/ and it dies with the build. Publish the report folder to Comma for a stable URL, screenshots intact, and a thread per failed test.
Aug 25, 2026
Share an HTML Report in Microsoft Teams
Upload an .html file to a Teams channel and SharePoint hands it back as a download instead of rendering it. Publish the report to a link that opens in the browser, with access control and comments.
Aug 25, 2026
Share an lcov / genhtml Coverage Report
genhtml writes a directory of per-file HTML that only makes sense together. Publish the whole thing to Comma: one URL, source drill-down intact, comments on the uncovered lines.
Aug 25, 2026
Someone Sent Me an HTML File
An .html file that opens blank, loses its styling, or won't open at all on a phone. Why local HTML files break, what to try first, and how to turn the file into a link anyone can open.
Aug 25, 2026
Share a Benchmark Report
Criterion, pytest-benchmark and JMH all produce HTML nobody sees. Publish the report to Comma for a link with anchored comments and a revision per run, so a 12% regression gets discussed, not screenshotted.
Aug 24, 2026
Share a JaCoCo Coverage Report
JaCoCo writes target/site/jacoco/ and Maven archives it where nobody looks. Publish the report to Comma for one browsable URL, comments on the uncovered class, and a revision per build.
Aug 24, 2026
Share a Jupyter Notebook as HTML
jupyter nbconvert --to html gives you a self-contained file nobody can open. Publish it to Comma for a URL that renders the plots, keeps the outputs, and lets a reviewer comment on cell 14.
Aug 24, 2026
Share a Profiling Report
pyinstrument and clinic.js write self-contained HTML profiles that never leave your laptop. Publish one to Comma for a URL where the call tree stays explorable and the fix gets discussed on the hot frame.
Aug 24, 2026
Share a Static Storybook Build
storybook-static/ is a folder your designer can't open. Drag the build into Comma for a browsable URL with anchored comments on the component that's wrong, and a revision per build.
Aug 24, 2026
Share a Sweetviz Report
Sweetviz writes a self-contained HTML file that only opens on your machine. Publish it to Comma for a URL where the train/test comparison stays interactive and a reviewer can question a column.
Aug 24, 2026
Share a Vitest HTML Report
vitest --reporter=html writes a folder that only opens through a local server. Publish it to Comma for a URL teammates can open, comment on, and compare run to run.
Aug 24, 2026
Share an Nmap Scan Report
nmap -oX plus xsltproc gives you a readable HTML scan report. Publish it to Comma as a private report with anchored comments, so 'that port is the load balancer' is recorded, not re-explained.
Aug 24, 2026
Share an OWASP Dependency-Check Report
dependency-check-report.html lands in a CI artifact and expires unread. Publish it to Comma for a URL with anchored comments, so 'this CVE isn't reachable' is recorded once instead of re-argued every scan.
Aug 24, 2026
Share an RSpec HTML Report
rspec --format html writes a single self-contained file. Publish it to Comma for a URL your team can open, comment on the failing spec, and compare against the last run.
Aug 24, 2026
Share a Bokeh Plot
Bokeh's save() writes a standalone HTML file that loads BokehJS from its own CDN. Publish it to Comma with INLINE resources and you get a URL where the tools, tooltips and linked brushing still work.
Aug 23, 2026
Share a Bundle Analyzer Report
webpack-bundle-analyzer and rollup-plugin-visualizer write one self-contained HTML treemap. Publish it to Comma: the treemap stays zoomable, the 400 KB dependency gets a comment thread, and each build is a revision.
Aug 23, 2026
Share a Databricks Notebook
Export a Databricks notebook to HTML and publish it to Comma: stakeholders read the charts and tables at a URL, comment on the number they question, and never touch your workspace.
Aug 23, 2026
Share a Folium Map
m.save('map.html') gives you a pannable Leaflet map that only you can open. Publish it to Comma for a URL where the map still zooms, the markers still pop, and a colleague can comment on a cluster.
Aug 23, 2026
Share a Mochawesome Report
Mochawesome writes a good-looking HTML report into a folder nobody opens. Publish it to Comma: one link per suite, a comment thread on the flaky test, and a revision per run instead of a build artifact.
Aug 23, 2026
Share a Plotly Chart as a Link
fig.write_html() gives you an interactive chart trapped in a local file. Publish it to Comma for a URL where hover, zoom and legend toggles still work — and where a colleague can comment on the spike.
Aug 23, 2026
Share a Snyk Report
snyk-to-html turns Snyk JSON into one readable file. Publish it to Comma for a URL per project, threads on individual advisories, and a revision per scan — no Snyk seat required to read it.
Aug 23, 2026
Share a ydata-profiling Report
ydata-profiling (pandas-profiling) writes one huge self-contained HTML file that email rejects and Slack truncates. Publish it to Comma for a URL, anchored comments on individual columns, and a revision per refresh.
Aug 23, 2026
Share an npm audit Report
npm audit output is 900 lines of terminal text nobody re-reads. Render it to HTML, publish it to Comma, and get a link where each advisory has a thread and each run is a revision.
Aug 23, 2026
Share an OWASP ZAP Report
ZAP writes one self-contained HTML report per scan. Publish it to Comma: a stable URL per target, a comment thread on each alert so triage decisions survive, and a revision per scan you can diff.
Aug 23, 2026
Share OpenAPI Docs
Build your OpenAPI spec into a single HTML file with Redocly, publish it to Comma, and get a URL where reviewers comment on the endpoint they disagree with — before the API ships.
Aug 23, 2026
Share Sphinx Docs
Sphinx builds a directory of HTML you cannot email. Drop the _build/html folder into Comma: cross-page links keep working, reviewers comment on the paragraph they object to, and there is no docs server to run.
Aug 23, 2026
Embed an HTML Report in Your Own Site
Drop a live Comma report into your docs, intranet or customer portal with a div and a script tag. Origin-allow-listed, sandboxed, and always the current revision — no iframe of a file server, no stale export.
Aug 22, 2026
Share a Cucumber HTML Report
Cucumber's HTML formatter writes one self-contained file that CI then buries in an artifact zip. Publish it to Comma with one curl: a stable URL per suite, threads pinned to failing scenarios, a revision per run.
Aug 22, 2026
Share a Gatling Report
Gatling writes index.html plus js/ and style/ directories, so a lone HTML upload renders blank. Publish the index to Comma and upload the siblings as assets: one stable URL, comments on the p99, a revision per run.
Aug 22, 2026
Share a Jest HTML Report
jest-html-reporter output ends up as a CI artifact zip nobody opens. Publish it to Comma with a single curl: a stable URL per suite, threads anchored to failing tests, and a revision for every run.
Aug 22, 2026
Share a Locust Load Test Report
Locust's --html report is a single self-contained file that dies in a CI artifact zip. Publish it to Comma with one curl: a stable URL, comments on the p95 row, and a revision per run you can diff.
Aug 22, 2026
Share a Robot Framework Report
Robot Framework writes report.html and log.html as self-contained files, and CI hides both in an artifact zip. Publish them to Comma with one curl: a stable link, comments on failing keywords, a revision per run.
Aug 22, 2026
Share a Trivy Scan Report
Trivy's HTML template output beats scrolling CI logs for CVEs. Publish it to Comma with one curl: a stable URL per image, threads on individual findings for triage, and a revision per scan you can diff.
Aug 22, 2026
Share an Accessibility Report
Accessibility findings are fixed by designers and content owners who have no CI access. Publish the axe or pa11y HTML report to Comma: one stable URL, a thread per violation, and a revision per run showing what got fixed.
Aug 22, 2026
Share an Evidently Drift Report
Evidently writes a self-contained HTML report that ends up in a notebook nobody else runs. Publish it to Comma: one URL per model, comments on the drifted feature, and a revision per run that shows the trend.
Aug 22, 2026
Share an R Markdown Report
rmarkdown::render writes a self-contained HTML file, and it still ends up as an email attachment. Publish it to Comma with one httr call: a stable URL, comments anchored to a specific figure or table, and a revision per rerun.
Aug 22, 2026
Turn JUnit XML Into a Shareable HTML Report
JUnit XML is a machine format your teammates can't read, and CI's test tab is locked to CI users. Convert it to HTML, publish it to Comma with one curl, and get a stable URL with comments on failing tests.
Aug 22, 2026
Share a Cypress Test Report
Cypress has no built-in shareable report — mochawesome writes a file your team can't open. Publish it to Comma: one stable URL per suite, videos and screenshots attached, anchored comments on each failing spec, a revision per run.
Aug 21, 2026
Share a JMeter HTML Dashboard
JMeter's HTML dashboard is a folder of files that only works locally. Publish a run summary to Comma with one curl: a stable URL per test plan, comments anchored to the slow transaction, and a revision per run.
Aug 21, 2026
Share a Newman / Postman Run Report
newman-reporter-htmlextra writes a file only you can open. Publish the collection run to Comma with one curl: a stable URL per collection, comments anchored to the failing request, and a revision per run you can diff.
Aug 21, 2026
Share a Security Scan Report
Trivy, Semgrep and npm audit output ends up in CI logs nobody triages. Publish the scan as an HTML report with one curl: a private URL per scan, a comment thread per finding, and a revision per run that shows what's new.
Aug 21, 2026
Share a Terraform Plan
Terraform plan output dies in PR comments: truncated at the character limit, unreadable in monospace, impossible to comment on line by line. Publish an HTML plan summary to Comma — one URL per stack, anchored comments on the destroys, a revision per run.
Aug 21, 2026
Share an Interactive HTML Report
Most ways to share an HTML report kill its JavaScript: email strips it, Confluence disables the macro, Jenkins' CSP blocks it, GitHub renders markdown. Comma stores report HTML verbatim and runs it in a sandboxed iframe — Chart.js, Plotly and D3 dashboards keep working behind a private link.
Aug 21, 2026
Share Great Expectations Data Docs
Great Expectations builds Data Docs as a static site you then have to host. Publish a validation run to Comma with one curl instead: a stable URL, comments anchored to the failed expectation, and a revision per run.
Aug 21, 2026
How to Share an Allure Report
Allure reports are a JavaScript app that breaks when opened from the filesystem and expires when the CI artifact does. Hosting options compared, plus the digest-plus-archive pattern that gives you a stable link and comments.
Aug 19, 2026
Share a k6 Load Test Report
k6's terminal summary scrolls away and the HTML export lands in a CI artifact zip. Publish each load test to a stable URL with a revision per run, so p95 regressions are a diff instead of an argument.
Aug 19, 2026
Share dbt Docs With Analysts Who Don't Have a dbt Account
dbt docs generate makes a static site that only runs locally or behind a paid seat. Publish the catalog to a stable URL your analysts, PMs and auditors can open — with comments on the models they question.
Aug 19, 2026
Share a Lighthouse Report
Lighthouse JSON is unreadable and the HTML report is a file on someone's laptop. Publish either one to Comma: one stable URL per site, anchored comments on each opportunity, and a revision per run.
Aug 18, 2026
Share a pytest HTML Report
pytest-html writes a report nobody can open. Publish it to Comma from CI with one curl: a stable URL per suite, anchored comments on failing tests, and a revision per run you can diff.
Aug 18, 2026
Share an EDA Report
ydata-profiling, Sweetviz and D-Tale write a big self-contained HTML file that email rejects. Publish it to Comma for one private link, anchored comments on individual columns, and a revision per refresh.
Aug 18, 2026
Share an HTML Coverage Report
coverage.py and Istanbul write a folder of HTML nobody can open. Drag htmlcov/ into Comma and get one browsable link, anchored comments on uncovered lines, and a revision per run.
Aug 18, 2026
Share a Playwright HTML Report
Stop digging Playwright reports out of CI artifact zips. Publish a run summary to Comma with one curl: a stable URL per suite, anchored comments on failing tests, and a revision per run you can diff.
Jul 2, 2026
AI agents
How to Give an AI Agent Feedback
Telling an agent 'try again' loses the specifics. Anchored comments on the agent's HTML output give it exactly what it needs to adjust — and Comma's MCP server lets it read those comments back.
Sep 11, 2026
Let an AI Agent Respond to Anchored Comments on Its Own Output
An agent that can read and reply to comments on its own HTML reports closes the feedback loop. Comma's MCP server exposes `list_comments`, `reply_to_comment`, and `set_comment_status` as typed tools.
Sep 11, 2026
Scoped Tokens for AI Agents
An AI agent needs a credential. That credential needs to be scoped, revocable, rate-limited, and shared across every surface the agent touches. Comma's `comma_sk_…` token is that shape.
Sep 11, 2026
Where Do Claude Code Routines Post Their Reports?
Claude Code Routines schedule the agent's work but don't say where a report should land. Session logs, Slack, and PRs each lose the review loop. Comma is the destination: publish via MCP, review with anchored comments, revise on the next run.
Sep 11, 2026
Where Should My AI Agent Post Its Work?
A practical guide for AI builders deciding where Claude, Cursor, or custom agents should publish their HTML output. Comparing Slack, S3, custom webhooks, and Comma's MCP-native posting surface.
Sep 11, 2026
Share a Claude Desktop Artifact
Claude Desktop builds the dashboard, the write-up, the interactive chart — inside the app on your machine. Give it the Comma MCP server and it publishes to a URL anyone can open.
Sep 9, 2026
Share a Qodo Review or Test Report
Qodo's review and test-generation output lands in a PR comment or an IDE pane and scrolls away. Publish the full analysis to a URL with anchored comments the agent can read back.
Sep 9, 2026
Share What a Factory Droid Produced
A droid runs its task in Factory's environment and writes the plan, the migration report, the RCA there. Have it publish to a URL you own, with anchored comments it can read back.
Sep 9, 2026
Share What Amazon Q Developer Produced
Amazon Q writes the upgrade plan, the IAM review, the cost analysis — into a CLI session or an IDE pane nobody else can open. Publish it to a URL your team can read and comment on.
Sep 9, 2026
Share What Antigravity Produced
Antigravity writes implementation plans and task walkthroughs into its Artifacts pane, where only you can read them. Publish the walkthrough to a URL your reviewer can open and comment on.
Sep 9, 2026
Share What Augment Produced
Augment reads the whole repo and writes the impact analysis, the dependency map, the refactor plan into an editor panel. Publish it to a URL reviewers can open and comment on.
Sep 9, 2026
Share What Kiro Produced
Kiro writes requirements, design and task documents into .kiro/specs and nobody outside your editor reads them. Publish the spec to a link the PM and the reviewer can comment on.
Sep 9, 2026
Share What Manus Produced
Manus finishes in its own cloud VM and hands you a file plus a share link on its domain. Republish the HTML to a URL you control, with your access rules and a comment thread.
Sep 9, 2026
Share What opencode Produced
opencode writes the audit, the plan, the postmortem into a TUI session on your machine. Attach the Comma MCP server and it publishes to a URL your team can open and comment on.
Sep 9, 2026
Share What Trae's Agent Produced
Trae's builder writes the plan, the review, the analysis into a panel in your editor. Attach the Comma MCP server and it publishes finished work to a link your team can comment on.
Sep 9, 2026
Share What Warp's Agent Produced
Warp's agent writes the incident timeline, the query plan analysis, the migration checklist — into a terminal block on your laptop. Publish it to a URL your team can open and comment on.
Sep 9, 2026
Share Aider's Output
Aider is file-and-git shaped, so its analysis ends up as a commit or a terminal buffer. A three-line publish step turns the run's write-up into a URL with a comment thread.
Sep 5, 2026
Share Amp's Output
Amp runs in the terminal and the editor and produces long, careful write-ups. Add Comma as an MCP server and put the rule in AGENTS.md so each one ends as a page with a URL.
Sep 5, 2026
Share Claude Code's Output
Claude Code writes the audit, the migration plan, the incident timeline — into a terminal only you can see. Give it a publish tool and it hands back a link your team can open and comment on.
Sep 5, 2026
Share Cline's Output
Cline plans, investigates and writes long summaries inside a VS Code panel. Add Comma's MCP server and a .clinerules entry and it publishes the result as a page with a stable URL.
Sep 5, 2026
Share Continue's Output
Continue runs in VS Code and JetBrains and takes MCP servers in its config. Add Comma, add a rule, and finished analysis leaves the panel as a page your team can comment on.
Sep 5, 2026
Share Devin's Output
Devin works in a cloud workspace and reports back through its own session view. For the write-ups that are not pull requests, one API call gives the result a URL your whole team can read.
Sep 5, 2026
Share Gemini CLI Output
Gemini CLI's long answers live in a terminal nobody else has. Attach an MCP server, write the rule into GEMINI.md, and the agent publishes an HTML report and replies with a link.
Sep 5, 2026
Share GitHub Copilot's Output
Copilot's agent mode produces reviews, plans and summaries inside a VS Code side panel. Add an MCP server and a repo instruction file and it publishes them as pages your team can open.
Sep 5, 2026
Share Goose's Output
Goose's extensions are MCP servers, so publishing is just another one. Add Comma, add a recipe instruction, and Goose ends a session with a link instead of a terminal buffer.
Sep 5, 2026
Share Jules's Output
Jules works asynchronously on a cloud VM and returns a pull request. For the analysis that is not a diff, a publish step in the workflow gives it a URL and a comment thread.
Sep 5, 2026
Share Junie's Output
Junie plans and investigates inside IntelliJ, PyCharm or GoLand. Add Comma's MCP server and a guidelines entry and the finished document leaves the IDE as a URL with a comment thread.
Sep 5, 2026
Share OpenHands Output
OpenHands works inside a container whose filesystem disappears when the session ends. Publishing to a URL is the only exit that survives the runtime — over MCP or one REST call.
Sep 5, 2026
Share Replit Agent Output
Replit Agent's analysis lives inside a repl, so sharing it means inviting someone into your workspace. Publishing gives the document its own URL and its own access setting.
Sep 5, 2026
Share Roo Code's Output
Roo Code's modes produce plans and reviews that stay in a VS Code panel. Add Comma's MCP server, put the rule in your mode instructions, and each mode ends with a shareable URL.
Sep 5, 2026
Share Windsurf Cascade Output
Cascade's plans, audits and summaries end up in a Windsurf panel only you can see. Attach an MCP server, put the rule in your workspace rules, and it publishes a page with a URL.
Sep 5, 2026
Share Zed's Agent Output
Zed's agent panel produces documents that never leave the editor. Add Comma as a context server and the agent publishes finished work to a URL your team can read and annotate.
Sep 5, 2026
Share a Langfuse Eval Result When Langfuse Is Self-Hosted
Self-hosted Langfuse is behind your VPN, which is why the reviewer who needs to score the outputs can't see them. Publish the scored table to a URL they can open and comment on.
Sep 2, 2026
Share a LangSmith Eval Result Without Sharing the Whole Trace
A LangSmith public share link exposes the entire run — every prompt, every intermediate output. Publish the comparison your reviewers actually need, on a URL they can comment on.
Sep 2, 2026
Share OpenAI Codex Output
Codex finishes the task in a sandbox and prints the summary to your terminal. Add one line to AGENTS.md and it publishes the report to a URL your team can open, read and comment on.
Sep 2, 2026
Share What Cursor's Agent Produced
Cursor's agent writes the migration plan, the audit, the test summary — inside your editor, where nobody else can read it. Have it publish to a URL your team can open and comment on.
Sep 2, 2026
Share an LLM Eval Report
promptfoo, DeepEval and Ragas all produce an HTML view somebody has to run a server to see. Publish the eval to Comma for a link where a reviewer can disagree with a specific grade, on the row it's on.
Aug 24, 2026
Share a Deep Research Report
Deep research output is long, sourced, and mostly unread. Publish it as HTML in Comma so reviewers can challenge a specific claim in place, and so the next run updates the same link instead of starting a new thread.
Aug 23, 2026
Share HTML an AI Chat Generated
ChatGPT canvases and Claude artifacts render beautifully and travel badly. Paste the HTML into Comma to get a shareable URL that renders the real thing, keeps comments on it, and does not require an account to read.
Aug 23, 2026
Context Budgeting for AI Reports: Cut LLM Token Waste Before You Cut Quality
A practical guide to context budgeting for AI report agents. Learn how to reduce LLM token consumption, preserve prompt cache hits, and avoid paying models to re-read the same report every run.
Jun 27, 2026
Routines & automation
Automated HTML Report Delivery on a Schedule
Stop maintaining a Python script that emails the weekly report. Comma routines re-run an underlying skill on a cron and post the refreshed HTML as a revision on a commentable, shareable document.
Sep 11, 2026
Daily Claude Eval Refresh, on Autopilot
Run your Claude eval harness every morning. The results post as a new revision on a shared report; reviewers see the diff against yesterday and pin anchored comments. No babysitting.
Sep 11, 2026
Hosted Cron for AI Agents
Comma is the hosted cron for AI agents. Scoped tokens, prepaid-credit or bring-your-own Bedrock compute, and a posting surface that reviewers actually open. No Lambda, no GitHub Action, no Mac mini.
Sep 11, 2026
Monthly Compliance Digest from Your AI Pipeline
Run your monthly compliance checks as a Comma routine. The digest lands as a revision on a board-visible report with revision history, anchored comments, and a clean audit trail.
Sep 11, 2026
Run a Claude Skill on a Schedule
Wire any Claude skill to a daily, hourly, or monthly schedule. Comma re-runs it against fresh data and posts the new HTML as a revision on your report. No cron daemon to maintain.
Sep 11, 2026
Weekly Analytics Digest, Refreshed in Place
Replace the Monday morning analytics script with a routine. The digest re-runs on a cron, lands as a new revision on a shared Comma report, and reviewers comment in-place — same link every week.
Sep 11, 2026
CI & pipelines
Share an HTML Report From Airflow
Airflow writes the report to a worker's local disk, or to a bucket only the DAG can read, and the UI is behind a login. Publish it from the task so the analyst waiting on it gets a URL.
Sep 9, 2026
Share an HTML Report From Dagster
Dagster stores your HTML as a materialization or an IO-managed asset behind the webserver login. Publish it from the asset so the stakeholder waiting on the data gets a URL.
Sep 9, 2026
Share an HTML Report From Prefect
A Prefect flow writes the report inside an ephemeral work pool container and the artifact panel takes markdown, not documents. Publish from the flow so the reader gets a URL.
Sep 9, 2026
Share a Buildkite HTML Report
Buildkite artifacts download instead of rendering, and annotations only take a slice of markdown. Publish the real HTML report from the step and hand out a URL that renders.
Sep 2, 2026
Share a TeamCity HTML Report Without a TeamCity Login
TeamCity report tabs render your HTML behind a sandbox and behind a login, and cleanup rules delete it on a schedule. Publish the report from the build step to a permanent, commentable URL.
Sep 2, 2026
Share an HTML Report From Argo Workflows
Argo artifacts live in your object store behind the cluster, and the Argo UI is usually behind a VPN. Publish the report from an exit handler so people outside Kubernetes can read it.
Sep 2, 2026
Share an HTML Report From AWS CodeBuild Without Building a Bucket
CodeBuild report groups only understand test result formats, and an HTML artifact in S3 needs a bucket policy, a presigned URL or a static site. Publish it from buildspec.yml instead.
Sep 2, 2026
Share an HTML Report From Google Cloud Build
Cloud Build has no report viewer — your HTML lands in a GCS bucket that needs IAM, a signed URL or public access before anyone can read it. Publish it from cloudbuild.yaml in one step.
Sep 2, 2026
Share an HTML Report From Travis CI
Travis CI has no artifact viewer at all: your HTML report exists for the length of the job and then the container is gone. One curl in after_script gives it a permanent URL.
Sep 2, 2026
Publish an HTML Report from Azure Pipelines (Without a Marketplace Extension)
Azure DevOps won't render an HTML artifact — it downloads as a zip and the run expires on a retention policy. Publish the report to a stable URL with one curl task: comments, revisions, and diffs included.
Aug 21, 2026
Publish an HTML Report from Bitbucket Pipelines (Artifacts Expire in 14 Days)
Bitbucket Pipelines artifacts download as a zip and expire after 14 days, and the Test Reports tab only parses JUnit XML. Publish the report to a stable URL with one curl step — comments, revisions and diffs included.
Aug 21, 2026
Jenkins HTML Report With No CSS? The CSP Fix
Jenkins HTML Publisher strips CSS and JavaScript because of DirectoryBrowserSupport's Content-Security-Policy. Here's the sanctioned fix, why loosening it is risky, and how to publish the report to a stable URL instead.
Aug 19, 2026
Publish an HTML Report from GitHub Actions (Without Pages or Artifact Zips)
GitHub Actions can't render HTML. Artifacts download as zips, expire in 90 days, and need repo access. Publish the report to a stable URL with one curl step — comments, revisions, and diffs included.
Aug 19, 2026
Share a CircleCI HTML Report Outside the Artifacts Tab
CircleCI will render your HTML artifact — for people with an org login, for 30 days, with nowhere to leave feedback. Publish the report to a stable URL from one step in config.yml instead.
Aug 19, 2026
View an HTML Report from GitLab CI Without Setting Up Pages
GitLab.com won't render HTML artifacts inline — the artifact browser serves them as downloads, and Pages is a whole separate project. Publish the report to a stable URL from one curl in your .gitlab-ci.yml.
Aug 19, 2026
Editor & agent guides
Use Comma with Claude Code
Install the Comma plugin in Claude Code and your agent can publish HTML reports, search the workspace, and link to reports — over a scoped, revocable token. One-line install.
Sep 11, 2026
Use Comma with Claude Desktop
Attach the Comma MCP server to Claude Desktop and publish HTML straight from a conversation — no terminal. Reports land behind your chosen access level with anchored comments.
Sep 11, 2026
Use Comma with Codex
Attach the Comma MCP server to OpenAI Codex. Your Codex agent can publish HTML reports, search the workspace, and read and reply to anchored comments under a scoped token.
Sep 11, 2026
Use Comma with Cursor
Add the Comma MCP server to Cursor in one config edit. Your Cursor agent can publish HTML reports, search the workspace, and read and reply to anchored comments under a scoped token.
Sep 11, 2026
Use Comma with VS Code
Add the Comma MCP server to VS Code in one command. GitHub Copilot's agent mode can publish HTML reports, search the workspace, and read and reply to anchored comments under a scoped token.
Sep 11, 2026
Use Comma with Windsurf
Add the Comma MCP server to Windsurf's mcp_config.json and Cascade can publish HTML reports, search the workspace, and read and reply to anchored comments under a scoped token.
Sep 11, 2026
Use Comma with Gemini CLI
Attach the Comma MCP server to Gemini CLI. Your agent can publish HTML reports, search the workspace, and read and reply to anchored comments under a scoped token.
Sep 2, 2026
Notebooks & integrations
Share a Google Colab Notebook as HTML
Colab sharing hands people a runtime they can re-execute. Export the notebook to HTML and publish it to Comma instead: a read-only page with outputs frozen, comments anchored to a cell, and a revision per run.
Aug 22, 2026
Share a Jupyter Notebook as HTML
Export your notebook with nbconvert, publish the HTML to Comma, and collect comments anchored to specific cells and table rows. Private by choice, revisioned, agent-friendly — an nbviewer alternative for notebooks that aren't public.
Jul 2, 2026
Comparisons & alternatives
7 Hex Alternatives Worth Looking At in 2026
A practical list of Hex alternatives — for notebook work, for sharing HTML reports, and for letting AI agents post into your team's workspace. Honest tradeoffs included.
Sep 11, 2026
8 Mode Analytics Alternatives Worth Considering in 2026
A practical list of Mode Analytics alternatives — for BI dashboards, for SQL workbenches, for sharing HTML reports, and for AI-agent posting. Honest tradeoffs included.
Sep 11, 2026
Comma vs display.dev: Which Should Host Your Agents' Reports?
Both give agent-generated HTML a URL with comments and an MCP loop. display.dev leads with company auth; Comma adds scheduled routines, skills, and a fully free product. A direct, fair comparison.
Sep 11, 2026
Comma vs Hex: Which Should You Use for Sharing & Reviewing Reports?
Hex builds the analysis. Comma renders the HTML, anchors comments, and refreshes it on a cron. A direct, honest comparison for data teams choosing between the two.
Sep 11, 2026
Comma vs Mode: BI Platform or Report Sharing Layer?
Mode is a SQL-first BI platform. Comma is a sharing, comment, and refresh layer for HTML reports — including reports generated by AI tools. A direct, honest comparison.
Sep 11, 2026
Datapane Alternative: Where Did One-Line Report Publishing Go?
Datapane shut down in August 2023. Quarto and marimo replaced the authoring half — nothing replaced upload-and-share. Comma is that layer: publish HTML from any tool, get a link, collect anchored comments.
Sep 11, 2026
Use Comma with Hex: Faithful Sharing, Anchored Comments, Scheduled Refresh
Hex builds the analysis. Comma is where your team reviews it. Connect a Hex notebook to a Comma routine so refreshed HTML lands on a commentable, shareable document — same link every cadence.
Sep 11, 2026
Use Comma with marimo: Export the Notebook, Review It Like a Doc
marimo exports reactive Python notebooks to HTML — then leaves sharing to you. Publish the export to Comma for anchored comments, share roles, and revisions on a stable link.
Sep 11, 2026
Use Comma with Mode: Faithful Sharing, Anchored Comments, Scheduled Refresh
Mode is the BI platform. Comma is where your team reviews the output. Connect a Mode report to a Comma routine so refreshed HTML lands on a commentable, shareable document — same link every cadence.
Sep 11, 2026
Use Comma with Quarto: Render the Report, Then Get It Reviewed
Quarto renders .qmd to polished HTML — and stops there. Pipe the output to Comma for anchored comments, share roles, and revisions on a stable link. One curl call or one MCP tool.
Sep 11, 2026
Deepnote Alternatives for Sharing Notebook Output (2026)
Deepnote is a full collaborative notebook platform. Alternatives compared for teams who only need to share the rendered result — with access control, comments and a stable URL.
Sep 6, 2026
Firebase Hosting Alternatives for Private HTML Reports (2026)
Firebase Hosting is a fine static CDN and has no per-page access control — gating a report means writing Cloud Functions. Alternatives compared for internal HTML reports.
Sep 6, 2026
htmlpreview.github.io Alternatives That Don't Break Your Assets (2026)
htmlpreview.github.io renders raw GitHub HTML in the browser — until CSS, fonts or fetch() calls fail, or the repo is private. Alternatives compared for previewing and sharing HTML from a repository.
Sep 6, 2026
Hugging Face Spaces Alternatives for Sharing Model Results (2026)
Spaces is built for live demos with a runtime, a queue and a sleep timer. Alternatives compared for teams sharing eval results, model cards and benchmark reports rather than a demo.
Sep 6, 2026
ngrok Alternatives for Showing Someone a Local HTML Report (2026)
ngrok tunnels localhost so a colleague can see your report — until you close the laptop. Alternatives compared for sharing a locally generated HTML file that has to stay reachable.
Sep 6, 2026
Quarto Pub Alternatives for Private Quarto Documents (2026)
quarto publish quarto-pub is one command and one public URL. Alternatives compared for teams that need private Quarto documents, comments on the rendered output, and publishing from CI.
Sep 6, 2026
raw.githack.com Alternatives for Serving HTML From a Repo (2026)
raw.githack serves GitHub files with the right Content-Type — for public repos, pinned to a ref, with no access control and no review layer. Alternatives compared.
Sep 6, 2026
Read the Docs Alternatives for Private and Per-Build Docs (2026)
Read the Docs builds and hosts documentation from a repo. Alternatives compared for private docs, for previewing one build, and for docs someone needs to comment on.
Sep 6, 2026
RPubs Alternatives for Private R Markdown Reports (2026)
RPubs publishes R Markdown in one click — and everything you publish is public, forever, with no comments and no versions. Private alternatives compared for R users who share reports with a team or a client.
Sep 6, 2026
Streamlit Community Cloud Alternatives for Private Apps and Reports (2026)
Community Cloud is free, public-leaning and sleeps when idle. Alternatives compared for teams who need a private URL, an always-on page, or just the output rather than the app.
Sep 6, 2026
Surge.sh Alternatives for Publishing HTML From the CLI (2026)
surge is one command from a folder to a URL — public, unversioned, no comments. Alternatives compared for teams publishing HTML reports from a terminal or a CI job.
Sep 6, 2026
WeTransfer Alternatives for Sending an HTML Report (2026)
WeTransfer moves the file and stops there — the recipient downloads an .html they may not be able to open, the link expires, and nobody can comment. Alternatives compared.
Sep 6, 2026
Comma vs Confluence: Where Should an HTML Report Actually Live?
Confluence Cloud has no HTML macro and serves attachments as downloads. An honest comparison for teams that keep trying to get a generated HTML report onto a wiki page just to collect comments.
Sep 3, 2026
Comma vs Notion: Where Should an HTML Report Actually Live?
Notion can't render an uploaded .html file — it downloads it. An honest comparison for teams that keep trying to paste report content into a Notion page just to get comments on it.
Sep 3, 2026
Netlify Drop Alternatives
Netlify Drop is the fastest way to put a folder on the internet, and the wrong shape for a report: public by default, no comment layer, and a new URL every time you re-drop.
Aug 31, 2026
nbviewer Alternatives for Sharing Notebooks (2026)
nbviewer renders a public notebook from a public URL. Alternatives compared for the common case it doesn't cover: a private notebook, shared with named people, that someone can comment on.
Aug 24, 2026
Posit Connect Alternatives for Sharing R and Python Reports (2026)
Posit Connect is a platform: apps, APIs, scheduling, SSO, a server to operate. If what you actually publish is rendered R Markdown and Quarto documents, the alternatives are much lighter.
Aug 24, 2026
Rendering HTML From a Gist or Repo
GitHub serves HTML as source, and htmlpreview.github.io is a proxy with real limits. The options for turning an HTML file in a repo into a link someone can actually open, compared.
Aug 24, 2026
S3 Static Hosting Alternatives for One-Off HTML Reports (2026)
An S3 bucket for report HTML means bucket policies, signed URLs, CloudFront and a cache invalidation per publish. Lighter alternatives for the case where the artifact is a report, not a site.
Aug 24, 2026
Comma vs Google Docs: Where Should Your Report Collect Comments?
Google Docs is the best prose collaboration tool ever shipped — and it can't render your HTML report. An honest comparison for teams pasting report content into Docs just to collect comments.
Jul 2, 2026
Cloudflare Access Alternatives for Sharing Internal HTML (2026)
Cloudflare Access is a zero-trust proxy, not a publishing tool. When the goal is 'put this HTML report behind company auth', here are the honest alternatives — managed and self-assembled.
Jun 12, 2026
GitHub Pages Alternatives for Private & Internal HTML (2026)
GitHub Pages is free — and public. What engineering teams use instead when an HTML report needs access control: honest options, from identity proxies to report-sharing layers.
Jun 12, 2026
Tiiny Host Alternatives With Real Access Control (2026)
Tiiny Host makes HTML sharing instant — with a shared password at best. Alternatives compared for teams that need identity-based access, comments, and version history on shared HTML.
Jun 12, 2026
Vercel Alternatives for Sharing Internal HTML Reports (2026)
Vercel is built to deploy apps, not to share a report with your team. Honest alternatives for putting an HTML file behind access control — with comments, history, and agent publishing.
Jun 12, 2026
By role
Client Deliverables That Open in a Browser
The audit is a 40 MB zip the client's mail server rejected, and three rounds of feedback live in four email threads. Publish the deliverable to a link, collect comments on it, and keep the revision trail.
Sep 11, 2026
Comma by Role
Consultants, QA, data scientists, security teams, SREs, freelancers, maintainers. The same problem — an HTML report nobody else can open — arrives differently in each job. The workflow for yours.
Sep 11, 2026
Coverage, Benchmarks and Build Reports Contributors Can Actually Open
A contributor's CI run produced a coverage report locked behind an artifact download they may not have permission for. Publish it to a public URL and link it from the PR.
Sep 11, 2026
Doc Previews an SME Can Review Before the Merge
Your reviewer won't check out a branch to read a MkDocs build, so they review the rendered site after it ships. Publish the preview to a link and collect anchored comments on the paragraph.
Sep 11, 2026
Handing Work to a Client Who Will Never Run npm install
The client can't open a zip, doesn't have a GitHub account, and replies to your build report with 'it won't open'. Send a URL that works on their phone, and collect the feedback on the page.
Sep 11, 2026
One Link Instead of a Weekly Deck
Assembling the weekly status from six dashboards into a slide deck is a recurring tax on your Friday. Make it a scheduled report at one URL that regenerates itself.
Sep 11, 2026
Postmortems and Incident Reports With the Graphs Still In Them
The incident review pastes Grafana screenshots into a doc and loses every axis label. Publish the timeline, the dashboards and the profile as one URL responders can annotate.
Sep 11, 2026
Report Sharing for Agencies
Twelve clients, twelve monthly reports, and one link pasted into the wrong Slack channel is a breach. How agencies publish client-facing reports with separation that holds.
Sep 11, 2026
Share Analysis With Stakeholders
The notebook renders on your machine, exports to a 30 MB HTML file, and arrives in Slack as an unpreviewable attachment. Publish the analysis to a link where the charts still work and the questions land on the chart.
Sep 11, 2026
Share Scan and Pentest Findings Without Making Them Public
A Trivy, Semgrep or Burp report is exactly the document you can't drop on a public host. Private-by-default reports, scoped tokens, and a retest revision at the same URL.
Sep 11, 2026
Test Reports That Outlive the CI Artifact
The Playwright trace that proved the regression expired in 30 days, and the artifact zip nobody on the team can open anyway. Publish the run to a URL that goes in the PR and stays there.
Sep 11, 2026
Glossary
HTML Report Glossary
Plain definitions for the vocabulary that shows up when a report has to leave your machine: artifact retention, SARIF, self-contained HTML, CSP, presigned URLs, MCP and the rest.
Sep 11, 2026
What Is a Build Artifact?
A build artifact is a file a CI job produces and stores for later retrieval. What belongs in artifact storage, what doesn't, and why storing a report there gives it an expiry date.
Sep 11, 2026
What Is a Data URI?
A data URI embeds a file's bytes directly in a document instead of linking to it. The syntax, why base64 inflates by a third, and where inlining stops being a good idea.
Sep 11, 2026
What Is a Flaky Test?
A flaky test passes and fails on the same code. The six causes worth checking, how retries hide them, and why the run artifacts — traces, screenshots, timings — are the only real evidence.
Sep 11, 2026
What Is a Flame Graph?
A flame graph visualises aggregated stack samples: width is total time in a function, depth is stack depth, and the x-axis is alphabetical. How to read one, and icicle versus differential.
Sep 11, 2026
What Is a MIME Type?
A MIME type tells the browser what a response contains. Why text/html renders and application/octet-stream downloads, how Content-Disposition overrides it, and where reports go wrong.
Sep 11, 2026
What Is a Presigned URL?
A presigned URL grants temporary access to a private object without credentials. How the signature works, the real expiry ceilings, and why it is a poor fit for a report someone must read.
Sep 11, 2026
What Is an .ipynb File?
An .ipynb file is a JSON document of cells and their stored outputs. Why it diffs badly, why GitHub sometimes won't render it, and exactly what is lost when you export to HTML.
Sep 11, 2026
What Is an Agent Artifact?
An agent artifact is the durable output of an AI agent run — a report, an audit, a migration plan. Why chat is the wrong container for it, and what a good artifact has that a transcript doesn't.
Sep 11, 2026
What Is an HTML Report?
An HTML report is generated web output presenting the results of a run — tests, coverage, scans, profiles. What is inside one, why it is almost never a single file, and what breaks in transit.
Sep 11, 2026
What Is an iframe Sandbox?
The sandbox attribute strips an iframe of privileges and grants them back one token at a time. What each token does, the allow-scripts + allow-same-origin trap, and why reports need it.
Sep 11, 2026
What Is an SBOM?
An SBOM is a machine-readable inventory of every component in a piece of software. The two formats, what a complete one contains, and why the readable version is the one people ask for.
Sep 11, 2026
What Is Artifact Retention?
Artifact retention is the policy deciding how long CI keeps a build output before deleting it. Default windows per provider, the three non-retention deleters, and why re-running is not recovery.
Sep 11, 2026
What Is Code Coverage?
Code coverage measures which lines and branches a test run executed. The four metric types, the formats (lcov, Cobertura, JaCoCo), and why the number matters less than the drill-down.
Sep 11, 2026
What Is Content Security Policy?
CSP is an HTTP header that tells the browser which sources a page may load. The directives that matter for published reports, how to read a violation, and why strict hosts break charts.
Sep 11, 2026
What Is JUnit XML?
JUnit XML is the de-facto interchange format for test results, emitted by nearly every runner and ingested by nearly every CI system. The element structure, the dialect problem, and its limits.
Sep 11, 2026
What Is MCP?
MCP is an open protocol for giving AI agents tools, resources and prompts over a standard interface. What a server exposes, how transports work, and what changes when an agent can publish.
Sep 11, 2026
What Is Mixed Content?
Mixed content is an HTTPS page requesting an HTTP subresource. Active versus passive, what browsers block versus upgrade, and why generated reports hit it more than hand-written pages.
Sep 11, 2026
What Is Mutation Testing?
Mutation testing changes your code on purpose and checks whether any test notices. Mutation score, surviving mutants, equivalent mutants, and why it exposes what coverage cannot.
Sep 11, 2026
What Is SARIF?
SARIF is the OASIS-standard JSON format for static analysis and security findings. What is in a SARIF file, which tools emit it, and why the HTML view still matters.
Sep 11, 2026
What Is Self-Contained HTML?
Self-contained HTML inlines every stylesheet, script and image into one file so it opens with no sibling directory. How generators produce it, what it costs in size, and where it stops working.
Sep 11, 2026
What Is Static Site Hosting?
Static hosting serves pre-built files straight from storage or a CDN, with no application runtime. What it does well, the four things it never handles, and where reports fall between.
Sep 11, 2026
What Is the Same-Origin Policy?
The same-origin policy stops one origin reading another's data. What counts as an origin, why a file opened from disk has an opaque one, and why that makes report shells load blank.
Sep 11, 2026
More
Allure Report Opens as a Blank Page
Allure's index.html renders blank when opened directly because it fetches its data over XHR, which file:// blocks. Why allure open works, and how to get a report that opens for anyone.
Sep 7, 2026
Coverage Report Links 404 When You Click Through
The coverage index opens but every file link 404s. Why only index.html travelled, what genhtml, JaCoCo, Istanbul and SimpleCov actually emit, and how to keep the drill-down working.
Sep 7, 2026
GitHub Actions Artifact HTML Won't Open in the Browser
GitHub Actions serves every artifact as a zip download, so an HTML report inside one can never render in the browser. The reason, the four workarounds, and the one that produces a link.
Sep 7, 2026
GitLab Pages Report 404s
A pages job that succeeds and a URL that 404s. The public/ directory rule, the deploy delay, branch collisions, and why Pages is a poor fit for per-pipeline reports.
Sep 7, 2026
HTML Report Troubleshooting
A report that renders blank, downloads instead of opening, 404s on click-through, or won't preview anywhere. The console message that identifies each cause, and the fix for it.
Sep 7, 2026
Jupyter Widgets Don't Render in the Exported HTML
ipywidgets, sliders and interactive output vanish from nbconvert HTML because the kernel is gone. What --embed-images and widget state save, what needs Voilà, and how to share the result.
Sep 7, 2026
Mixed Content Blocked in an HTML Report
An HTTPS-served report whose charts and styles silently vanish because a subresource is http://. How to spot mixed content, the difference from a CSP refusal, and the durable fix.
Sep 7, 2026
Playwright HTML Report Is Blank or Won't Open
playwright-report/index.html renders empty when opened from disk, and the CI zip makes it worse. Why show-report works, what --reporter=html,open does, and how to get a shareable link.
Sep 7, 2026
Plotly Chart Missing From the Exported HTML
An exported Plotly figure that shows an empty div, a broken frame, or nothing at all. The include_plotlyjs modes, the offline case, the CSP case, and how to make the export self-contained.
Sep 7, 2026
S3 Downloads Your HTML Instead of Rendering It
An HTML file uploaded to S3 downloads instead of opening because the object's Content-Type is binary/octet-stream. How to fix it on upload, retroactively, and when to stop using a bucket.
Sep 7, 2026
Slack Won't Preview an HTML File
Upload an HTML report to Slack and you get a download card, not a preview. The security reason Slack refuses to render it, what the snippet view shows, and the link that unfurls properly.
Sep 7, 2026
The Agent's Output Is Too Long to Paste Anywhere
Claude Code, Cursor and Codex produce reports far past what a Slack message, a PR comment or a ticket will hold. The limits you are hitting, and giving the agent a place to publish.
Sep 7, 2026
The CI Artifact Link Expired
Artifact retention silently 404s every report link you have ever pasted into a PR or an incident doc. What you can still recover, what you can't, and how to make the link permanent.
Sep 7, 2026
The HTML Report Is Too Big to Email
Gmail caps attachments at 25 MB, Outlook at 20, and a self-contained report blows past both. What is actually making the file large, how to cut it, and the delivery that has no cap.
Sep 7, 2026
You Sent a localhost Link
http://localhost:8080 resolves to the recipient's own machine, so the link is guaranteed to fail. Why tunnels are the wrong tool for a report, and the one-step alternative.
Sep 7, 2026