Skip to content

ci: valida consistência plugin.json ↔ marketplace.json - #15

Merged
tbc-joaovitor merged 1 commit into
mainfrom
ci/valida-versao-plugin-marketplace
Aug 7, 2026
Merged

tbc-joaovitor merged 1 commit into
mainfrom
ci/valida-versao-plugin-marketplace

Conversation

@tbc-joaovitor

Copy link
Copy Markdown
Contributor

Fecha o bead -izm.

O buraco

A CI daqui só roda a suíte de testes — nenhuma checagem de versão. Sem ela, drift entre plugin.json e marketplace.json passa batido: foi o que aconteceu com o protheus (plugin.json=2.14.0 vs marketplace=2.13.0), que ficou uma semana divergente até ser corrigido a mão no PR #13.

No repo irmão, uma variante desse mesmo furo (tabela de versões do README defasada) manteve 7 PRs vermelhos por duas semanas, porque lá a CI roda no merge com a main.

O que entra

Passo portado do tbc-knowledge-plugins — texto do run: idêntico, byte a byte.

O guard typeof p.source !== "string" não é decorativo: plugin de source externo é declarado com source em objeto ({source: "github", repo, sha}) — o andrej-karpathy-skills, aqui. Sem o guard, p.source.replace(...) estoura com TypeError: p.source.replace is not a function antes de tentar ler arquivo, e a CI falha com stack trace bruto em vez de mensagem de drift.

O passo roda antes da suíte: menos de 1s contra ~17s de testes, então falha barato primeiro.

Validação

Rodei o bloco run: extraído do próprio YAML por parser, não uma cópia redigitada:

Estado Resultado
Repo como está exit 0 — fluig 2.1.1, protheus 2.14.1, po-ui 1.0.0, playwright 1.0.0 conferidos; externo pulado
Drift artificial exit 1 + DRIFT: <plugin> plugin.json=X marketplace=Y
Restaurado exit 0

O guard também foi testado por remoção, confirmando que sem ele o script quebra. YAML válido e tests/run-all.sh verde.

Limitação conhecida (herdada do repo-fonte, não introduzida aqui)

O script itera as entradas do marketplace.json e nunca varre o disco. Plugin novo com plugin.json que ninguém registrou no marketplace continua passando despercebido — o inverso do drift que este passo pega. Vale um follow-up nos dois repos.

🤖 Generated with Claude Code

A CI daqui só rodava a suíte de testes. Sem checagem de versão, drift entre o
plugin.json e o marketplace.json passa batido: foi o que aconteceu com o
protheus (plugin.json=2.14.0 vs marketplace=2.13.0), que ficou uma semana
divergente até ser corrigido a mão no PR #13.

Passo portado do tbc-knowledge-plugins (texto do `run:` idêntico), incluindo o
guard `typeof p.source !== "string"`: plugin de source externo é declarado com
source em OBJETO (github/repo/sha) — o andrej-karpathy-skills, aqui. Sem o
guard, `p.source.replace(...)` estoura com
`TypeError: p.source.replace is not a function` antes mesmo de tentar ler
arquivo, e a CI falha com stack trace bruto em vez de mensagem de drift.

Validado local rodando o bloco `run:` extraído do próprio YAML por parser (não
uma cópia redigitada):
- estado atual do repo: exit 0, com os 4 plugins locais conferidos
  (fluig 2.1.1, protheus 2.14.1, po-ui 1.0.0, playwright 1.0.0) e o externo
  pulado;
- com drift artificial: exit 1 e "DRIFT: <plugin> plugin.json=X marketplace=Y";
- restaurado: exit 0 de novo.

O passo roda antes da suíte: é uma checagem de menos de 1s contra ~17s de
testes, então falha barato primeiro.

Limitação herdada do repo-fonte, não introduzida aqui: o script itera as
entradas do marketplace.json, nunca varre o disco — plugin novo com plugin.json
que ninguém registrou no marketplace continua passando despercebido.

YAML validado e tests/run-all.sh verde.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@tbc-joaovitor
tbc-joaovitor merged commit 330b2a8 into main Aug 7, 2026
1 check passed
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.

1 participant