# MEMORY.md — Memória Curada do Pulse ## 🧠 Agente OpenClaw - Nome: **Pulse** · IDENTITY.md - 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 - Skills instaladas: 12+ (typescript, e2e-testing, xcloud-docker-deploy, openclaw-power-ops, etc.) - Nova Self-Improver ativa — loop de aprendizado contínuo ## ⚙️ Infra - Disco 65%, 87G total — monitorando estabilidade - 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 (11 stacks — atualizado 2026-05-20) - Node `s1` Leader, Docker 29.4.3 · Cluster `plz2xbh64yzhgy88jb9stm0pc` - 22 containers · overlay `10.0.0.0/8` - **11 stacks**: `bot`, `code`, `database`, `design`, `dev`, `dock`, `git`, `pro`, `project`, `proxy`, `(code)` - Portainer CE v2.19.4 — https://dock.octal.tec.br - Senha admin: **`***`** — login via `/api/auth` retorna JWT HS256 - ⚠️ Rede `public` tem `Attachable=false`: - stacks criadas via `docker stack deploy` CLI funcionam OK - stacks criadas via Portainer API são **bloqueadas** com `PermissionDenied` - stack `project` no Swarm via CLI — NÃO aparece no Portainer UI (funcional, mas não gerenciável) ### Domínios Caddy (8 ativos — atualizado 2026-05-20) `dock`/portainer · `git`/gitea · `ai`/beebot · `manager`/leantime · `games`/games-demo · `test`/test-octal · `board`/taskboard · `api`/dev-backend · `frontend`/Vite ### 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` ### Template Canônico - `pulse-docs/runbooks/swarm-stack-template.yml` — modelo oficial - Rede: `public` (externa no compose) · Names sem prefixo · Caddy labels via CLI - Detalhes → `pulse-docs/docs/docker-swarm-stacks.md` ## 🚀 Dev Environment Full-Stack (nova — 2026-05-20) Stack Swarm `dev` com ambiente completo de desenvolvimento: | Serviço | URL | Porta | Tipo | |---------|-----|-------|------| | TaskBoard | `board.octal.tec.br` | 80/443 | Kanban + logs em tempo real | | Backend API | `api.octal.tec.br` | 3001 | Node + tsx watch (hot reload) | | Frontend HMR | `frontend.octal.tec.br` | 5173 | Vite + React (hot reload) | | Redis | fila `dev-tasks` | 6379 | Fila de tarefas + pub/sub | ### Agentes Paralelos (5 workers no Swarm) | Agente | Réplicas | Papel | |--------|----------|-------| | `agent-frontend` | 2 | Frontend specialist (React + Vite) | | `agent-backend` | 2 | Backend specialist (Node + tsx) | | `agent-devops` | 1 | DevOps (Docker, Swarm, deploy) | ### Protocolo de Task Queue - Fila: `BLPOP dev-tasks` — 60s timeout - Canal pub/sub: `dev-logs` — logs agregados em tempo real - Registro de agente: `HSET agent: status role started_at current_task` - Task: `SET task:` + `RPUSH task-queue ` ## 📝 Obsidian Vault - Caminho: `/root/Obsidian-Pulse/` - Estrutura: Inbox, Projetos, Docker, Dev, Codex, Logs, Memorias, Templates - Skill: [[🛠️ obsidian-vault-linker]] instalada ## 🔑 Lições High-Signal - `flat(Infinity)` quebra tsup DTS → `flat(2)` - `process.env` direto quebra SSR → `typeof window !== 'undefined'` - Backticks aninhadas TS → `.replace()` por fora - Zod `.transform()` para transformações de schema - Portainer `ptr_` token ≠ JWT admin — usar senha admin para mutação - `docker stack deploy` compose v3: `restart_policy` não é propriedade válida - `deploy.labels` do compose não vira container labels → `docker service update --label-add` - Rede `public` `Attachable=false` → stacks CLI OK, Portainer API bloqueia - Agentes paralelos com Redis BLPOP funcionam como time full-stack ## 🗺️ Stacks Swarm (11 — incluindo dev) | Stack | Criada por | Portas | Domínios | |-------|------------|--------|----------| | `git` | Portainer API | — | `git.octal.tec.br` | | `bot` | Portainer API | — | `ai.octal.tec.br` | | `database` | Portainer API | — | — | | `design` | Portainer API | — | — | | `dev` | `docker stack deploy` (nova) | http | `board / api / frontend` | | `dock` | Portainer API | 80/443 | `dock.octal.tec.br` | | `code` | Portainer API | — | — | | `pro` | Portainer API | — | `manager.octal.tec.br` | | `project` | `docker stack deploy` CLI | 80 | `games.octal.tec.br` | | `proxy` | Portainer API | 80 | `test.octal.tec.br` | ## Repositórios Gitea | Repo | Propósito | URL | |------|-----------|-----| | `pulse-memory` | Memórias diárias + LEARNINGS + ERRORS | https://git.octal.tec.br/Roberto/pulse-memory | | `pulse-skills` | Skills organizadas por domínio | https://git.octal.tec.br/Roberto/pulse-skills | | `pulse-docs` | Guias, runbooks, ADRs | https://git.octal.tec.br/Roberto/pulse-docs | | `pulse-projects` | Rastreador de projetos | https://git.octal.tec.br/Roberto/pulse-projects | | **pulse-dev** | **Nova stack + código (commit em workspace)** | — | ## 🎨 Design System & Web3D (nova — 2026-05-20) - `pulse-3d-landing/` — Landing Page 3D completa (Atomic Design + Three.js) - Atoms (11): Button, Badge, Card, Divider, GradientText, FloatingText, LightGlow, ThemeToggle, Typography, FloatingMesh, ParticleField - Molecules (3): FloatingMesh, ParticleField, FeatureCard3d - Organisms (2): HeroScene3d, FeaturesScene3d - Templates (2): SceneCanvas (R3F Canvas), ThreePage (canvas + overlay) - Pages: App.tsx com Hero + Features + About + CTA - Tokens: space, font, color, shadow, radius, **material3d**, **camera3d**, **animation** (8 domínios) - Stack: Vite + React 18 + TS + @react-three/fiber + drei + framer-motion - npm install + build OK - Dev: `cd pulse-3d-landing && npm run dev` ## 📦 @pulse-libs/ui — Design System Compartilhado (2026-05-20) - **Repo**: https://git.octal.tec.br/Roberto/pulse-libs - **30 arquivos TS** — Atoms(10) · Molecules(3) · Organisms(4) · Templates(3) · Lib(1) + indices - Atoms 2D: Button, Badge, Card, GradientText, Divider, ThemeToggle - Atoms 3D stubs: FloatingMesh3d, ParticleField3d, LightGlow3d, FloatingText3d (deprecated) - Molecules: FeatureCard, Navbar, Footer - Organisms: HeroSection, FeaturesGrid, CtaBlock, StatsGrid - Templates: MainLayout, MinimalLayout, PageWithSidebar - TOKENS export: color / space / radius constants em TypeScript - Uso: projetos importam do path `../libs/pulse-libs/src/` ou como submodule - Ligado aos projetos: pulse-3d-landing, test-octal (landing page)