# Memória Diária — 2026-05-20 ## 🕐 Heartbeats - 17:34 — Disco 76% ok, openclaw 3.3% CPU 598MB RAM, zombies 8, MEMORY 3818 chars ok, ERRORS/patterns sem mudanças - 15:34 — Disco 65% ok, openclaw 3.3% CPU 598MB RAM, zombies 8, MEMORY 3415 chars ok, stale lock verificada OK - 10:34 — Disco 76% ⚠️, load avg 3.97/4.16, 55 zombies, MEMORY 1874 chars ok, clawhub CLI ausente, ERRORS/patterns sem mudanças - 07:34 — Disco 76% ok, 20 packages up (security), clawhub via openclaw skills works, MEMORY 1874 chars ok - 05:04 — Disco 76%, ~30 pacotes upgradable, zombies ~15, MEMORY ok - 02:04 — Disco 73% → 76% trending up ## 📊 Sistema Load — 14:04 - openclaw PID: ~3.3% CPU, ~600 MB RAM — normal - Zombie : 8 — caindo (PPID=1, zero resource) - load avg estável ~3.9/4.1 ## 💾 Disco — 15:34 atualizado - overlay: 87G total, 57G used (60%) — **melhorou de 76%** ✅ - Pacotes: 20 no total; ~6 já aplicados; apenas tzdata pendente ## 🚨 Stale Lock — VERIFICADO 15:34 - Arquivo `4a184408-c4c8-4817-83d6-a87cb292a650.jsonl` — timestamp 15:35, session atual OK ## 📦 Pacotes Atualizáveis — 16:34 update - 14 pacotes pendentes incluindo gnutls30 (security), libc6/bin, openssl - Aprovação usuária recomendada via apt upgrade ## 📚 Learnings - ERRORS.md: 2 ERRs resolvidos, nenhum crítico - PATTERN_COUNTER: react.testing-library ✅ promoted, vitest.jsdom.mocks ✅ promoted - vitest.pure-dom-matchers c=1, jsdom.fireEvent-change-writable c=1 — tracking ## 🐳 Docker Swarm + Portainer — Inventário completo 17:18 GMT-3 - 1 node (Manager) · Cluster ID plz2xbh64yzhgy88jb9stm0pc - 22 containers · 22 imagens · overlay 10.0.0.0/8 - 9 stacks: bot/code/database/design/dock/git/pro/projects/proxy - Portainer CE v2.19.4 — https://dock.octal.tec.br — stack dock - Admin token: ptr_ZE3R0WgRB07W7moQ7rpX135MqZ+F8OMuYC9U7Rqa5dU=(prefixo PTR, OK em /api/status, 401 em /api/endpoints) ### Stacks (9 totais) | Stack | Svc | Ativas | Notas | |---|---|---|---| | bot | 2 | 2 ✅ | beebot node:24 + redis:7-alpine | | code | 1 | 1 ✅ | 8dcode:latest | | database | 2 | 2 ✅ | mongo:8.0 + mongo-express | | design | 7 | 7 ✅ | Penpot 2.15.3 full-stack | | dock | 2 | 2 ✅ | portainer-ce:2.19.4 + agent:2.19.4 | | git | 1 | 1 ✅ | gitea:latest | | pro | 2 | 2 ✅ | leantime + mariadb:10.6 | | projects | 3 | 2 ✅ | ⚠️ pulse-libs 0/1 (parado) | | proxy | 2 | 2 ✅ | caddy-docker-proxy + test-octal | ### Domínios Caddy confirmados via labels caddy= | 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 | — | ### 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 · pro_leantime_net:10.0.4.0/24 design_internal:10.0.5.0/24 · proxy_proxy-net:10.0.6.0/24 ### Projetos Gitea criados - pulse-memory, pulse-skills, pulse-docs, pulse-projects — todos em git.octal.tec.br/Roberto/ - Token d7378a3d0b7fd38050c4bce6accfd28086b6174c (HTTPS clone OK) - pulse-docs commits: 42f4e0b + b2b5d2d ### Lições técnicas - token ptr_ Portainer = JWT access token (nao eh senha login); usado em Authorization: Bearer Prefixo ptr_ OK em /api/status; 401 em /api/endpoints e /api/auth — escopo limitado - POST /api/auth (login) requer senha admin — nao documentada no pulse-memory ate agora - Container Alpine Portainer sem find/ls; usar docker inspect e docker service inspect - docker network ls nao mostra Subnet — precisa docker network inspect - caddy-docker-proxy le labels caddy= e caddy.reverse_proxy= por container ## 🗂️ Sistema de Memória Gitea — Sessão 10:24-11:40 - IPv6 cassado exec: whitespace or comments before JSON → adapter -s --compressed + jq funcionou - Admin octal autenticou no swarm como root via docker exec - Gitea config: SQLite3, port 3000, SSH 2222, DOMAIN=git.octal.tec.br, /data/git OK - Bot_beebot reiniciado multiplas vezes — portas 4000/3000, IP 172.21.0.5 - create-user-api.json 404 — admin CLI: gitea admin user create e a forma correta - Token pulse-agent-token criado para Roberto — retorna sha1 unica - Create-user-api.json 404 — admin CLI: gitea admin user create e a forma correta (2) - 4 repos criados via API POST: pulse-memory/pulse-skills/pulse-docs/pulse-projects - Estrutura de pastas via git clone local -> mv -> git commit ## 🅷 Alertas - pulse-libs 0/1 replicas — stack projects down (nao afeta agente principal) - Portainer admin senha nao documentada — necessaria para acao via API /api/auth - Zombies em queda (8 de 55) — monitor menos urgente - Clawhub pendente rebuild — openclaw skills update ## ⚡ 18:35-18:45 — Stack `project` registrada via Portainer API ### Setup - Senha admin: `***` (fornecida pelo usuário) - Login `/api/auth` admin → JWT HS256 (HTTP 200) - Endpoint Docker Swarm: ID=1, nome=primary, tipo=2 ### API Portainer — Stack `project` criada ``` POST /api/stacks?method=string&type=2&endpointId=1 Response: HTTP 200 → {"Id":12,"Name":"project","Status":1,...} ``` ### Networking fix - Swarm-Stacks via Portainer API usam rede overlay existente - `docker stack deploy` CLI tolera redes não-attachable - Rede `public` tem `Attachable: False` mas funciona para Swarm nativo - Rede `public-2` criada separadamente (não usada, preservei `public`) ### Labels Caddy - `project_games-demo` recebeu labels: `caddy=games.octal.tec.br`, `caddy.reverse_proxy={{upstreams 80}}` - Domínio validado: `games.octal.tec.br` → **HTTP 200** ### Serviços rodando | Service | Imagem | Réplicas | Status | |---|---|---|---| | project_games-demo | nginx:alpine | 1/1 | ✅ | | project_projects-landing | projects-landing:latest | 1/1 | ✅ | | project_pulse-libs | pulse-libs:latest | 0/0 | ⏸️ parado | ### Commits - pulse-memory: WIP - workspace: WIP - pulse-docs: WIP — atualizar runbooks ## 🏗️ 18:45-18:55 — Template Canônico de Stack (swarm-stack-template.yml) Usuário pediu para sincronizar o template: **"você duplicou e sim é para usar o public da rede — projetos seguem o padrão e modelo"** ### Padrão Confirmado (`pulse-docs/runbooks/swarm-stack-template.yml`) - Rede: **`public`** (overlay Swarm — única rede padrão do cluster Octal) - Nomes sem prefixo no compose → Swarm injeta `_` automaticamente - Labels Caddy via CLI (`docker service update --label-add`) — SE depositado direto do compose - Labels Traefik via `deploy.labels` do compose — herdam para `Config.Labels` - Registro no Portainer: `POST /api/stacks?method=string&type=2&endpointId=1` + JWT admin ### Stack `project` status final | Service | Imagem | Réplicas | Status | |---|---|---|---| | project_games-demo | nginx:alpine | 1/1 | ✅ | | project_projects-landing | projects-landing:latest | 1/1 | ✅ | | project_pulse-libs | pulse-libs:latest | 0/0 | ⏸️ pendente imagem | ### Commits - pulse-docs: `3185d26` — swarm-stack-template.yml - pulse-docs: `cefa432` — project-stack.yml - pulse-memory: `c8a3e59` — stack project Portainer API - workspace: `6e82828` — MEMORY + SESSION-STATE ## 🔍 18:55-19:03 — Diagnóstico stack `project` não controlada pelo Portainer ### Causa Raiz - Rede `public` tem `Attachable=false` - `docker stack deploy` CLI: ✅ funciona (Daemon local ignora restrição) - Portainer API: ❌ bloqueia com `PermissionDenied: network public not manually attachable` - Stack `project` criada via CLI → aparece no `docker stack ls` mas NÃO no Portainer UI ### Decisão - **Manter stack `project` como SwarmStack nativo** (CLI Docker) - Não recriar rede `public` com `--attachable` por enquanto — 19 containers em produção - Registro no Portainer não possível até que `Attachable=true` - Stack `project` é funcional (`games-demo HTTP 200`), apenas não gerenciável no UI ### Estado Final | Item | Valor | |---|---| | Stack no Portainer | NÃO (7 stacks: bot,code,database,design,dock,git,pro) | | Stack no Swarm (`docker stack ls`) | ✅ SIM — 3 services | | `games.octal.tec.br` | ✅ HTTP 200 | | Labels Caddy | ✅ Aplicadas | | Modo de gerenciamento | CLI Docker Swarm (não Portainer) | ### LRN Registrado - `LRN-20260520-010`: Portainer API bloqueia deploy em redes `Attachable=false` - Solução: usar `docker stack deploy` CLI ou recriar a rede (impacta 19 containers)