Skip to content

fix(kit): o instalador não para em "Ativando as automações" numa VPS sem crontab - #726

Open
rafaelbatistazz wants to merge 1 commit into
melgarafael:mainfrom
rafaelbatistazz:fix/crontab-vazio-no-install
Open

fix(kit): o instalador não para em "Ativando as automações" numa VPS sem crontab#726
rafaelbatistazz wants to merge 1 commit into
melgarafael:mainfrom
rafaelbatistazz:fix/crontab-vazio-no-install

Conversation

@rafaelbatistazz

Copy link
Copy Markdown

O que muda para quem usa

Numa VPS nova, o install.sh parava logo depois de ✓ chave de cifra ativa no banco, sem erro nenhum na tela, e mostrava "A instalação parou" — com os contêineres já saudáveis e o CRM no ar. Rodar o instalador de novo passava, o que escondia a causa.

O motivo é o crontab vazio: numa máquina recém-criada o root não tem agendamento, crontab -l sai 1 ("no crontab for root") e, sob o set -euo pipefail do install.sh (linha 12), o cano inteiro devolvia 1. O set -e derrubava o script depois de o crontab - já ter gravado a linha do drain; o 2>/dev/null escondia a mensagem, por isso a tela não dizia nada.

O conserto tolera o crontab vazio nas duas funções que agendam — setup_event_log_drain_cron e setup_update_agent_cron:

( { crontab -l 2>/dev/null || true; } | cron_merge ... ) | crontab -

Closes #715

O teste

O dublê de crontab da suíte já simulava o "no crontab" (sai 1 quando o sandbox não existe), mas nenhuma rodada agendava com ele vazio — as rodadas de integração já tinham linhas gravadas quando chegavam ali. O teste novo monta uma fixture própria, aponta o sandbox para um arquivo que não existe e roda as duas funções sob o mesmo set -euo pipefail do instalador, cobrando as duas linhas no fim.

O que eu medi

bash hostgator-setup-kit/test-validators.sh   → 258 ✓ / 0 ✗
pnpm test:shell                               → todos os validadores passaram (exit 0)
pnpm test:unit                                → Test Files 788 passed (788)
                                                Tests 8361 passed | 1 expected fail (8362)
pnpm typecheck                                → exit 0
pnpm lint                                     → 0 errors (349 warnings, pré-existentes)
pnpm lint:channels                            → exit 0
pnpm release:conferir                          → fragmento aceito

Sabotagem (revertendo só a linha do conserto, sem desfazer o commit): previ 1 vermelho, o do teste novo, e foi exatamente isso — 257 ✓ / 1 ✗, com a mensagem ✗ agendar o cron numa VPS sem crontab derrubou o script (saída 1). Restaurei depois.

Onde achei: instalando numa VPS que já tinha o Traefik da Coolify nas portas 80/443 (REVERSE_PROXY=traefik, detectado pelo próprio instalador), em modo --yes.

O que NÃO medi

  • pnpm test:db e pnpm test:e2e — não rodei. A mudança é de shell e não toca schema nem UI, mas fica declarado.
  • Instalação fresca de ponta a ponta depois do conserto — provei o caminho pelo teste, não repetindo a instalação numa VPS virgem (a minha já tem crontab agora, então ela não reproduz mais o estado).
  • O pré-voo acusa um ⚠ marca/config de instalação no diff apontando para NEXT_PUBLIC_APP_URL=https://crm.exemplo.com.br — é valor de fixture do meu teste, o mesmo domínio de exemplo que o resto da suíte usa, não marca de instalação.

🤖 Generated with Claude Code

…sem crontab

Numa VPS nova o root não tem crontab: `crontab -l` sai 1 ("no crontab for
root"), e sob o `set -euo pipefail` do install.sh o cano inteiro falhava. O
`set -e` derrubava o script logo depois de o `crontab -` já ter gravado a
linha do drain, e a pessoa via "A instalação parou" com o CRM no ar.

`{ crontab -l 2>/dev/null || true; }` nas duas funções que agendam
(setup_event_log_drain_cron e setup_update_agent_cron).

O dublê de crontab da suíte já simulava o "no crontab", mas nenhuma rodada
agendava com o sandbox vazio. O teste novo roda as duas funções sob o mesmo
`set -euo pipefail`, sem crontab prévio, e cobra as duas linhas gravadas.

Closes melgarafael#715
@vercel

vercel Bot commented Sep 11, 2026

Copy link
Copy Markdown

@rafaelbatistazz is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel.

A member of the Team first needs to authorize it.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: b8e28c2b5245246507d0c7b2345591e2bd72313f

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 3 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: b8e28c2b5245246507d0c7b2345591e2bd72313f

PR taxonomy clear (success)

Scanned 3 changed file(s). No taxonomy bucket signals were detected.

Scanned 3 changed file(s).

No PR taxonomy bucket signals were detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: b8e28c2b5245246507d0c7b2345591e2bd72313f

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 3 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: b8e28c2b5245246507d0c7b2345591e2bd72313f

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 3 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@github-actions

Copy link
Copy Markdown

Recebido, @rafaelbatistazz — obrigado por isto.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A
    main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está
    certo. Ele não entra no gate de merge.
  • No primeiro PR de quem nunca contribuiu aqui, os workflows ficam parados esperando
    liberação
    — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum
    (nem o gh pr checks mostra os que estão nesse estado). Quem tria libera; você não precisa
    fazer nada.

Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só
lendo o diff — e responde aqui em até um dia útil, com a medição junto, nunca com um "acho
que".

Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem
depois é pessoa.

@melgarafael

Copy link
Copy Markdown
Owner

Recebido, @rafaelbatistazz — e eu preciso te contar uma coisa antes de qualquer outra: você achou o mesmo defeito que outra pessoa achou hoje, de forma independente, e o conserto entrou na main há poucas horas (#709, do @luiscgc91).

Isso não diminui o seu trabalho — aumenta o peso do achado. Quando duas pessoas que não se falaram tropeçam no mesmo ponto no mesmo dia, isso não é coincidência: é medida de quanto ele doía. E o fato de vocês dois terem instalado numa VPS limpa e visto o script morrer é exatamente o tipo de prova que nenhum teste automático nosso estava dando.

Vou medir o seu de verdade mesmo assim, e por dois motivos que não são consolo:

  1. Pode ser que o seu cubra algo que o outro não cobriu. O fix(kit): a instalação não morre no bloco 11 numa VPS sem crontab (@luiscgc91, do #683) #709 consertou os dois blocos de cron (event-log-drain e o agente de atualização) neutralizando o status do crontab -l. Se você tratou algum caminho a mais — ou tratou de um jeito melhor —, isso entra.
  2. Se for equivalente, eu te digo com a medição na mão, não com um "já está resolvido".

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. Não entra no gate de merge.
  • Os workflows ficam parados esperando liberação no primeiro PR de quem nunca contribuiu — política do GitHub, não sua. Acabei de liberar.

Volto com o resultado. Se o seu for equivalente, o crédito pelo achado é seu também, e eu registro isso.

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.

install.sh morre em "Ativando as automações" quando o crontab do root está vazio

2 participants