fix: admin/api apontava para admin/code (inexistente) — crash no app
Ao dividir _shared.py em admin/api/*.py ontem, o cálculo `Path(__file__).resolve().parent.parent / "code"` foi copiado sem ajustar para o nível de diretório novo. No arquivo original (admin/models_api.py, direto em admin/) dois `.parent` chegavam na raiz do repo. Em admin/api/shared.py, um nível mais fundo, dois `.parent` param em admin/ — e admin/code nunca existiu. sys.path nunca recebia code/, então toda ação que passa por `server` (analisar voz, aplicar decisões) crashava o app com ModuleNotFoundError: server_tools. O bug sobreviveu a duas rodadas de validação da sessão anterior — lint zero, 1454 testes verdes, comando testado manualmente pela ponte — porque todos rodam num venv com install editável (__editable__.fcp_mcp_server.pth) que já deixa fcpxml/server_tools importáveis por conta própria, mascarando qualquer erro no cálculo manual de sys.path. Só o app real, no fallback sem uv, expõe o bug. Correção: o cálculo de sys.path sai de cada módulo de comando (estava duplicado em nove arquivos) e passa a existir uma única vez em admin/api/__init__.py, que roda antes de qualquer submódulo — nenhum precisa mais da própria cópia. O teste de regressão precisou de duas tentativas pelo mesmo motivo do bug: a primeira versão também passava com o bug presente, por rodar no mesmo venv "de sorte". Só ficou confiável isolando um subprocess que remove site-packages do sys.path antes de importar — confirmado nos dois sentidos, falha com o bug reintroduzido e passa com a correção (TestCodeDirResolution). Detalhe completo, incluindo por que o comando manual não pegou: Engine/docs/05_EXPERIENCIAS.md #25. Lint zerado, 1457 testes passando (3 novos), app compilado. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
cbd9297751
commit
711c397dfe
+20
-1
@@ -1 +1,20 @@
|
||||
"""Comandos da ponte JSON usada pelo app, agrupados por assunto."""
|
||||
"""Comandos da ponte JSON usada pelo app, agrupados por assunto.
|
||||
|
||||
O setup de sys.path mora aqui, e só aqui, porque o pacote é importado antes de
|
||||
qualquer um dos seus módulos (`from admin.api import models, voice, ...`
|
||||
dispara este arquivo primeiro). Cada módulo de comando importa `fcpxml.*`
|
||||
antes de importar `.shared` — sem o path já pronto neste ponto, o primeiro
|
||||
desses imports falha com `ModuleNotFoundError`. Repetir o cálculo em cada
|
||||
módulo (como era antes) é frágil por ordem: o app roda `admin/models_api.py`
|
||||
por caminho absoluto, então `__file__` está sempre correto, mas cada arquivo
|
||||
que refizesse essa conta um nível de diretório errado — como aconteceu quando
|
||||
`_shared.py` virou este pacote e `admin/code` (inexistente) saiu no lugar de
|
||||
`code/` — quebrava em silêncio até alguém rodar o comando de verdade.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
_CODE_DIR = str(Path(__file__).resolve().parent.parent.parent / "code")
|
||||
if _CODE_DIR not in sys.path:
|
||||
sys.path.insert(0, _CODE_DIR)
|
||||
|
||||
Reference in New Issue
Block a user