Skip to main content

PRD-019 — Agentic Workflow & Long-Running Business Processes

1. Objetivo

Criar uma infraestrutura de workflows de negócio duradouros para o Agentic Work, permitindo que o agente não apenas execute comandos isolados, mas acompanhe processos que podem durar minutos, horas ou dias.

O workflow deverá sobreviver a:

  • encerramento da sessão do usuário;
  • reinicialização de Workers;
  • falhas temporárias;
  • indisponibilidade de APIs;
  • espera por aprovação;
  • timers;
  • eventos externos;
  • mudança de contexto da UI;
  • retomada posterior.

O princípio é:

Uma conversa pode terminar; um processo de negócio não necessariamente termina com ela.


2. Problema

Uma execução simples:

User

Intent

Capability

API

Result

é suficiente para:

“Atualize a validade para 30 dias.”

Mas não para:

“Crie uma Permissão de Trabalho completa para esta atividade, adicione os trabalhadores, riscos e medidas de controle, envie para aprovação e me avise quando estiver liberada.”

Isso representa um processo:

Create

Add people

Add risks

Add controls

Submit

Wait

Approve

Release

Algumas etapas podem ocorrer imediatamente e outras somente muito tempo depois.


3. Workflow ≠ Plan

O Execution Plan do PRD-006 representa como executar uma intenção.

O Workflow representa o processo de negócio ao longo do tempo.

Intent

Execution Plan

Workflow

├── Step 1
├── Step 2
├── Wait
├── Human Approval
├── Timer
├── Event
└── Step N

4. Workflow Definition

Um workflow deverá ser definido de forma declarativa.

interface WorkflowDefinition {
workflowId: string;

version: string;

name: string;

domain: string;

trigger: WorkflowTrigger;

states: WorkflowStateDefinition[];

transitions: WorkflowTransition[];

timeout?: Duration;

compensation?: CompensationDefinition;

policies: string[];

status: "DRAFT" | "ACTIVE" | "DEPRECATED";
}

5. Workflow Instance

A definição é o template.

A instância representa uma execução real.

interface WorkflowInstance {
workflowInstanceId: string;

workflowId: string;

workflowVersion: string;

tenantId: string;

initiatedBy: Principal;

status: WorkflowStatus;

currentState: string;

context: WorkflowContext;

correlationId: string;

createdAt: string;

updatedAt: string;
}

6. Workflow Status

CREATED
RUNNING
WAITING
WAITING_APPROVAL
WAITING_EVENT
WAITING_TIMER
PAUSED
FAILED
PARTIAL_SUCCESS
COMPLETED
CANCELLED
COMPENSATING
COMPENSATED
TERMINATED

7. State Machine

O workflow deverá ser modelado como uma máquina de estados.

Exemplo:

DRAFT

SUBMITTED

WAITING_APPROVAL

APPROVED

RELEASED

IN_PROGRESS

COMPLETED

8. Transitions

Cada transição deverá possuir:

interface WorkflowTransition {
from: string;

to: string;

trigger: WorkflowTrigger;

conditions?: Condition[];

capabilityId?: string;

policyId?: string;

compensation?: string;
}

9. Workflow Trigger

Triggers poderão ser:

USER_COMMAND
CAPABILITY_COMPLETED
EVENT
TIMER
APPROVAL_COMPLETED
WEBHOOK
SCHEDULE
SYSTEM_EVENT
WORKFLOW_COMPLETED

10. Exemplo

USER_COMMAND

createWorkPermit

CAPABILITY_COMPLETED

addWorkers

CAPABILITY_COMPLETED

addRisks

APPROVAL_REQUIRED

WAIT

11. Wait State

Um workflow poderá parar explicitamente.

WAITING_APPROVAL

Nesse estado:

não consumir CPU
não manter Worker aberto
não fazer polling contínuo

O estado fica persistido.


12. Event Resume

Quando o evento chegar:

APPROVAL_APPROVED

o workflow será retomado.

Persisted Workflow

Event

Resume

Next State

13. Timer

Workflows poderão esperar:

5 minutes
2 hours
24 hours
specific date

Exemplo:

Se a aprovação não ocorrer em 24 horas, escale para o gerente.

WAIT_APPROVAL

24h timer

ESCALATE

14. Cloudflare Compatibility

A implementação deverá ser compatível com o modelo serverless atual.

Não assumir:

long-running Worker process

O runtime deverá persistir estado externamente e reativar o workflow quando necessário.

A implementação poderá utilizar posteriormente mecanismos como:

Durable Objects
Workflows
Queues

ou abstrações equivalentes, sem acoplar o domínio diretamente a um único produto.


15. Durable State

O estado mínimo deverá conter:

workflowInstanceId
tenantId
workflowVersion
currentState
context
pendingAction
pendingApprovals
timers
correlationId
version

16. Optimistic Concurrency

Cada instância deverá possuir:

version

Exemplo:

version = 17

Uma atualização deverá exigir:

expectedVersion = 17

Se outro processo já tiver atualizado:

version = 18

a operação deverá falhar com:

WORKFLOW_CONCURRENCY_CONFLICT

17. Workflow Lock

Para operações críticas, poderá existir lock lógico:

workflowInstanceId
+
executionId

O lock deverá possuir TTL para evitar deadlock permanente.


18. Idempotência

Cada transição deverá possuir uma chave idempotente.

interface WorkflowOperation {
operationId: string;

workflowInstanceId: string;

stepId: string;

idempotencyKey: string;
}

19. Retry

Falhas transitórias:

429
502
503
timeout
network

poderão ser repetidas.

Falhas permanentes:

400
403
404
business validation

não deverão ser repetidas automaticamente sem mudança de contexto.


20. Retry Policy

interface RetryPolicy {
maxAttempts: number;

backoff: "FIXED" | "EXPONENTIAL";

initialDelayMs: number;

maxDelayMs: number;

retryableErrors: string[];
}

21. Dead Letter

Após exceder tentativas:

RUNNING

FAILED

RETRY

FAILED

MAX_ATTEMPTS

MANUAL_REVIEW

22. Compensation

Workflows poderão definir compensações.

Exemplo:

Create Permit

Add Worker

Add Risk

Se posteriormente uma etapa crítica falhar:

compensation

poderá remover ou reverter operações anteriores, quando seguro e permitido.


23. Saga Pattern

O mecanismo deverá utilizar conceito de Saga para processos distribuídos.

Step A → success
Step B → success
Step C → failure

Compensate B
Compensate A

Mas:

compensação não significa necessariamente rollback físico.

Algumas operações de negócio não podem ser desfeitas.


24. Irreversible Operations

Exemplo:

Enviar documento oficialmente
Emitir aprovação
Liberar permissão
Registrar evento regulatório

poderá ser irreversível.

Nesse caso:

compensation = NONE

e o workflow deverá entrar em:

MANUAL_REVIEW

quando necessário.


25. Business State vs Workflow State

Não confundir:

Workflow:
WAITING_APPROVAL

com:

WorkPermit:
SUBMITTED

São estados diferentes.

O workflow acompanha o processo de automação.

O sistema de negócio continua sendo a autoridade sobre o estado da entidade.


26. Source of Truth

O workflow nunca deverá inventar o estado do negócio.

Após cada etapa relevante:

Workflow

Existing API

Business Database

Verification

27. Verification

Depois de uma transição:

CAPABILITY_COMPLETED

o workflow deverá verificar o resultado quando necessário.

Exemplo:

API returned 200

não significa automaticamente:

WorkPermit = RELEASED

28. Workflow Context

interface WorkflowContext {
entities: EntityReference[];

variables: Record<string, unknown>;

outputs: Record<string, unknown>;

references: Record<string, EntityReference>;

approvals: ApprovalReference[];

metadata: Record<string, unknown>;
}

29. Context Security

O contexto do workflow deverá ser:

tenant-scoped
user-authorized
minimal
versioned
auditable

Nunca armazenar desnecessariamente dados sensíveis.


30. Context Snapshot

Antes de uma etapa crítica:

Workflow

Context Snapshot

Execution

Isso permite reconstruir posteriormente:

Qual era o estado conhecido quando a decisão foi tomada?


31. Stale Context

Antes de executar uma etapa:

entityVersion

deverá ser comparada.

Exemplo:

Workflow expects:
WP-123 version 7

Current:
WP-123 version 9

Resultado:

STALE_CONTEXT

O workflow deverá parar ou recalcular a etapa.


32. Replanning

Quando o contexto mudar significativamente:

STALE_CONTEXT

Re-evaluate

New Plan

Se a mudança afetar uma aprovação existente:

invalidate approval

e solicitar nova aprovação.


33. Workflow Events

Eventos internos:

WORKFLOW_CREATED
WORKFLOW_STARTED
STATE_ENTERED
STATE_EXITED
STEP_STARTED
STEP_COMPLETED
STEP_FAILED
WAIT_STARTED
TIMER_CREATED
TIMER_FIRED
APPROVAL_REQUESTED
APPROVAL_COMPLETED
CONTEXT_CHANGED
REPLAN_REQUESTED
WORKFLOW_PAUSED
WORKFLOW_RESUMED
WORKFLOW_COMPLETED
WORKFLOW_FAILED
WORKFLOW_CANCELLED
COMPENSATION_STARTED
COMPENSATION_COMPLETED

34. External Events

O workflow poderá aguardar eventos externos.

Exemplo:

WAITING_DOCUMENT

e posteriormente:

DOCUMENT_UPLOADED

retoma o processo.


35. Event Correlation

Um evento externo deverá ser associado por:

tenantId
workflowInstanceId
correlationId
eventType
entityId

Nunca aceitar somente:

eventType = APPROVED

36. Event Security

Eventos externos deverão ser autenticados e validados.

Um tenant não poderá enviar:

APPROVAL_APPROVED

para um workflow de outro tenant.


37. Human Interaction

O workflow poderá solicitar intervenção:

WAITING_APPROVAL
WAITING_INPUT
WAITING_REVIEW
WAITING_DOCUMENT

O agente poderá informar:

“A permissão está aguardando aprovação do supervisor.”


38. User Resume

Depois de horas:

“Como está aquela permissão?”

O Conversation Runtime deverá resolver:

"aquella permissão"

workflow reference

WP-123

workflow status

39. Workflow References

O sistema deverá manter referências semânticas:

workflow → workPermit
workflow → employee
workflow → approval

Isso permite linguagem natural.


40. Workflow Memory

O resultado de cada etapa importante deverá ficar disponível:

Step 1:
permit created = WP-123

Step 2:
workers added = 4

Step 3:
risks added = 7

Step 4:
approval = pending

41. Conversation Independence

A conversa:

conversation-123

pode terminar.

O workflow:

workflow-982

continua.

Uma nova conversa poderá recuperar o workflow se o usuário tiver autorização.


42. Multi-User Workflow

Um workflow poderá envolver:

User A → creates
User B → reviews
User C → approves
Agent → executes

Todos permanecem auditados.


43. Multi-Tenant

Toda instância:

workflowInstanceId

deverá possuir:

tenantId

e seguir todas as regras do PRD-017.


44. Workflow Authorization

A autorização deverá ser reavaliada em cada etapa relevante.

Não assumir:

“O usuário iniciou o workflow, portanto tudo está autorizado.”

Exemplo:

Step 1:
User can create

Step 5:
User cannot approve

Step 5:
requires Supervisor

45. Workflow Policy

Policies poderão controlar:

who can start
who can modify
who can approve
who can cancel
who can resume
who can force-complete

46. Cancellation

Um workflow poderá ser cancelado:

USER_CANCEL
ADMIN_CANCEL
POLICY_CANCEL
SYSTEM_CANCEL
TIMEOUT

Cada motivo deverá ser registrado.


47. Cancellation Safety

Cancelar não significa automaticamente desfazer tudo.

Exemplo:

Workflow

Document sent

Cancel

O envio não pode ser desfeito.

O workflow deverá usar:

COMPENSATE
ou
MANUAL_REVIEW

quando aplicável.


48. Pause

Workflows poderão ser pausados:

PAUSED

por:

maintenance
tenant suspension
policy
manual intervention
incident

49. Resume

Ao retomar:

tenant active?
authorization valid?
policy valid?
release valid?
context valid?

Se não:

MANUAL_REVIEW

50. Release Pinning

O workflow deverá ficar associado ao:

releaseId

definido no PRD-016.

Assim:

Workflow created under Release 12

não muda silenciosamente para Release 13.


51. Workflow Migration

Uma nova versão poderá migrar workflows ativos.

Mas somente mediante estratégia explícita:

CONTINUE_OLD
MIGRATE
PAUSE
CANCEL

52. Long-Running Timeout

Workflows poderão possuir:

maxDuration

Exemplo:

maxDuration = 30 days

Ao exceder:

TIMEOUT

e aplicar policy.


53. Timer Service

Timers deverão ser persistentes.

Não usar:

setTimeout(...)

como mecanismo de workflow.

O processo deverá registrar:

timerId
workflowId
fireAt
status

54. Scheduling

Um timer poderá ser:

relative:
24h after approval request

absolute:
2026-09-10 18:00

business:
next business day

A última modalidade deverá respeitar timezone e calendário configurados.


55. Timezone

O workflow deverá armazenar timestamps em formato absoluto e possuir timezone contextual:

UTC timestamp
+
tenant timezone

Isso evita erros em deadlines.


56. Workflow UI

O Semantic UI Layer deverá expor:

workflow
workflow.status
workflow.timeline
workflow.currentStep
workflow.pendingApproval
workflow.cancel
workflow.pause

57. Workflow Timeline

A UI deverá apresentar:

✓ Permissão criada
✓ Equipe adicionada
✓ Riscos adicionados
✓ Medidas adicionadas
⏳ Aguardando supervisor
○ Liberação
○ Execução

58. Agent Interaction

O agente poderá responder:

“A permissão está aguardando aprovação do supervisor há 3 horas.”

ou:

“O supervisor aprovou. A próxima etapa é a liberação.”


59. Workflow Commands

Comandos naturais:

“Continue o processo.”

“Pause essa operação.”

“Cancele o processo.”

“Quem precisa aprovar?”

“Qual é a próxima etapa?”

“Por que está parado?”

Cada comando deverá ser convertido em capability/operation registrada.


60. Workflow Explainability

O agente deverá conseguir explicar:

current state
completed steps
pending steps
blocking reason
required approval
next transition

sem expor chain-of-thought.


61. Workflow Failure Explanation

Em vez de:

“Erro 422.”

o agente deverá produzir:

“A permissão não pôde avançar porque o trabalhador selecionado não possui o treinamento obrigatório.”


62. Failure Recovery

O workflow deverá distinguir:

TRANSIENT_FAILURE
BUSINESS_FAILURE
AUTHORIZATION_FAILURE
POLICY_FAILURE
STALE_CONTEXT
SYSTEM_FAILURE

Cada categoria terá estratégia diferente.


63. Manual Intervention

Algumas falhas deverão gerar:

MANUAL_REVIEW_REQUIRED

Exemplo:

external integration unavailable
+
operation irreversible

64. Workflow Observability

O PRD-015 deverá rastrear:

workflow duration
state duration
step duration
wait duration
approval duration
retry count
failure count
compensation count

65. Bottleneck Detection

O sistema deverá identificar:

95% of workflows
wait 18 hours
for approval

Isso permite descobrir gargalos reais do processo.


66. Workflow Analytics

Métricas:

completion rate
average duration
median duration
P95 duration
failure rate
cancellation rate
approval delay
manual intervention rate
replanning rate
compensation rate

67. Workflow Mining

O PRD-012 poderá utilizar esses dados para detectar:

Step A → Step B → Step C

como padrão recorrente e sugerir:

“Essas três operações são normalmente executadas juntas. Deseja criar uma capability composta?”


68. Composite Capability

Uma sequência frequente poderá evoluir para:

workPermit.prepareForApproval

que internamente executa:

addWorkers
addRisks
addControls
validate
submit

Isso não deve acontecer automaticamente em produção; passa pelo ciclo de Registry → Policy → Evaluation → Release.


69. Workflow Security

Nunca permitir que o agente altere diretamente:

workflow definition
policy
approval requirement
security rule

durante uma execução.


70. Workflow Definition Governance

Alterações em workflow deverão passar por:

Git

Review

Tests

Evaluation

Release

71. Workflow Testing

O PRD-014 deverá testar:

normal completion
failure
retry
timeout
approval
rejection
expiration
cancellation
pause/resume
stale context
concurrency
tenant isolation
release migration
compensation

72. Simulation

Deverá existir modo:

DRY_RUN

permitindo executar o workflow logicamente sem mutar dados reais.


73. Workflow Replay

Um workflow poderá ser reproduzido a partir de seus eventos:

Event 1
Event 2
Event 3
...
Event N

Isso será essencial para diagnóstico.


74. Event Sourcing — Uso Controlado

Não é necessário transformar toda a aplicação em Event Sourcing.

O mecanismo deverá apenas manter eventos suficientes para:

audit
replay
recovery
diagnostics

O banco de negócio existente continua sendo a fonte de verdade dos dados de negócio.


75. Workflow Store

Criar abstração:

interface WorkflowStore {
create(instance: WorkflowInstance): Promise<void>;

get(id: string): Promise<WorkflowInstance | null>;

update(
id: string,
expectedVersion: number,
patch: WorkflowPatch
): Promise<void>;

appendEvent(event: WorkflowEvent): Promise<void>;

createTimer(timer: WorkflowTimer): Promise<void>;

getPendingTimers(): Promise<WorkflowTimer[]>;
}

A implementação concreta fica desacoplada da arquitetura de domínio.


76. First Vertical Slice

Implementar inicialmente:

Workflow

workPermit.lifecycle

Estados

DRAFT
SUBMITTED
WAITING_APPROVAL
APPROVED
RELEASED
COMPLETED

Fluxo

Create

Add components

Submit

Approval

Release

77. Exemplo Completo

Usuário:

Prepare a permissão 123 para aprovação.

Agente:

Resolve WP-123

Planner:

validate
add missing components
validate risks
submit

Policy:

ALLOW

Workflow:

RUNNING

Depois:

WAITING_APPROVAL

Agente:

A permissão está pronta e aguardando aprovação do supervisor.

Horas depois:

APPROVAL_APPROVED

Workflow:

APPROVED

Depois:

RELEASED

O agente poderá então informar:

A permissão 123 foi aprovada e liberada.


78. Acceptance Criteria

Core

  • workflow definitions versionadas;
  • workflow instances persistentes;
  • state machine;
  • transitions;
  • timers;
  • events;
  • pause/resume;
  • cancellation.

Reliability

  • idempotência;
  • retries;
  • backoff;
  • concurrency control;
  • recovery;
  • stale context detection;
  • durable state.

Security

  • tenant isolation;
  • authorization por etapa;
  • policy revalidation;
  • approval integration;
  • audit completo;
  • release pinning.

Business

  • business state separado de workflow state;
  • verification;
  • compensation quando possível;
  • manual intervention;
  • long-running execution.

Agent

  • workflow consultável em linguagem natural;
  • próxima etapa explicável;
  • motivo de bloqueio explicável;
  • retomada contextual;
  • commands registrados;
  • nenhuma execução arbitrária.

Evidência parcial de implementação — 2026-09-04

O runtime versiona definição/instância e separa workflow de estado de negócio. Checkpoints duráveis cobrem capability, espera humana e timer; callbacks stale e release divergente são rejeitados. Falha transitória só repete etapa idempotente dentro do budget, resultado externo UNKNOWN permanece explícito e falha permanente registra compensation requirement, sem executar comando arbitrário.

Em 2026-09-04, WorkflowRuntime.cancel() passou a encerrar checkpoint não terminal de forma idempotente. Cancelamento somente altera estado/revisão; não executa capability de compensação automaticamente, preservando a distinção entre cancelamento humano e compensação de falha.

Em 2026-09-05, os contratos de Workflow Runtime e dispatch passaram com 28 testes em 6 arquivos. O canário remoto comprovou tenant isolado, plano e instância persistente, snapshot COMPLETED na versão 5, capability workPermit.create@1 e execution stream COMPLETED, sem conceder autoridade além do plano e com cleanup remainingRows:0. Timer real de longa duração, recuperação comprovada de falha de infraestrutura e interface natural explicável permanecem abertos para prova dedicada.

Em 2026-09-06, a regressão atual de runtime, aprovação, dispatch, adaptadores e workflow operacional passou com 59 testes, e o typecheck do Agent passou novamente. O health público do Worker confirmou runtime e bindings. O estado permanece PARTIAL: timer real de longa duração, recovery de infraestrutura e interface natural explicável ainda requerem prova dedicada.

Em novo canário remoto de 2026-09-06, o dispatch durável recebeu recibo de policy emitido pelo servidor, recusou referência de decisão forjada, atingiu somente o caminho de capability limitado e concluiu o execution stream. O fluxo permaneceu sem autoridade implícita (authorizesExecution: false), removeu dados mutáveis de PostgreSQL/D1 (remainingRows: 0) e reteve apenas três recibos imutáveis de auditoria.


79. Resultado

Com o PRD-019, a arquitetura evolui para:

AGENTIC WORK

Conversation

Intent

Planner

Workflow

┌──────────────┼──────────────┐
▼ ▼ ▼
Capability Approval Timer
│ │ │
└──────────────┼──────────────┘

Business APIs


Business State


Verification


Audit

O resultado é um agente que não apenas responde ou executa comandos, mas consegue acompanhar um processo empresarial completo durante horas ou dias.


PRD-020 — Agentic Event Fabric & Reactive Architecture

O próximo passo natural é resolver o mecanismo de eventos que alimentará esses workflows.

Hoje já temos eventos conceituais em praticamente todos os PRDs:

UI events
Conversation events
Capability events
Policy events
Approval events
Workflow events
Business events
Audit events

O PRD-020 deverá criar uma camada transversal para que esses acontecimentos possam alimentar o Agentic Work de forma consistente.

O objetivo será permitir cenários como:

“Quando uma permissão for aprovada, continue automaticamente o processo.”

ou:

“Quando um treinamento obrigatório vencer, identifique as permissões afetadas e crie uma tarefa para revisão.”

ou ainda:

“Quando houver uma alteração de risco, verifique se alguma permissão ativa precisa ser reavaliada.”

Nesse estágio, o Agentic Work começa a deixar de ser apenas request-driven:

User → Agent → Action

e passa a ser também event-driven:

Business Event

Event Fabric

Agentic Event Resolver

Policy

Workflow

Agent

Isso permitirá construir uma arquitetura verdadeiramente reativa, na qual o agente poderá atuar não somente quando alguém conversar com ele, mas também quando acontecimentos relevantes do próprio sistema ocorrerem.