fix: modelo do squad web/dashboard hardcoded em claude-sonnet-5 - #41
Merged
Conversation
O pool Python de longa duração do agente web (squad_agent.rs, capacidade 1, construído uma vez na subida do dashboard) sempre instanciava os 5 agentes com "claude-sonnet-5" fixo, sem nenhum caminho de request/frontend pra sobrescrever — selecionar outro modelo na tela Modelo não tinha efeito algum no squad, só na Sessão (que já era wireada desde a Onda 13). Sem ADR por trás (diferente do max_autonomy_level/ADR 0021, que um diagnóstico externo citou por engano pra justificar este hardcode). - squad_agent.rs: helper squad_model() lê FORGE_SQUAD_MODEL com fallback pro default antigo; usado em default_squad_pool (o que de fato determina o modelo dos agentes Python), no RunOpts do handler (tier de rate-limit) e no rótulo de modelo do ledger, que antes sempre "mentia" claude-sonnet-5. - infra/docker: documenta a env var e corrige a distinção real entre `forge squad --model` (CLI, já funcionava) e o squad do dashboard (não funcionava); docker-compose.yml ganha environment: no serviço dashboard (não passava nenhuma API key antes). - pendencias.md: registra o achado, a correção e o gap remanescente (per-tarefa real exigiria model no proto SquadTask). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kDm3viu7mJm6n5zphKwAF
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.
Summary
squad_agent.rs) sempre instanciava os 5 agentes Python com"claude-sonnet-5"hardcoded — selecionardeepseek-chatna tela Modelo não tinha nenhum efeito no squad (só na Sessão, já wireada desde a Onda 13). Isso não era um descope documentado: o comentário "ADR 0021" perto do hardcode é sobremax_autonomy_level, um campo diferente — a ADR nunca fala de modelo.default_squad_poolagora lêFORGE_SQUAD_MODEL(fallback pro default antigoclaude-sonnet-5, comportamento inalterado por padrão) via um helpersquad_model()compartilhado, também usado noRunOptsdo handler (antes só afetava o tier de rate-limit) e no rótulo de modelo do ledger (antes sempre "mentia"claude-sonnet-5).forge squad --modelvia CLI nunca teve esse bug (squad.rs::run_squadjá passavaopts.modelde verdade) — só o pool persistente do agente web era afetado.infra/docker/README.mddocumenta a env var nova e corrige a distinção CLI vs. dashboard;docker-compose.ymlganhaenvironment:no serviçodashboard(não passava nenhuma API key antes — bug adjacente encontrado ao documentar).pendencias.mdregistra o achado completo, incluindo o mecanismo real do erro 400 (oGatewayescolhe provider por prioridade de env key configurada, nunca pelo nome do modelo) e o gap remanescente (modelo por-tarefa exigiria campo novo no protoSquadTask, escopo maior, não incluído aqui).Test plan
cargo test -p forge-cli squad_agent::— 5/5 (inclui o teste novosquad_model_le_forge_squad_model_com_fallback_pro_claude_sonnet_5e o e2e realrun_squad_via_http_com_gate_hitl_real_e_ledger, que segue passando com a env var ausente = comportamento antigo intacto)cargo test --workspace— 0 falhascargo clippy -p forge-cli --all-targets -- -D warnings— limpocargo fmt --all --check— limpoGenerated by Claude Code