GitHub Analytics Scoring
Repository Health Score
Health Score = 100 - (sum of weighted penalties)
Penalties - CI & Reliability:
Failing workflow, high confidence: -10 points
Flaky test (3+ failures/week): - 5 points
No CI configured: - 8 points
Penalties - Issues & PRs:
Critical unresolved bug (P0): -10 points
Security alert (critical severity): -10 points
Security alert (high severity): - 5 points
PR open >14 days (stale): - 3 points each (max -9)
Issue @mentioned, no response >7 days: - 5 points each (max -10)
>10 open issues with no labels/triage: - 3 points
Penalties - Community Health:
No CONTRIBUTING.md: - 5 points
No CODE_OF_CONDUCT.md: - 3 points
No branch protection on main: - 5 points
0 open "good first issue" labels: - 2 points
Floor: 0 (minimum score)
Score Grades
| Score |
Grade |
Meaning |
| 90-100 |
A |
Excellent - healthy repo, minimal issues |
| 75-89 |
B |
Good - minor issues, well-managed |
| 50-74 |
C |
Needs attention - multiple signals requiring action |
| 25-49 |
D |
Poor - significant problems impacting velocity |
| 0-24 |
F |
Critical - major issues blocking team progress |
Priority Scoring for Issues
Internally score each issue to determine sort order in dashboards and reports:
| Signal |
Points |
| User @mentioned and hasn't responded |
+5 |
P0, P1, critical, urgent, blocker label |
+3 |
| Tied to upcoming release milestone |
+3 |
| New comments from others since user's last activity |
+2 |
| High community interest (5+ positive reactions) |
+2 |
bug label |
+1 |
| Assigned to user |
+1 |
| Active related discussion thread |
+1 |
wontfix, duplicate, question label |
-1 |
| No activity >14 days |
-2 |
Priority Scoring for Pull Requests
| Signal |
Points |
| Review requested, user hasn't reviewed |
+5 |
| PR has "changes requested" - author needs to update |
+4 |
| PR is approved and ready to merge |
+3 |
| Targets a release branch with upcoming deadline |
+3 |
| CI failed on this PR |
+2 |
| Merge conflicts present |
+2 |
| High community interest (5+ positive reactions) |
+2 |
| New comments on the PR |
+1 |
| Active discussion thread linked to this PR |
+1 |
| Draft PR |
-1 |
| No activity >7 days |
-2 |
Priority Scoring for Discussions
| Signal |
Points |
| User was @mentioned |
+3 |
| High activity (10+ comments in 24h) |
+2 |
| Linked to an issue/PR the user owns |
+1 |
| No activity >7 days |
-1 |
Confidence Levels for Analytics Findings
Apply confidence levels to all bottleneck findings, health score deductions, and anomaly detections. Every finding in a report MUST include its confidence level.
| Level |
When to Use |
Impact on Report |
| High |
Multiple corroborating signals, definitively observed (e.g., CI has failed 5 times this week, confirmed by logs) |
Report as fact; recommend remediation |
| Medium |
Found by one source, likely issue (e.g., PR open 14 days but author may be on leave) |
Report as finding; suggest investigation |
| Low |
Possible pattern, needs human review (e.g., velocity seems low but may be seasonal) |
Flag as observation; don't deduct from score |
Confidence Tag Format in Reports
| Finding | Severity | Confidence | Recommendation |
|---------|----------|-----------|----------------|
| 3 PRs stale >14 days | High | **High** | Assign reviewers or close |
| Velocity 40% below 4-week avg | Medium | **Medium** | Verify - may be holiday period |
| Issue activity spike on Fridays | Low | **Low** | Monitor for 2 weeks before acting |
Delta Tracking
When re-running an analysis against a previous report, classify every finding by change status:
| Status |
Definition |
| Fixed |
Was in previous report; no longer present |
| New |
Not in previous report; appears now |
| Persistent |
Remains from previous report, unchanged |
| Regressed |
Was previously fixed but has returned |
Delta Report Section Format
## Changes Since Last Report ({previous date})
| Change | Finding | Details |
|--------|---------|---------|
| Fixed | 3 stale PRs resolved | Team cleared the backlog |
| New | CI failing on main | Build broke in last 24h |
| Persistent (#3) | Velocity 30% below baseline | Third consecutive week |
| Regressed | Security alert reopened | lodash advisory re-filed |
**Progress:** {N} fixed, {M} new, {P} persistent, {Q} regressed
**Score change:** {current_score} ({+/-N} from {previous_score})
Escalation Rule
If a finding is Persistent for 3+ consecutive reports, escalate:
Escalation: [{Finding}] has been present for {N} consecutive reports. Consider a team discussion or explicit ownership assignment to resolve this.
Velocity Metrics
| Metric |
Formula |
Healthy |
Warning |
Critical |
| PR merge rate |
PRs merged / week |
>3/week |
1-3/week |
<1/week |
| Issue close rate |
Issues closed / week |
>5/week |
2-5/week |
<2/week |
| Review turnaround |
Avg hours PR open before first review |
<24h |
24-72h |
>72h |
| Issue response time |
Avg hours until first team response |
<8h |
8-48h |
>48h |
| Stale PR ratio |
PRs open >14 days / total open PRs |
<10% |
10-30% |
>30% |
| CI reliability |
Passing runs / total runs (7-day) |
>95% |
80-95% |
<80% |
Contributor Metrics
| Metric |
Formula |
Notes |
| PR commit ratio |
Commits / PRs merged |
High ratio = large PRs, consider splitting |
| Review coverage |
PRs reviewed by others / total PRs merged |
Low = single-contributor bottleneck |
| First-time contributor rate |
New contributors / total active contributors |
Healthy community growth signal |
| Contributor retention |
Active last month AND active this month / active last month |
Engagement health |
| Bus factor |
Min contributors whose departure halts 50%+ of commits |
<3 is high risk |
Bottleneck Categories
| Category |
Signals |
Example Finding |
| Review bottleneck |
High PR open time, review-requested PRs >3 days |
"4 PRs waiting for review >3 days - assign or redistribute" |
| CI bottleneck |
Frequent failures, long runtimes |
"Test suite 45min avg - 2x slower than 4-week average" |
| Stale work |
Issues/PRs with no activity >14 days |
"7 issues open >30 days with no recent comments" |
| Knowledge concentration |
80%+ commits from one contributor |
"3 of 4 core modules have only one contributor - bus factor 1" |
| Response lag |
>24h average first response to new issues |
"Average first response: 38h - community may feel unsupported" |
| Security debt |
Open Dependabot alerts unresolved >7 days |
"2 critical alerts open for 12 days" |
| Release congestion |
>10 merged PRs unreleased |
"11 merged PRs awaiting release - coordinate cut date" |
Trend Classification
| Trend |
Definition |
| Improving |
Score increased 5+ points vs previous report |
| Stable |
Score within 5 points of previous report |
| Declining |
Score decreased 5+ points vs previous report |
| Recovering |
Score increased after 2+ consecutive Declining reports |
| New |
No previous report to compare |
Scorecard Output Format
Single Repo
## Repository Health Score
| Metric | Value |
|--------|-------|
| Repo | [owner/repo](url) |
| Score | {0-100} |
| Grade | {A-F} |
| Trend | {Improving / Stable / Declining} |
| Open Security Alerts | {count} |
| Stale PRs (>14 days) | {count} |
| CI Reliability (7-day) | {%} |
| Unanswered @mentions | {count} |
Multi-Repo Scorecard
## Repository Health Scorecard
| Repo | Score | Grade | Trend | Critical Issues | Notes |
|------|-------|-------|-------|-----------------|-------|
| owner/repo-a | 88 | B | Improving | 0 | |
| owner/repo-b | 54 | C | Declining | 1 | Security alert unresolved |
| owner/repo-c | 22 | F | Stable | 3 | Review bottleneck + stale PRs |
| **Average** | **54.7** | **C** | - | **4** | |
Sprint & Iteration Metrics
When project boards are configured, track sprint metrics:
| Metric |
Formula |
| Sprint completion rate |
Done items / total sprint items x 100 |
| Carryover rate |
Items moved to next sprint / planned items |
| Cycle time |
Average days from "In Progress" to "Done" |
| Throughput |
Items completed per sprint |
| Blocked rate |
Items in "Blocked" state / total in-progress |