happytails.ai

Coverage regression checker

Open Coverage regression checker on Happytails.ai. This view has the same page content and links, with explicit tool capabilities. Read the processing notes before using a tool.

Tool capabilities

{
  "id": "coverage-regression-checker",
  "category": "developer-tools",
  "built": true,
  "requirements": "Up to 2,000,000 characters for each coverage report and 1,000,000 characters for the diff. Processing runs locally in a background worker in your browser. Downloads: a JSON report, a CSV of files and a Markdown table.",
  "implementation": {
    "fields": [
      {
        "key": "base",
        "label": "Base coverage report (before the change)",
        "value": "TN:\nSF:src/cart.js\nFN:3,addItem\nFNDA:4,addItem\nDA:3,4\nDA:4,4\nDA:5,0\nDA:7,4\nend_of_record\nSF:src/price.js\nDA:1,2\nDA:2,2\nDA:3,0\nend_of_record\n",
        "type": "textarea",
        "maxLength": 2000000,
        "help": "LCOV, Cobertura, JaCoCo, Istanbul or Go coverage from the base branch."
      },
      {
        "key": "changes",
        "label": "Unified diff or changed file list (optional)",
        "value": "diff --git a/src/cart.js b/src/cart.js\n--- a/src/cart.js\n+++ b/src/cart.js\n@@ -6,2 +6,4 @@\n }\n export function total(items){\n+  if(!items.length)return 0;\n+  return items.reduce((n,i)=>n+i.price,0);\ndiff --git a/src/price.js b/src/price.js\n--- a/src/price.js\n+++ b/src/price.js\n@@ -3,1 +3,1 @@\n-  return value;\n+  return Math.round(value*100)/100;\n",
        "type": "textarea",
        "maxLength": 1000000,
        "help": "A git diff gives patch coverage. A list of paths, one per line, limits the comparison to those files."
      },
      {
        "key": "format",
        "label": "Report format",
        "value": "auto",
        "type": "select",
        "values": [
          "auto",
          "lcov",
          "cobertura",
          "jacoco",
          "istanbul",
          "istanbul-summary",
          "go"
        ],
        "labels": {
          "auto": "Detect automatically",
          "lcov": "LCOV",
          "cobertura": "Cobertura",
          "jacoco": "JaCoCo",
          "istanbul": "Istanbul",
          "istanbul-summary": "Istanbul summary",
          "go": "Go coverage"
        }
      },
      {
        "key": "minPatch",
        "label": "Minimum patch coverage (%)",
        "value": "80",
        "type": "number",
        "min": 0,
        "max": 100,
        "step": "any"
      },
      {
        "key": "maxDrop",
        "label": "Largest allowed total drop (percentage points)",
        "value": "0",
        "type": "number",
        "min": 0,
        "max": 100,
        "step": "any"
      },
      {
        "key": "maxFileDrop",
        "label": "Largest allowed drop for one file (percentage points)",
        "value": "100",
        "type": "number",
        "min": 0,
        "max": 100,
        "step": "any",
        "help": "100 turns the per-file check off."
      },
      {
        "key": "stripPrefix",
        "label": "Path prefixes to remove",
        "value": "",
        "type": "text",
        "maxLength": 2000,
        "help": "Comma separated, for example /home/ci/project/."
      }
    ],
    "registrationFamily": "report-ingest-analysis-reference",
    "inputMaxLength": 2000000,
    "inputErrorCode": "REPORT_INGEST_ANALYSIS_REFERENCE_TOO_LONG",
    "note": "Runs in your browser in a background worker. Compares two coverage reports of up to 2,000,000 characters each and a diff of up to 1,000,000 characters.",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 2000000,
      "inputMode": "text",
      "label": "Head coverage report",
      "placeholder": "SF:src/cart.js\nDA:3,5\nend_of_record",
      "help": "Paste the coverage file produced after your change, for example lcov.info or cobertura.xml. Up to 2,000,000 characters. Review the settings before running.",
      "helpParts": [
        "Paste the coverage file produced after your change, for example lcov.info or cobertura.xml.",
        "Up to 2,000,000 characters.",
        "Review the settings before running."
      ],
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}

Page guide

Compare coverage from before and after a change and see the total change, the coverage of the changed lines and which files dropped. Each threshold gets a clear pass or fail.

How to use Coverage regression checker
  1. Paste the head coverage report from after the change.
  2. Paste the base report and, if you have it, the unified diff of the change.
  3. Set the minimum patch coverage and the largest allowed drop.
  4. Run the check and review the verdicts and per-file deltas.
  5. Download the JSON report, CSV or Markdown summary.

Useful next steps

What it compares

Both reports are read into executable lines and hit counts. LCOV, Cobertura, JaCoCo, Istanbul coverage-final and json-summary, and Go coverprofile files are supported and detected automatically. Line coverage is the share of executable lines with at least one hit.

Patch coverage

With a unified diff, the added lines of each file in the new version are checked against the head report. Lines that are not executable, such as comments, are left out. Paths are matched exactly after removing a/ and b/ prefixes and any prefixes you list, then by a unique path suffix.

Thresholds

The total drop check compares head and base line coverage in percentage points. Patch coverage passes when it is at least the minimum. A per-file drop check is available and is off at 100. Istanbul json-summary has no line detail, so it supports totals only.