Workflow Orchestration
Workflow Orchestration
Section titled “Workflow Orchestration”Objetivo
Section titled “Objetivo”O Workflow Orchestration conecta o Standard SCF-Based Assessment Lifecycle em uma execução rastreável, retomável e compatível com aprovações humanas. A primeira versão cria contratos compartilhados, serviço de orquestração, endpoints de API e testes com mocks para validar o comportamento principal.
Papel do Cloudflare Workflows
Section titled “Papel do Cloudflare Workflows”Cloudflare Workflows é o runtime-alvo para executar o lifecycle como processo durável. O MVP mantém a lógica de orquestração em workers/workflows/src/assessment-lifecycle.workflow.ts e deixa o Worker workers/workflows/src/assessment-lifecycle.ts como entrypoint reservado para implantação Cloudflare.
O desenho separa:
- Workflow: coordena passos, sinais, waits, retry/idempotência e status operacional.
- Assessment Engine: valida transições, approval gates e eventos de lifecycle.
- Services: executam domínio especializado, como ingestão, KB, SoA, Gap, POA&M e Reporting.
- Agents: são chamados apenas por services controlados; o workflow não chama LLM diretamente.
Lifecycle Ponta a Ponta
Section titled “Lifecycle Ponta a Ponta”O fluxo principal cobre:
draftparadocuments_uploaded.- Espera por documentos/processamento.
- Ingestão, KB e pré-análise SCF.
- Seleção de framework.
- Criação de escopo e SoA draft.
- Wait obrigatório de aprovação SoA.
- Ingestão da SoA, evidence analysis e Gap Analysis draft.
- Wait obrigatório de aprovação Gap Analysis.
- Maturity Assessment draft e wait obrigatório.
- POA&M draft e wait obrigatório.
- Report generation/export e wait obrigatório.
- Fechamento do assessment via Assessment Engine.
Os steps compartilhados estão em AssessmentLifecycleStepSchema:
validate_assessmentwait_for_documentsingest_documentsindex_kbrun_scf_pre_analysiswait_for_framework_selectioncreate_scopecreate_soa_draftwait_for_soa_approvalingest_soarun_evidence_analysiscreate_gap_analysiswait_for_gap_approvalcreate_maturity_assessmentwait_for_maturity_approvalcreate_poamwait_for_poam_approvalcreate_reportwait_for_report_approvalclose_assessment
Approval Waits
Section titled “Approval Waits”O workflow nunca aprova artefatos automaticamente. Sinais como soa_approved, gap_analysis_approved, maturity_approved, poam_approved e report_approved exigem approval_event_id validado pelo adapter/API antes de continuar.
O Assessment Engine continua sendo o guardião dos gates:
- SoA antes de Evidence Analysis e Gap Analysis.
- Gap Analysis antes de Maturity Assessment.
- Maturity antes de POA&M.
- POA&M antes do relatório final.
- Report antes de
closed.
Signals
Section titled “Signals”Sinais aceitos:
framework_selectedscope_approvedsoa_approvedgap_analysis_approvedmaturity_approvedpoam_approvedreport_approvedassessment_cancelledassessment_blockedassessment_resumed- sinais técnicos do MVP:
documents_uploaded,documents_ingested,kb_indexed,scf_pre_analysis_completed
Cada signal preserva tenant_id, organization_id, assessment_id, trace_id, actor_id e idempotency_key.
Retry e Idempotência
Section titled “Retry e Idempotência”O MVP registra idempotency_key por workflow, signal e step lógico. Repetir o mesmo signal com a mesma chave retorna o estado atual sem duplicar eventos ou steps.
Retries seguros são permitidos para steps idempotentes, como ingestão, indexação, renderização e geração draft. O workflow não cria nova versão de SoA, Gap, Maturity, POA&M ou Report sem chave/ação explícita de nova versão.
Failed, Blocked e Cancelled
Section titled “Failed, Blocked e Cancelled”Status suportados:
pendingrunningwaiting_for_inputwaiting_for_approvalblockedfailedcancelledcompleted
blocked representa dependência de informação, aprovação, configuração ou intervenção manual. failed representa erro técnico não recuperado. cancelled representa cancelamento explícito por ator autorizado.
Integração com Queues
Section titled “Integração com Queues”O workflow é o coordenador. Etapas pesadas devem seguir para Cloudflare Queues por adapters:
- ingestão documental;
- geração de embeddings/indexação KB;
- render/export de relatórios;
- reprocessamento controlado.
O MVP usa adapters em memória para testes e contratos. Integração real com producers/consumers Cloudflare fica como próximo passo.
Integração com API
Section titled “Integração com API”Endpoints implementados:
POST /api/v1/assessments/:assessmentId/workflows/lifecycle/startGET /api/v1/assessments/:assessmentId/workflows/lifecycleGET /api/v1/workflows/:workflowRunIdPOST /api/v1/workflows/:workflowRunId/cancelPOST /api/v1/workflows/:workflowRunId/resumePOST /api/v1/workflows/:workflowRunId/signals
Handlers resolvem contexto, carregam assessment e approval_event, chamam o orquestrador e persistem o estado sintético do assessment no repositório local.
Audit Logs
Section titled “Audit Logs”Eventos auditáveis emitidos pelo serviço:
lifecycle_workflow_startedlifecycle_workflow_step_startedlifecycle_workflow_step_completedlifecycle_workflow_waiting_for_approvallifecycle_workflow_signal_receivedlifecycle_workflow_blockedlifecycle_workflow_cancelledlifecycle_workflow_resumedlifecycle_workflow_completed
Cada evento inclui tenant, organization, assessment, workflow run, step quando aplicável, actor/system actor, trace e metadata segura.
Limitações do MVP
Section titled “Limitações do MVP”- Repositório de workflow é in-memory no gateway local.
- O Worker Cloudflare ainda não persiste execução real em Workflows/DO/PostgreSQL.
- Adapters de services especializados são mocks/controladores lógicos; não executam jobs reais de Queue.
- Não há timeout real de wait steps; o status
blockedé usado para intervenção manual. - Não há reprocessamento granular por endpoint dedicado ainda.
packages/maturityainda não existe como pacote especializado; o workflow modela o gate e a transição via Assessment Engine.
Decisões em Aberto
Section titled “Decisões em Aberto”- Persistência final de workflow runs: PostgreSQL, Durable Objects ou combinação.
- Estratégia de timeout/escalation para approvals.
- Formato de reprocessamento controlado por step.
- Mapeamento exato entre Cloudflare Workflow instance ID e
workflow_run_id. - Contrato de Queue callback para jobs assíncronos.