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:
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user