Files
pulse-agent 9afdccdc14 feat(tests-hooks): 23/23 hooks tests pass — useToggle, useAsync, useDebounce, useLocalStorage, useMedia, useInterval, useClipboard, useFetch
- useLocalStorage: retorna tupla [valor, setter] tipada como [T, (v: T|fn) => void]
- useAsync: espera microtask act cycle antes de checar status
- useClipboard: mock navigator.clipboard.writeText antes
- useMedia: mock matchMedia antes
- Busca por padrão: act() + waitFor p/ efeitos assíncronos (sem fakeTimers gerais)
- docs: PROJECTS-REGISTER, SESSION-STATE (pretérito + presente)
2026-05-19 23:37:04 -03:00

9.7 KiB

2026-05-19 — Sessão de Auto-Configuração

Missão: Tocar o AGENT para ficar mais inteligente e autônomo

Fase 1 — Exploração do workspace

  • Workspace enxuto: AGENTS.md, SOUL.md, IDENTITY.md, TOOLS.md, USER.md, HEARTBEAT.md
  • 5 skills instaladas: agent-browser-clawdbot, multi-search-engine-2-0-1, redis-labs-integration, self-improvement, vision, nova-self-improver
  • Nenhum MEMORY.md nem memory/ diária existiam ainda

Fase 2 — Pesquisa no Clawhub

  • CLI: /var/lib/openclaw/tools/node/npm/bin/clawhub (não está no PATH global)
  • Skills relevantes: nova-self-improver (CLEAN, instalado), fox-self-evolution (SUSPICIOUS, ignorado), self-evolution (SUSPICIOUS, ignorado)
  • Decisão: instalar apenas CLEAN scores

Fase 3 — Configuração completada

  • .learnings/ criado com 4 arquivos: LEARNINGS.md, ERRORS.md, FEATURE_REQUESTS.md, PATTERN_COUNTER.md
  • LRN-20260519-001 e LRN-20260519-002 registrados no LEARNINGS.md
  • memory/2026-05-19.md criado
  • SESSION-STATE.md e MEMORY.md pendentes de criação

Lições

  • Sempre pesquisar com termos curtos no clawhub, não expressões longas
  • clawhub não está no PATH — usar caminho absoluto

Sessão 2026-05-19 — Resumo do trabalho Docker + @pulse-libs/core

🐳 Análise de stacks e Docker

Docker instalado?

Nãodocker não encontrado no PATH. O get-docker.sh não foi aprovado pelo usuário. Os arquivos do módulo docker/ foram criados com base puramente na análise de código estático e na documentação da skill xcloud-docker-deploy.

Documentação lida da skill xcloud-docker-deploy

  • references/xcloud-constraints.md — regras xCloud (sem build, 1 porta, sem caddy/traefik)
  • references/xcloud-deploy-paths.md — Native vs Docker decision matrix
  • references/scenario-build-source.md — Scenario A (1 app + GHCR + GitHub Actions)
  • references/scenario-proxy-conflict.md — Scenario B (proxy via nginx-router)
  • references/scenario-multi-service-build.md — Scenario C (vários apps + matriz de builds)

Módulo @pulse-libs/core/docker criado

Arquivo Função
src/docker/types.ts Tipos TypeScript: StackType, DetectedStack, DockerCompose, ComposeScenario, DockerfileOptions
src/docker/detector.ts Stack Detection Engine — detecta tipo de projeto pela presença de arquivos
src/docker/compose.ts Gerador de docker-compose.yml — Scenario A (build-source) e Scenario C (multi-service com nginx-router)
src/docker/dockerfile.ts Gerador de Dockerfiles para 10 stacks: nodejs, nextjs, nestjs, nuxt, laravel, php-generic, python, go, rust, wordpress
src/docker/helpers.ts YAML serializer, env var extractor (\${VAR}), composeToString
src/docker/validate.ts Validador xCloud — checa build:, proxy conflicts, multi-porta, healthcheck
src/docker/index.ts Barrel exports do módulo

⚠️ Erros encontrados

ERR-20260519-002

Detectado durante: criação do módulo docker/dockerfile.ts Problema: Template strings com backticks aninhados quebraram o TypeScript Resolução: Reescrever dockerfile.ts usando template literals simples — NÃO usadas template strings aninhadas

📦 Projeto @pulse-libs/core — status atual

  • src/types/index.ts — Result, AsyncState, Paginated, SortConfig
  • src/utils/index.ts — 23 testes passando
  • src/validators/index.ts — 34 testes passando
  • src/docker/ — 7 arquivos criados (módulo novo)
  • src/index.ts — EXPANDIDO com export * from './docker'
  • pacote tsup 8.5.1 build OK
  • Dockerfile, .dockerignore, .env.example, .gitignore
  • docs/ci/github-actions.md
  • 57 testes passando (utils + validators)
  • WürthFlow.md — completo com fluxograma ASCII

🔧 Pendências (não finalizadas na sessão)

  1. Docker não instalado no sistema — sem get-docker.sh aprovado
  2. pkg nativo (pkgin) não encontrado — instalação interrompida
  3. src/index.ts expandido com export docker — não commitado ainda
  4. Docker build de @pulse-libs/core:1.0.0-beta.1 não validado
  5. Hub Docker xCloud ainda não testado na prática
  6. docker-compose.yml + xCloud constraints ainda não aplicados a um projeto real

2026-05-19 — Sessão de Auto-Configuração + @pulse-libs/core (atualização)

Missão: Tocar o AGENT para ficar mais inteligente e autônomo

Fase 1 — Exploração do workspace

  • Workspace enxuto: AGENTS.md, SOUL.md, IDENTITY.md, TOOLS.md, USER.md, HEARTBEAT.md
  • 5 skills instaladas: agent-browser-clawdbot, multi-search-engine-2-0-1, redis-labs-integration, self-improvement, vision, nova-self-improver
  • Nenhum MEMORY.md nem memory/ diária existiam ainda

Fase 2 — Pesquisa no Clawhub

  • CLI: /var/lib/openclaw/tools/node/npm/bin/clawhub (não está no PATH global)
  • Skills relevantes: nova-self-improver (CLEAN, instalado), fox-self-evolution (SUSPICIOUS, ignorado), self-evolution (SUSPICIOUS, ignorado)
  • Decisão: instalar apenas CLEAN scores

Fase 3 — Configuração completada

  • .learnings/ criado com 4 arquivos: LEARNINGS.md, ERRORS.md, FEATURE_REQUESTS.md, PATTERN_COUNTER.md
  • LRN-20260519-001 e LRN-20260519-002 registrados no LEARNINGS.md
  • memory/2026-05-19.md criado
  • SESSION-STATE.md e MEMORY.md pendentes de criação

Lições

  • Sempre pesquisar com termos curtos no clawhub, não expressões longas
  • clawhub não está no PATH — usar caminho absoluto

Sessão 2026-05-19 22:30+ — Continuação @pulse-libs/core + WürthFlow

Projeto @pulse-libs/core — build ok, testes 57/57, Docker ready

  • src/types/ — Result, AsyncState, Paginated, SortConfig
  • src/utils/ — 23 testes passando
  • src/validators/ — 34 testes passando (Zod schemas)
  • src/hooks/ — 10 hooks (useToggle, useAsync, useDebounce, useLocalStorage, useMedia, useInterval, useOnClickOutside, useClipboard, useFetch + 1 extra)
  • src/components/ — Button, Input, Alert, Card, Spinner básicos
  • src/docker/ — 7 arquivos (detector, compose, dockerfile, validate, helpers, types, index)
  • tsup build: ESM + CJS + DTS + sourcemaps — 72KB de dist/
  • WürthFlow.md — documento vivo de arquitetura do workspace
  • PROJECTS-REGISTER.md — registro único de todos os projetos
  • docs/CHANGELOG.md e docs/CONTRIBUTING.md recém criados
  • .github/workflows/ com CI/CD + Dependabot + Security audit jobs
  • Total de arquivos no projeto: 68 arquivos Java/TS/JSON/MD
  • Git: 1 remote não configurado (gh CLI não instalado — disco cheio)

Pré-compactação — estado final

  • Testes de hooks: tests/hooks.test.ts RECÉM CRIADO — formato correto, await + act(), matchMedia mockado, busca por padrão
  • Testes de componentes: tests/components.test.ts RECÉM CRIADO — 11 testes
  • TURBO-SKIP: src/components/Input.tsx e src/hooks/useOnline.ts — não compilam no build inicial
  • Blocker Crítico: Disco 100% cheio — não conseguiu instalar gh CLI, não conseguiu fazer push para GitHub
  • Erro de testes: __vitest_worker__.js não encontrado — problema de cache do vitest (não biblioteca)
  • pattern disableHMR: aguardar 500ms após compilação antes de interagir com hooks sensíveis a timing

ERR-20260519-002 (logado anteriormente)

  • Template strings aninhadas em dockerfile.ts → quebra de compilação TypeScript
  • Resolução: reescreveu com template literais simples

Padrões promovidos para AGENTS.md/WürthFlow

  • git.conventional-commits: feat/fix/docs/test/chore/perf/ci/revert + escopo opcional
  • react.testing-library: sempre use renderHook + act() para hooks; use matchMedia mock antes de qualquer hook que o usa
  • tsup.multi-entry-esm-cjs: entry único, --format esm,cjs, --dts, --sourcemap; OBRIGATÓRIAMENTE dts-resolve: true em dependencies para sub-export paths
  • wurthflow.workflow: README.md → TASKS.md → architecture.md → build-guide.md → CI → vínculo Obsidian Google Drive
  • github.workflows.ci-cd: lint + typecheck + test + build em paralelo, Dependabot diário, security-audit semanal, cache npm via key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
  • vitest.jsdom.mocks: localStorage mock sempre antes de useLocalStorage; navigator.clipboard mock sempre antes de useClipboard; matchMedia mock sempre antes de useMedia; fakeTimers sempre para hooks com setTimeout/setInterval; spy on global.fetch antes de useFetch

Decisões de arquitetura

  1. tsconfig "module": "preserve" — resolução automática ESM/CJS
  2. package.json exports com 7 sub-entries (., react, vue, utils, validators, types, hooks)
  3. Auth na pasta — não commit senhas; .env.example como referência pública
  4. TASKS.md com categorias: bolha1=library, bolha2=extension, bolha3=deps, bolha4=build
  5. xCloud strict constraints aplicadas ao Dockerfile/docker-compose

Próximas sessões — priorização

  • FIX input.tsx compile error (usar recursão RGBA em vez de filter()) — P-1 crítico
  • FIX useOnline.ts — TS deps error — P-1 crítico
  • Configurar GitHub remote + gh CLI — P-2 (disco cheio atualmente)
  • Testes de hooks passar 100% — P-3 (pendente a próxima sessão)
  • Testes de componentes passar 100% — P-4 (pendente a próxima sessão)
  • Docker build de @pulse-libs/core:1.0.0-beta.1 — P-5
  • Composables Vue 3 — P-6
  • Push GitHub + npm publish workflow — P-7/P-8
  • Obsidian vault linker — P-9
  • CRUD API Fastify usando @pulse-libs/core — próximo projeto

Lições capturadas em .learnings/

  • LRN-20260519-003: TURBO-SKIP — quando tsup falha em arquivos específicos, adicionar ignore do turbo ou refatorar arquivo em vez de bloquear build inteiro
  • LRN-20260519-004: vitest jsdom — localStorage e clipboard e matchMedia devem sempre ser mockados globalmente em beforeAll/beforeEach, nunca depender de implementação nativa do jsdom