/** * Groundedness: o artefato cita lugares que existem? * * A Verification Engine já pergunta se o artefato tem os campos do schema e se * tem o tamanho mínimo. Ela não pergunta se o conteúdo corresponde a alguma * realidade — e é aí que a alucinação passa: um plano de implementação * perfeitamente formatado, com campos completos e tamanho de sobra, citando * `app/controllers/users.rb` num projeto que não tem `app/`. * * Este módulo é a checagem determinística que faltava. Nenhum modelo, nenhuma * heurística de linguagem: extrai as referências de caminho do texto e olha o * disco. * * ## A decisão que define o valor da checagem * * A pergunta NÃO é "todos os arquivos citados existem?". Um plano legítimo * propõe arquivos novos, e reprovar isso transformaria a checagem em ruído * contra exatamente o trabalho que se quer. A pergunta é **"o LUGAR citado * existe?"**: `src/routes/users-pagination.ts` num projeto com `src/routes/` * é uma proposta plausível, mesmo que o arquivo ainda não exista; * `app/controllers/users.rb` num projeto sem `app/` é um layout inventado. * * A checagem, portanto, é sobre o diretório-pai. Ela pega quem inventou a * forma do projeto, e deixa passar quem propôs um arquivo dentro dela. * * ## Precisão acima de cobertura * * Reprovar um caminho legítimo é pior do que deixar passar um inventado: o * primeiro faz o usuário desconfiar da verificação inteira, o segundo é o * estado anterior. Por isso a extração é conservadora — exige separador de * diretório E extensão de arquivo conhecida. `GET /users` é rota, não caminho, * e não entra. `package.json` sem diretório não entra. Referência nenhuma * encontrada devolve `unknown`, nunca aprovação: ausência de sinal não é sinal. */ /** * Extrai referências de caminho do texto. * * Cada segmento é `[\w.@-]*[\w@-]`: aceita escopo de pacote (`@izanagi/sdk`) e * ponto no meio (`users.ts`), mas **não termina em ponto** — sem isso, * `src/routes/users.ts.` no fim de uma frase entraria com o ponto colado e a * extensão sairia vazia. O casamento exige pelo menos uma barra e uma extensão * conhecida, que é o que separa caminho de arquivo de rota HTTP, de namespace * e de domínio. * * Espaço NÃO entra em segmento nenhum. Aceitá-lo (para cobrir caminho com * espaço, que é raro) fazia o casamento atravessar palavras inteiras: * `users.ts e app/models/user.rb` virava UMA referência, e a checagem passava * a medir outra coisa. */ export declare function extractPathReferences(text: string): string[]; export interface GroundednessReport { /** Referências consideradas (já filtradas). */ total: number; /** Referências cujo diretório-pai existe no projeto. */ grounded: number; /** Caminhos cujo lugar não existe: o layout foi inventado. */ ungrounded: string[]; /** grounded/total em [0,1]. `null` quando não havia referência nenhuma. */ ratio: number | null; } /** * Confere as referências contra o disco. Nunca lança: erro de filesystem faz a * referência contar como não conferida, e o resultado diz isso pelo `total`. */ export declare function checkGroundedness(text: string, root: string): GroundednessReport; //# sourceMappingURL=groundedness.d.ts.map