Fase 7 Onda 15: Fecho — --web-agent padrão, resíduos da Sessão, bug real - #39
Merged
Conversation
…eal achado --web-agent vira --no-web-agent (opt-out): agente web habilitado por padrão, navegador é a forma primária de uso desta fase. ADR 0020 ganha seção de atualização (não reescrita). Varredura encontrou 2 resíduos mock que nenhuma onda anterior cobriu na tela Sessão: toggleToolPolicy/TOOL_POLICIES (removido — redundante com a matriz real da tela Skills, Sessão passa a ler fetchMatrix real) e SESSION_HEADER hardcoded (provider vem de fetchProviders real; cacheOn removido, não fabricado — não há sinal honesto pra derivar isso hoje). Escrever a 1a cobertura de browser da tela Sessão (mensagem -> SSE -> permissão -> aprovar -> ledger) achou um bug real de produção: fetchJson chamava .json() num corpo VAZIO de 202 Accepted, e o SyntaxError resultante fazia toda mensagem enviada mostrar "falha ao enviar mensagem" mesmo quando o servidor respondia com sucesso. Fix em client.ts generaliza o "corpo vazio" (204 e 202) em vez de especial-casar só 204. Documentação de fecho: README/CLAUDE.md ganham a seção "Fase 7 concluída"; docs/DECISOES.md ganha a entrada consolidada das 15 ondas; docs/LEVANTAMENTO-UI-DESIGNER.md reconcilia Grupo A 7/7 e Grupo B fechados, citando os descopes (ADR 0021/0022). Critério mecânico `grep simulateLatency web/src/api` fecha vazio. Decisões completas em pendencias.md (seção "Onda 15").
Achado por uma varredura mais ampla do texto "--web-agent" pelo repo, depois da Onda 15 renomear a flag pra --no-web-agent. Comentário apenas (zero mudança de comportamento do teste).
danzeroum
pushed a commit
that referenced
this pull request
Jul 7, 2026
… plano O main absorveu este plano (Fase 7, PRs #23–#39) e marcou o documento como superseded; o branch passa a refletir exatamente o estado do main. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ssk6F2txpfNpSLNLH6eV3o
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
Onda 15 (fecho) do plano-mestre da Fase 7 — última onda.
--web-agentvira padrão, uma varredura independente encontrou 2 resíduos mock que nenhuma onda anterior cobriu na tela Sessão, e escrever a primeira cobertura de browser dessa tela revelou um bug real de produção.--web-agent→--no-web-agent(opt-out, não mais opt-in). O agente web (sessão/permissão/squad ao vivo) vem habilitado por padrão — o navegador é a forma primária de uso desta fase. ADR 0020 ganhou uma seção de atualização (a decisão original de topologia/spawn_blocking/teto de sessões continua valendo; só o bullet do opt-in mudou).sessao-real-backend.spec.ts, mensagem → SSE → permissão → aprovar → ledger):fetchJsonchamava.json()direto num corpo vazio de202 Accepted, e oSyntaxErrorresultante (nãoApiError) faziasendMessagereportar falha mesmo quando o servidor respondia com sucesso — toda mensagem enviada pela tela Sessão real mostraria "falha ao enviar mensagem", apesar do turno completar normalmente por trás. Nenhum teste anterior (Rust ou Playwright) batia esse caminho. Fix emweb/src/api/client.ts: lêresponse.text()primeiro, só fazJSON.parsese não vazio — generaliza "sucesso sem corpo" (204 e 202) em vez de especial-casar só 204.toggleToolPolicy/TOOL_POLICIESremovidos — redundantes com a matriz real que a Onda 2 já entrega na tela Skills; a sidebar agora lêfetchMatrixreal, read-only.SESSION_HEADERhardcoded:providerpassa a vir defetchProvidersreal (Onda 12);cacheOnfoi removido, não fabricado — não há hoje um sinal honesto pro frontend saber se a sessão está em modo roteirizado ou real.docs/DECISOES.mdganha a entrada consolidada das 15 ondas;docs/LEVANTAMENTO-UI-DESIGNER.mdreconcilia Grupo A 7/7 e Grupo B fechados, citando os descopes explícitos (max_autonomy_levelADR 0021,forgetting.pyADR 0022). Critério mecânicogrep simulateLatency web/src/apifecha vazio (sósimulateLatency/maybeFail, agora código morto, removidos declient.ts).Decisões completas em
pendencias.md(seção "Onda 15").Test plan
cargo fmt --all --checkcargo clippy --workspace -- -D warningscargo test --workspace(sem regressão pela renomeação da flag)cd python && uv run pytest(153 testes, sem mudança nesta onda)tsc --noEmit/npm run lint/npm run build/npm run test(vitest)playwright test --config=playwright.integration.config.ts(19/19, incluindo o novosessao-real-backend.spec.tsque achou o bug dofetchJson;squad-real-backend.spec.tsdeu timeout uma vez rodando a suíte inteira sob contenção de recurso do ambiente, reconfirmado verde isolado — não é regressão desta onda)🤖 Gerado com Claude Code
Generated by Claude Code