Sessão 29/09/2026 — Chats, Coolify e correções
Objetivo: incorporar ao projeto as novas premissas do ecossistema
(histórico de chats + deploy no Coolify) e corrigir o uso da Joule.
---
✅ Entregas
| # | Entrega | Onde |
| 1 | Chats exportados (esta conversa, 555 mensagens) | chats/2026-09-27_09-56_sap-dev-development-environment.md |
| 2 | Script de exportação de chats | automacao/exportar_chat.py |
| 3 | Site de documentação publicado | https://sap-lab.visionai.com.br |
| 4 | Gerador do site (docs HTML + galeria) | automacao/gerar_site.py → site/ |
| 5 | Projeto isolado no Coolify | SAP BTP Joule Lab (71bn6ggpai5hcv67vta9nw2j) |
| 6 | App do site no Coolify | sap-joule-lab-docs (nginx:alpine + bind mount) |
| 7 | Correção do uso da Joule | docs/joule_comandos.md |
| 8 | Convenção atualizada (regras 4, 7 e novas seções) | docs/organizacao.md |
| 9 | Repositório GitHub publicado (privado, 340 arquivos) | https://github.com/hugomarquesit/sap-btp-joule-lab |
| 10 | gh CLI instalado + autenticado (repo, read:org, workflow) | keyring da máquina |
---
🐙 Publicação no GitHub (o que foi feito)
- 1. Tokens antigos do cofre (pasta 00) estavam expirados — testados os 3 (2×
ghp_, 1×github_pat_). - 2. Instalado o
ghCLI (v2.101.0, user-space em~/.local/bin). - 3. Fluxo de dispositivo (device flow) para autenticar sem token manual:
- Código em github.com/login/device → autorizar o "GitHub CLI"
- Escopos: repo, read:org, workflow
- Automação: página aberta/preenchida via CDP no Chrome headless (cookies do usuário)
- 4. Repositório criado via API (
POST /user/repos, privado) e push dos 340 arquivos. - 5.
gh auth setup-git→ próximosgit pushsão automáticos (keyring), sem token no projeto. - 6. Tokens temporários apagados (
/tmp/opencode/gh_token.txt).
⚠️ Aprendizado: ogh auth login --with-tokenexige os escoposrepoeread:org;
tokens só comrepofuncionam na API/git, mas oghrecusa.
---
🔧 Como foi feito (Coolify via API)
API=http://192.168.15.4:8000/api/v1 # token: config do MCP do Coolify
1) projeto isolado (premissa: 1 projeto dedicado por projeto)
POST /projects {name, description} -> 71bn6ggpai5hcv67vta9nw2j
2) aplicação a partir de imagem (nginx servindo ./site)
POST /applications/dockerimage {project_uuid, server_uuid, environment_name,
docker_registry_image_name:"nginx",
docker_registry_image_tag:"alpine",
name, ports_exposes:"80"} -> phav2cfa8drlzdfgdgge82ma
3) domínio + volume + deploy
PATCH /applications/{uuid} {domains:"https://sap-lab.visionai.com.br"}
POST /applications/{uuid}/storages {type:"file", is_directory:true,
fs_path:"/home/hugo/vizionai/.../site",
mount_path:"/usr/share/nginx/html"}
POST /deploy?uuid={uuid}
Descobertas da API (Coolify v4):
fqdnnão é aceito em criação/PATCH → usardomains.- Storages:
type∈ {persistent,file}; bind de diretório =type:"file"+is_directory:true+fs_path. - Deploy:
GET /deployfoi descontinuado →POST /deploy?uuid=....
---
🧱 Bloqueios e soluções
| Bloqueio | Causa | Solução |
| Descrição do projeto rejeitada | caractere — (em dash) não permitido | usar hífen - (já previsto no AGENTS.md) |
fqdn recusado | campo errado na API v4 | usar domains no PATCH |
| Storage recusado | tipos válidos são persistent/file | bind de diretório via type:"file" + is_directory:true |
Deploy preso em queued | primeira tentativa não processou | re-disparar via control start (MCP) → finished |
| SSH sem chave da máquina local | chave não pareada neste notebook | usar a API do Coolify (não precisa de SSH) |
---
📚 Aprendizados
- 1. Premissas da pasta
00: Coolify é o ambiente oficial; nada de containers manuais;
projeto isolado por projeto; Traefik + labels (sem expor portas).
- 2. Os arquivos de
~/Rede/vizionai/...(SMB) são/home/hugo/vizionai/...no servidor
→ bind mounts funcionam direto.
- 3. DNS wildcard
*.visionai.com.brjá existe (Cloudflare) → qualquer subdomínio novo
funciona sem criar registro.
- 4. Joule neste trial só aceita comandos (
/ui5-create-app,/fiori-gen-cap-ui, ...) —
o modelo de dados é criado pelo Storyboard, não por prompt.
---
⏭️ Próximos passos
- 1. No Storyboard: criar entidade + serviço; depois
/fiori-gen-cap-uina Joule. - 2. Sempre que atualizar
docs/ouprints/: rodargerar_site.py+ redeploy no Coolify. - 3. Exportar o chat ao final de cada sessão (
exportar_chat.py) — nova regra.