The repo trust engine for GitHub.
Evidence-driven intelligence that tells you whether a repo is safe to adopt, healthy to change, and disciplined enough to trust in CI.
delivery-intel answers three questions β with evidence, not guesses:
- Should I trust this repo? (trust score, 6 trust dimensions, 15 forensic signals)
- Does it ship well and fail safely? (DORA metrics, vulnerability scan, change fail rate)
- How does it compare? (side-by-side comparison of any two repos)
Every metric shows its source, sample size, and confidence level. No fake precision.
# Trust verdict β should I adopt this repo? (trust score, dimensions, forensics)
npx delivery-intel facebook/react --mode adopt
# Compare two repos side-by-side
npx delivery-intel --compare facebook/react vercel/next.js
# Full delivery health check (v2 engine)
npx delivery-intel facebook/react --v2
# Classic metrics dump (v1 engine)
npx delivery-intel facebook/reactββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β facebook/react β
β Grade A- Score 91/100 Confidence high β
β Trend β +4 pts β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NO POLICY VIOLATIONS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β All delivery health policies are passing.
METRICS (source Β· sample Β· confidence)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Deploy Frequency 12.4/wk [high] deployment_statuses
β Change Lead Time 3.2h [high] commit_to_deploy (84 PRs)
β Recovery Time 0.8h [med] deployment_failures
β Change Fail Rate 4.8% [high] deployment_statuses
β Pipeline Failures 8.2% [high] workflow_runs (52 runs)
SIGNAL QUALITY
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Production signal strength: high
β Scanned manifests: npm (package.json), Go (go.mod)
SECURITY
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β No known vulnerabilities found in scanned manifests
Works with full URLs too:
npx delivery-intel https://github.com/vercel/next.js --v2
Google's 2024 DORA Report (32,000+ respondents, 10 years of data):
| Metric | Elite teams | Low performers | Gap |
|---|---|---|---|
| Deploy Frequency | On-demand (multiple/day) | < once per 6 months | 973Γ |
| Lead Time for Changes | < 1 hour | 1 β 6 months | 6,570Γ |
| Change Failure Rate | 0β15% | 46β60% | β |
| Time to Restore | < 1 hour | 1 week β 1 month | 6,570Γ |
Elite teams are 2Γ more likely to meet reliability targets and 1.8Γ more likely to meet business goals (DORA 2024).
Lead Time β Elite 3.2 hours median (0.1 days)
Change Failure Rate β High 4.8% (2 failed / 42 total runs)
β Vulnerability Scan (OSV.dev) ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β No known vulnerabilities found
β Suggestions ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Looking good, no critical issues detected
> Works with full URLs too: `npx delivery-intel https://github.com/vercel/next.js`
---
## What It Measures
| Metric | What it tells you | Source | Confidence |
|--------|-------------------|--------|------------|
| **Deploy Frequency** | How often code ships to production | Deployment statuses β deploys β Actions β PRs | Waterfall |
| **Change Lead Time** | Commit β production (PR flow as fallback) | Deployments + commits | High / Low |
| **Change Fail Rate** | % of deployments that failed or rolled back | Deployment statuses + heuristics | High / Low |
| **Recovery Time** | Time from failure to successful recovery | Deployment failures + workflow runs | High / Low |
| **Pipeline Failure Rate** | CI workflow run reliability (distinct from CFR) | Workflow Runs API | High |
| **Deployment Rework Rate** | Rollback/revert/hotfix rate (inferred) | PR titles + labels + deployment refs | Low (flagged) |
| **Vulnerabilities** | Known CVEs across 7 manifest ecosystems | [OSV.dev](https://osv.dev) batch API | β |
| **Delivery Score** | Confidence-weighted composite (0β100) | All of the above | Aggregate |
> Every metric exposes: data source Β· sample size Β· lookback window Β· confidence level.
> Low-confidence signals contribute less to the composite score β no fake precision.
Supported manifest ecosystems: **npm** Β· **pip** Β· **Go modules** Β· **Poetry** Β· **pnpm** Β· **Cargo** Β· **RubyGems**
---
## π Trust Engine
The trust engine (`--mode adopt`) computes a **Trust Score (0β100)** across 6 weighted dimensions, powered by 15 forensic signal detectors:
| Dimension | Weight | Key signals |
|-----------|--------|-------------|
| **Maintenance freshness** | 1.0 | Days since last commit/release, commit cadence |
| **CI reliability** | 0.9 | Pipeline failure rate, CI flakiness across workflows |
| **Vulnerability exposure** | 0.9 | Critical/high CVE density from OSV.dev scan |
| **Release hygiene** | 0.8 | Semver compliance, conventional commits, changelog |
| **Contributor concentration** | 0.8 | Bus factor β single-maintainer risk |
| **Change safety** | 0.7 | Rollback signals, rework density, review latency |
Trust levels: **high** (β₯75) Β· **moderate** (β₯45) Β· **low** (<45) Β· **insufficient-evidence** (too few signals)
### Compare mode
```bash
npx delivery-intel --compare facebook/react vercel/next.js
npx delivery-intel --compare facebook/react vercel/next.js --json
Runs the trust engine on both repos and produces a structured comparison: per-dimension deltas, metric tier diffs, unique forensic signals, and a winner verdict.
Every fix pack now includes a trust gain estimate β how much each fix would improve the trust score:
# Verdict: grade, confidence, policy violations, evidence chain (v2 engine)
npx delivery-intel facebook/react --v2
# Classic metrics output (v1 engine β backwards compatible)
npx delivery-intel facebook/react
# Compare last 30 days vs prior 30 days
npx delivery-intel vercel/next.js --trend
# Include workflow strain analysis
npx delivery-intel vercel/next.js --risk
# AI-powered executive narrative (requires LLM key β falls back to template)
npx delivery-intel vercel/next.js --narrative
# JSON output (v2 includes full evidence chain + policy result)
npx delivery-intel vercel/next.js --v2 --json
# Save report to file
npx delivery-intel vercel/next.js --v2 --json --output report.json| Flag | Description |
|---|---|
--v2 |
Evidence-driven engine with grade, confidence, forensics, and policy |
--mode <mode> |
Analysis mode: oss, adopt, pr, exec, platform (implies --v2) |
--pr-comment |
Write a PR guardrail comment to delivery-intel-pr-comment.md (use with --v2) |
--fail-below N |
Exit code 2 if delivery score is below N |
--block |
Enable blocking violations (use with --v2 --fail-below) |
--compare |
Compare two repos side-by-side: --compare repoA repoB (implies --v2, defaults to adopt mode) |
--json |
Output raw JSON instead of the formatted terminal report |
--output <file> |
Write JSON to a file (can combine with --json) |
--trend |
Show 30-day vs prior-30-day deltas for all metrics |
--risk |
Include workflow strain analysis (velocity + stability signal) |
--narrative |
Generate an executive summary (LLM or template fallback) |
--token <token> |
GitHub token β prefer gh auth login instead |
--no-spinner |
Disable the scanning animation (useful in CI logs) |
--version |
Print version |
--help |
Show help |
git clone https://github.com/ParthibanRajasekaran/delivery-intel.git
cd delivery-intel
npm install
npm run dev
# β http://localhost:3000Paste a repo URL and get an animated dashboard with score ring, DORA cards, charts, vulnerability table, and suggestions.
# Dashboard
docker compose up dashboard
# CLI
REPO=facebook/react docker compose run --rm cliPass --json (or --json --output report.json) to get machine-readable output.
{
"repo": { "owner": "vercel", "repo": "next.js" },
"fetchedAt": "2026-04-17T12:00:00.000Z",
"overallScore": 87, // 0β100
"doraMetrics": {
"deploymentFrequency": {
"deploymentsPerWeek": 12.4,
"rating": "Elite", // Elite | High | Medium | Low
"source": "merged_prs_fallback" // deployments_api | merged_prs_fallback
},
"leadTimeForChanges": {
"medianHours": 3.2,
"rating": "Elite"
},
"changeFailureRate": {
"percentage": 4.8,
"failedRuns": 2,
"totalRuns": 42,
"rating": "High"
}
},
"vulnerabilities": [
{
"packageName": "lodash",
"currentVersion": "4.17.15",
"vulnId": "GHSA-xxxx-xxxx-xxxx",
"summary": "Prototype pollution",
"severity": "high", // critical | high | medium | low
"aliases": ["CVE-2021-23337"],
"fixedVersion": "4.17.21"
}
],
"suggestions": [
{
"category": "reliability", // performance | reliability | security
"severity": "high", // high | medium | low
"title": "High Pipeline Failure Rate",
"description": "...",
"actionItems": ["..."]
}
],
"dailyDeployments": [0, 1, 2, 3, 1, 2, 3], // last 7 days, index 0 = 6 days ago
// present only with --trend
"trend": {
"windowDays": 30,
"current": { "deploymentsPerWeek": 12.4, "leadTimeHours": 3.2, "changeFailureRate": 4.8, "score": 87 },
"prior": { "deploymentsPerWeek": 9.1, "leadTimeHours": 5.6, "changeFailureRate": 6.2, "score": 78 },
"deltas": { "deploymentsPerWeek": 3.3, "leadTimeHours": -2.4, "changeFailureRate": -1.4, "score": 9 }
},
// present only with --risk
"riskScore": {
"score": 42,
"level": "moderate", // low | moderate | high | critical
"cycleTimeDelta": 0.12,
"failureRateDelta": -0.05,
"sentimentMultiplier": 1.0,
"summary": "..."
}
}| Method | Setup | Best for |
|---|---|---|
| None | Just run it | Public repos (60 req/hr) |
gh auth login |
brew install gh && gh auth login |
Daily use, token stays in OS keychain β¨ |
GITHUB_TOKEN |
export GITHUB_TOKEN=ghp_... |
CI environments |
--token |
--token ghp_... |
Quick one-off (avoid in CI) |
Token resolution order: --token flag β GITHUB_TOKEN env β gh auth token
Private repos require a token with
reposcope. For CI, use${{ secrets.GITHUB_TOKEN }}. It's auto-scoped and expires per job.
The easiest way β use the action directly:
# .github/workflows/delivery-intel.yml
name: Delivery Health Check
on:
push:
branches: [main]
pull_request:
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: ParthibanRajasekaran/delivery-intel@v1.6.0
with:
fail-below: '40' # fail the job if score drops below 40Outputs available after the step: score, deploy-frequency, lead-time, change-failure-rate, mean-time-to-restore.
Posts a policy-aware comment on every PR β no block unless a real threshold is breached:
steps:
- name: Delivery Health Check
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
npx delivery-intel@latest ${{ github.repository }} \
--v2 \
--pr-comment \
--fail-below 40 \
--no-spinner
- name: Post PR Comment
if: always() && github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr comment ${{ github.event.pull_request.number }} \
--body-file delivery-intel-pr-comment.md \
--repo ${{ github.repository }}The comment leads with a verdict (β
No block / β οΈ Warning / π« BLOCKED), followed by a collapsible metrics table with source and confidence for every data point.
steps:
- name: Run delivery-intel
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx delivery-intel@latest ${{ github.repository }} --v2 --json --output report.json
- name: Check health score
run: |
SCORE=$(jq '.scores.delivery.score' report.json)
echo "Health score: $SCORE / 100"
if (( $(echo "$SCORE < 40" | bc -l) )); then
echo "::error::Score $SCORE is below threshold (40)"
exit 1
fiOnce you have the dashboard deployed, you can show a live delivery score in any README:
[](https://github.com/ParthibanRajasekaran/delivery-intel)The GET /api/badge?repo=owner/repo endpoint returns a Shields.io endpoint-badge payload. Score maps to color: < 20 red β < 40 orange β < 60 yellow β < 80 green β β₯ 80 bright green. Results cached 5 minutes.
Self-hosting: deploy the dashboard (
npm run build && npm startordocker compose up dashboard) and replaceyour-deployment-url.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β delivery-intel β
ββββββββββββββββ¬ββββββββββββββββ¬ββββββββββββββββββββββββββββββββ€
β CLI β Dashboard β CI Workflow / Action β
β (npx) β (Next.js) β (action.yml) β
ββββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββββββββββββββββββ€
β Renderers (terminal, JSON, PR comment, compare output) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Trust Engine Β· Compare Engine Β· Verdict Engine β
β (6 dimensions, 15 signals, trust score 0β100) β
ββββββββββββ¬βββββββββββββ¬βββββββββββββββ¬ββββββββββββββββββββββββ€
β Scoring β Policies β Fix Packs β Recommendations β
β (conf- β (gates, β (trust gain β (ranked actions) β
β weighted)β blocking) β estimates) β β
ββββββββββββ΄βββββββββββββ΄βββββββββββββββ΄ββββββββββββββββββββββββ€
β DORA Metrics (6) Β· Confidence Β· Evidence Sources Β· Caveats β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Normaliser (raw API β typed EvidenceEvent stream) β
ββββββββββββ¬βββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β GitHub β OSV.dev β Extractors (7 ecosystems) β
β REST API β Vuln API β npmΒ·pipΒ·GoΒ·PoetryΒ·pnpmΒ·CargoΒ·Gems β
ββββββββββββ΄βββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
| Runtime | TypeScript Β· Node.js 18+ Β· Next.js (App Router) |
| GitHub | @octokit/rest Β· @octokit/graphql |
| Visualization | Recharts Β· Framer Motion Β· Tailwind CSS |
| Security | OSV.dev (free, no auth) |
| Caching | ioredis (optional, degrades gracefully) |
| Quality | ESLint Β· Prettier Β· Husky Β· Vitest Β· GitHub Actions CI |
Contributions welcome! See CONTRIBUTING.md for dev setup, coding standards, and workflow.
git clone https://github.com/ParthibanRajasekaran/delivery-intel.git
cd delivery-intel
npm install
npm run validate # lint + typecheck + test in one shotMIT. Use it however you want.
{ "id": "fix-missing-dependabot", "title": "Enable Dependabot", "trustGain": 15, // estimated trust score improvement "rationale": "Automated dependency updates reduce vulnerability exposure..." }