Modo de falha
deco-reconcile invocado pelo bin publicado sai com código 0, não imprime nada e não cria .reconcile/. Para quem está rodando uma reconciliação, isso é indistinguível de "não havia nada a conciliar" — e nesse caso havia (1 arquivo).
Repro, com @decocms/blocks-cli@7.54.0:
npx -p @decocms/blocks-cli deco-reconcile \
--source /path/to/site-fresh \
--target /path/to/site-tanstack \
--snapshot <sha> --target-snapshot <sha> --verbose
# (sem saída)
# EXIT=0
Causa
Última linha de packages/blocks-cli/scripts/reconcile.ts:
if (process.argv[1] && /reconcile\.ts$/.test(process.argv[1])) main();
O npm/npx expõe o bin como symlink node_modules/.bin/deco-reconcile. O shebang #!/usr/bin/env tsx executa com process.argv[1] = o caminho do symlink, que não casa /reconcile\.ts$/. main() nunca roda.
O guard só passa quando o arquivo é invocado pelo caminho literal — que é como os testes e o desenvolvimento local rodam, então passa despercebido.
Contorno
npx tsx packages/blocks-cli/scripts/reconcile.ts --source ... --target ...
Sugestão
Trocar o guard por uma comparação de realpath do módulo em vez de regex sobre o basename de argv[1], ou simplesmente chamar main() incondicionalmente (o arquivo não é reexportado por exports no package.json — só existe como bin).
Vale checar os outros bins de packages/blocks-cli/package.json que usem o mesmo padrão de guard.
Onde apareceu
Rodada de reconciliação deco-sites/zee-tanstack (origem Deno 429e20e..91b36b2) — https://github.com/deco-sites/zee-tanstack/pull/46
🤖 Generated with Claude Code
Modo de falha
deco-reconcileinvocado pelo bin publicado sai com código 0, não imprime nada e não cria.reconcile/. Para quem está rodando uma reconciliação, isso é indistinguível de "não havia nada a conciliar" — e nesse caso havia (1 arquivo).Repro, com
@decocms/blocks-cli@7.54.0:Causa
Última linha de
packages/blocks-cli/scripts/reconcile.ts:O npm/npx expõe o bin como symlink
node_modules/.bin/deco-reconcile. O shebang#!/usr/bin/env tsxexecuta comprocess.argv[1]= o caminho do symlink, que não casa/reconcile\.ts$/.main()nunca roda.O guard só passa quando o arquivo é invocado pelo caminho literal — que é como os testes e o desenvolvimento local rodam, então passa despercebido.
Contorno
Sugestão
Trocar o guard por uma comparação de realpath do módulo em vez de regex sobre o basename de
argv[1], ou simplesmente chamarmain()incondicionalmente (o arquivo não é reexportado porexportsnopackage.json— só existe como bin).Vale checar os outros bins de
packages/blocks-cli/package.jsonque usem o mesmo padrão de guard.Onde apareceu
Rodada de reconciliação
deco-sites/zee-tanstack(origem Deno429e20e..91b36b2) — https://github.com/deco-sites/zee-tanstack/pull/46🤖 Generated with Claude Code