docs: MEMORY.md + TOOLS.md atualizados — stack project migrada, 10 stacks, Lições Portainer/Caddy/Swarm e pulse-docs commit

This commit is contained in:
2026-05-20 17:40:00 -03:00
committed by Pulse Agent
parent 6b6c706979
commit 0a426e00d9
2 changed files with 156 additions and 151 deletions
+35 -64
View File
@@ -2,80 +2,51 @@
## 🧠 Agente OpenClaw
- Debian 12 container, `/root/.openclaw/workspace/`
- Projeto ativo: `@pulse-libs/core` — 136/136 testes ✅
- Stack: React/Vue, TS strict, Vitest, Pino/Zod, tsup v8, Docker multi-stage
- Projeto: `@pulse-libs/core` — 136/136 testes ✅ | React/Vue, TS strict, Vitest, Pino/Zod, tsup v8, Docker multi-stage
## ⚙️ Infra
- Disco 76% (↑ de 66%), 87G total — **monitorar** (tendência de alta)
- Sem systemd no container
- Gitea: `git.octal.tec.br``localhost:3000` (Caddy proxy) — Docker Swarm stack `git`
- User: Roberto (betotn91@gmail.com), SSH key em `~/.ssh/id_ed25519_gitea`
- Repos Gitea: `pulse-memory`, `pulse-skills`, `pulse-docs`, `pulse-projects` — clonados via HTTPS
- Disco 65%, 87G total — monitorando tendência (66%→76%→65%)
- Sem systemd (container Docker)
- Gitea: `git.octal.tec.br``localhost:3000` (Caddy) — Swarm stack `git`
- User: Roberto (betotn91@gmail.com), SSH `~/.ssh/id_ed25519_gitea`
- Repos: `pulse-memory`, `pulse-skills`, `pulse-docs`, `pulse-projects` — clonados via HTTPS
## 🐳 Docker Swarm — Stack Real (inventariado 2026-05-20)
- **Node**: `s1` · ID `x3fm004yzn3j7pvhz0fuuskez` (Leader) · Docker 29.4.3
- **Cluster ID**: `plz2xbh64yzhgy88jb9stm0pc`
- **22 containers** · **22 imagens** · **9 stacks**
- **Stacks**: `bot`, `code`, `database`, `design`, `dock`, `git`, `pro`, `projects`, `proxy`
- **Portainer CE v2.19.4** — https://dock.octal.tec.br — stack `dock`
- **Admin portainer token**: `ptr_ZE3R0WgRB07W7moQ7rpX135MqZ+F8OMuYC9U7Rqa5dU=`
## 🐳 Docker Swarm + Portainer (inventariado 2026-05-20)
- Node `s1` (Leader, Docker 29.4.3) · Cluster `plz2xbh64yzhgy88jb9stm0pc`
- 22 containers · 22 imagens · overlay 10.0.0.0/8
- **10 stacks**: bot/code/database/design/dock/git/pro/project/proxy
- Portainer CE v2.19.4 — https://dock.octal.tec.br — stack `dock`
- Admin token PTR: `ptr_ZE3R0WgRB07W7moQ7rpX135MqZ+F8OMuYC9U7Rqa5dU=` (prefixo PTR, /api/status OK, /api/auth 401)
- ⚠️ `pulse-libs` 0/1 replicas (crash — imagem não disponível no registry)
### Domínios / Rotas Caddy (confirmados)
| Domínio | Stack | Service | Porta |
|---|---|---|---|
| `dock.octal.tec.br` | `dock` | `dock_portainer` | 9443/9000 |
| `git.octal.tec.br` | `git` | `git_gitea` | 3000 |
| `ai.octal.tec.br` | `bot` | `bot_beebot` | 18789 |
| `manager.octal.tec.br` | `pro` | `pro_leantime` | 8080 |
| `games.octal.tec.br` | `projects` | `projects_games-demo` | 80 |
| `test.octal.tec.br` | `proxy` | `proxy_test-octal` | — |
### Serviços por Stack
| Stack | #svc | Serviços ativos |
|---|---|---|
| `bot` | 2 | ✅ beebot (node:24), ✅ redis:7-alpine |
| `code` | 1 | ✅ 8dcode |
| `database` | 2 | ✅ mongo:8.0, ✅ mongo-express |
| `design` | 7 | ✅ Penpot 2.15.3 *(backend+frontend+postgres+valkey+exporter+mcp+mailcatch)* |
| `dock` | 2 | ✅ portainer-ce:2.19.4, ✅ agent:2.19.4 |
| `git` | 1 | ✅ gitea:latest |
| `pro` | 2 | ✅ leantime, ✅ mariadb:10.6 |
| `projects` | 3 | ✅ games-demo, ✅ projects-landing, ⚠️ pulse-libs **0/1** (down) |
| `proxy` | 2 | ✅ caddy-docker-proxy, ✅ test-octal |
### Domínios Caddy (6 ativos)
`dock`/portainer · `git`/gitea · `ai`/beebot · `manager`/leantime · `games`/games-demo · `test`/test-octal
### Redes Overlay
| Rede | Subnet | GW | Containers |
|---|---|---|---|
| `ingress` | 10.0.0.0/24 | 10.0.0.1 | 3 |
| `public` | 10.0.1.0/24 | 10.0.1.1 | 14 |
| `dbn` | 10.0.2.0/24 | 10.0.2.1 | 2 |
| `mongo-cluster` | 10.0.3.0/24 | 10.0.3.1 | 3 |
| `pro_leantime_net` | 10.0.4.0/24 | 10.0.4.1 | 3 |
| `design_internal` | 10.0.5.0/24 | 10.0.5.1 | 8 |
| `proxy_proxy-net` | 10.0.6.0/24 | 10.0.6.1 | 0 |
`ingress:10.0.0.0/24 | public:10.0.1.0/24 | dbn:10.0.2.0/24`
`mongo-cluster:10.0.3.0/24 | leantime:10.0.4.0/24 | design:10.0.5.0/24 | proxy:10.0.6.0/24`
## Docs externas coletadas
- Portainer: https://docs.portainer.io/user/docker/stacks.md
- Portainer add stack: https://docs.portainer.io/user/docker/stacks/add.md
- Portainer edit stack: https://docs.portainer.io/user/docker/stacks/edit.md
- Portainer full corpus: https://docs.portainer.io/llms-full.txt (truncado às 6k chars)
- Armazenadas em `pulse-docs/docs/`
Detalhes → `pulse-docs/docs/docker-swarm-stacks.md`
## 🔑 Lições High-Signal
- `flat(Infinity)` quebra tsup DTS usar `flat(2)`
- `process.env` direto quebra SSR `typeof window !== 'undefined'`
- Backticks aninhadas em TS → usar `.replace()` por fora
- `flat(Infinity)` quebra tsup DTS usar `flat(2)`
- `process.env` direto quebra SSR `typeof window !== 'undefined'`
- Backticks aninhadas TS → `.replace()` por fora
- Zod: `.transform(v => v.replace(...))` não `.replace()` direto
- `vi.useFakeTimers()` não usar globalmente (quebra outros hooks)
- `fireEvent.change` jsdom: `value` precisa `writable` via `Object.defineProperty`
- `getByRole('textbox')` não funciona no jsdom puro — usar `container.querySelector`
- Portainer API token `ptr_...` prefixo PTR — funciona para UI, não para endpoint `/api/endpoints` (401)
→ Senha admin necessário para login via POST `/api/auth` — não documentada em pulse-memory
- `vi.useFakeTimers()` não usar globalmente
- `fireEvent.change` jsdom: `value` precisa `writable`
- `getByRole('textbox')` brook no jsdom puro `container.querySelector`
- Portainer `ptr_` token ≠ JWT admin — /api/status OK, /api/endpoints 401
- `docker stack deploy` compose v3: `restart_policy` não é propriedade válida no deploy spec
- `deploy.labels` do compose não vira container labels no Swarm → `docker service create --label` diretamente
- imagens locais (sem registry): warning "could not be accessed on a registry" — usar `--with-registry-auth`
- `agent-browser` CLI não estava instalado no PATH — usar `curl`/API diretamente
## Decisões Recentes
- `react.testing-library` e `vitest.jsdom.mocks` promoted AGENTS.md (count≥3)
- `react.testing-library` (≥3) + `vitest.jsdom.mocks` (≥3) → promoted AGENTS.md
- `tsup.flat2-not-flatinfinity` pattern criada
- Docker Swarm proxy modelo replicado na stack `proxy`
- Dominio live: `https://test.octal.tec.br` (Caddy + Let's Encrypt)
- **Domínios mapeados via labels Caddy**: 6 confirmados (dock/git/ai/manager/games/test)
- **pulse-memory clonado via HTTPS** (credenciais fornecidas pelo usuário)
- caddy-docker-proxy modelo replicado na stack `proxy`
- 6 domínios Caddy mapeados via labels | `https://test.octal.tec.br` live
- Stack `projects` removida → `project` criada (games-demo + projects-landing OK, pulse-libs 0/1)
- `docker stack deploy` preferido para migrations em massa; `docker service update --label-add` limitado
- docs Portainer cru salvos em `pulse-docs/docs/portainer-docs.md`