Pular para o conteúdo

Atrito na revisão de PRs do Sentry

Análise baseada em evidências do atrito de revisão em getsentry/sentry: 500 PRs ao longo de 90 dias, com análise aprofundada de comentários e propostas de ADRs.

Este estudo mede onde o atrito de revisão de código se concentra em getsentry/sentry e identifica quais Architecture Decision Records (ADRs) poderiam reduzir ciclos repetidos de discussão. Diferentemente de um despejo superficial de métricas, vamos além dos números agregados: lemos as threads reais de comentários de PRs de alto atrito, classificamos os temas recorrentes de discussão com evidências e propomos ADRs fundamentados em exemplos reais.

Parâmetro Valor
Repositório getsentry/sentry
Janela 90 dias (encerrando em abril de 2026)
PRs mergeados analisados 500
PRs fechados sem merge analisados 500
PRs abertos amostrados 251
Análise aprofundada de comentários 60 PRs de alto atrito (50 mergeados + 10 fechados sem merge)
Total de comentários analisados 965 (604 não-bot)
  1. A mediana do tempo até o merge é de 4,98 horas, mas o P90 chega a 70,54 horas, um multiplicador de 14x. PRs grandes (≥10 arquivos ou ≥400 de churn) têm uma mediana de tempo até o merge de 22,52 horas contra 1,66 hora para PRs minúsculos.

  2. O tamanho do PR é o preditor de atrito mais forte. PRs grandes atingem o quartil de alto atrito 57,4% das vezes. PRs minúsculos atingem apenas 9,8% das vezes. PRs de funcionalidade (feat) têm a maior taxa de atrito, em 38,6%, quase o dobro dos PRs de correção (17,6%).

  3. Os 9 principais temas de discussão em PRs de alto atrito, identificados a partir de 604 comentários não-bot em 60 PRs:

    • Design de API e valores padrão: 38,3% dos PRs de alto atrito
    • Evidência de testes e cobertura: 38,3%
    • Padrões de componentes e estilização: 35,0%
    • Gerenciamento de estado e fluxo de dados: 35,0%
    • Documentação de código: 31,7%
    • Segurança de tipos e tratamento de erros: 30,0%
    • Follow-up e scope creep: 25,0%
    • Segurança e permissões: 20,0%
    • Nomenclatura e consistência: 11,7%
  4. Revisores automatizados encontram bugs reais, mas as mesmas categorias de bug se repetem entre os PRs. Revisores bot (sentry[bot], sentry-warden[bot], cursor[bot]) representam 23,7% dos comentários substantivos de revisão e aparecem em 68,3% dos PRs de alto atrito. Ler as conclusões reais revela pelo menos 10 padrões recorrentes (manipuladores DoesNotExist ausentes, .filter().first() com except inalcançável, acesso direto a dict em respostas de API, divergências de chaves de opção, listas companheiras esquecidas etc.) que deveriam ser promovidos da revisão agêntica cara para verificações determinísticas baratas (regras de Ruff/Semgrep, modo strict do mypy, registros tipados). Um PR (#111522) teve o mesmo padrão sinalizado 4 vezes em uma única passagem de revisão. É exatamente o caso em que uma única regra de lint compensa para sempre.

  5. PRs abandonados sinalizam ambiguidade de decisão não resolvida. 12 PRs fechados sem merge (2,4%) tiveram ≥10 itens de discussão. Esses PRs abandonados tiveram 2x a mediana do tempo até o merge e 2,5x a mediana de eventos de revisão em comparação com PRs de alto atrito mergeados.

  6. 92 PRs abertos estão parados há 14+ dias, sendo 33 parados há 30+ dias. O PR parado mais discutido tem 55 eventos de revisão e está aberto há mais de 760 horas.

Todos os dados e scripts são publicados para auditoria:

Terminal window
# Reproduce the full pipeline
python analyze_sentry_prs.py collect --repo getsentry/sentry --days 90 --limit 500
python analyze_sentry_prs.py analyze
python analyze_sentry_prs.py report