Todos posts
Notas longas sobre software, sistemas distribuídos e a arte de construir. Publicando uma por semana.
Execução Durável Não É Sobre Agentes — É Sobre Workflows de Backend com Replay
Cheguei aos runtimes de execução durável pela hype dos agentes, mas a restrição que surpreende todo mundo é o determinismo no replay. Estas são minhas anotações trabalhando uma reconciliação de pagamentos de seis passos como um workflow do Restate em TypeScript — a linha que quebrou o replay, o modelo mental que consertou, e os trade-offs que vêm com o padrão.
Prompts de IA: Quão Bons e Quão Ruins Eles São — Abrindo uma Nova Linha de Pesquisa
Um olhar honesto sobre onde os prompts funcionam, onde eles falham silenciosamente e a suposição que paramos de questionar — a de que a IA precisa cometer erros. O tiro de abertura de uma linha de pesquisa sobre sair do "melhor esforço" para a precisão especificável e mensurável.
Code Graphs para Coding Agents: O Formato de Entrega Importa Mais que o Algoritmo
Passei um fim de semana apontando um coding agent para um monorepo Go de 480 mil linhas e vendo ele entrar em loop de grep por 38 chamadas de ferramenta em uma pergunta. Code graphs derivados de AST resolvem isso, mas o formato de entrega — MCP local via stdio, serviço remoto ou skill — muda a economia mais do que o algoritmo do grafo. Aqui está onde eu colocaria um em 2026, com um indexador Go mínimo que dá para soltar ao lado do agente.
AckWait É um Contrato: Como um Default de 30 Segundos Derrubou Meu Consumer JetStream
Perdi uma noite com um pull consumer NATS JetStream que dobrou seu trabalho em produção. A causa foram três linhas de ConsumerConfig que eu nunca escrevi. Estas são minhas anotações sobre o que o AckWait realmente conta, por que MaxDeliver = -1 é a armadilha silenciosa e o contrato Go de 70 linhas que agora envio em todo consumer JetStream.
Idempotência É um Protocolo, Não uma Chave
Na primeira vez em que entreguei idempotência como um header UUID e uma consulta no Redis, uma cobrança duplicada escapou uma semana depois. Estas são minhas notas sobre tratar idempotência como um protocolo de quatro partes — deduplicação, determinismo, segurança concorrente, propagação downstream — com uma implementação mínima em Kotlin mais Postgres que se mantém firme sob retry.
O que `dbos ontime` realmente está perguntando: construindo um cron distribuído com leases do etcd em Go
Uma busca 0-click por `dbos ontime` apareceu no meu Search Console na semana passada. Quem digitou isso não está perguntando sobre DBOS — está perguntando como rodar um job a cada minuto, exatamente uma vez, em uma frota de máquinas. Pelas minhas próprias anotações, um lease do etcd, o pacote `concurrency.Election` e um fencing token cobrem esse caso em menos de 100 linhas de Go, sem precisar trazer um workflow engine.
Log de Eventos como Fonte da Verdade Transforma Evolução de Schema em um Problema Eterno
Quando o log é a fonte da verdade, toda mudança de schema é permanente. Um passo a passo em Kotlin/Avro do rename que passou na verificação do Schema Registry e corrompeu silenciosamente todos os eventos antigos, mais os invariantes de Protobuf e Avro que agora mantenho fixados acima da minha mesa.
Transformando Engenharia de Contexto de LLM em um Loop de Avaliação com DSPy
Notas de dois fins de semana cavando o DSPy. Parei de tratar prompts como a fonte da verdade e comecei a tratá-los como saída compilada de uma assinatura tipada, uma métrica e um otimizador. Aqui está o menor programa end-to-end que mantive, como o MIPROv2 de fato busca, e onde a abordagem cai por terra na prática.
Expondo Agentes Spring AI via o Protocolo A2A: O Que a Interoperabilidade Realmente Te Dá
A integração A2A do lado servidor no Spring AI já está estável o suficiente para colocar em produção, mas o protocolo é mais útil em fronteiras organizacionais, não como substituto de RPC interno. Este post percorre o que de fato muda em uma codebase Spring AI, onde ainda existem arestas afiadas, e um framework prático de decisão entre A2A, MCP e REST puro.
DBOS vs Temporal: Quando o Postgres É Suficiente para Execução Durável de Workflows
O DBOS reutiliza o Postgres como camada de durabilidade para workflows, enquanto o Temporal roda um cluster dedicado. A escolha certa depende do tamanho do time, da forma do workload e de onde você quer que seu orçamento operacional vá. Este é um critério prático para escolher entre eles.