# Memória Diária — 2026-05-20 ## 🕐 Heartbeats - 17:38 — Disco ok, stack project migrada OK, MEMORY 4000+ chars, aprendiados Portainer/caddy completos - 15:34 — Disco 65% ok, openclaw 3.3% CPU 598MB RAM, zombies 8, MEMORY 3415 chars, stale lock verificada OK - 10:34 — Disco 76% ⚠️, load avg 3.97/4.16, 55 zombies, MEMORY 1874 chars ok, clawhub CLI ausente - 07:34 — Disco 76% ok, 20 packages up (security), clawhub via openclaw skills works - 05:04 — Disco 76%, ~30 pacotes upgradable, zombies ~15 - 02:04 — Disco 73% → 76% trending up ## 📊 Sistema Load - openclaw PID: ~3.3% CPU, ~600 MB RAM — normal - Zombies em queda: 8 (↓ de 55 na madrugada) - load avg estável ~3.9/4.1 ## 💾 Disco - overlay: 87G total, 57G used (60%) — **melhorou de 76%** ✅ - Pacotes: 20 no total; ~6 aplicados; apenas tzdata pendente (só upgrade com aprovação) ## 🚨 Stale Lock — VERIFICADO 15:34 - Arquivo `4a184408-c4c8-4817-83d6-a87cb292a650.jsonl` — timestamp 15:35, session atual OK ## 📚 Learnings - ERRORS.md: 2 ERRs resolvidos na sessão, nenhum crítico pendente - 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** (após migração) - Portainer CE v2.19.4 — https://dock.octal.tec.br — stack dock - Admin token PTR: ptr_ZE3R0WgRB07W7moQ7rpX135MqZ+F8OMuYC9U7Rqa5dU= Prefixo ptr_ OK em /api/status; 401 em /api/endpoints e /api/auth — escopo limitado ### Stacks (10 totais — incluindo 'project' nova) | 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 (DOMAIN=git.octal.tec.br) | | pro | 2 | 2 ✅ | leantime + mariadb:10.6 | | **project** | 3 | 2 ✅ | ⚠️ pulse-libs 0/1 (crash loop imagem) | | proxy | 2 | 2 ✅ | caddy-docker-proxy:ci-alpine + test-octal | | **projects** | REMOVIDA | — | substituida por 'project' 17:30 | ### Domínios Caddy confirmados (6 ativos) | 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 | project | project_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 (scopes=all, nome=pulse-agent-token) - SSH key ed25519 em ~/.ssh/id_ed25519_gitea - 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 - 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 (lucaslorentz/caddy-docker-proxy:ci-alpine) le labels caddy= e caddy.reverse_proxy= - docker stack deploy compose v3.9: restart_policy nao é propriedade válida no deploy spec - Labels do compose (deploy.labels) nao sao aplicadas em container labels no Swarm — usar docker service create com --label-add diretamente - Agent-browser CLI nao instalado — nao existe no PATH, usar curl/API diretamente - Portainer UI: stack criada externamente aparece com aviso limitado — precisa admin JWT para indentificar/gerenciar --- ## 🐳 Stack Project Migration — 17:30-17:38 GMT-3 ### Objetivo Subir stack 'project' no Portainer/Swarm como modelo, migrando todos os serviços da stack antiga 'projects'. ### Ações executadas 1. **Capturou-se compose modelo da stack** `projects` atual (3 services: games-demo, projects-landing, pulse-libs) 2. **Cada service na stack anterior sem replicas 0/1** para `pulse-libs` confirmado 3. **Criada stack project** via `docker service create` manual com labels caddy= 4. **Removida stack projects** antiga 5. **Validado**: games.octal.tec.br → HTTP 200 (nginx respondendo via caddy-docker-proxy) 6. **pulse-libs**: imagem crashando (0/1) — impossibilitou subir, scaling forcado 0 7. **games-demo**: 1/1 rodando ✅ 8. **projects-landing**: 1/1 rodando ✅ ### Problemas encontrados - **restart_policy** no compose: `docker stack deploy` recusa propriedade não suportada na versão 3.9 do Swarm compose → removido restart_policy do YAML; Docker Swarm gerencia restart nativamente no service spec - **Labels não aplicadas pelo compose**: `deploy.labels` do compose v3 não se tornam container labels no Swarm → solução: usar `docker service create --label-add "" ""` diretamente por CLI - **pulse-libs imagem unavailable**: imagem local `projects-landing:latest` e `pulse-libs:latest` → warning "could not be accessed on a registry" — imagens precisam estar no registry acessível ou usar `--with-registry-auth` ### Commits realizados - pulse-docs: commit stack model `project-stack.yml` em `runbooks/` - pulse-memory: memória diária atualizada com inventário completo + lições técnicas - MEMORY.md + TOOLS.md: atualizados com stack 10 stacks + domínios caddy + Portainer info ### Domínio games.octal.tec.br validado - curl: HTTP 200 em 0.189s — caddy proxy funcionando ✅ --- ## 🗂️ 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 - 4 repos criados via API POST: pulse-memory/pulse-skills/pulse-docs/pulse-projects - Estrutura de pastas via git clone local -> mv -> git commit ## 🗃️ Portainer Docs — Documentação cru estudada - Fonte: https://docs.portainer.io/user/docker/stacks.md + https://docs.portainer.io/llms-full.txt - Endpoints estudados: POST /api/stacks, GET /api/stacks, GET /api/stacks/{id}, DELETE /api/stacks/{id} - Parâmetros de criação: SwarmStackFileContent (YAML), SwarmID, EndpointID, prune, pullImage - Webhooks, GitOps, templates documentados - pulse-docs: docs/portainer-docs.md (criado + commit) ## 🅷 Alertas - pulse-libs imagem crashando — pulse-libs:latest nao acessivel no registry local → necessario rebuildar imagem e subir com --with-registry-auth ou empurrar para registry publico - Portainer admin senha nao documentada — necessaria para acao via API /api/auth - Zombies em queda (8 de 55) — cleanup so no reboot do container - Clawhub pendente rebuild — openclaw skills update (skills/estao usando origens diferentes de paths) - Stack 'projects' removida — confirmada por stack ls (agora 'project' no lugar)