lib/workflow_runner.py:197-201 marca status="failed", finished=True em qualquer exceção, e resume() exige pending_step (:156-158), que só é gravado no step human_pick (:188-189).
Consequência: qualquer recusa de política no meio de uma Run encerra a run sem retomada, e a pessoa precisa reexecutar do início.
O dano é limitado, mas real
O state é preservado (:198-200, lib/tracker.py:457-459) e _execute pula step com output presente (:181-182), então não há perda de dado, há perda de acesso: os artefatos continuam lá, mas não existe caminho de comando para continuar de onde parou.
O buraco é pré-existente: hoje uma recusa de safety do provider já mata a run do mesmo jeito.
Fica pior com o broker
Quando o mk-ai-broker entrar, o teto de gasto por pessoa passa a devolver 402 no meio de uma run multi-step. Um step 3 recusado por orçamento descarta os steps 1 e 2 já pagos, do ponto de vista de continuidade.
Correção proposta
Status blocked distinto de failed, preservando pending_step, e --resume aceitando run bloqueada. Assim a pessoa pede liberação de teto e continua, em vez de refazer.
Escopo
Não é pré-requisito do broker, é dívida do studiolocal. Registrado aqui para não morrer numa branch, conforme ADR-024.
lib/workflow_runner.py:197-201marcastatus="failed", finished=Trueem qualquer exceção, eresume()exigepending_step(:156-158), que só é gravado no stephuman_pick(:188-189).Consequência: qualquer recusa de política no meio de uma Run encerra a run sem retomada, e a pessoa precisa reexecutar do início.
O dano é limitado, mas real
O
stateé preservado (:198-200,lib/tracker.py:457-459) e_executepula step com output presente (:181-182), então não há perda de dado, há perda de acesso: os artefatos continuam lá, mas não existe caminho de comando para continuar de onde parou.O buraco é pré-existente: hoje uma recusa de safety do provider já mata a run do mesmo jeito.
Fica pior com o broker
Quando o
mk-ai-brokerentrar, o teto de gasto por pessoa passa a devolver402no meio de uma run multi-step. Um step 3 recusado por orçamento descarta os steps 1 e 2 já pagos, do ponto de vista de continuidade.Correção proposta
Status
blockeddistinto defailed, preservandopending_step, e--resumeaceitando run bloqueada. Assim a pessoa pede liberação de teto e continua, em vez de refazer.Escopo
Não é pré-requisito do broker, é dívida do
studiolocal. Registrado aqui para não morrer numa branch, conforme ADR-024.