PRD-018 — Agentic Human-in-the-Loop & Approval Workflow
1. Objetivo
Criar um mecanismo formal de Human-in-the-Loop (HITL) para o Agentic Work, permitindo que o agente execute automaticamente operações de baixo risco e encaminhe operações sensíveis para aprovação humana quando exigido por política, risco, workflow ou configuração do tenant.
O mecanismo deverá transformar:
“Você confirma?”
em um processo operacional formal:
Intent
↓
Plan
↓
Risk Assessment
↓
Policy Decision
↓
Approval Request
↓
Human Decision
↓
Revalidation
↓
Execution
↓
Verification
↓
Audit
2. Princípio Fundamental
A aprovação humana não substitui autorização.
Ela é uma etapa adicional.
Authentication
↓
Authorization
↓
Policy
↓
Human Approval
↓
Reauthorization
↓
Execution
Portanto:
Um usuário não pode aprovar uma operação para a qual ele próprio não possui autorização.
3. Tipos de Intervenção Humana
O sistema deverá distinguir quatro mecanismos.
3.1 Clarification
O agente não sabe o que o usuário quis dizer.
"Qual componente?"
Não é aprovação.
3.2 Confirmation
A operação é conhecida e autorizada, mas exige confirmação simples.
"Confirma adicionar este componente?"
3.3 Approval
A operação exige uma decisão formal de uma pessoa autorizada.
"Esta alteração exige aprovação de um supervisor."
3.4 Human Review
A operação foi considerada complexa, excepcional ou de risco elevado e precisa de análise humana antes de continuar.
4. Arquitetura
USER
│
▼
Conversation
│
▼
Intent
│
▼
Planner
│
▼
Execution Plan
│
▼
Policy Engine
│
┌─────────┴─────────┐
│ │
ALLOW HUMAN REVIEW
│ │
│ Approval Workflow
│ │
│ Human Decision
│ │
└─────────┬─────────┘
▼
Revalidate
│
▼
Execution
│
▼
Verification
│
▼
Audit
5. Approval Engine
Criar um novo componente:
Approval Engine
Responsabilidades:
- criar solicitações de aprovação;
- determinar aprovadores;
- controlar estado;
- receber decisões;
- validar elegibilidade;
- controlar expiração;
- solicitar reaprovação;
- executar quorum;
- controlar aprovação sequencial/paralela;
- produzir eventos de auditoria.
6. Approval Request
Modelo:
interface ApprovalRequest {
approvalId: string;
tenantId: string;
conversationId: string;
intentId: string;
planId: string;
executionId?: string;
requestedBy: Principal;
operation: ApprovalOperation;
risk: RiskLevel;
requiredApprovals: ApprovalRequirement[];
currentApprovals: ApprovalDecision[];
status: ApprovalStatus;
expiresAt: string;
policyVersion: string;
releaseId: string;
createdAt: string;
}
7. Approval Status
Estados:
PENDING
IN_REVIEW
APPROVED
PARTIALLY_APPROVED
REJECTED
EXPIRED
CANCELLED
SUPERSEDED
INVALIDATED
EXECUTING
COMPLETED
FAILED
8. Approval Lifecycle
PENDING
↓
IN_REVIEW
↓
APPROVED
↓
REVALIDATING
↓
EXECUTING
↓
COMPLETED
Caminhos alternativos:
PENDING → REJECTED
PENDING → EXPIRED
PENDING → CANCELLED
APPROVED → INVALIDATED
9. Approval Requirement
Uma política poderá definir:
interface ApprovalRequirement {
requirementId: string;
role?: string;
permission?: string;
userId?: string;
groupId?: string;
minimumApprovals: number;
sequence?: number;
mode: "SEQUENTIAL" | "PARALLEL";
allowRequester: boolean;
}
10. Exemplos
Operação simples
Confirmation:
1 usuário
Operação de alto risco
Approval:
Supervisor
Operação crítica
Approval:
Supervisor
+
Safety Manager
Operação com segregação de funções
Requester ≠ Approver
11. Segregation of Duties
Regra obrigatória para determinadas operações:
creator != approver
Exemplo:
User A
↓
creates operation
User B
↓
approves
Agent
↓
executes
O agente não poderá contornar essa regra.
12. Approval Groups
A política poderá definir:
Safety Supervisors
como grupo de aprovadores.
O sistema deverá resolver os membros atuais no momento da aprovação.
Não confiar em uma lista antiga enviada pelo cliente.
13. Delegation
O sistema poderá suportar delegação formal.
Exemplo:
Supervisor A
↓
delegates approvals
↓
Supervisor B
A delegação deverá possuir:
delegate
scope
startAt
expiresAt
reason
14. Delegation Restrictions
Delegação não poderá aumentar privilégios.
Se A pode aprovar apenas:
domain = workPermit
sua delegação não poderá conceder:
domain = systemAdministration
15. Approval Quorum
Exemplo:
requiredApprovals = 2
Dos cinco aprovadores disponíveis:
A → approve
B → approve
Resultado:
QUORUM_REACHED
16. Unanimous Approval
Para operações críticas:
A → approve
B → approve
C → reject
Resultado:
REJECTED
mesmo que dois tenham aprovado.
17. Sequential Approval
Exemplo:
Supervisor
↓
Safety Manager
↓
Director
O segundo nível só fica disponível após o primeiro.
18. Parallel Approval
Exemplo:
Supervisor ──────┐
├── quorum
Safety Manager ──┘
As decisões podem ocorrer independentemente.
19. Approval Policy
Exemplo conceitual:
capability: workPermit.approve
risk: high
approval:
mode: sequential
levels:
- role: supervisor
approvals: 1
- role: safety_manager
approvals: 1
20. Policy Evaluation
O Policy Engine continuará sendo a autoridade.
Ele poderá retornar:
ALLOW
DENY
REQUIRE_CONFIRMATION
REQUIRE_APPROVAL
REQUIRE_HUMAN_REVIEW
21. Risk-Based Approval
O nível de risco poderá depender de:
capability
resource
workflow state
batch size
field
tenant policy
user role
operation scope
Exemplo:
Alterar um campo
→ medium
Alterar 100 registros
→ high
Excluir 1.000 registros
→ critical
22. Dynamic Risk
O risco não deve ser apenas propriedade fixa da capability.
Exemplo:
workPermit.update
normalmente:
MEDIUM
Mas:
update
+
100 records
+
APPROVED state
pode resultar em:
CRITICAL
23. Approval Evidence
O aprovador deverá visualizar exatamente:
O que será feito?
Em qual registro?
Quais campos?
Qual valor atual?
Qual novo valor?
Por quê?
Quem solicitou?
Qual risco?
Qual policy?
24. No Blind Approval
Nunca mostrar apenas:
“Deseja aprovar?”
Deverá existir um resumo operacional.
Exemplo:
Alteração solicitada
Permissão: PT-10231
Campo: Validade
Atual: 15 dias
Novo: 30 dias
Solicitado por: João
Risco: Médio
[Rejeitar] [Aprovar]
25. Approval Diff
Para UPDATE:
BEFORE
validityDays: 15
AFTER
validityDays: 30
Para múltiplos campos:
name:
"PT Industrial"
→
"PT Industrial - Área 3"
validity:
15
→
30
26. Batch Approval
Nunca apresentar:
“Aprovar 2.583 alterações?”
sem detalhamento.
Deverá existir:
count
scope
filters
sample
impact
risk
e limites configuráveis.
27. Approval Preview
Antes da aprovação, o sistema poderá executar uma capability de preview:
plan.preview
Resultado:
wouldUpdate: 53
wouldFail: 2
wouldSkip: 4
O aprovador decide com base no impacto real.
28. Approval Binding
A aprovação deverá estar vinculada ao plano exato.
approvalId
↓
planId
↓
planHash
Se o plano mudar:
planHash != approvedHash
a aprovação é invalidada.
29. Anti-Substitution
Isso impede:
Approval:
"Atualizar WP-123"
Execution:
"Atualizar WP-456"
A aprovação não pode ser reutilizada.
30. Revalidation
Depois da aprovação e antes da execução:
Authorization
Policy
Resource state
Plan hash
Tenant
User
Capability
deverão ser novamente validados.
31. State Change
Exemplo:
Approval created
↓
WP = DRAFT
↓
Supervisor approves
↓
WP = APPROVED
A execução planejada para DRAFT pode não ser mais válida.
Resultado:
APPROVAL_INVALIDATED
32. Approval Expiration
Toda aprovação deverá possuir TTL.
Exemplo:
expiresAt = +24h
Após expiração:
EXPIRED
Não poderá ser executada.
33. Reapproval
Se uma aprovação expirar:
new ApprovalRequest
e não:
reuse old approval
34. Rejection
Uma rejeição deverá registrar:
interface ApprovalDecision {
decisionId: string;
approvalId: string;
decidedBy: Principal;
decision: "APPROVED" | "REJECTED";
reason?: string;
timestamp: string;
authenticationContext: AuthenticationContext;
}
35. Rejection Reason
Para operações de alto risco, o motivo poderá ser obrigatório.
Exemplo:
REJECTED
Motivo:
"Documento de treinamento ainda não anexado."
36. Approval Correction
Se o solicitante alterar a operação:
Plan A
↓
approval
↓
User changes parameters
o plano anterior deverá ser invalidado.
Novo plano:
Plan B
↓
new approval
37. Approval + Conversation
A conversa deverá continuar naturalmente.
Exemplo:
Adicione o componente de trabalho em altura.
Agente:
Posso adicionar, mas esta operação exige aprovação do supervisor.
Depois:
Solicitação enviada para aprovação.
Quando aprovado:
Aprovado. Vou executar agora.
38. Asynchronous Approval
A aprovação não precisa acontecer na mesma sessão.
User A
↓
request
↓
Approval Pending
↓
User leaves
↓
User B approves
↓
Execution
39. Notification
O Approval Engine poderá emitir eventos:
APPROVAL_REQUESTED
APPROVAL_ASSIGNED
APPROVAL_APPROVED
APPROVAL_REJECTED
APPROVAL_EXPIRED
O sistema de notificações existente poderá consumi-los.
Não criar um sistema de notificações paralelo desnecessariamente.
40. Approval Inbox
Deverá existir uma visão:
My Approvals
com:
Pending
Approved
Rejected
Expired
41. Semantic UI Integration
A inbox poderá expor:
approval.inbox
approval.request
approval.details
approval.approve
approval.reject
Assim o agente também poderá operar sobre o workflow.
Exemplo:
Mostre minhas aprovações pendentes.
O agente poderá navegar para:
approval.inbox
42. Natural Language Approval
O aprovador poderá dizer:
“Aprovar.”
O Conversation Runtime deverá verificar:
activeApproval
currentUser
tenant
approval status
Somente então interpretar a ação.
43. Ambiguous Approval
Se houver:
5 approvals pending
e o usuário disser:
“Aprovar.”
O agente deverá perguntar:
“Qual aprovação você deseja aprovar?”
Nunca escolher arbitrariamente.
44. Contextual Approval
Se houver uma aprovação aberta:
Approval #9821
e o usuário disser:
“Aprovar essa.”
poderá resolver deterministicamente:
this = active approval
45. Approval Authorization
Antes de aceitar:
APPROVED
validar:
user authenticated
tenant matches
approver eligible
permission exists
approval pending
not expired
not requester
46. Emergency Override
Operações críticas poderão possuir mecanismo de emergência.
Mas:
Emergency override não significa ignorar auditoria.
Deverá registrar:
who
why
when
what
policy
override authority
47. Break-Glass
Se implementado:
normal policy
↓
DENY
↓
authorized break-glass
↓
temporary access
↓
mandatory audit
O mecanismo deverá ser extremamente restrito.
48. Approval Audit
Registrar:
REQUESTED
VIEWED
CLAIMED
APPROVED
REJECTED
EXPIRED
CANCELLED
INVALIDATED
EXECUTED
49. Approval Forensics
Deverá ser possível responder:
Quem aprovou esta alteração?
E:
O que exatamente essa pessoa aprovou?
E:
Qual versão da política estava ativa?
E:
O plano executado era exatamente o plano aprovado?
50. Approval Record Immutability
Após decisão:
APPROVED
o registro da decisão não deverá ser alterado.
Correções devem gerar novos eventos.
51. Human Decision ≠ LLM Decision
O agente poderá:
recommend
summarize
explain
mas não poderá falsificar:
human approval
52. No Synthetic Approval
É proibido:
Agent → approve()
em nome do usuário.
O agente jamais poderá simular uma aprovação humana.
53. Approval Authentication
Para operações críticas, poderá ser exigida autenticação reforçada:
normal session
+
step-up authentication
O mecanismo deverá ser compatível com a infraestrutura de identidade existente.
54. Multi-Level Approval
Exemplo SST:
Agent
↓
Supervisor
↓
Safety Manager
↓
Responsible Director
↓
Execution
Cada etapa deverá ser independente e auditável.
55. Approval Workflow Definition
Modelo:
interface ApprovalWorkflow {
workflowId: string;
version: string;
trigger: ApprovalTrigger;
levels: ApprovalLevel[];
quorum?: QuorumPolicy;
expiration: Duration;
segregationOfDuties?: boolean;
revalidation: RevalidationPolicy;
}
56. Workflow Versioning
Uma aprovação criada usando:
workflowVersion = 3
deverá continuar vinculada à versão 3.
Uma nova versão não deverá alterar retroativamente uma aprovação existente sem regra explícita de migração/invalidação.
57. Tenant-Specific Workflows
O tenant poderá configurar:
workPermit.approve
com:
1 supervisor
enquanto outro tenant exige:
1 supervisor
+
1 safety manager
58. Global Safety Minimum
Entretanto, a plataforma poderá definir requisitos mínimos globais.
Exemplo:
GLOBAL:
critical deletion requires human approval
O tenant não poderá desabilitar isso.
59. Approval Policy Resolution
Fluxo:
Global Policy
↓
Tenant Policy
↓
Resource Policy
↓
Current Workflow State
↓
Effective Approval Policy
60. Approval SLA
Poderá existir:
approval SLA = 4 hours
para determinadas operações.
Isso permitirá detectar:
approval overdue
61. Escalation
Após SLA:
Supervisor
↓ timeout
Manager
A escalada deverá ser definida pela policy.
62. No Automatic Approval on Timeout
Por padrão:
timeout ≠ approve
O comportamento default deverá ser:
EXPIRED
ou escalada.
63. Approval Cancellation
O solicitante poderá cancelar enquanto:
PENDING
desde que a policy permita.
Após:
EXECUTING
não é mais cancelamento da aprovação; passa a ser controle da execução.
64. Approval and Undo
São conceitos diferentes:
Approval
→ autoriza execução futura
Undo
→ tenta compensar execução já realizada
O PRD-012/006 continua responsável pelo mecanismo de compensação.
65. Approval Failure
Se:
approved
↓
execution
↓
API failure
o status deverá ser:
EXECUTION_FAILED
e não:
REJECTED
A decisão humana continua registrada como aprovada.
66. Partial Execution
Em batch:
Approval:
100 records
Execução:
97 succeeded
3 failed
Resultado:
PARTIAL_SUCCESS
Não solicitar nova aprovação para os 97 já executados.
67. Retry
Retry deverá respeitar:
same approved plan
same tenant
same capability
same authorization
Se os parâmetros mudarem:
new plan
new approval
68. Approval Security Model
Human
│
Authentication
│
Authorization
│
Approval Engine
│
Policy Engine
│
Plan Validation
│
Execution
Nenhum componente isolado pode conceder autorização.
69. Observability
Registrar métricas:
approval_requests
approval_latency
approval_approval_rate
approval_rejection_rate
approval_expiration_rate
approval_escalation_rate
approval_invalidated_rate
Também:
time_to_approval
time_to_execution_after_approval
70. Agent Performance
O agente deverá saber quando não precisa de HITL.
Meta:
Low Risk
→ automatic execution
e:
High/Critical
→ approval
Isso evita transformar o agente em um sistema que pergunta:
“Você confirma?”
para absolutamente tudo.
71. Fast Path
Exemplo:
"Abra a aba Componentes"
→ sem approval.
"Explique este risco"
→ sem approval.
"Adicione este componente"
→ policy determina.
"Exclua todos os componentes"
→ approval/human review.
72. Integration with Existing PRDs
O HITL deverá integrar diretamente com:
PRD-004 Capability Registry
PRD-005 Intent Engine
PRD-006 Planner & Orchestrator
PRD-008 Policy Engine
PRD-010 Conversation Runtime
PRD-013 Security/Audit
PRD-014 Testing
PRD-015 Observability
PRD-016 Release Management
PRD-017 Multi-Tenancy
73. End-to-End Example
Usuário:
Exclua todos os componentes desta permissão.
Intent
DELETE
target = workPermit.components
scope = currentWorkPermit
Planner
workPermit.components.deleteBatch
Policy
risk = CRITICAL
decision = REQUIRE_APPROVAL
Approval
Supervisor approval required
Human
Aprovar.
Revalidation
tenant ✓
user ✓
policy ✓
plan hash ✓
resource ✓
permission ✓
Execution
DELETE 17 components
Verification
remaining components = 0
Audit
requested
approved
executed
verified
74. Primeiro Vertical Slice
Implementar inicialmente:
workPermit.components.remove
com:
Intent
→ Plan
→ Policy
→ Approval
→ Revalidation
→ Execution
→ Verification
→ Audit
Depois:
workPermit.approve
workPermit.cancel
batch operations
75. Acceptance Criteria
Approval
- Approval Engine implementado.
- Approval Request persistente.
- Estados formalizados.
- Aprovação vinculada ao plano.
- Plan hash validado.
- TTL implementado.
- Revalidação antes da execução.
Security
- aprovador autenticado;
- autorização validada;
- tenant validado;
- requester ≠ approver quando exigido;
- nenhum approval sintético;
- aprovação não pode ser reutilizada.
Workflow
- aprovação sequencial;
- aprovação paralela;
- quorum;
- rejeição;
- expiração;
- cancelamento;
- reaprovação;
- delegação controlada;
- escalada opcional.
Audit
- toda decisão registrada;
- decisão imutável;
- plano aprovado registrado;
- identidade do aprovador registrada;
- versão de policy registrada;
- release registrado.
UX
- aprovação mostra impacto;
- mostra diff;
- mostra risco;
- mostra solicitante;
- suporta linguagem natural;
- suporta aprovação assíncrona.
Evidência parcial de implementação — 2026-09-04
O Approval Engine e o workspace persistem proposta vinculada a plano/hash, TTL, policy/release e identidade humana; confirmação não substitui reautorização. O fluxo suporta sequência, paralelo, quorum, rejeição, expiração, cancelamento, reaprovação e delegação limitada, com SoD e token one-time hashado. Cada decisão é auditável e imutável, e timeout nunca aprova automaticamente.
Em 2026-09-05, a suíte de Approval passou com 40 testes em 7 arquivos. O canário remoto de colaboração comprovou workspace tenant-isolado, humanos independentes, SoD rejeitada, approval QUORUM com dois votos, two-person rule, token one-time, revalidação antes da execução, revogação por drift material e reapproval, sem burlar policy e com cleanup remainingRows:0. UX de impacto/diff/linguagem natural permanece aberta para prova dedicada.
Em 2026-09-06, a regressão atual de engine, confirmação, sessão Durable Object, access, workspace, delegação e workflow passou com 48 testes, e o typecheck do Agent passou novamente. O health público do Worker confirmou runtime e bindings. O estado permanece PARTIAL porque a UX de impacto/diff/linguagem natural e a expansão do workspace ainda requerem prova dedicada.
Em novo canário remoto de 2026-09-06, dois humanos independentes concluíram aprovação QUORUM com two-person rule e token one-time; autoaprovação por SoD, adulteração de policy/voto e acesso anônimo foram negados. O fluxo revogou approval após drift material de versão, exigiu reapproval, preservou revalidação de execução sem conceder autoridade e confirmou isolamento tenant-scoped, guards concorrentes e cleanup PostgreSQL (remainingRows: 0).
76. Resultado
Com o PRD-018, o Agentic Work deixa de ter apenas:
Agent → Execute
e passa a possuir um modelo corporativo completo:
USER
│
▼
INTENT
│
▼
PLAN
│
▼
POLICY
│
┌─────────┴─────────┐
│ │
ALLOW APPROVAL
│ │
│ HUMAN DECISION
│ │
│ REVALIDATION
│ │
└─────────┬─────────┘
▼
EXECUTION
│
▼
VERIFICATION
│
▼
AUDIT
Isso é particularmente importante para um sistema de SST, onde determinadas operações não devem depender exclusivamente da decisão autônoma do agente.
PRD-019 — Agentic Workflow & Long-Running Business Processes
O próximo estágio deverá subir um nível de abstração.
Até aqui construímos a capacidade de o agente executar uma operação:
Intent
→ Plan
→ Capability
→ Policy
→ Approval
→ Execution
O PRD-019 deverá tratar processos de negócio completos e duradouros, que podem durar minutos, horas ou dias e envolver múltiplas pessoas, sistemas e etapas.
Exemplos:
Criar uma Permissão de Trabalho
↓
Adicionar equipe
↓
Adicionar riscos
↓
Adicionar medidas de controle
↓
Solicitar aprovação
↓
Supervisor aprova
↓
Responsável de SST aprova
↓
Liberar permissão
↓
Executar atividade
↓
Encerrar permissão
Nesse estágio, o Agentic Work deixa de ser apenas um agente que executa comandos e passa a ser uma camada capaz de orquestrar processos de negócio completos, preservando estado, timers, eventos, aprovações, compensações, retomadas e auditoria.
Isso será especialmente importante considerando a infraestrutura serverless/Cloudflare existente, porque esses workflows não poderão depender da permanência de uma única execução de Worker.