{"slug": "show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server", "title": "Show HN: StackVitals – CI failure triage and DORA metrics, no server", "summary": "StackVitals launched as a free, open-source developer suite that runs entirely inside a repository's own GitHub Actions to triage CI failures and track DORA delivery metrics, with no StackVitals-hosted backend, account or subscription. When CI fails on a pull request, StackVitals posts one comment sorting each failure from the repo's own CI history — for example flagging a test that \"flaked 6 times in 80 runs in the last 30 days\" as likely flaky — while the verdict check still blocks until CI is green, re-running known flakes rather than waving them through. The tool installs as the GitHub Action stackvitals/stackvitals@v0 or via `pip install stackvitals`, publishes a dashboard to GitHub Pages for public repos, and keeps private-repo data local through `stackvitals ui owner/repo`.", "body_md": "**The vital signs of your GitHub repo.** Flaky tests, slow reviews, delivery and DORA, risky\ndependencies and community health, measured in your own GitHub Actions.\n\n<sub>A tour on demo data. [Watch it with sound](https://raw.githubusercontent.com/stackvitals/stackvitals/main/docs/assets/stackvitals-video.mp4).</sub>\n\nA free, open-source developer suite for GitHub: CI health and flaky tests, pull request flow, delivery and DORA,\ndependencies, community health and an org portal. It runs in your own GitHub Actions and keeps its history in your own\nrepo: no StackVitals-hosted backend, account or subscription, and optional integrations use services and keys you\nchoose. GitHub's built-in token covers every module in a repo; an org's private repos in the Portal need a read-only\nApp, and org-wide Copilot usage an org token. Actions minutes on private repos are billed by GitHub as usual\n([docs/scaling.md](https://github.com/stackvitals/stackvitals/blob/main/docs/scaling.md#actions-minutes-private-repos)). The rules behind its verdicts are checked on public\ndata, with the losses published.\n\nEvery run publishes an app on your repo's GitHub Pages (or `stackvitals ui owner/repo` on your machine): one page per\nmodule, decisions and settings saved straight from the browser, setup for more repos in a few clicks once GitHub is\nconnected (connecting takes one token, made from a prefilled GitHub page; Pages are turned on for public repos), and a demo at\n`?demo=1`. [docs/app.md](https://github.com/stackvitals/stackvitals/blob/main/docs/app.md) walks through it.\n\nInstall it as the GitHub Action `stackvitals/stackvitals@v0` (also on the\n[GitHub Marketplace](https://github.com/marketplace/actions/stackvitals)), or the CLI and MCP server from PyPI:\n`pip install stackvitals` (or run it without installing: `uvx stackvitals`).\n\nWhen CI fails on a pull request, one comment sorts each failure, from the repo's own CI history:\n\n**StackVitals: about this CI failure**\n\n1 of 3 failure(s) look like flakes; the rest need a look.\n\nVerdict What failed Why Likely flaky test `t::flaky_one` flaked 6 times in 80 runs in the last 30 days, last 2026-10-20, and the message shows a flake's sign (\"TimeoutError\"): looks like a flake, check the error, then re-run it New test `t::new_one` no earlier flakes: likely from this change (fails with \"assert result == 2\") Already failing on main test `t::broken_one` also failing on the default branch, not caused by this change \n\nThe verdict check still blocks until CI is green: a known flake is re-run, never waved through.\n\n```\npip install stackvitals\ngh auth login                        # once, so StackVitals can use your GitHub sign-in\nstackvitals init your-name/your-repo\n```\n\n`init` adds one workflow file to your repo, runs it once and turns on your dashboard:\n\n- \n**Public repo:** the dashboard goes live at`https://your-name.github.io/your-repo/` .\n- \n**Private repo:** your data stays in your private repo, and the dashboard opens on your machine:\n\n```\nstackvitals ui your-name/your-repo\n```\n\nJust looking? `stackvitals ci report owner/repo` reports CI health for any public repo in about 20 seconds, with\nnothing added to it. Prefer clicking? The app's **Setup** page does the same as `init`. More:\n[docs/quickstart.md](https://github.com/stackvitals/stackvitals/blob/main/docs/quickstart.md).\n\nEvery step, from what starts a run to what you see: [the architecture in detail](https://github.com/stackvitals/stackvitals/blob/main/docs/architecture.md).\n\n| Module | What it answers | Status | \n|---|---|---|\n| **[CI Health](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#ci-health)** | Which jobs and tests are flaky or slowing down, who owns them, coverage and patch coverage | stable | \n| **[Team Flow](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#team-flow)** | Who has to act next on each pull request, and how long reviews take | stable | \n| **[Delivery](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#delivery-cycle-time-and-dora)** | Cycle time split into coding, pickup, review and deploy (LinearB's phases), DORA's five metrics, AI-assisted work compared like with like | stable | \n| **[Insights](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#insights-what-to-fix-first)** | What to fix first across modules, ranked by hours lost, with alerts and a weekly digest | stable | \n| **[Dependency Steward](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#dependency-steward)** | Known vulnerabilities and malware in the lockfiles OSV-Scanner reads (npm, PyPI, Go, Rust, Maven, Ruby, .NET, PHP and more; 65 of 100 sampled repos had one); whether to add, keep or upgrade a package, with upgrade evidence from public repos | preview | \n| **[Community](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#community)** | Where newcomers drop out, how fast they get an answer, who carries the work | stable | \n| **[Portal](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#portal)** | A lightweight catalog on GitHub alone: what an org owns, who owns it (checked), scorecards, golden paths and an org-wide view | preview | \n| **Explore** | SQL over your repo's data in the browser, with links to share a query | preview | \n| **[Contribute](https://github.com/stackvitals/stackvitals/blob/main/docs/modules.md#contribute-mergescout)** | Open-source issues an outsider can realistically get merged | stable | \n\nStable: measured, reviewed and used on the sandbox for every release. Preview: built and tested, but newer or measured on less; its behaviour may still change.\n\n**Works with** Jira Cloud, Linear, PagerDuty, incident.io, Copilot usage reports, Slack, Teams, Discord, Discourse,\ntest reports from other CI systems, Backstage, and DevLake's tables ([docs/connectors.md](https://github.com/stackvitals/stackvitals/blob/main/docs/connectors.md)). AI\nagents get every module through one MCP server (11 core tools by default, all 35 with `--tools all`).\n\nEverything works with GitHub's built-in token. Integrations are optional; pass their keys as repository secrets:\n\n```\n- uses: stackvitals/stackvitals@v0\n  with:\n    webhook: ${{ secrets.SLACK_WEBHOOK }}            # alerts to Slack, Teams or Discord\n    pagerduty-token: ${{ secrets.PAGERDUTY_TOKEN }}  # incidents count in DORA\n    jira-email: ${{ secrets.JIRA_EMAIL }}            # Jira, with its site URL under\n    jira-token: ${{ secrets.JIRA_TOKEN }}            # [connectors.jira] in .github/stackvitals.toml\n```\n\nEvery input: [docs/install.md](https://github.com/stackvitals/stackvitals/blob/main/docs/install.md). Every setting: [docs/settings.md](https://github.com/stackvitals/stackvitals/blob/main/docs/settings.md).\n\nYour coding agent can ask StackVitals before and while it changes code: *is this failure a known flake?*, *what is\nblocking PR #123?*, *who should review this?*, *is this package safe to add?* It answers from your repo's history, with\nthe evidence.\n\nClaude Code:\n\n```\nclaude mcp add stackvitals -- uvx stackvitals serve\n```\n\nClaude Desktop, Cursor, VS Code and other MCP clients:\n\n```\n{\n  \"mcpServers\": {\n    \"stackvitals\": { \"command\": \"uvx\", \"args\": [\"stackvitals\", \"serve\"] }\n  }\n}\n```\n\nIt uses your `gh` login or `GITHUB_TOKEN`. The 11 core tools load by default (` ci_failure`, `is_known_flake`,\n`pr_queue`, `who_should_review`, `check_package`, `insights` and more); `stackvitals serve --tools all` loads all 35.\nListed in the MCP registry as `io.github.stackvitals/stackvitals`.\n\nMeasured on public repos beside the rules other tools use ([docs/accuracy.md](https://github.com/stackvitals/stackvitals/blob/main/docs/accuracy.md)):\n\n- **Where you deploy from.** With no setup, StackVitals named the right deployment source for 53 of 60 repos (30 of\n35 held out). On the same 60, DevLake's default pattern got 9 and a pattern a user would typically write got 22. A\nwrong source makes every DORA number wrong.\n- **Who answered an issue.** Of the first comments by non-maintainers that the github/issue-metrics action counts as\nthe answer, 46% are drive-bys (40-52%, held-out repos). StackVitals counts the project's answers: maintainers,\nregular responders and triagers.\n- **Whether AI help changed anything.** Agents' pull requests look 9 points less likely than people's to be merged by someone else.\nCompared within the same repo, month and size, the gap is +0.5 points (0.0 to +1.1): most of the raw gap comes\nfrom which repos agents work in and the size of their changes.\n\nIt publishes what failed too. Of the failures an old rule called safe to re-run, 44% (15 of 34) were caused by the change. The tightened rule still got 13 of 81 held-out calls wrong (16%). A stricter one (a flake's sign in the log, no changed file named) got none of 4 fresh calls wrong, too few to show 5%, so nothing is called safe: likely flakes are re-run, never passed by the check. Each sample was labelled by two model families (Claude and Gemini); no person has audited the labels.\n\nWhat each one does better, what StackVitals does differently, and what was measured side by side ([docs/compare](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/README.md)):\n\n| Compared with | Kind | \n|---|---|\n| [Apache DevLake](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/devlake.md) | Open source (Apache 2.0), self-hosted | \n| [Middleware](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/middleware.md) | Open source (Apache 2.0), self-hosted | \n| [CDviz](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/cdviz.md) | Open source (Apache 2.0), self-hosted or EUR 20/month hosted | \n| [Pelorus](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/pelorus.md) | Open source (Apache 2.0), on OpenShift | \n| [Liatrio's DORA plugin for Backstage](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/liatrio-backstage.md) | Open source (Apache 2.0) | \n| [Faros Community Edition](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/faros-community-edition.md) | Open source (Apache 2.0), withdrawn | \n| [GrimoireLab](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/grimoirelab.md) | Open source (GPL-3.0), self-hosted | \n| [LinearB](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/linearb.md) | SaaS; gitStream automation is free up to 250 PRs a month | \n| [Swarmia](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/swarmia.md) | SaaS; free up to 9 developers | \n| [Trunk Flaky Tests and BuildPulse](https://github.com/stackvitals/stackvitals/blob/main/docs/compare/flaky-test-tools.md) | SaaS | \n\n- **Five minutes:**[docs/quickstart.md](https://github.com/stackvitals/stackvitals/blob/main/docs/quickstart.md) . Try CI Health on any public repo first (needs[uv](https://docs.astral.sh/uv/) and`gh auth login` or a`GITHUB_TOKEN` ):`uvx stackvitals ci report owner/repo --days 14 --html ./ci-report` .\n- **By role:**[engineering managers](https://github.com/stackvitals/stackvitals/blob/main/docs/guides/manager.md) ,[maintainers](https://github.com/stackvitals/stackvitals/blob/main/docs/guides/maintainer.md) ,[platform teams](https://github.com/stackvitals/stackvitals/blob/main/docs/guides/platform.md) .\n- **Before you rely on it:**[what each rule does](https://github.com/stackvitals/stackvitals/blob/main/docs/rules.md) ,[known limitations](https://github.com/stackvitals/stackvitals/blob/main/docs/limitations.md) ,[what leaves your repo](https://github.com/stackvitals/stackvitals/blob/main/docs/privacy.md) ,[threat model](https://github.com/stackvitals/stackvitals/blob/main/docs/threat-model.md) ,[enterprise controls](https://github.com/stackvitals/stackvitals/blob/main/docs/enterprise.md) .\n- **More:**[FAQ](https://github.com/stackvitals/stackvitals/blob/main/docs/faq.md) ,[how it works](https://github.com/stackvitals/stackvitals/blob/main/docs/architecture.md) ,[roadmap](https://github.com/stackvitals/stackvitals/blob/main/docs/roadmap.md) ,[contributing](https://github.com/stackvitals/stackvitals/blob/main/CONTRIBUTING.md) ,[code of conduct](https://github.com/stackvitals/stackvitals/blob/main/CODE_OF_CONDUCT.md) ,[governance](https://github.com/stackvitals/stackvitals/blob/main/GOVERNANCE.md) ,[security](https://github.com/stackvitals/stackvitals/blob/main/SECURITY.md) .", "url": "https://wpnews.pro/news/show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server", "canonical_source": "https://github.com/stackvitals/stackvitals", "published_at": "2026-11-01 06:04:03+00:00", "updated_at": "2026-11-01 06:21:00.976586+00:00", "lang": "en", "topics": ["developer-tools", "mlops"], "entities": ["StackVitals", "GitHub", "GitHub Actions", "GitHub Pages", "PyPI", "LinearB"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server", "markdown": "https://wpnews.pro/news/show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server.md", "text": "https://wpnews.pro/news/show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server.txt", "jsonld": "https://wpnews.pro/news/show-hn-stackvitals-ci-failure-triage-and-dora-metrics-no-server.jsonld"}}