# MEMORY.md — Memória Curada ## 🧠 Agente OpenClaw - Debian 12 container, `/root/.openclaw/workspace/` - Projeto: `@pulse-libs/core` — 136/136 testes ✅ | React/Vue, TS strict, Vitest, Pino/Zod, tsup v8, Docker multi-stage ## ⚙️ Infra - 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 + Portainer (inventariado 2026-05-20) - Node `s1` (Leader, Docker 29.4.3) · Cluster `plz2xbh64yzhgy88jb9stm0pc` - 22 containers · overlay 10.0.0.0/8 - **10 stacks**: bot/code/database/design/dock/git/project/proxy - Portainer CE v2.19.4 — https://dock.octal.tec.br — stack `dock` - Senha admin: **`***`** — login via `/api/auth` retorna JWT HS256 - Stack `project` (ID=12) registrada via API Portainer (`type=2&endpointId=1&method=string`) — SwarmStack gerenciável - ⚠️ `pulse-libs` 0/1 replicas (crash — imagem não disponível no registry) ### Domínios Caddy (6 ativos) `dock`/portainer · `git`/gitea · `ai`/beebot · `manager`/leantime · `games`/games-demo · `test`/test-octal ### Redes Overlay `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` 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 TS → `.replace()` por fora - Zod: `.transform(v => v.replace(...))` não `.replace()` direto - `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` (≥3) + `vitest.jsdom.mocks` (≥3) → promoted AGENTS.md - `tsup.flat2-not-flatinfinity` pattern criada - 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`