fix(kit): a chave de IA deixa de ser obrigatória — instala e cadastra depois pela tela - #731
Conversation
… depois pela tela
`docs/deploy-selfhost` promete, na lista de campos do `.env`: "deixe vazio e
cadastre a chave depois em /app/ai/credentials — fica cifrada no banco". O
runtime concorda: em `lib/env.ts` as três chaves são
`z.string().optional().default("")`, e faltar todas gera apenas um `warn`, não
erro. O instalador, não — exigia uma chave que PASSASSE numa chamada real ao
provedor, e sem ela a instalação morria na Fase 2/4. Na prática, não havia
caminho para subir o produto sem antes abrir conta num provedor de IA, mesmo o
produto subindo perfeitamente sem ela (issue melgarafael#670).
O campo do provedor ESCOLHIDO passa a ser `opcional` — o mesmo mecanismo que o
`CAMPO_OPENAI_EXTRA` (áudio e base de conhecimento) já usava. Quem digita uma
chave continua com a validação na hora, chamada real incluída; o que mudou é
que pular deixou de ser erro.
E pular não pode terminar em silêncio: a tela final ganha `pendencia_da_ia`,
que nomeia o provedor escolhido e o caminho exato de cadastro (IA ›
Credenciais, cifrado no banco) — na tela que a pessoa lê inteira, não no meio
de um log de dez minutos. A pendência só aparece quando NENHUMA credencial de
ambiente existe (nem o AI Gateway, que tem precedência na resolução do chat):
quem já tem a chave não vê aviso nenhum.
═══ O TESTE ═══
`hostgator-setup-kit/test-validators.sh` ganha um cenário que roda o
`install.sh --yes` REAL (VPS dublê) com um `.env` sem NENHUMA chave de IA e
exige a tela final, o `.env` inteiro e o aviso com o caminho de volta. O
controle oposto, com a chave presente, exige que o aviso NÃO apareça — sem ele,
um `pendencia_da_ia` que imprimisse sempre passaria e viraria ruído em toda
instalação. Com o `opcional` removido do campo, o instalador morre em "Falta
ANTHROPIC_API_KEY (modo --yes exige .env preenchido)" e é a primeira asserção
do cenário que fica vermelha.
Ref: melgarafael#670
|
@webtecnica 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 / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 14 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 / PR Risk TaxonomyCommit: PR taxonomy review recommended (neutral) Detected 4 PR taxonomy bucket(s): Harness Drift, Cost/Token Risk, Reference Set Validation, Agent Config Review. Scanned 14 changed file(s). Roadmap taxonomy buckets: Harness DriftHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces. Signals:
Paths:
Cost/Token RiskAI routing, usage, and token-budget changes should include budget or usage-limit evidence. Signals:
Paths:
Reference Set ValidationAI, analyzer, skill, agent, command, and harness guidance changes should be compared against a maintained eval, golden trace, benchmark, or reference set. Signals:
Paths:
Agent Config ReviewAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration. Signals:
Paths:
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 / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 1/7 areas (14%) across 14 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
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 / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 14 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in 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. |
|
Recebido, @webtecnica — obrigado por isto. Duas coisas que vão parecer erro seu e não são:
Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem |
ECC Tools / PR Config AuditCommit: No changed-config issues detected (success) Scanned 4 config file(s) present at this commit across 4 changed config path(s) and found no issues in the supported security rules. Changed config files:
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 / PR Harness AuditCommit: Harness warnings detected (neutral) Scanned 4 changed config file(s) and found 1 harness issue(s).
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
O que este PR faz
Uma instalação nova deixa de exigir chave de IA: o campo do provedor escolhido passa a ser opcional (Enter pula) e a tela final lembra o caminho de volta — IA › Credenciais, onde a chave fica cifrada no banco, sem mexer no
.env. Quem digita uma chave continua com a validação na hora, chamada real incluída.A #670 mediu a distância entre três lugares:
docs/deploy-selfhostpromete "deixe vazio e cadastre depois",lib/env.tsconcorda (faltar todas as chaves éwarn, não erro) — e o instalador morria na Fase 2/4 sem uma chave que passasse numa chamada real ao provedor. Não havia caminho para subir o produto sem antes abrir conta num provedor de IA. Este PR fecha a distância.Closes #670
Como resolve
opcional, o mesmo mecanismo que o campo extra da OpenAI já usava (CAMPO_OPENAI_EXTRA).pendencia_da_ia: só aparece quando nenhuma credencial de ambiente existe (nem o AI Gateway, que tem precedência na resolução do chat), nomeia o provedor escolhido e o caminho de cadastro. É a tela que a pessoa lê inteira — não o meio de um log de dez minutos..env.hostgator.example,hostgator-setup-kit/README.md+CLAUDE.mde a skilldeskcomm-instalar(+ referências) atualizados; espelho.claude/skillssincronizado compnpm skills:sync.📌 Contribuindo de um fork? Você está no lugar certo.
(Li o aviso do template — nada aqui me fez querer fechar o PR :)
Checklist (Definition of Done)
pnpm typecheckzeradopnpm lintzerado (0 erros; os warnings são os pré-existentes do repo)pnpm test:shellroda o cenário novo, que executa oinstall.sh --yesde verdade numa VPS dublêconsole.lognovoO que medi (comandos e saídas)
bash hostgator-setup-kit/test-validators.sh→ 250 ✓ / 0 ✗, com o cenário novo:.envsem nenhuma chave de IA +--yes→ chega a "Instalação concluída!", o.envsai inteiro,ANTHROPIC_API_KEYsai declarada e vazia, e a tela final traz "A IA ainda não atende" + "IA › Credenciais";|opcionaldo campo e rodando de novo → 1 vermelho de 249, e era o previsto ("✗ o instalador ainda morre sem chave de IA"). Previsão escrita antes de rodar; restaurei em seguida.Gates (um por vez,
systemd-run --scope -p MemoryMax=5G):pnpm typecheckpnpm lintpnpm lint:channelspnpm release:conferirpnpm test:unitpnpm test:shellpnpm buildO que NÃO medi
test-validators.sh, com dublês dedocker,crontabecurl. Não subi contêiner nenhum.deskcomm-contribuir.