Sobre o projeto

Extra CODEOWNERS é um GitHub App auto-hospedado para equipes que desejam automação para aprovar pull requests rotineiros sob uma política CODEOWNERS. Ele publica uma verificação obrigatória que aceita tanto uma aprovação humana de CODEOWNER quanto uma aprovação de um GitHub App explicitamente cadastrado. Um repositório também pode optar por tratar um autor de pull request elegível como evidência de CODEOWNER humano para aquela verificação. Pessoas e equipes permanecem no arquivo CODEOWNERS padrão do GitHub, enquanto uma política separada diz quais Apps podem cobrir quais proprietários e caminhos. O projeto existe porque a regra do GitHub "Require review from Code Owners" entende pessoas e equipes, mas não permite que um GitHub App substitua esses titulares. Se um App como Stampbot já souber que um pull request é rotineiro, o GitHub ainda aguarda um code owner humano. O Extra CODEOWNERS substitui essa decisão única por uma verificação. Ele avalia cada conjunto efetivo de proprietários distinto separadamente. Cada conjunto de proprietários representado por um caminho possuído deve ser aprovado. Um pull request pode usar uma aprovação humana para um conjunto de proprietários e uma aprovação de App para outro. Uma aprovação de App qualifica-se somente quando a organização cadastrou essa identidade exata de App, o repositório optou por participar, a delegação cobre o caminho alterado e o CODEOWNER efetivo, quaisquer rótulos necessários estão presentes, a aprovação se aplica ao head atual do pull request, e nenhuma salvaguarda de organização ou embutida torna o caminho restrito a humanos. Um pull request que mistura caminhos possuídos delegados e não delegados ainda precisa de cobertura humana para cada conjunto de proprietários não delegado. Um caminho sem correspondência efetiva de CODEOWNERS não cria nenhuma exigência de code owner, embora contagens normais de aprovação e outras regras ainda se apliquem. O GitHub mantém as regras normais de pull request: contagem mínima de aprovação, tratamento de revisão expirada, commits assinados e verificações obrigatórias não relacionadas. O Extra CODEOWNERS destina-se a substituir apenas o "Require review from Code Owners". O contrato público do GitHub não diz se uma revisão de um App de terceiros conta para o mínimo ordinário de aprovações, portanto essa combinação deve ser testada em um repositório descartável antes de ser utilizada. Um mínimo não nulo ainda pode exigir um humano mesmo quando a verificação do Extra CODEOWNERS for bem-sucedida. O App não envia revisões, não faz merge de pull requests, não concede acesso a outro App e não edita CODEOWNERS. Ele lê evidências do GitHub e publica uma única Check Run. A verificação deve ser lida como um resultado de política, não como uma revisão. O Extra CODEOWNERS aparece na área de verificações do GitHub, enquanto a contagem normal de aprovação aparece na área de revisões. As equipes devem manter uma regra normal de revisão mínima quando necessário. A verificação é assíncrona. Quando uma aprovação é desfeita ou alterada, um sucesso anterior permanece visível até que o GitHub entregue o evento e o App redefina e reavalie a verificação. A reconciliação repara entregas perdidas, mas não é um mecanismo de revogação instantânea. A regra nativa de code-owner do GitHub deve ser mantida em uma fronteira que não tolere essa janela de sucesso obsoleto. A delegação é dividida entre dois escopos de política. O CODEOWNERS decide quais pessoas ou equipes são proprietárias de cada caminho. A política de organização decide quais Apps são confiáveis em geral, além dos caminhos que nenhum App pode cobrir. A política de repositório decide qual App cadastrado pode cobrir qual proprietário e caminho naquele repositório. A política de repositório pode restringir a política de organização, mas não pode cadastrar um App nem enfraquecer uma salvaguarda de organização. A política de repositório é TOML com schema_version, enabled e delegations contendo app, paths, for_owners e required_labels. O valor app é um alias da tabela apps da política de organização, que vincula o alias ao ID numérico imutável do App, seu slug público e o ID do bot user. Arquivos de política de exemplo são fornecidos em examples/policy, e o guia de configuração abrange ambos os escopos, correspondência de caminhos, rótulos, arquivos protegidos embutidos e uma via de fuga insegura. Para inspeção local, uma cópia limpa pode ser executada com Bash, Git e mise instalados, clonando o repositório e executando mise trust, mise install, mise run bootstrap e mise run test. O README recomenda ler mise.toml antes do mise trust, pois esse comando registra uma decisão local de confiança. Uma execução bem-sucedida termina com o suite de testes passando. Isso não registra um GitHub App nem comprova os contratos do GitHub ao vivo. Para publicar uma verificação em um repositório de teste, o tutorial first-check está disponível. As regras nativas de code-owner devem permanecer habilitadas onde for relevante. Imagens e charts alpha são apenas para testes em modo sombra e devem ser fixados por digest. O projeto está em pré-lançamento. Imagens e charts alpha são apenas para testes em modo sombra, não obrigatórios, e não devem garantir merges em produção. Imagens legadas de preview como main e seus tags sha e sha256 companion não são mais suportadas e são inseguras para implantação, pois antecedem o pipeline de lançamento imutável. O documento de status do projeto separa o que é utilizável hoje do que ainda bloqueia um lançamento suportado. A documentação inclui status do projeto, comparação com CODEOWNERS nativo, threat model, tutorial de instalação de desenvolvimento, guia de configuração, guia de troubleshooting, guias de implantação e operações, recipient notice bundles, guias de arquitetura e mantenedores, e guia de contribuidores. O manual completo está no Read the Docs. As políticas do projeto cobrem suporte, relatar vulnerabilidades privadas, CVEs do OpenSSL e VEX, governança, changelog e licença Apache 2.0. O conjunto de badges indica CI, property testing, coverage, CodeQL, OpenSSF Scorecard, documentação, Python 3.12 a 3.14, e licenciamento Apache-2.0.