Skip to content

fix(gate): script de teste que não é runner fazia um repo sem testes chegar a GREEN - #104

Merged
CRangelP merged 1 commit into
mainfrom
fix/103-guarda-de-arquivo-de-teste
Aug 11, 2026
Merged

fix(gate): script de teste que não é runner fazia um repo sem testes chegar a GREEN#104
CRangelP merged 1 commit into
mainfrom
fix/103-guarda-de-arquivo-de-teste

Conversation

@CRangelP

Copy link
Copy Markdown
Owner

fix(gate): script de teste que não é runner fazia um repo sem testes chegar a GREEN

Medido no fixture do eval deste próprio repositório — o do caso chamado
yellow-run: manifesto com "test": "echo ok", zero arquivos de teste na árvore,
e o gate respondendo checks=typecheck,test / GREEN. GREEN é o nível que libera
deleção de exports mortos.

Nenhum dos detectores de suíte vazia pega isso, e a razão é estrutural: todos
leem O QUE UM RUNNER IMPRIME — "No test files found", "tests 0". Um script que
não é runner não imprime nada disso. echo ok, true, exit 0, ou um script
que roda lint em vez de teste: sai 0, nenhum marcador aparece, a suíte conta.

Go, Rust e Ruby já carregam a guarda por arquivo há versões, cada um com a mesma
frase no comentário — "counting that as a test is how a suiteless repo gets
classified GREEN". JS era o único stack julgando só pela saída. E a tabela de
níveis do SKILL.md enuncia a regra em termos de ARQUIVO, "no test file in the
stack": a fase JS não estava implementando o contrato que o documento publica.

A guarda erra para o lado seguro. Repositório cujos testes moram fora dos
padrões conhecidos é rebaixado para YELLOW com a razão impressa — retém
autoridade em vez de conceder, e é visível na tela.

O limite virou caso em vez de nota de rodapé: js-placeholder-with-file fixa que
test: echo ok COM arquivo de teste presente continua GREEN. Regra por arquivo
responde "existe suíte neste repositório", não "este comando a executou", e quem
ler a guarda como a segunda coisa está lendo uma garantia que ela não dá.

Os 24 fixtures que ganharam arquivo de teste representam repositórios COM suíte
— seus scripts node -e ... sempre foram substitutos para o caso poder focar em
alias, gerenciador de pacote ou outro stack. O arquivo é escrito num laço depois
que todos os fixtures existem, e não em cada mkdir, porque vários copiam o
manifesto de um irmão e linhas por fixture teriam de ser mantidas em sincronia
com essas cópias.

Como isto apareceu, porque a cadeia importa: o agente que trabalhava a #75
reportou que o fixture do eval era ambíguo entre YELLOW e RED e pediu decisão
entre vendorizar o typescript, trocar o fixture para .js, ou aceitar a
ambiguidade. Nenhuma das três — rodar o gate no fixture mostrou que ele dizia
GREEN. A ambiguidade era sintoma. É o terceiro mecanismo distinto para o mesmo
defeito do milestone 5, depois do #94 e da detecção de --passWithNoTests.

Validado: 145/145 casos do gate, 478/478 invariantes, seis suítes verdes.

Closes #103

…chegar a GREEN

Medido no fixture do eval deste próprio repositório — o do caso chamado
yellow-run: manifesto com `"test": "echo ok"`, zero arquivos de teste na árvore,
e o gate respondendo `checks=typecheck,test` / GREEN. GREEN é o nível que libera
deleção de exports mortos.

Nenhum dos detectores de suíte vazia pega isso, e a razão é estrutural: todos
leem O QUE UM RUNNER IMPRIME — "No test files found", "tests 0". Um script que
não é runner não imprime nada disso. `echo ok`, `true`, `exit 0`, ou um script
que roda lint em vez de teste: sai 0, nenhum marcador aparece, a suíte conta.

Go, Rust e Ruby já carregam a guarda por arquivo há versões, cada um com a mesma
frase no comentário — "counting that as a test is how a suiteless repo gets
classified GREEN". JS era o único stack julgando só pela saída. E a tabela de
níveis do SKILL.md enuncia a regra em termos de ARQUIVO, "no test file in the
stack": a fase JS não estava implementando o contrato que o documento publica.

A guarda erra para o lado seguro. Repositório cujos testes moram fora dos
padrões conhecidos é rebaixado para YELLOW com a razão impressa — retém
autoridade em vez de conceder, e é visível na tela.

O limite virou caso em vez de nota de rodapé: `js-placeholder-with-file` fixa que
`test: echo ok` COM arquivo de teste presente continua GREEN. Regra por arquivo
responde "existe suíte neste repositório", não "este comando a executou", e quem
ler a guarda como a segunda coisa está lendo uma garantia que ela não dá.

Os 24 fixtures que ganharam arquivo de teste representam repositórios COM suíte
— seus scripts `node -e ...` sempre foram substitutos para o caso poder focar em
alias, gerenciador de pacote ou outro stack. O arquivo é escrito num laço depois
que todos os fixtures existem, e não em cada mkdir, porque vários copiam o
manifesto de um irmão e linhas por fixture teriam de ser mantidas em sincronia
com essas cópias.

Como isto apareceu, porque a cadeia importa: o agente que trabalhava a #75
reportou que o fixture do eval era ambíguo entre YELLOW e RED e pediu decisão
entre vendorizar o typescript, trocar o fixture para .js, ou aceitar a
ambiguidade. Nenhuma das três — rodar o gate no fixture mostrou que ele dizia
GREEN. A ambiguidade era sintoma. É o terceiro mecanismo distinto para o mesmo
defeito do milestone 5, depois do #94 e da detecção de --passWithNoTests.

Validado: 145/145 casos do gate, 478/478 invariantes, seis suítes verdes.

Closes #103
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@CRangelP
CRangelP merged commit 2c91227 into main Aug 11, 2026
2 checks passed
@CRangelP
CRangelP deleted the fix/103-guarda-de-arquivo-de-teste branch August 11, 2026 18:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

O gate classifica GREEN um repositório JS sem nenhum arquivo de teste: script placeholder não imprime marcador

1 participant