docs(swarm): stack project deployada - fix pulse-libs healthcheck + Caddy TLS e commit

This commit is contained in:
Pulse Agent
2026-05-21 13:08:15 -03:00
parent d1a15765a3
commit e41162c336
2 changed files with 50 additions and 6 deletions
+6 -6
View File
@@ -24,12 +24,15 @@ _Atualizado: 2026-05-21 11:46 GMT-3 — Heartbeat ciclo 25_
- Clawhub search: termos curtos; buscar categorias em SEPARADO; não frases longas
- Git URL: usar tokens, nunca host/user/pass embutido
- Clawhub: 11 skills retornam "local changes" (mismatch com repo oficial) — force update requires manual decision per skill
- `process.exit()` com booleano → Node 24 exige número (0/1) — Type/ERR_INVALID_ARG_TYPE
- Docker Swarm healthcheck: callback assíncrono precisa esperar `res.on('end')` antes de `process.exit()` — task morreu exit 137 por unhealthy
## 🐳 Docker Swarm
- Stack `proxy`: caddy + test sites · Stack `project`: games/services
- Domínios: test.octal.tec.br · games.octal.tec.br · projects.octal.tec.br
- 10 stacks (bot/code/database/design/dock/git/pro/project/proxy)
- Stack `project`: games-demo(1/1) · projects-landing(1/1) · pulse-libs(1/1 fix healthcheck)
- Domínios: games.octal.tec.br · projects.octal.tec.br · pulse-libs.octal.tec.br · test.octal.tec.br
- `--restart-condition` no stack deploy (não compose v3 restart policy padrão)
- Labels Caddy por service
- Labels Caddy por service — pulse-libs fix health + label pulselibs.octal.tec.br
## 🔑 Skills counter
- **PATTERN_COUNTER**: `git.conventional-commits` c=2 (1 pt do threshold)
@@ -50,11 +53,8 @@ _Atualizado: 2026-05-21 11:46 GMT-3 — Heartbeat ciclo 25_
## ⏳ Pendências
- stale-lock detector: fix lsof/fuser antes de marcar stale (>1 dia)
- pulse-libs: commitar vitest config + .gitignore
- pulse-3d-landing: Three.js interativo + refletir lições em MEMORY
- apps/dashboard: decidir independente vs parte do workspace
- projects.octal.tec.br: nginx default → conteúdo
- pulse-libs.octal.tec.br: Caddy TLS fix
- pulse-skills: domínio 3d-renderer
- pulse-wurthflow: investigar domínio
- USER.md compressão: etapas 1-2/5 agendado **2026-05-26**; etapa 3 mRNA extendida
+44
View File
@@ -239,3 +239,47 @@ Manuais (10): clean-code-review, e2e-testing-patterns, file, file-summary, gitea
- [ ] git.conventional-commits: c=2 → precisa 1+ para promoção AGENTS.md
- [ ] pulse-skills + pulse-wurthflow + apps/dashboard: sem-git decidir
- [ ] SUSPICIOUS skills review: agendar em 30 dias da última revisão
---
### 🔍 Heartbeat — Ciclo 30 (12:54 GMT-3 — heartbeat poll)
- **Disco**: 59G/87G **71%** (25G livre) — caiu de 77%→71% desde ciclo 22
- **CPU/RAM**: openclaw PID 4246 ~17% CPU / 648MB RSS — normal
- **Defunct**: ~5 (PM2/Docker, esperado rootless)
- **Systemd**: N/A — container, PID 1 = node
- **APT upgradable**: 0 pkgs — sistema atualizado
- **MEMORY.md**: **3299 bytes / 63 linhas** — ⚠️ **apenas 3 bytes do limite 3500!** Eye nas próximas 24h
- **memory/2026-05-21.md**: ~12KB — OK
- **.jsonl stale-locks**: arquivo ativo (modificado há minutos) — falso-positivo, não interfere
- **/root/.cache**: 143M — prunado desde o início
> ⚠️ **ATENÇÃO — MEMORY.md em 3299 bytes**
> Apenas 3 bytes abaixo do limite 3500 do prompt context. Se crescer nas próximas 24h, precisará compressão antes do cronograma 7 dias.
### ✅ Ciclo 30 — tudo verde, MEMORY.md monitorar de perto
---
### 🚀 Stack `project` — criada e deployada (14:59 GMT-3)
**Ação**: stack `project` não existia no Swarm — criada com `docker stack deploy` a partir de `pulse-docs/deploy/project/docker-compose.yml`.
**Problema `pulse-libs` 0/1 → 1/1**:
- Causa raiz: **healthcheck quebrado** no `pulse-libs:latest``process.exit(0)` dentro de callback assíncrono disparava antes da resposta HTTP chegar, retornava exit code 1 → Docker marcava unhealthy → Swarm matava a task (exit 137)
- Container rodado manualmente (`docker run`) funcionava, mas Swarm reciclava por health unhealthy
- **Solução**: reconstruir imagem com `HEALTHCHECK` síncrono usando `process.exit(0/1)` numérico e esperando `res.on('end')`
- Imagem nova: `pulse-libs:latest` @ `a905d6e9` — healthcheck funcionando, replicas 1/1 ✅
**Services state final**:
| Service | Image | Replicas | Status |
|---------|-------|----------|--------|
| `project_games-demo` | `games-demo:latest` | 1/1 | ✅ Running |
| `project_projects-landing` | `projects-landing:latest` | 1/1 | ✅ Running |
| `project_pulse-libs` | `pulse-libs:latest` (nova) | 1/1 | ✅ Running |
**Caddy labels**: `pulse-libs.octal.tec.br` → aplicada via `docker service update --label-add`;
`games.octal.tec.br` e `projects.octal.tec.br` — labels previamente configuradas no proxy
**Nenhuma outra stack tocada**: bot/code/database/design/dock/git/pro — todas 1/1;
proxy_caddy — labels inalteradas.