Skip to content

[P1][Performance] Excluir worktrees internos do escopo de mapeamento do projeto #234

Description

@wesleysimplicio

Contexto

O scan do simplicio-agent real inclui worktrees internos do próprio agente em .claude/worktrees/. Isso inflaciona o universo de arquivos e impede que o gate de orientação conclua dentro de um limite operacional razoável.

Evidência reproduzível

Ambiente: Windows, 2026-07-17.

  1. Target: C:\Users\Z0059V7A\m\repos\simplicio-agent.
  2. O macro map encontrou 8.482 arquivos e 81.972 símbolos; o módulo .claude sozinho aparece com 8.820 arquivos no inventário agregado por causa dos worktrees internos.
  3. O scan síncrono via Runtime/source corrigido foi executado com --timeout 300.
  4. Após exatamente 300s o envelope terminalizou com phase=timeout, failure_reason=scan_timeout, exit_code=1, lock recuperado e fresh=false.
  5. O parser possui SKIP_DIRS para .git, node_modules, caches e artefatos, mas não exclui .claude/worktrees nem outros worktrees gerenciados.

Impacto

  • O loop não consegue obter survey/handoff fresco do checkout de integração.
  • O custo de tokens, memória e tempo inclui código duplicado de workers que não pertence ao produto avaliado.
  • O timeout bounded evita hang, mas deixa o backlog bloqueado em mapping.
  • Excluir indiscriminadamente .claude pode esconder instruções legítimas; a correção precisa distinguir configuração raiz de worktrees aninhados.

Plano passo a passo

  1. Instrumentar o contador de arquivos por diretório raiz para confirmar o peso de .claude/worktrees em um checkout representativo.
  2. Definir a política de escopo: preservar arquivos de configuração de .claude na raiz, ignorar apenas .claude/worktrees e worktrees equivalentes identificados por manifesto.
  3. Implementar a filtragem na camada de walk, mantendo follow_symlinks=False e o comportamento de SKIP_DIRS existente.
  4. Adicionar uma opção explícita de inclusão/override somente se consumidores legítimos precisarem mapear worktrees; não introduzir variável de ambiente nova para configuração comportamental.
  5. Adicionar testes unitários de descoberta e um teste real contra uma fixture com .claude/settings.json e .claude/worktrees/worker/src.py.
  6. Reexecutar o scan completo do Agent, comparando arquivos/símbolos, tempo, memória e freshness antes/depois.
  7. Validar status --json, inspect --json e handoff --json com artefatos frescos.
  8. Atualizar ADR/documentação e changelog se a política de escopo for considerada decisão arquitetural ou release-relevant.
  9. Publicar pacote e verificar que o operador global consome a versão com a correção; relacionar com [P1][Release] Publicar e instalar versão com a correção de timeout do PR #232 #233.

Matriz de testes obrigatória

  • fixture sem worktree: nenhuma regressão de contagem;
  • .claude/settings.json e .claude/skills/*.md: preservados;
  • .claude/worktrees/<name>/...: excluído;
  • .git/worktrees e worktree file: não seguir nem duplicar conteúdo;
  • symlink/junction para worktree: não seguir;
  • múltiplos worktrees e nomes contendo espaços;
  • scan sync normal, timeout, lock recovery e async status;
  • contrato de macro map e handoff permanecem estáveis;
  • runtime passthrough e executável instalado usam a mesma política.

Critérios de aceite

  • A política de escopo está documentada e não remove configuração raiz legítima.
  • Worktrees gerenciados não aparecem nos artefatos do projeto principal.
  • O scan do checkout Agent conclui dentro do orçamento acordado ou produz timeout terminal reproduzível com causa explícita.
  • fresh=true, terminal=true, lock=false e handoff.ready=true após scan bem-sucedido.
  • Contagens, símbolos e relações fora do worktree continuam corretos.
  • Testes unitários, integração/CLI e a execução real do Agent passam.
  • A release publicada e a versão instalada são verificadas independentemente.
  • Não há falso COMPLETE enquanto a issue de release [P1][Release] Publicar e instalar versão com a correção de timeout do PR #232 #233 permanecer sem prova.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions