Skip to content

fix(reset): EOFError gracioso + doc de operação correta (M4)#115

Merged
danzeroum merged 1 commit into
masterfrom
claude/criptotrade-onboarding-06pd5p
Jul 21, 2026
Merged

fix(reset): EOFError gracioso + doc de operação correta (M4)#115
danzeroum merged 1 commit into
masterfrom
claude/criptotrade-onboarding-06pd5p

Conversation

@danzeroum

Copy link
Copy Markdown
Owner

M4 · reset_paper_state operável — EOFError gracioso + doc de operação correta

Último da faixa de manutenção. reset_paper_state.py estava "inoperável como documentado" na VPS. A exploração mostrou que o fix é menor que o descrito: --yes já existe e o docstring já usa python -m. Os tropeços reais eram dois.

1. EOFError

Sem --yes e sem TTY (docker compose exec sem -it), o input() do prompt estourava um traceback. Fix: try/except EOFError em main() → aborta limpo (return 1, sem traceback) com mensagem apontando --yes.

2. Doc de operação (com o nit do PM)

O fluxo era stop orchestrator → python -m … → start, mas (a) python -m no host não tem o ambiente (é dockerizado) e (b) docker compose exec orchestrator falhariaexec exige container de pé e o fluxo para o orchestrator. Fix: a linha não-interativa passa a mirar o container app (fica de pé, compartilha o mesmo volume ./data/LEDGER_DIR que o orchestrator — confirmado no docker-compose.vps.yml), com --yes:

docker compose -f docker-compose.vps.yml stop orchestrator
docker compose -f docker-compose.vps.yml exec app python -m scripts.reset_paper_state --yes
docker compose -f docker-compose.vps.yml start orchestrator

Reforçado que a invocação é sempre python -m (rodar python scripts/reset_paper_state.py daria ModuleNotFoundError: src).

Sem hack de sys.path: bateria no gate E402 do ruff (select E4) e fugiria da convenção python -m de todos os scripts do repo.

Testes (antes só cobriam a função pura, não o main() CLI)

LEDGER_DIR isola ledger e app db (via get_db_path):

  • +test_main_yes_resets_without_prompting (--yes pula o prompt e reseta; input() não é chamado).
  • +test_main_eof_without_yes_aborts_cleanly (EOFError → return 1, sem traceback, estado intacto).

Validação

  • pytest completo verde, cobertura 78.12% ≥ 72%; ruff (gate) limpo.

Fechamento da faixa M1–M4

Confirmando (sua pergunta): M1 já foi mergeado — PR #113 (Config de Risco: confirm=true + salvar em lote com confirmação). Então:

Com o M4 verde, a faixa de manutenção pós-validação M1–M4 fecha oficialmente.

🤖 Generated with Claude Code


Generated by Claude Code

…ona (M4)

reset_paper_state.py estava "inoperável como documentado" na VPS. A exploração
mostrou que o fix é menor que o descrito: --yes JÁ existe e o docstring JÁ usa
`python -m`. Os tropeços reais eram dois:

1. EOFError: sem --yes e sem TTY (`docker compose exec` sem -it), o input() do prompt
   estourava um traceback. Fix: try/except EOFError em main() → aborta limpo
   (return 1, sem traceback) com mensagem apontando --yes.

2. Doc de operação: o fluxo documentado era `stop orchestrator → python -m … → start`,
   mas (a) rodar `python -m` no HOST não tem o ambiente (é dockerizado) e (b)
   `docker compose exec orchestrator` falharia — exec exige container DE PÉ e o
   fluxo para o orchestrator. Fix: a linha não-interativa passa a mirar o container
   `app` (fica de pé, compartilha o mesmo volume ./data / LEDGER_DIR que o
   orchestrator — confirmado no docker-compose.vps.yml), com --yes (sem TTY):
       docker compose -f docker-compose.vps.yml stop orchestrator
       docker compose -f docker-compose.vps.yml exec app python -m scripts.reset_paper_state --yes
       docker compose -f docker-compose.vps.yml start orchestrator
   Reforçado também que a invocação é SEMPRE `python -m` (rodar `python
   scripts/reset_paper_state.py` daria ModuleNotFoundError: src).

NÃO adicionei bootstrap de sys.path: bateria no gate E402 do ruff (select E4) e
fugiria da convenção `python -m` de todos os scripts do repo.

Testes (tests/test_reset_paper_state.py — antes só cobriam a função pura, não o
main() CLI; LEDGER_DIR isola ledger E app db via get_db_path):
- +test_main_yes_resets_without_prompting (--yes pula o prompt e reseta; input()
  não é chamado).
- +test_main_eof_without_yes_aborts_cleanly (EOFError → return 1, sem traceback,
  estado intacto).

Validação: pytest completo verde, cobertura 78.12% ≥ 72%; ruff (gate) limpo.

Fecha a faixa de manutenção M1–M4 (M1 #113, M2+M3 #114, M4 este PR).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UZ3vLNTHKekjQVtjFVRi5D
@danzeroum
danzeroum merged commit 1cb24a4 into master Jul 21, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants