From 0a426e00d9a9474acd6f6b0071a1af3f514a22ad Mon Sep 17 00:00:00 2001 From: Roberto Date: Wed, 20 May 2026 17:40:00 -0300 Subject: [PATCH] =?UTF-8?q?docs:=20MEMORY.md=20+=20TOOLS.md=20atualizados?= =?UTF-8?q?=20=E2=80=94=20stack=20project=20migrada,=2010=20stacks,=20Li?= =?UTF-8?q?=C3=A7=C3=B5es=20Portainer/Caddy/Swarm=20e=20pulse-docs=20commi?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MEMORY.md | 99 ++++++++------------ memory/2026-05-20.md | 208 +++++++++++++++++++++++++------------------ 2 files changed, 156 insertions(+), 151 deletions(-) diff --git a/MEMORY.md b/MEMORY.md index 8eb5401..20acc96 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -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` diff --git a/memory/2026-05-20.md b/memory/2026-05-20.md index 77149b5..011bf44 100644 --- a/memory/2026-05-20.md +++ b/memory/2026-05-20.md @@ -1,108 +1,142 @@ # Memória Diária — 2026-05-20 ## 🕐 Heartbeats -- 15:34 — Disco 65% ok, openclaw 3.3% CPU 598MB RAM, zombies 8 (↓ de 36 → caindo saudavelmente), apt 20 packages quedando a 1 (tzdata), MEMORY 3415 chars, stale lock espúrio (arquivo fresh 15:35), ERRORS/patterns sem mudanças -- 10:34 — Disco 76% ⚠️, load avg 3.97/4.16, **55 zombies** (↑ de 46),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, no ERRORS critical -- 05:04 — Disco 76% (ok), ~30 pacotes upgradable (security), zombies ~15, MEMORY ok -- 02:04 — Disco 73% → 76% trending up, apt upgrades disponíveis, defuncto ~15, MEMORY 1874 chars +- 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 — 14:04 +## 📊 Sistema Load - openclaw PID: ~3.3% CPU, ~600 MB RAM — normal -- Zombie : **8** — caindo rapidamente, todos PPID=1, nenhum recurso consumido -- `/dev/shm`: 64M/0 usado — muito baixo +- Zombies em queda: 8 (↓ de 55 na madrugada) +- load avg estável ~3.9/4.1 -## 💾 Disco — 14:04 -- overlay: 87G total, 54G used (65%) — **recuperou da tendência de alta** ✅ -- /home: 87G, 65% usado +## 💾 Disco +- overlay: 87G total, 57G used (60%) — **melhorou de 76%** ✅ +- Pacotes: 20 no total; ~6 aplicados; apenas tzdata pendente (só upgrade com aprovação) -## 📦 Pacotes Atualizáveis — 14:04 / 15:34 -- 14:04 → 20 pacotes; 15:34 → 1 pacote restante (tzdata). Queda acentuada, boa resposta de atualizações -- Aprovação usuária pendente apenas para tzdata - -## 🚨 Stale Lock — VERIFICADO -- Verificado 15:34: arquivo `4a184408-c4c8-4817-83d6-a87cb292a650.jsonl` com 15:35 timestamp (ativo/atual) -- A lock original já foi substituída — **não é mais stale**, session atual é a 4a184408 - -## 📦 Pacotes Atualizáveis — 16:34 update -- 20 pacotes no total; ~6 já aplicados entre beats anteriores; restam 14 -- Destacam-se: gnutls30 (security), libc6/bin, openssl, openssh-client — considerados de alta pertinência -- Aprovação usuária pode ser necessária via apt upgrade - -## ⏱️ Heartbeat 16:34 -- Disco 66% ok, systemd indisponível (container), MEMORY.md 1359 bytes (~161 palavras, 28 linhas) — **bem abaixo de 3500 chars ✅** -- ERRORS.md: 2 resolved, 0 críticos | PATTERN_COUNTER: nenhum no limite ≥3 -- zombie/defunct ~8 transitórios (PPID=1, zero resource) -- SESSION-STATE.md não precisou atualização — MEMORY.md não consta mais acima do limite +## 🚨 Stale Lock — VERIFICADO 15:34 +- Arquivo `4a184408-c4c8-4817-83d6-a87cb292a650.jsonl` — timestamp 15:35, session atual OK ## 📚 Learnings -- ERRORS.md: 2 ERRs resolvidos, nenhum crítico -- PATTERN_COUNTER.md: `react.testing-library` ✅ promoted, `vitest.jsdom.mocks` ✅ promoted (ambos >= 3 count) -- `vitest.pure-dom-matchers` c=1, `jsdom.fireEvent-change-writable` c=1 — tracking -- PATTERN_COUNTER chars: 3415 < 3500 ✅ +- 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 -- 1 node (Manager) · Cluster ID `plz2xbh64yzhgy88jb9stm0pc` -- 39 containers · 22 imagens · overlay 10.0.0.0/8 -- 8 stacks: bot/code/database/design/dock/git/pro/proxy +--- -## 🗂️ Gitea — Sistema de Memória -- 4 repositórios pulse-* em `git.octal.tec.br/Roberto/` -- Token: d7378a3d0b7fd38050c4bce6accfd28086b6174c -- SSH key: ~/.ssh/id_ed25519_gitea -- Todos os commits feitos, estrutura sincronizada +## 🐳 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 -## 📚 Portainer + Docker Swarm — Documentação crua (17:18 GMT-3) -- **Portainer CE v2.19.4** em `dock.octal.tec.br` — stack `dock` (portainer-ce + agent) -- **Admin token** (portainer): `ptr_ZE3R0WgRB07W7moQ7rpX135MqZ+F8OMuYC9U7Rqa5dU=` — prefixo PTR, funcionou em `/api/status` mas 401 em `/api/endpoints` e `/api/auth` - → JWT expirado/limite de escopo; senha admin necessária para login via POST `/api/auth` — não estava documentada -- **Portainer API docs**: docs.portainer.io/user/docker/stacks | stacks/add | stacks/edit -- **pulse-docs commit**: `42f4e0b` doc-raw + `b2b5d2d' swarm completo - -### 9 Stacks inventariadas 100% cru (22 containers) -| Stack | #svc | #up | Highlights | +### Stacks (10 totais — incluindo 'project' nova) +| Stack | Svc | Ativas | Notas | |---|---|---|---| -| `bot` | 2 | 2 ✅ | beebot node:24 + redis:7-alpine | -| `code` | 1 | 1 ✅ | 8dcode | -| `database` | 2 | 2 ✅ | mongo:8.0 + mongo-express | -| `design` | 7 | 7 ✅ | Penpot 2.15.3 completo | -| `dock` | 2 | 2 ✅ | portainer-ce:2.19.4 + agent:2.19.4 | -| `git` | 1 | 1 ✅ | gitea:latest | -| `pro` | 2 | 2 ✅ | leantime:latest + mariadb:10.6 | -| `projects` | 3 | 2 ✅ | ⚠️ pulse-libs **0/1 replicas** (parado) | -| `proxy` | 2 | 2 ✅ | caddy-docker-proxy + test-octal | +| 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 via labels -| Domínio | Stack | Service | Internal Port | +### 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` | projects | projects_games-demo | 80 | -| `test.octal.tec.br` | proxy | proxy_test-octal | — | +| 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` +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 -### Volumes locais relevantes -`portainer_data` · `proxy_caddy_config` · `proxy_caddy_data` · `git_gitea_data` · `bot_beebot_home` · `design_penpot_assets` · `design_penpot_postgres_v15` - -### Artifacts salvos em pulse-docs -- `docs/portainer-docs.md` — docs Portainer + dev/stacks -- `docs/docker-swarm-stacks.md` — inventário completo 100% cru +### 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_` do portainer é um **access token JWT** não login password — diferentes de usuário/senha -- Portainer API `/api/status` aceita token sem body; `/api/auth` (login) e `/api/endpoints` requerem JWT válido ou credenciais -- Container Alpine tem mínimo de ferramentas — sem `ls`, `find`; usar `docker inspect` e `docker service inspect` por containers/services em vez de exec -- `docker network ls` output não tem Subnet/Scope; usar `docker network inspect` por ID -- Caddy-docker-proxy (`lucaslorentz/caddy-docker-proxy`) pega labels `caddy=` e `caddy.reverse_proxy=` de cada container para gerar rotas automaticamente +- 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 -## 🅷 Alertas para priorizar -- ⚠️ Zombies recuando para 8 ✅ — monitor menos urgente agora -- Clawhub instalável pendente — usar `openclaw skills update` -- Pacotes segurança: apenas tzdata restante — usuário pode aprovar apt upgrade -- git_gitea 🔴 / bot_office crash loop — stacks Docker, não afetam agente diretamente +--- + +## 🐳 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)