Created
May 18, 2026 16:14
-
-
Save potiuk/ea0af46ab2e83a2db5ef3375c6bcef89 to your computer and use it in GitHub Desktop.
apache/airflow PR stats v3 — 2026-05-18 — 'Quality Criteria triaged' label (final naming)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>📊 apache/airflow PR stats v3 — 2026-05-18</title> | |
| <style> | |
| * { box-sizing: border-box; } | |
| body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 0; padding: 24px; background: #f6f8fa; color: #1f2328; line-height: 1.5; max-width: 1280px; margin: 0 auto; } | |
| h1 { font-size: 28px; margin: 0 0 4px; } | |
| h2 { font-size: 18px; margin: 32px 0 12px; padding-bottom: 6px; border-bottom: 1px solid #d0d7de; } | |
| .context { color: #656d76; font-size: 14px; margin-bottom: 8px; } | |
| .v3-note { background: #fbefff; border: 1px solid #c297ff; padding: 10px 14px; border-radius: 6px; font-size: 13px; margin: 12px 0 24px; } | |
| .hero-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 16px; } | |
| @media (max-width: 900px) { .hero-grid { grid-template-columns: repeat(2, 1fr); } } | |
| .hero { background: white; border: 1px solid #d0d7de; border-left: 5px solid #0969da; border-radius: 6px; padding: 14px; } | |
| .hero-num { font-size: 28px; font-weight: 600; line-height: 1.1; } | |
| .hero-sub { font-size: 12px; color: #656d76; margin-top: 4px; } | |
| .hero-reasons { font-size: 11px; color: #656d76; margin-top: 6px; line-height: 1.5; } | |
| .hero-reasons div { margin-bottom: 2px; } | |
| .badge { display: inline-block; background: #6e7781; color: white; font-size: 9px; font-weight: 700; padding: 2px 5px; border-radius: 3px; margin-left: 4px; vertical-align: 2px; } | |
| .badge.new { background: #2da44e; } | |
| .rec-card { display: flex; gap: 12px; background: white; border: 1px solid #d0d7de; border-radius: 6px; padding: 12px 16px; margin-bottom: 8px; } | |
| .rec-card.high { border-left: 4px solid #cf222e; } | |
| .rec-card.medium { border-left: 4px solid #bf8700; } | |
| .rec-card.low { border-left: 4px solid #6e7781; } | |
| .rec-icon { font-size: 24px; } | |
| .rec-body { flex: 1; } | |
| .rec-title { font-weight: 600; font-size: 14px; } | |
| .rec-prio { font-size: 10px; padding: 2px 6px; border-radius: 3px; margin-left: 6px; font-weight: 700; color: white; vertical-align: middle; } | |
| .rec-prio.high { background: #cf222e; } | |
| .rec-prio.medium { background: #bf8700; } | |
| .rec-prio.low { background: #6e7781; } | |
| .rec-detail { font-size: 13px; color: #656d76; margin-top: 2px; } | |
| .rec-action { margin-top: 6px; } | |
| .rec-action code { background: #f0f2f5; padding: 2px 6px; border-radius: 3px; font-size: 12px; } | |
| .velocity-chart, .chart-box { background: white; border: 1px solid #d0d7de; border-radius: 6px; padding: 16px; } | |
| .vrow { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; } | |
| .vlabel { font-size: 12px; color: #656d76; width: 50px; font-family: monospace; } | |
| .vbar { flex: 1; display: flex; height: 22px; background: #f0f2f5; border-radius: 4px; overflow: hidden; position: relative; } | |
| .vseg { display: flex; align-items: center; padding: 0 6px; font-size: 11px; color: white; font-weight: 600; } | |
| .vseg.merged { background: #1a7f37; } | |
| .vseg.closed { background: #8c959f; } | |
| .vsum { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); font-size: 11px; color: #1f2328; font-weight: 600; } | |
| table { width: 100%; border-collapse: collapse; background: white; border: 1px solid #d0d7de; border-radius: 6px; overflow: hidden; } | |
| th, td { padding: 6px 10px; text-align: left; border-bottom: 1px solid #d0d7de; font-size: 12px; } | |
| th { background: #f6f8fa; font-weight: 600; color: #1f2328; font-size: 11px; } | |
| td code { background: #f0f2f5; padding: 1px 4px; border-radius: 3px; font-size: 11px; } | |
| .num { text-align: right; font-variant-numeric: tabular-nums; } | |
| .dim { color: #afb6bd; } | |
| .ai { color: #8250df; } | |
| .manual { color: #1f2328; } | |
| .pbar-wrap { position: relative; height: 16px; background: #f0f2f5; border-radius: 3px; } | |
| .pbar { height: 100%; background: linear-gradient(90deg, #cf222e, #d4a72c); border-radius: 3px; } | |
| .pval { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); font-size: 11px; font-weight: 600; } | |
| .trend-bar { display: inline-block; height: 12px; background: #f0f2f5; border-radius: 2px; vertical-align: middle; min-width: 30px; } | |
| .trend-bar > div { display: inline-block; height: 100%; vertical-align: top; } | |
| .trend-ai { background: #8250df; } | |
| .trend-manual { background: #6e7781; } | |
| details { margin-top: 16px; background: white; border: 1px solid #d0d7de; border-radius: 6px; } | |
| summary { padding: 12px 16px; cursor: pointer; font-weight: 600; } | |
| summary:hover { background: #f6f8fa; } | |
| footer { margin-top: 32px; padding-top: 16px; border-top: 1px solid #d0d7de; color: #656d76; font-size: 12px; text-align: center; } | |
| </style> | |
| </head> | |
| <body> | |
| <h1>📊 apache/airflow — Maintainer dashboard v3</h1> | |
| <div class="context">Monday, May 18, 2026 · 16:14 UTC · viewer @potiuk · 6-week window since 2026-04-06</div> | |
| <div class="v3-note">🧪 <strong>v3 features applied</strong> from <a href="https://github.com/apache/airflow-steward/pulls?q=fix-stats-untriaged-scope">apache/airflow-steward PR fix-stats-untriaged-scope</a> (now 4 commits): broad <code>is_untriaged</code> (NOT is_engaged), <code>is_engaged</code> predicate (any-maintainer touched), separate <code>is_ai_triaged</code> + <code>bot_authored</code> categories, two-row hero grid with "Quality Criteria triaged" as the marker-based card, per-triager weekly stats with AI/manual split. Definitions block in <a href="https://github.com/apache/airflow-steward/blob/fix-stats-untriaged-scope/.claude/skills/pr-management-stats/classify.md">classify.md</a>.</div> | |
| <div style="background:#ddf4ff;border:1px solid #54aeff;padding:10px 14px;border-radius:6px;font-size:13px;margin:0 0 24px;"> | |
| 📖 <strong>Triage tiers — quick reference:</strong><br> | |
| • <strong>Quality Criteria triaged</strong> = maintainer comment includes the literal substring <code>Pull Request quality criteria</code> (the link text in the canonical triage template).<br> | |
| • <strong>De-facto triaged</strong> = a maintainer engaged with the PR (any comment/review) but didn't leave the Quality-Criteria marker.<br> | |
| • <strong>AI-triaged</strong> = a maintainer comment includes the AI-attribution footer substring <code>AI-assisted triage tool</code> — meaning the comment was drafted by the <code>pr-management-triage</code> skill.<br> | |
| • <strong>Untriaged</strong> (new broad definition) = <code>NOT is_engaged</code> — no maintainer has touched the PR at all. Earlier iterations used <code>NOT is_triaged</code> which over-counted (counted PRs maintainers had engaged with but didn't leave the marker on). | |
| </div> | |
| <h2>🎯 Backlog state</h2> | |
| <div class="hero-grid"><div class="hero" style="border-left-color:#bf8700"><div class="hero-num" style="color:#bf8700">Needs attention</div><div class="hero-sub">based on triage backlog + queue size</div><div class="hero-reasons">ready queue > 100 (149)</div></div><div class="hero" style="border-left-color:#0969da"><div class="hero-num">457</div><div class="hero-sub">Open PRs (non-bot)</div><div class="hero-reasons"><div><strong>324</strong> non-draft · <strong>151</strong> draft</div><div>343 contributor · 114 collaborator</div></div></div><div class="hero" style="border-left-color:#bf8700"><div class="hero-num" style="color:#bf8700">149</div><div class="hero-sub">Ready for maintainer review</div><div class="hero-reasons">43% of contributor queue</div></div><div class="hero" style="border-left-color:#bf8700"><div class="hero-num" style="color:#bf8700">47</div><div class="hero-sub">Untriaged non-drafts</div><div class="hero-reasons">0 are >4w · 13 in 1-4w bucket</div></div></div> | |
| <h2>🔍 Triage coverage breakdown</h2> | |
| <div class="hero-grid"><div class="hero" style="border-left-color:#0969da"><div class="hero-num">98</div><div class="hero-sub">Quality Criteria triaged <span class="badge" title="Maintainer comment contains the literal `Pull Request quality criteria` link">marker</span></div><div class="hero-reasons">40% of contributor non-drafts</div></div><div class="hero" style="border-left-color:#bf8700"><div class="hero-num" style="color:#bf8700">105</div><div class="hero-sub">De-facto triaged <span class="badge new" title="Engaged by a maintainer but no Quality-Criteria marker — broader is_engaged predicate">v3</span></div><div class="hero-reasons">43% of contributor non-drafts · the marker-counter gap</div></div><div class="hero" style="border-left-color:#8250df"><div class="hero-num" style="color:#8250df">152</div><div class="hero-sub">AI-triaged <span class="badge new" title="Received an AI-assisted triage comment">v3</span></div><div class="hero-reasons">155% of Quality-Criteria-triaged</div></div><div class="hero" style="border-left-color:#6e7781"><div class="hero-num">18</div><div class="hero-sub">Bot PRs <span class="badge new" title="Separate accounting category">v3</span></div><div class="hero-reasons">top: 10 dependabot</div></div></div> | |
| <h2>💡 What needs attention</h2> | |
| <div class="rec-card medium"><div class="rec-icon">⚠️</div><div class="rec-body"><div class="rec-title">Author silence post-triage <span class="rec-prio medium">MED</span></div><div class="rec-detail">37 contributor PRs waiting on author</div><div class="rec-action"><code>/pr-management-triage stale</code></div></div></div> | |
| <div class="rec-card low"><div class="rec-icon">ℹ️</div><div class="rec-body"><div class="rec-title">Many de-facto-triaged without marker <span class="rec-prio low">LOW</span></div><div class="rec-detail">105 contributor PRs were engaged-by-maintainer but lack the triage marker — strict-counter gap</div></div></div> | |
| <h2>👥 Triager activity — last 6 weeks (AI / manual split)</h2> | |
| <div style="font-size: 12px; color: #656d76; margin-bottom: 8px;"> | |
| Each per-week cell shows <span class="ai"><strong>AI</strong></span> / <span class="manual"><strong>manual</strong></span> distinct PRs the maintainer engaged with that week. Trend bar shows total volume + AI portion (purple) over manual (grey). Bot accounts excluded. | |
| </div> | |
| <table> | |
| <thead> | |
| <tr> | |
| <th>Triager</th><th class="num">Total</th><th class="num"><span class="ai">AI</span></th><th class="num"><span class="manual">Manual</span></th> | |
| <th class="num">04-13</th><th class="num">04-20</th><th class="num">04-27</th><th class="num">05-04</th><th class="num">05-11</th><th class="num">05-18</th> | |
| <th>Trend (AI / manual)</th> | |
| </tr> | |
| </thead> | |
| <tbody><tr> | |
| <td><a href="https://github.com/potiuk">@potiuk</a></td> | |
| <td class="num"><strong>217</strong></td> | |
| <td class="num ai">172</td> | |
| <td class="num manual">45</td> | |
| <td class="num"><span class="ai">8</span>/<span class="manual">4</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td><td class="num"><span class="ai">32</span>/<span class="manual">9</span></td><td class="num"><span class="ai">2</span>/<span class="manual">5</span></td><td class="num"><span class="ai">38</span>/<span class="manual">11</span></td><td class="num"><span class="ai">92</span>/<span class="manual">13</span></td> | |
| <td><div class="trend-bar" style="width:60.0%"><div class="trend-ai" style="width:79.26267281105991%"></div><div class="trend-manual" style="width:20.737327188940085%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/eladkal">@eladkal</a></td> | |
| <td class="num"><strong>24</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">24</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">3</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">5</span></td><td class="num"><span class="ai">0</span>/<span class="manual">10</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td> | |
| <td><div class="trend-bar" style="width:6.635944700460829%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/jscheffl">@jscheffl</a></td> | |
| <td class="num"><strong>23</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">23</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">5</span></td><td class="num"><span class="ai">0</span>/<span class="manual">6</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td><td class="num"><span class="ai">0</span>/<span class="manual">6</span></td> | |
| <td><div class="trend-bar" style="width:6.359447004608295%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/vatsrahul1001">@vatsrahul1001</a></td> | |
| <td class="num"><strong>20</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">20</td> | |
| <td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">20</span></td> | |
| <td><div class="trend-bar" style="width:5.529953917050691%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/ferruzzi">@ferruzzi</a></td> | |
| <td class="num"><strong>10</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">10</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">6</span></td> | |
| <td><div class="trend-bar" style="width:2.7649769585253456%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/pierrejeambrun">@pierrejeambrun</a></td> | |
| <td class="num"><strong>9</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">9</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">4</span></td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td> | |
| <td><div class="trend-bar" style="width:2.488479262672811%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/jroachgolf84">@jroachgolf84</a></td> | |
| <td class="num"><strong>8</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">8</td> | |
| <td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td> | |
| <td><div class="trend-bar" style="width:2.2119815668202762%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/Lee-W">@Lee-W</a></td> | |
| <td class="num"><strong>8</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">8</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">4</span></td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td> | |
| <td><div class="trend-bar" style="width:2.2119815668202762%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/bugraoz93">@bugraoz93</a></td> | |
| <td class="num"><strong>8</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">8</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td> | |
| <td><div class="trend-bar" style="width:2.2119815668202762%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/uranusjr">@uranusjr</a></td> | |
| <td class="num"><strong>7</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">7</td> | |
| <td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num dim">·</td> | |
| <td><div class="trend-bar" style="width:1.9354838709677418%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/ashb">@ashb</a></td> | |
| <td class="num"><strong>7</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">7</td> | |
| <td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td> | |
| <td><div class="trend-bar" style="width:1.9354838709677418%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/vincbeck">@vincbeck</a></td> | |
| <td class="num"><strong>6</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">6</td> | |
| <td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td> | |
| <td><div class="trend-bar" style="width:1.6589861751152073%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/bbovenzi">@bbovenzi</a></td> | |
| <td class="num"><strong>6</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">6</td> | |
| <td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num"><span class="ai">0</span>/<span class="manual">3</span></td> | |
| <td><div class="trend-bar" style="width:1.6589861751152073%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/choo121600">@choo121600</a></td> | |
| <td class="num"><strong>5</strong></td> | |
| <td class="num ai">3</td> | |
| <td class="num manual">2</td> | |
| <td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">3</span>/<span class="manual">2</span></td> | |
| <td><div class="trend-bar" style="width:1.3824884792626728%"><div class="trend-ai" style="width:60.0%"></div><div class="trend-manual" style="width:40.0%"></div></div></td> | |
| </tr> | |
| <tr> | |
| <td><a href="https://github.com/amoghrajesh">@amoghrajesh</a></td> | |
| <td class="num"><strong>5</strong></td> | |
| <td class="num ai">0</td> | |
| <td class="num manual">5</td> | |
| <td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">1</span></td><td class="num dim">·</td><td class="num dim">·</td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td><td class="num"><span class="ai">0</span>/<span class="manual">2</span></td> | |
| <td><div class="trend-bar" style="width:1.3824884792626728%"><div class="trend-ai" style="width:0.0%"></div><div class="trend-manual" style="width:100.0%"></div></div></td> | |
| </tr></tbody> | |
| </table> | |
| <div style="font-size: 12px; color: #656d76; margin-top: 8px;"> | |
| <strong>6-week throughput:</strong> <span class="ai">175 AI-assisted</span> / <span class="manual">188 manual</span> = <strong>363</strong> total across <strong>15</strong> active maintainers. | |
| </div> | |
| <h2>📊 Closure velocity (last 6 weeks)</h2> | |
| <div class="velocity-chart"> | |
| <div class="vrow"><div class="vlabel">04-13</div><div class="vbar"><div class="vseg merged" style="width:0.8547008547008548%;"></div><div class="vseg closed" style="width:0.0%;"></div><span class="vsum">3</span></div></div> | |
| <div class="vrow"><div class="vlabel">04-20</div><div class="vbar"><div class="vseg merged" style="width:2.564102564102564%;"></div><div class="vseg closed" style="width:0.0%;"></div><span class="vsum">9</span></div></div> | |
| <div class="vrow"><div class="vlabel">04-27</div><div class="vbar"><div class="vseg merged" style="width:16.23931623931624%;">57</div><div class="vseg closed" style="width:0.5698005698005698%;"></div><span class="vsum">59</span></div></div> | |
| <div class="vrow"><div class="vlabel">05-04</div><div class="vbar"><div class="vseg merged" style="width:71.22507122507122%;">250</div><div class="vseg closed" style="width:13.105413105413104%;">46</div><span class="vsum">296</span></div></div> | |
| <div class="vrow"><div class="vlabel">05-11</div><div class="vbar"><div class="vseg merged" style="width:70.94017094017094%;">249</div><div class="vseg closed" style="width:29.059829059829063%;">102</div><span class="vsum">351</span></div></div> | |
| <div class="vrow"><div class="vlabel">05-18</div><div class="vbar"><div class="vseg merged" style="width:68.66096866096866%;">241</div><div class="vseg closed" style="width:11.68091168091168%;">41</div><span class="vsum">282</span></div></div> | |
| <div style="font-size: 12px; color: #656d76; margin-top: 8px;">6-week avg merged/week: <strong>134.8</strong> · peak: <strong>250</strong> · total merged: <strong>809</strong></div> | |
| </div> | |
| <h2>📈 Opened vs closed momentum</h2> | |
| <div class="chart-box"> | |
| <svg viewBox="0 0 720 220" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:720px;"><line x1="40" y1="180.0" x2="680" y2="180.0" stroke="#d0d7de" stroke-width="1"/><line x1="40" y1="40.0" x2="680" y2="40.0" stroke="#d0d7de" stroke-width="1" stroke-dasharray="3,3"/><text x="32" y="184.0" font-size="10" fill="#656d76" text-anchor="end">0</text><text x="32" y="44.0" font-size="10" fill="#656d76" text-anchor="end">351</text><text x="32" y="114.0" font-size="10" fill="#656d76" text-anchor="end">175</text><text x="40.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">04-13</text><text x="168.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">04-20</text><text x="296.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">04-27</text><text x="424.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">05-04</text><text x="552.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">05-11</text><text x="680.0" y="198" font-size="10" fill="#656d76" text-anchor="middle">05-18</text><polyline points="40.0,160.85470085470087 168.0,154.07407407407408 296.0,121.76638176638177 424.0,46.780626780626775 552.0,59.94301994301994 680.0,53.96011396011396" fill="none" stroke="#0969da" stroke-width="2.5"/><circle cx="40.0" cy="160.85470085470087" r="3.5" fill="#0969da"/><circle cx="168.0" cy="154.07407407407408" r="3.5" fill="#0969da"/><circle cx="296.0" cy="121.76638176638177" r="3.5" fill="#0969da"/><circle cx="424.0" cy="46.780626780626775" r="3.5" fill="#0969da"/><circle cx="552.0" cy="59.94301994301994" r="3.5" fill="#0969da"/><circle cx="680.0" cy="53.96011396011396" r="3.5" fill="#0969da"/><polyline points="40.0,178.80341880341882 168.0,176.4102564102564 296.0,156.46723646723646 424.0,61.93732193732193 552.0,40.0 680.0,67.52136752136752" fill="none" stroke="#1a7f37" stroke-width="2.5"/><circle cx="40.0" cy="178.80341880341882" r="3.5" fill="#1a7f37"/><circle cx="168.0" cy="176.4102564102564" r="3.5" fill="#1a7f37"/><circle cx="296.0" cy="156.46723646723646" r="3.5" fill="#1a7f37"/><circle cx="424.0" cy="61.93732193732193" r="3.5" fill="#1a7f37"/><circle cx="552.0" cy="40.0" r="3.5" fill="#1a7f37"/><circle cx="680.0" cy="67.52136752136752" r="3.5" fill="#1a7f37"/><rect x="50" y="20" width="12" height="2" fill="#0969da"/><text x="66" y="24" font-size="11" fill="#1f2328">Opened</text><rect x="142" y="20" width="12" height="2" fill="#1a7f37"/><text x="158" y="24" font-size="11" fill="#1f2328">Closed</text></svg> | |
| <div style="font-size: 13px; color: #1f2328; margin-top: 12px; padding-top: 12px; border-top: 1px solid #d0d7de;"> | |
| Net delta this week: <strong>+34 PRs</strong> (316 opened - 282 closed)<br> | |
| 6-week net: <strong>+210 PRs</strong> | |
| </div> | |
| </div> | |
| <h2>🔥 Pressure by area (top 8)</h2> | |
| <table> | |
| <thead><tr><th>Area</th><th>Pressure</th><th class="num">Total</th><th class="num">Non-draft</th><th class="num">Ready</th><th class="num">Triaged-waiting</th></tr></thead> | |
| <tbody><tr><td><code>area:providers</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:100.0%;"></div><span class="pval">107</span></div></td><td class="num">132</td><td class="num">94</td><td class="num">38</td><td class="num">10</td></tr> | |
| <tr><td><code>area:task-sdk</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:67.28971962616822%;"></div><span class="pval">72</span></div></td><td class="num">114</td><td class="num">79</td><td class="num">41</td><td class="num">2</td></tr> | |
| <tr><td><code>(no area)</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:50.467289719626166%;"></div><span class="pval">54</span></div></td><td class="num">63</td><td class="num">37</td><td class="num">22</td><td class="num">8</td></tr> | |
| <tr><td><code>area:API</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:35.51401869158878%;"></div><span class="pval">38</span></div></td><td class="num">59</td><td class="num">39</td><td class="num">20</td><td class="num">3</td></tr> | |
| <tr><td><code>area:airflow-ctl</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:31.775700934579437%;"></div><span class="pval">34</span></div></td><td class="num">33</td><td class="num">27</td><td class="num">9</td><td class="num">5</td></tr> | |
| <tr><td><code>area:DAG-processing</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:22.429906542056074%;"></div><span class="pval">24</span></div></td><td class="num">47</td><td class="num">27</td><td class="num">14</td><td class="num">1</td></tr> | |
| <tr><td><code>area:Scheduler</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:21.49532710280374%;"></div><span class="pval">23</span></div></td><td class="num">33</td><td class="num">20</td><td class="num">10</td><td class="num">4</td></tr> | |
| <tr><td><code>area:logging</code></td><td><div class="pbar-wrap"><div class="pbar" style="width:15.887850467289718%;"></div><span class="pval">17</span></div></td><td class="num">16</td><td class="num">14</td><td class="num">4</td><td class="num">1</td></tr></tbody> | |
| </table> | |
| <details> | |
| <summary>📋 Detailed area breakdown</summary> | |
| <table> | |
| <thead><tr><th>Area</th><th class="num">Total</th><th class="num">Drafts</th><th class="num">Non-draft</th><th class="num">Contrib.</th><th class="num">Ready</th><th class="num">Triaged waiting</th><th class="num">Pressure</th></tr></thead> | |
| <tbody><tr><td><code>area:providers</code></td><td class="num">132</td><td class="num">38</td><td class="num">94</td><td class="num">94</td><td class="num">38</td><td class="num">10</td><td class="num"><strong>107</strong></td></tr><tr><td><code>area:task-sdk</code></td><td class="num">114</td><td class="num">35</td><td class="num">79</td><td class="num">78</td><td class="num">41</td><td class="num">2</td><td class="num"><strong>72</strong></td></tr><tr><td><code>(no area)</code></td><td class="num">63</td><td class="num">26</td><td class="num">37</td><td class="num">52</td><td class="num">22</td><td class="num">8</td><td class="num"><strong>54</strong></td></tr><tr><td><code>area:API</code></td><td class="num">59</td><td class="num">20</td><td class="num">39</td><td class="num">41</td><td class="num">20</td><td class="num">3</td><td class="num"><strong>38</strong></td></tr><tr><td><code>area:DAG-processing</code></td><td class="num">47</td><td class="num">20</td><td class="num">27</td><td class="num">27</td><td class="num">14</td><td class="num">1</td><td class="num"><strong>24</strong></td></tr><tr><td><code>area:dev-tools</code></td><td class="num">41</td><td class="num">24</td><td class="num">17</td><td class="num">16</td><td class="num">4</td><td class="num">4</td><td class="num"><strong>16</strong></td></tr><tr><td><code>area:Scheduler</code></td><td class="num">33</td><td class="num">13</td><td class="num">20</td><td class="num">23</td><td class="num">10</td><td class="num">4</td><td class="num"><strong>23</strong></td></tr><tr><td><code>area:airflow-ctl</code></td><td class="num">33</td><td class="num">6</td><td class="num">27</td><td class="num">25</td><td class="num">9</td><td class="num">5</td><td class="num"><strong>34</strong></td></tr><tr><td><code>area:UI</code></td><td class="num">33</td><td class="num">8</td><td class="num">25</td><td class="num">18</td><td class="num">7</td><td class="num">1</td><td class="num"><strong>16</strong></td></tr><tr><td><code>area:ConfigTemplates</code></td><td class="num">26</td><td class="num">13</td><td class="num">13</td><td class="num">15</td><td class="num">7</td><td class="num">2</td><td class="num"><strong>11</strong></td></tr><tr><td><code>area:Triggerer</code></td><td class="num">22</td><td class="num">11</td><td class="num">11</td><td class="num">16</td><td class="num">9</td><td class="num">2</td><td class="num"><strong>14</strong></td></tr><tr><td><code>area:CLI</code></td><td class="num">16</td><td class="num">2</td><td class="num">14</td><td class="num">10</td><td class="num">6</td><td class="num">0</td><td class="num"><strong>12</strong></td></tr><tr><td><code>area:logging</code></td><td class="num">16</td><td class="num">2</td><td class="num">14</td><td class="num">12</td><td class="num">4</td><td class="num">1</td><td class="num"><strong>17</strong></td></tr><tr><td><code>area:db-migrations</code></td><td class="num">13</td><td class="num">3</td><td class="num">10</td><td class="num">7</td><td class="num">4</td><td class="num">1</td><td class="num"><strong>6</strong></td></tr><tr><td><code>area:Executors-core</code></td><td class="num">11</td><td class="num">7</td><td class="num">4</td><td class="num">4</td><td class="num">3</td><td class="num">0</td><td class="num"><strong>6</strong></td></tr><tr><td><code>area:translations</code></td><td class="num">9</td><td class="num">5</td><td class="num">4</td><td class="num">8</td><td class="num">0</td><td class="num">1</td><td class="num"><strong>4</strong></td></tr><tr><td><code>area:deadline-alerts</code></td><td class="num">9</td><td class="num">1</td><td class="num">8</td><td class="num">6</td><td class="num">6</td><td class="num">0</td><td class="num"><strong>6</strong></td></tr><tr><td><code>area:helm-chart</code></td><td class="num">7</td><td class="num">2</td><td class="num">5</td><td class="num">6</td><td class="num">0</td><td class="num">1</td><td class="num"><strong>5</strong></td></tr><tr><td><code>area:plugins</code></td><td class="num">4</td><td class="num">1</td><td class="num">3</td><td class="num">3</td><td class="num">2</td><td class="num">0</td><td class="num"><strong>2</strong></td></tr><tr><td><code>area:secrets</code></td><td class="num">3</td><td class="num">2</td><td class="num">1</td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="num"><strong>3</strong></td></tr><tr><td><code>area:core</code></td><td class="num">3</td><td class="num">1</td><td class="num">2</td><td class="num">3</td><td class="num">2</td><td class="num">0</td><td class="num"><strong>2</strong></td></tr><tr><td><code>area:production-image</code></td><td class="num">3</td><td class="num">1</td><td class="num">2</td><td class="num">2</td><td class="num">1</td><td class="num">0</td><td class="num"><strong>1</strong></td></tr><tr><td><code>area:registry</code></td><td class="num">3</td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="num">1</td><td class="num">0</td><td class="num"><strong>1</strong></td></tr><tr><td><code>area:go-sdk</code></td><td class="num">3</td><td class="num">2</td><td class="num">1</td><td class="num">2</td><td class="num">1</td><td class="num">0</td><td class="num"><strong>2</strong></td></tr><tr><td><code>area:serialization</code></td><td class="num">2</td><td class="num">1</td><td class="num">1</td><td class="num">1</td><td class="num">1</td><td class="num">0</td><td class="num"><strong>1</strong></td></tr><tr><td><code>area:dynamic-task-mapping</code></td><td class="num">1</td><td class="num">0</td><td class="num">1</td><td class="num">1</td><td class="num">1</td><td class="num">0</td><td class="num"><strong>1</strong></td></tr><tr><td><code>area:kubernetes-tests</code></td><td class="num">1</td><td class="num">0</td><td class="num">1</td><td class="num">0</td><td class="num">0</td><td class="num">0</td><td class="num"><strong>0</strong></td></tr></tbody> | |
| </table> | |
| </details> | |
| <footer>Generated by pr-management-stats v3 (apache/airflow-steward PR fix-stats-untriaged-scope, 2 commits) · 2026-05-18 16:14 UTC · viewer @potiuk</footer> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment