feat(squad): kill-switch de squad (Prioridade-Zero) — Fase 3 - #46
Merged
Conversation
Governança: para um squad em execução imediatamente ("stop a runaway squad"),
padrão Prioridade-Zero do buildtovalue-governance adaptado ao SquadHub.
- POST /api/squad/:id/emergency-stop: aborta a task que drena o stream do
orquestrador (não só marca flag), destrava gate HITL pendente negando
(fail-closed, mesmo espírito do ADR 0017), publica evento de erro visível no
stream e encerra o SSE. Idempotente; 404 se a tarefa não existe.
- Checagem is_stopped no loop do stream como saída limpa quando a parada
acontece entre eventos; wrapper não republica erro se já parado (sem
duplicata).
- Web: botão "interromper" na tela Squad quando há execução ativa +
emergencyStopSquad no cliente.
Testes: emergency_stop_marca_para_publica_erro_e_encerra,
emergency_stop_em_tarefa_inexistente_devolve_err,
emergency_stop_destrava_gate_hitl_pendente_negando. Clippy/fmt/tsc/lint/vitest
verdes. Restante da Fase 3 (ledger HMAC, gates 4-estados, separação de poderes)
registrado em pendencias.md para revisão antes de avançar no núcleo sensível.
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
Governança: para um squad em execução imediatamente ("stop a runaway squad"). Padrão Prioridade-Zero do buildtovalue-governance adaptado ao
SquadHub. Primeira fatia da Fase 3 (handoff emdocs/handoff/desenvolvimento/HANDOFF-BUILDTOVALUE.md).O que muda
POST /api/squad/:id/emergency-stop: aborta a task tokio que drena o stream do orquestrador (para de verdade, não só marca flag), destrava gate HITL pendente negando (fail-closed, mesmo espírito do ADR 0017), publica um evento de erro visível no stream e encerra o SSE. Idempotente;404se a tarefa não existe.is_stoppedno loop do stream como saída limpa quando a parada acontece entre eventos; o wrapper não republica erro se já parado (sem duplicata).emergencyStopSquadno cliente.Escopo / decisão
Esta PR entrega o kill-switch (self-contained, Rust + web, sem tocar no ledger nem no motor de permissões). O restante da Fase 3 — HMAC por entrada no ledger, gates 4-estados + piso-crítico + impacto regulatório, separação produzir≠revisar≠aprovar, versionamento/expiração de template, Prompt Integrity — é maior e mexe no núcleo sensível (ledger/permissões). Registrei em
pendencias.mde recomendo revisão das fases já entregues antes de avançar nesse núcleo.Verificação
cargo test -p forge-cli emergency—emergency_stop_marca_para_publica_erro_e_encerra,emergency_stop_em_tarefa_inexistente_devolve_err,emergency_stop_destrava_gate_hitl_pendente_negando.cargo clippy -p forge-cli(0 warnings) ·cargo fmt --all --check· webtsc/oxlint/vitest(20) verdes.🤖 Generated with Claude Code
Generated by Claude Code