Skip to content

[FEAT] Ingest: capturar mergeCommitSha + subjects dos commits do PR #75

@trentas

Description

@trentas

User story

Como operador do iris analisando múltiplos repos, eu quero que a ingestão de PRs capture o mergeCommitSha (e os parents desse commit) para que o engine tenha um sinal de ground-truth da estratégia de merge usada em cada PR (merge commit vs squash vs rebase), hoje impossível de inferir com confiança.

Acceptance criteria

  • iris/ingestion/github_reader.py passa a buscar mergeCommit { oid, parents { totalCount } } no GraphQL de PRs (campos _PR_FIELDS_*, hoje em ~github_reader.py:74-81).
  • iris/models/pull_request.py ganha campo opcional merge_commit_sha: str | None (e, se barato, merge_commit_parent_count: int | None).
  • Parser _parse_pull_requests() popula o novo campo; ausência (PR não-mergeado / dado faltando) → None, sem quebrar.
  • Os subjects dos commits do PR (já vindos no GraphQL) passam a ser parseados/expostos no CommitRef, habilitando o match do padrão (#<número>) do squash default do GitHub.
  • Backward-compatible: relatórios e análises existentes continuam funcionando se o campo vier None (repos antigos / sem API).

Scope / non-goals

Dentro: só coleta + modelo. Adicionar merge_commit_sha, parent count do merge commit, e subjects dos commits do PR.

Fora: a lógica de classificação da estratégia de merge em si (isso é a issue de métrica [METRIC] Merge strategy detection, que consome este campo). Sem mudança de UI aqui.

Stage

Stage 2 (refinamento da plataforma atual) — melhora a confiabilidade do pipeline de ingestão CLI → engine.

Implementation notes

  • Pré-requisito / enabler de [METRIC] Merge strategy detection per repo.
  • Dado já parcialmente disponível: commit_refs (hashes dos commits do PR) e o parent count de commits do main (%P em git_reader.py:23, flag is_merge). O que falta é só amarrar o PR ao commit que de fato aterrissou no main via mergeCommitSha.
  • GraphQL: pullRequest { mergeCommit { oid parents(first:0){ totalCount } } }.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions