feat(squad): usuário como membro da squad — chat ao vivo (Fase 1a) - #43
Merged
Conversation
Transforma o humano de aprovador-de-gate em MEMBRO participante da squad, com um chat ao vivo ao lado da esteira. Contrato (aditivo, ADR de contrato preservado): - squad.proto: nova ChatMessage (author/author_role/text/in_reply_to) na variante 9 do oneof payload de SquadEvent. Stubs Python regenerados. Rust (crates/forge-cli): - SquadHub.push_user_message: injeta a fala do usuário na tarefa viva — ecoa como ChatMessage(HUMAN) no stream e enfileira na inbox (base para a Fase 1b consumir como turno real do membro humano). - POST /api/squad/:id/message (202 sem corpo, mesmo cuidado do bug de 202 da Onda 15); renderização do chat no CLI squad.rs. Python (forge-squad): - orchestrator dá VOZ aos agentes: _emit_chat narra cada proposta (texto derivado do conteúdo REAL, nada fabricado) e o consenso; server.py mapeia o kind "chat" para ChatMessage. Web: - postSquadMessage + tipo SquadChatMessage; painel de conversa na tela Squad (bolhas HUMAN à direita, agentes/SYSTEM à esquerda) + input de mensagem. Testes: Rust (push_user_message_*), Python (test_chat_message_atravessa_o_ mapeamento_proto, test_event_sink_* atualizado), web (tsc/lint/vitest verdes). Fase 1b (AwaitUserTurn — a fala vira Proposal dentro do consenso) fica para PR seguinte; registrada em pendencias.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ep37vHQeEet5LynX35nY2G
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
Transforma o humano de aprovador-de-gate em membro participante da squad, com um chat ao vivo ao lado da esteira. Primeira fase do roadmap de evolução Forge→BuildToValue (handoff completo em
docs/handoff/desenvolvimento/HANDOFF-BUILDTOVALUE.md, PR de docs à parte).O que muda
ChatMessage(author/author_role/text/in_reply_to) na variante 9 dooneof payloaddeSquadEvent(schemas/proto/squad.proto). Stubs Python regenerados. Protos evoluem só aditivamente — sem breaking.crates/forge-cli):SquadHub.push_user_messageinjeta a fala do usuário na tarefa viva (ecoa comoChatMessageHUMAN no stream + enfileira nainbox); novoPOST /api/squad/:id/message(responde202sem corpo — mesmo cuidado do bug de202/.json()corrigido na Onda 15); render do chat no CLIsquad.rs.forge-squad): o orquestrador dá voz aos agentes (_emit_chat, texto derivado do conteúdo real da proposta — nada fabricado) e narra o consenso;server.pymapeia okindchat→ChatMessage.postSquadMessage+ tipoSquadChatMessage; painel de conversa na tela Squad (bolhas HUMAN à direita, agentes/SYSTEM à esquerda) + input.Escopo / decisões
Proposalde peso máximo dentro do consenso, via novoCoreService.AwaitUserTurn) é mais invasiva no contrato gRPC Core e fica para PR seguinte — registrada empendencias.md.max_autonomy_levelsegue ignorado; autonomia continua descritiva.Verificação
Rodado localmente, tudo verde:
cargo build --workspace·cargo clippy -p forge-cli(0 warnings) ·cargo fmt --all --checkcargo test -p forge-cli— novos:push_user_message_ecoa_chat_no_stream_e_enfileira,push_user_message_em_tarefa_inexistente_devolve_erruv run pytest packages/forge-squad— 125 passed; novos/atualizados:test_chat_message_atravessa_o_mapeamento_proto,test_event_sink_emite_eventos_ao_vivo_na_ordemtsc -b,oxlint,vitest run(20 passed) verdes🤖 Generated with Claude Code
Generated by Claude Code