frontend → backend-api significa que revisões de frontend podem consultar backend-api, e não o contrário. Vincule as duas direções explicitamente se os dois times quiserem a verificação.
Quando você precisa disso
Três situações, todas comuns, todas invisíveis para uma revisão de repositório único:- Quebra de contrato producer/consumer. O backend renomeia um campo da API e o frontend continua lendo o antigo; um producer adiciona um valor de enum que nenhum consumer trata; writer e reader derivam a mesma chave de cache de formas diferentes. O contrato está dividido em dois repositórios e não é garantido por nada.
- O código do qual seu repositório depende não está no seu repositório. Git submodules, pacotes internos vendorizados, bibliotecas compartilhadas baixadas no build. A revisão clona seu repositório sem submodules e sem instalar pacotes, então uma dependência via submodule ou de build é um diretório vazio (ou um import que o agente não consegue seguir) durante a revisão. Se seus tipos, regras ou clients canônicos vivem num repositório assim, vinculá-lo é a única forma de a revisão lê-los.
- A mesma regra de negócio reimplementada por canal ou serviço. Precificação, disponibilidade, validação, transições de estado de pedido que existem uma vez num lugar canônico e são copiadas, aproximadamente, em outros. Vincular o repositório canônico permite que o agente compare com a fonte da verdade em vez de chutar.
O que a revisão já enxerga sem essa feature: o repositório completo em revisão (não só o diff) no commit head do PR, mais a descrição do PR. Ela consegue fazer grep e ler qualquer arquivo desse checkout. Não consegue ver outros repositórios, conteúdo de submodules nem dependências instaladas.
O que você ganha
Um exemplo concreto. Seu PR de frontend adiciona este tratamento de erro:Bug · medium — [cross-repo] O frontend verificaO resumo da revisão também mostra o que foi consultado: Additional context used:error.response?.data?.errorprocurandoINTEGRATION_NOT_APPROVED, mas osendErrordo backend (src/api/response.ts) retorna o código num campomessage. O branch de not-approved nunca casa, então os usuários sempre veem o toast de erro genérico. Leiadata.message.
org/backend-api@main.
Onde os achados caem
- Todo comentário cai numa linha do diff do seu PR. O código do repositório vinculado é citado dentro do comentário como evidência, com a tag
[cross-repo]e o arquivo da contraparte nomeado. O Kody nunca comenta, registra achados nem modifica o repositório vinculado. - Achados só são levantados com evidência confirmada no arquivo da contraparte — “este literal precisa bater com o backend” sem prova não é emitido.
- A linha Additional context used só aparece quando um repositório vinculado foi de fato lido durante a revisão. Sem a linha, ele não foi consultado (veja abaixo por que isso acontece).
Como funciona
Quando um pull request num repositório com repositórios vinculados toca superfície de fronteira, o agente de revisão do Kody pode buscar e ler os repositórios vinculados — do mesmo jeito que faz grep no seu próprio repositório — para verificar se os dois lados do contrato continuam de acordo. Os repositórios vinculados são baixados de forma preguiçosa, só quando o agente os lê pela primeira vez.O que arma a passagem
Configurar um vínculo não basta por si só. Antes da revisão, uma checagem determinística e barata varre as linhas adicionadas do diff do PR e só habilita as ferramentas cross-repo quando encontra superfície de fronteira:- literais de string (códigos, nomes de evento, segmentos de path, nomes de header)
- símbolos exportados (
export function/const/class/type/interface/enum) - membros de enum, type ou interface
- chaves de objeto / payload / DTO
- identificadores com cara de status, estado ou código de erro (
status,code,errorCode,kind,event,key, …) - paths com cara de contrato (
dto/,schema/,api/,types/,clients/,openapi,proto, …)
Quando você não vê nada
Se um PR num repositório com repositórios vinculados não mostra a linhaAdditional context used, aconteceu uma destas coisas, em ordem aproximada de probabilidade:
- O diff não tinha superfície de fronteira (o gate ficou desligado — esperado em refatorações).
- O gate estava ligado, mas o agente não precisou do repositório vinculado para chegar às conclusões.
- O repositório vinculado não pôde ser baixado (permissões, timeout) — a revisão continua sem ele.
- O repositório vinculado não está conectado a esta organização Kodus, ou o plano da organização não inclui a feature — o vínculo é ignorado.
- Só podem ser vinculados repositórios já conectados à mesma organização Kodus (o Kody reaproveita sua integração de Git existente — sem tokens extras).
- Até 3 repositórios vinculados por repositório.
- O acesso é somente leitura. O Kody nunca faz push, comenta nem modifica um repositório vinculado.
- Se um repositório vinculado não puder ser buscado (permissões, timeout), a revisão continua normalmente sem ele.
Adicionando um repositório vinculado
No app web
Na barra lateral, escolha seu repositório no seletor de escopo no topo do grupo Code review (se ele não estiver na lista, crie as configurações dele primeiro com Add repository configuration) e abra Code review → Linked repositories (a página só existe no escopo de repositório). Clique em Add repository, escolha um repositório no diálogo Add linked repository (só aparecem repositórios conectados) e clique em Save settings. Cada vínculo tem dois campos opcionais, Instructions · optional e Branch / ref pin · optional, descritos abaixo.No kodus-config.yml
linkedRepositories também é uma chave do arquivo de config, então os vínculos podem ficar versionados junto com o resto das suas configurações de revisão:
repository(obrigatório) — nome completo de um repositório conectado à organização (owner/repo).instructions,ref— mesmo significado dos campos do app web (abaixo).
kodusConfigFileOverridesWebPreferences está habilitado para o repositório (kodus Config File Overrides Web Preferences em Code review → General no escopo de repositório), é lido do branch padrão do repositório, e a lista linkedRepositories do arquivo substitui a lista da web para aquele repositório (as listas não são mescladas; linkedRepositories: [] no arquivo desliga a feature). A exigência de plano vale independentemente de onde os vínculos são declarados.
Instruções
Uma dica em texto livre que diz ao agente de revisão para que serve esse vínculo e onde olhar. O Kody funciona sem ela, mas uma boa instrução deixa a passagem entre repositórios mais rápida e precisa — é a diferença entre o agente explorar o repositório vinculado do zero e ir direto ao código relevante. Boas instruções nomeiam a relação e os caminhos que sustentam o contrato:A passagem cross-repo procura divergências na fronteira — um nome de campo, chave, encoding ou valor de status de um lado que não bate com o que o outro lado produz ou espera. Vincular uma biblioteca canônica remove o ponto cego (o agente passa a conseguir lê-la), mas não faz, por si só, a revisão apontar “já existe uma implementação canônica e este PR reimplementou uma versão mais fraca”. Se você quer essa checagem, codifique-a como uma Kody Rule e use a instrução para apontar onde vivem as implementações canônicas.
Ref pin (seleção de branch)
Controla qual branch (“ref”) do repositório vinculado o Kody lê. A maioria dos times deixa vazio: o Kody então lê a branch com o mesmo nome da branch do seu PR quando ela existe (para que mudanças coordenadas entre repositórios se enxerguem antes do merge), e cai na branch padrão caso contrário. A ordem completa de resolução, vence a primeira que casar:- Override na descrição do PR — mencione a branch ou o PR do repositório vinculado na descrição do PR em revisão (ex.:
org/backend-api#123ouorg/backend-api@feature-x). Pontual, prioridade máxima. Só vale para repositórios já vinculados. - Pin de
refna config (este campo), se definido. - PR aberto numa branch correspondente — um pull request aberto no repositório vinculado cuja head branch coincide com a head branch do seu PR.
- Mesmo nome de branch no repositório vinculado.
- A branch padrão do repositório vinculado (depois
main/mastercomo fallback).
main, develop, release/2.x) quando quiser revisões determinísticas contra uma branch estável — por exemplo, quando nomes de branch são reaproveitados entre repositórios para trabalhos não relacionados e o casamento por mesmo nome pegaria a coisa errada. O override na descrição do PR ainda vence o pin em casos pontuais.
O resumo da revisão sempre mostra qual ref foi realmente usado. Para um passo a passo com exemplos, veja Como usar repositórios vinculados.