KubeVirt release-1.9 AI Attribution Review

Following on from my release-1.8 AI attribution review, I’ve repeated the analysis for the release-1.9 development cycle. The results show a dramatic shift in AI tooling adoption across the project.

Background

KubeVirt’s AI Contribution Policy asks contributors to disclose AI-assisted work using git trailers such as Assisted-by:, Co-authored-by:, or Generated-by:. This review covers the commit range origin/release-1.8..origin/release-1.9 (the v1.9.0 development cycle).

Overview

Metric 1.9 1.8
Total commits 1,564 1,089
Merge commits 505 351
Non-merge commits 1,059 738
Commits with AI attribution 536 76
AI-attributed share (of non-merge) 50.6% 10.3%
Distinct contributors using AI 38 15
DCO (Signed-off-by) compliance 536/536 (100%) 76/76 (100%)

The headline number: half of all non-merge commits now carry AI attribution. That’s a 7x increase in absolute count and a nearly 5x increase in share compared to release-1.8. The number of contributors using AI tooling has grown from 15 to 38. DCO compliance remains perfect at 100%.

AI Tools Used

Tool Commits Authors
Claude (all variants) 469 35
Cursor 72 9
GPT / Codex 16 1
Gemini 7 2
Composer (Anysphere) 5 2
sourcery-ai 3 3
IBM Bob 2 2

Note: some commits reference multiple tools, so the per-tool totals exceed 536.

Claude remains dominant but the ecosystem has diversified significantly. In 1.8, only Claude and Cursor appeared. In 1.9, seven distinct AI tools or platforms are represented. Claude accounts for ~87% of commits using AI, Cursor for ~13%, with GPT/Codex, Gemini, Composer, sourcery-ai, and IBM Bob making up the tail.

An interesting new pattern is contributors specifying the underlying model when using Cursor, e.g. Assisted-by: Cursor (claude-4.6-opus-high-thinking) or Assisted-by: Cursor (gpt-5.3-codex-high). This gives finer-grained visibility into what models are being used through editor-integrated AI.

94.4% of AI-attributed commits come from Red Hat engineers (33 of 38 contributors), consistent with the 1.8 pattern. Nvidia, IBM, and community contributors make up the remainder.

PR Quality: AI vs Non-AI

I pulled metrics for 219 AI-attributed PRs and 284 non-AI PRs merged during the cycle via the GitHub API.

Time to Merge

Metric AI PRs Non-AI PRs
Median 13.0 days 9.0 days
Mean 25.3 days 25.5 days

Unlike 1.8, where AI PRs merged slightly faster, the pattern has shifted. AI PRs now take longer on median (13.0 vs 9.0 days), though the mean is virtually identical. When controlled for PR size, the picture is more nuanced:

Size Bucket AI PRs Non-AI PRs
Small (<50 lines) 7.5 days 2.8 days
Medium (50-200 lines) 13.7 days 18.7 days
Large (200+ lines) 23.9 days 18.5 days

Medium AI PRs merge notably faster (13.7 vs 18.7 days), consistent with the 1.8 finding. Small AI PRs take considerably longer than small non-AI PRs (7.5 vs 2.8 days), which may reflect that even “small” AI-assisted changes tend to be more substantive and require more review than typical small fixes. Large AI PRs take longer (23.9 vs 18.5 days), possibly reflecting the increased review burden of large AI-generated diffs that was flagged in the 1.8 review.

PR Size

Metric AI PRs Non-AI PRs
Median additions 49 23
Median deletions 15 8
Median changed files 3 3

AI PRs continue to skew larger, with 30% at size L or above (vs 25% for non-AI), though the gap is narrower than in 1.8 (where 65% of AI PRs were L+). 13 AI-attributed PRs reference VEPs, including work on Node Hooks (VEP-190), multi-architecture software emulation (VEP-172), and NAD hotplug.

Changes Requested

Rounds AI PRs Non-AI PRs
0 195 (89%) 258 (91%)
1+ 24 (11%) 26 (9%)

The change-request rate for AI PRs has ticked up slightly to 11% (from 9% in 1.8), while non-AI PRs remain at 9%. This is a marginal difference and not statistically significant at these sample sizes, but worth continuing to monitor.

Review Intensity

Size Bucket AI PRs Non-AI PRs
Small (<50 lines) 0.0 0.0
Medium (50-200 lines) 4.9 4.8
Large (200+ lines) 1.5 1.7

(Median comments per 100 lines changed)

This is a notable improvement from 1.8. In the previous cycle, large AI PRs received significantly fewer comments per line than non-AI PRs (2.5 vs 6.2), raising questions about whether reviewers were scrutinizing AI-generated diffs less carefully. In 1.9, the review intensity for large PRs is essentially identical (1.5 vs 1.7). Medium PRs are also nearly identical (4.9 vs 4.8). The review depth concern from 1.8 appears to have resolved itself.

Statistical Analysis

The median comparisons above are useful for intuition, but they don’t tell us whether the differences are statistically meaningful or just noise. To go deeper, I computed Cliff’s delta (a non-parametric effect size measure suitable for skewed data like time-to-merge), Mann-Whitney U tests for significance, and Benjamini-Hochberg corrections for multiple comparisons. I also computed three complexity metrics beyond lines changed: directory entropy, test code ratio, and distinct subsystems touched.

Effect Sizes

Metric AI median Non-AI median Cliff’s δ Magnitude p (BH)
Time to merge (days) 13.0 9.0 +0.147 small 0.009
Total lines changed 84 40 +0.168 small 0.004
Additions 49 23 +0.149 small 0.009
Deletions 15 8 +0.087 negligible 0.135
Changed files 3 3 +0.088 negligible 0.135
Test code ratio 0.65 0.29 +0.238 small <0.001
Directory entropy 0.23 0.02 +0.052 negligible 0.360
Subsystems touched 2 2 +0.047 negligible 0.368
Review comments 3 0 +0.191 small <0.001
Changes requested 0 0 +0.018 negligible 0.512

Cliff’s delta ranges from -1 to +1. Positive values mean AI PRs have higher values. Per Romano et al. (2006), |δ| < 0.147 is negligible, 0.147-0.33 is small, 0.33-0.474 is medium, and ≥ 0.474 is large.

The key takeaway: most differences between AI and non-AI PRs are negligible to small. The statistically significant differences (after BH correction at q=0.05) are:

  • Total lines changed (δ=+0.168, small) — AI PRs are moderately larger
  • Time to merge (δ=+0.147, small) — AI PRs take slightly longer, but this is right at the negligible/small boundary
  • Test code ratio (δ=+0.238, small) — AI PRs contain proportionally more test code (median 65% vs 29%)
  • Review comments (δ=+0.191, small) — AI PRs receive more review comments in absolute terms

The test code ratio finding is striking. AI-attributed PRs have a median test code ratio of 65% vs 29% for non-AI PRs. This suggests AI tooling is being used particularly for writing tests, or that contributors using AI are more diligent about test coverage.

Notably, changes requested (δ=+0.018), directory entropy (δ=+0.052), and subsystems touched (δ=+0.047) are all negligible — AI PRs are not generating more reviewer pushback, and their structural complexity (how spread out changes are across the codebase) is indistinguishable from non-AI PRs.

Complexity Metrics

Metric AI PRs Non-AI PRs
Directory entropy (median) 0.23 0.02
Directory entropy (mean) 0.66 0.55
Test code ratio (median) 0.65 0.29
Test code ratio (mean) 0.59 0.41
Subsystems touched (median) 2 2
Subsystems touched (mean) 3.1 2.5

Directory entropy (Shannon entropy over the distribution of changed lines across directories) measures how spread out changes are. Higher values indicate changes touching more parts of the codebase. The difference in medians looks large (0.23 vs 0.02) but the effect size is negligible (δ=+0.052), meaning many non-AI PRs also have higher entropy — the distributions overlap heavily.

Kaplan-Meier Survival Analysis

A more rigorous way to compare merge timelines is Kaplan-Meier survival analysis, which shows what fraction of PRs remain unmerged over time:

The curves diverge early — non-AI PRs merge faster in the first ~15 days — then converge. The log-rank test gives p=0.206, meaning the overall difference in merge time distributions is not statistically significant. While the median TTM differs (13.0 vs 9.0 days), the full distributions are not distinguishable at conventional significance levels.

When stratified by PR size, the picture becomes clearer:

  • Small PRs: The visible gap (AI slower) has a small effect size (δ=+0.238, p=0.002). Small AI PRs genuinely take longer, likely because they are more substantive than typical small non-AI changes.
  • Medium PRs: No significant difference (δ=-0.073, p=0.485). AI and non-AI medium PRs merge at essentially the same rate.
  • Large PRs: No significant difference (δ=+0.055, p=0.579). Despite the 5-day median difference (23.5 vs 18.5), the distributions overlap too much for this to be meaningful.

Methodology Note

The analysis uses Cliff’s delta rather than Cohen’s d because time-to-merge and comment counts are heavily right-skewed (not normally distributed). Mann-Whitney U provides non-parametric significance tests, with Benjamini-Hochberg correction for the 10 comparisons. Kaplan-Meier analysis uses the lifelines library with log-rank tests. The full analysis script is available alongside the raw data in the report repository.

Trailer Format: Still the Main Issue

The format inconsistency flagged in the 1.8 review has gotten worse in absolute terms. There are now 59 distinct trailer value formats across 536 commits, up from 17 formats across 76 commits. Some examples:

Format Count Notes
Assisted-by: Claude <noreply@anthropic.com> 71 Matches policy
Assisted-by: Claude Opus 4.6 <noreply@anthropic.com> 57 Includes model
Assisted-By: Claude <noreply@anthropic.com> 42 Case variant
Assisted-by: claude-4.6-opus 42 Model slug, no email
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 39
Assisted-By: Claude Sonnet 4.6 35 No email
Assisted-By: Claude opus 4.6 <noreply@anthropic.com> 33 Lowercase model
Assisted-by: Cursor 29 No email
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> 18 Includes context window
Assisted-By: Claude Sonnet 4.6 via Cursor 14 Dual tool
Assisted-by: Claude Sonnet 4.6 <noreply@anthropic.com> 14
47 more variants

Key inconsistencies that make machine parsing difficult:

  • Case variation: Assisted-by vs Assisted-By vs Co-Authored-By vs Co-authored-by
  • Model name inclusion: ~60% include the model name, ~40% don’t
  • Email format: some use <noreply@anthropic.com>, some use <claude@anthropic.com>, some omit email entirely
  • Context window annotation: some include (1M context) in the model name
  • Cursor model specification: some note the underlying model (Cursor (claude-4.6-opus-high-thinking)), most don’t
  • Tool chain notation: Claude Sonnet 4.6 via Cursor vs separate trailers for each tool

The Generated-by: trailer defined in the policy remains unused in 1.9, same as 1.8.

Comparison with 1.8

Metric 1.8 1.9 Change
AI-attributed commits 76 536 +605%
AI share of non-merge 10.3% 50.6% +40.3pp
Contributors using AI 15 38 +153%
AI tools represented 2 7 +250%
Distinct trailer formats 17 59 +247%
AI PR median TTM 7.5 days 13.0 days +5.5 days
Changes requested (AI) 9% 11% +2pp
Large PR review depth gap 2.5 vs 6.2 1.5 vs 1.7 Closed

Recommendations

The 1.8 review made five recommendations. Here’s the status and updated guidance:

  1. Standardize trailer formats - Not implemented. With 59 formats across 536 commits, this is now urgent. A git interpret-trailers alias or commit hook should be provided to enforce 1-2 canonical formats.

  2. Clarify model name inclusion - Not resolved. The split has shifted but remains inconsistent. The policy should either require or discourage model name inclusion.

  3. Add CI validation - Not implemented. A prow check for trailer format would catch the 59 format variants before merge.

  4. Monitor review depth on large AI PRs - The gap has closed. Large AI PRs now receive essentially identical review intensity to non-AI PRs. This concern can be downgraded but should continue to be tracked.

  5. Continue tracking metrics across releases - This review does exactly that, and the trend data is already proving valuable.

Additional recommendations for 1.10:

  1. Address multi-tool attribution - Contributors using Claude through Cursor are handling this inconsistently (separate trailers, combined trailers, or only mentioning one tool). The policy should provide guidance.

  2. Consider the review load - With half of all commits now AI-attributed and AI PRs skewing larger, the review burden has increased substantially. The project should discuss whether review processes need to adapt.

Conclusion

The 1.9 cycle represents an inflection point for AI tooling adoption in KubeVirt. Moving from 10% to 50% of non-merge commits carrying AI attribution in a single release cycle is a remarkable shift. The data shows this isn’t concentrated among a few contributors — 38 distinct developers are now using AI tools, up from 15.

The quality story is broadly positive: DCO compliance is perfect, review intensity has normalized, and statistical analysis confirms that most differences between AI and non-AI PRs are negligible to small in effect size. The most interesting finding is that AI PRs contain proportionally more test code (median 65% vs 29%), suggesting AI tooling is being used to improve test coverage. The ecosystem has diversified beyond Claude and Cursor to include GPT/Codex, Gemini, Composer, sourcery-ai, and IBM Bob, though Claude remains dominant at ~87% of commits.

The main action item remains trailer format standardization. With 59 distinct formats, the attribution data is becoming increasingly difficult to parse programmatically. Implementing the trailer standardization and CI validation recommended in the 1.8 review should be a priority before the 1.10 cycle.

Contents

comments powered by Disqus