Produto Territorial
Ordo
Um plano de controle de orquestração orientado a contratos para jobs de processamento longos, feito para ficar acima do n8n.
Arquitetura
- ClientePOST /jobs com receita + artefatos
- Ordovalida · armazena · rastreia estado
- Workers n8nreivindica etapa · roda ferramenta · registra artefato
- Object storageartefatos em MinIO / S3
- Finalizadorentrega saídas · hook on_exit
Motores de workflow como o n8n executam etapas bem, mas não oferecem um modelo durável e validado de um job com várias etapas. O Ordo é essa camada que faltava: valida receitas, impõe contratos de entrada e saída entre etapas e registra cada job, etapa e artefato como estado consultável. Código aberto, e o backend de toda plataforma pesada que construo.
Em resumo
- Receitas são DAGs determinísticos baseados em artefatos, validados contra contratos de executores antes de qualquer execução
- Jobs, etapas e artefatos são estado de primeira classe no PostgreSQL, com progresso, logs por etapa e hooks de ciclo de vida
- Deliberadamente não executa etapas, não gerencia workers nem tem UI: execução pertence ao motor abaixo dele
- Em produção no Skyport e na MapPrism; lançado com versionamento semântico, migrações e suíte Vitest
Por que existe
Construí o Ordo enquanto construía o Skyport. O n8n era excelente para executar etapas e integrar sistemas, mas o pipeline vivia precisando de garantias que o n8n não dava: que as entradas de um job fossem válidas antes da primeira etapa rodar, que as saídas de uma etapa batessem com o que a próxima esperava, que um job falho deixasse um rastro claro do que foi e do que não foi produzido. Eu queria algo que ficasse acima da execução, continuasse simples e ainda assim fosse rigoroso.
O modelo
Uma receita é uma lista de etapas. Cada etapa nomeia um tipo de executor, mapeia os slots de entrada do executor para referências de artefato com namespace (job:<nome> para entradas do job, step:<id>.<slot> para saídas de etapa) e mapeia seus slots de saída para nomes de artefato. Executores são linhas em uma tabela step_executor declarando o que aceitam e produzem; a validação da receita confere que todo tipo de etapa existe, todo slot está ligado exatamente uma vez, todo artefato referenciado é produzível e nenhum nome de artefato se repete. Parâmetros são declarados nas receitas só por chave e fornecidos por job, então valores de parâmetro nunca afetam a identidade de uma receita.
Jobs são criados a partir de uma receita mais artefatos de entrada concretos, parâmetros e declarações opcionais de saída. O Ordo insere a fila de etapas, expõe o progresso como fração entre as etapas, mostra a última linha de log de cada etapa e roda uma etapa on_exit depois que o grafo principal termina, independentemente do resultado. Um max_concurrency por etapa limita quantas instâncias de um executor rodam ao mesmo tempo entre todos os jobs.
Fronteiras e próximos passos
O Ordo não executa etapas, não gerencia infraestrutura, não oferece editor nem move arquivos. Workers n8n reivindicam etapas direto do banco, executam a ferramenta, registram artefatos e reportam status; um workflow finalizador separado entrega as saídas declaradas ao seu caminho final de storage. Esse contrato direto com o banco é pragmático, não fundamental, e o roadmap é desacoplá-lo atrás de filas ou APIs para que vários backends de execução rodem lado a lado.
A API é um pequeno serviço TypeScript/Express sobre PostgreSQL com migrações aplicadas na inicialização, lançado via semantic-release e distribuído como imagem Docker.
Mais projetos
Todos os projetos
Sentinel
Uma plataforma programável de monitoramento sintético: testes em JavaScript, alertas por mudança de estado, páginas de status públicas, em um VPS de 1 GB.
- TypeScript
- Fastify
- Next.js
- PostgreSQL
- +6

Territorial Invoices
O sistema que roda o faturamento da Territorial: apontamento de horas em calendário, contratos com matemática de cobrança determinística e faturas geradas em minutos.
- Next.js
- Fastify
- Prisma
- PostgreSQL
- +4

Territorial Assistant
Um daemon baseado em Discord que transforma minha própria atividade de trabalho em timesheets aprovados e em uma base curada de histórias de engenharia.
- TypeScript
- discord.js
- Drizzle
- PostgreSQL
- +3