Skip to content

fix: modelo do squad web/dashboard hardcoded em claude-sonnet-5 - #41

Merged
danzeroum merged 1 commit into
mainfrom
claude/fix-squad-model-hardcode
Jul 7, 2026
Merged

fix: modelo do squad web/dashboard hardcoded em claude-sonnet-5#41
danzeroum merged 1 commit into
mainfrom
claude/fix-squad-model-hardcode

Conversation

@danzeroum

Copy link
Copy Markdown
Owner

Summary

  • O squad do dashboard/navegador (squad_agent.rs) sempre instanciava os 5 agentes Python com "claude-sonnet-5" hardcoded — selecionar deepseek-chat na 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 é sobre max_autonomy_level, um campo diferente — a ADR nunca fala de modelo.
  • default_squad_pool agora lê FORGE_SQUAD_MODEL (fallback pro default antigo claude-sonnet-5, comportamento inalterado por padrão) via um helper squad_model() compartilhado, também usado no RunOpts do 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 --model via CLI nunca teve esse bug (squad.rs::run_squad já passava opts.model de verdade) — só o pool persistente do agente web era afetado.
  • infra/docker/README.md documenta a env var nova e corrige a distinção CLI vs. dashboard; docker-compose.yml ganha environment: no serviço dashboard (não passava nenhuma API key antes — bug adjacente encontrado ao documentar).
  • pendencias.md registra o achado completo, incluindo o mecanismo real do erro 400 (o Gateway escolhe provider por prioridade de env key configurada, nunca pelo nome do modelo) e o gap remanescente (modelo por-tarefa exigiria campo novo no proto SquadTask, escopo maior, não incluído aqui).

Test plan

  • cargo test -p forge-cli squad_agent:: — 5/5 (inclui o teste novo squad_model_le_forge_squad_model_com_fallback_pro_claude_sonnet_5 e o e2e real run_squad_via_http_com_gate_hitl_real_e_ledger, que segue passando com a env var ausente = comportamento antigo intacto)
  • cargo test --workspace — 0 falhas
  • cargo clippy -p forge-cli --all-targets -- -D warnings — limpo
  • cargo fmt --all --check — limpo

Generated by Claude Code

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
@danzeroum
danzeroum merged commit a336cd5 into main Jul 7, 2026
9 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