Ponto de partida
O problema
Um ato de negócio do Nexio — aprovar uma requisição, aplicar a troca de conta bancária de um fornecedor, revogar um papel — produz duas coisas de natureza diferente. A primeira é o efeito de que o ato depende: o empenho no orçamento, a versão do token. A segunda é tudo o que acontece por causa dele: o aviso ao requisitante, o pacote ao ERP, a métrica. As duas não podem ter a mesma garantia, e hoje o framework não separa uma da outra.
O efeito que precisa ser atômico com o ato acontece na mesma transação — pelo próprio caso de uso, por chamada síncrona declarada entre contextos (.Contracts) ou pelo contrato de desfecho do motor; o evento de domínio é publicado depois do commit e serve para notificar, medir e integrar — nunca para produzir efeito de que o ato dependa.
Publicado dentro da transação, o aviso sai antes de o banco confirmar: o aprovador recebe “aprovado” de uma decisão que reverteu. E o consumidor lento segura a trava no ponto mais disputado do sistema, a raiz da aprovação.
Com API e Worker em processos separados e mais de uma réplica, o que está só em memória some no reinício e sai uma vez por réplica. Um pedido aprovado que nunca chega ao ERP não dá erro nenhum — quem descobre é o fornecedor.
Fora de uma requisição HTTP não há tenant resolvido, e sem tenant o filtro global hoje libera todas as linhas (E-03). Todo consumidor e todo job rodam exatamente nessa condição.
Entrega “pelo menos uma vez” sem idempotência no destino cria segundo pedido e segundo pagamento no ERP. E invalidar token como reação pós-commit deixa quem perdeu o papel com acesso sempre que a reação falhar.
O prazo não é “quando houver volume”: o Worker da Arquitetura sobe no primeiro job, e a Requisition é o primeiro agregado que grava empenho na aprovação e publica evento. O que cada requisito bloqueia está em O que cada um bloqueia.
Fronteira
O que a spec diz e o que o estudo decide
A spec do Nexio diz o que precisa ser verdade e como provar. A escolha de mecanismo e transporte é do estudo da plataforma; nenhuma tecnologia citada nesta página é decisão.
| Assunto | Decide a spec do Nexio | Decide o estudo da plataforma |
|---|---|---|
| Efeito atômico | Quais efeitos são atômicos com o ato, e por qual dos três caminhos — nas páginas donas (ex.: RN-AP-38 do Fluxo de Aprovação) | — |
| Evento | Quais eventos existem, o nome (<entidade>.<verbo-no-passado>) e quem consome | Como o evento é coletado, registrado com o commit e publicado depois dele |
| Entrega | Nada se perde; duplicata é prevista; consumidor idempotente (A1.2) | Armazenamento, transporte, política de nova tentativa, destino da mensagem morta |
| Ordem | Onde a ordem muda o resultado e qual é a chave (A1.4) | Como a ordem se sustenta com várias instâncias |
| Contexto de execução | Tenant restaurado, leitura sem tenant falha fechada, usuário só como dado (A1.3) | Onde o tenant viaja e como é restaurado |
| Integração externa | Estado “aguardando”, chave natural e ExternalRef (A1.5, A1.6) | O adaptador genérico e a conciliação de desfecho incerto |
| Operação | O teto de custo operacional (A1.9) | As peças, a observabilidade e a consulta operacional |
Fora do requisito, de propósito: entrega exatamente uma vez; ordem global; publicação em leque antes de existir o segundo consumidor do mesmo evento; reconstrução de estado a partir do histórico; job executando comando em nome de usuário — a execução delegada é requisito da v2, na demanda de plataforma.
Requisitos
Os nove requisitos
Cada requisito tem ao menos um critério de aceite na seção seguinte. Requisito sem critério testável não entra nesta página.
Efeito atômico na transação; evento só depois do commit
A frase canônica acima vale sem exceção de mecanismo. Todo evento de domínio é publicado depois do commit da unidade de trabalho que o produziu. Rollback não publica nada. Falha de consumidor não desfaz o ato nem volta ao chamador como erro. Nenhum consumidor produz efeito de que o ato dependa — a única exceção declarada é a A1.7.
Por quê: publicar antes do commit avisa decisão que reverteu e alonga a trava da aprovação · Aceite: CA-01 a CA-04 · Evidência: E-01
Publicação garantida: nada se perde, duplicata é prevista
O evento é registrado atomicamente com o commit do ato — os dois existem, ou nenhum. A entrega é pelo menos uma vez, e todo consumidor é idempotente por um identificador estável da mensagem. Nova tentativa transitória não perde evento: se a gravação é repetida pela estratégia de execução, os eventos coletados na primeira tentativa continuam lá. Queda do processo entre o commit e a entrega não perde a mensagem. Vale igual para aviso imediato e aviso agendado: reinício não apaga, réplica não duplica.
Por quê: com dois processos e réplicas, o que está só em memória some no reinício e sai n vezes · Aceite: CA-05 a CA-09 · Evidência: E-02, E-05, E-06
Tenant e identidade restaurados; sem tenant, falha fechada
Todo consumidor e todo job executam com o tenant capturado no registro da mensagem ou no enfileiramento, e restaurado na execução. Leitura de dado de tenant sem tenant em vigor não devolve nada ou falha — nunca devolve os dados de todos os tenants —, e esse é o comportamento padrão de todo host, não uma opção a ligar. Varredura que precisa enxergar todos os tenants desliga o filtro explicitamente e processa cada item com o tenant dele. O usuário que causou o fato viaja como dado, para a trilha; nunca como identidade autenticada. Nenhum job executa comando em nome de usuário na v1.
Por quê: o filtro de tenant é a última defesa entre clientes, e hoje libera tudo quando falta contexto · Aceite: CA-10 a CA-13 · Evidência: E-03, E-04, E-07, E-14
Ordem só onde muda o resultado
Ordem é garantida somente dentro de uma chave declarada, e só para os tipos de mensagem que a declaram. Na v1 o único caso é o pacote de integração com o ERP, com chave no documento de origem. Dentro da chave, mensagem que falhou e aguarda nova tentativa, ou que esgotou as tentativas, não é ultrapassada por outra da mesma chave: a chave para, com alerta, até a da frente sair ou ser tratada por pessoa. Entre chaves não há ordem, e uma chave parada não segura as outras. Caso novo de ordem entra com a chave declarada na página dona.
Por quê: um cancelamento que chega ao ERP antes da criação deixa o pedido vivo lá; ordem global serializaria o sistema para resolver um caso · Aceite: CA-14 a CA-16 · Evidência: E-08
Mensagem que não pode sair fica visível como “aguardando”
Condição de negócio que impede a saída não descarta a mensagem nem deixa de produzi-la. O caso de uso escolhe o dado utilizável — na carência de conta bancária, a conta anterior, que continua vigente e pagável durante a janela (ver Fornecedor) — e só quando não há dado utilizável a mensagem fica aguardando, com motivo e condição de liberação, e sai sozinha quando a condição se resolve. Mensagem que esgotou as tentativas fica visível e parada, com alerta; reprocessar ou descartar é ato de pessoa, com permissão própria, motivo obrigatório no descarte e registro de quem fez. Expurgo só alcança mensagem entregue. O mesmo vale para a repetição, depois do commit, de ato de pessoa — a guarda legal e a eliminação do Anexo repetidas no arquivo, com o autor do ato viajando como dado e gravado no destino marcado como declarado, com o executor de serviço, nunca como usuário autenticado nem como o job: recusa transitória do destino, como a trilha durável indisponível, deixa a repetição aguardando com o motivo, nunca descartada e nunca dada por concluída sem o efeito. Recusa definitiva do destino não pode chegar depois de o ato irreversível ter sido gravado e publicado: o consumidor pergunta ao destino, antes de gravar, a mesma pré-condição que o destino conferirá — consulta sem efeito, com a mesma resposta — e recusa o ato na hora. Mas conferir antes não basta: consulta que não reserva precisa de trava comum com o efeito que ela prevê — a conferência e o efeito disputam o mesmo registro —, senão o consumidor publica sobre um retrato já vencido; o que muda entre a consulta e a repetição fica visível como bloqueado, com código estável que o consumidor grava e mostra, nunca como concluído.
Por quê: pedido aprovado que nunca chega ao ERP, sem erro e sem estado, é descoberto pelo fornecedor que não recebeu · Aceite: CA-17 a CA-19 · Evidência: E-09
Idempotência no destino externo
Todo efeito em sistema externo carrega a chave natural do documento do Nexio e grava o ExternalRef devolvido. Reentrega não cria segundo pedido nem segundo pagamento: o adaptador usa a chave de idempotência do destino quando ele oferece, e consulta pela chave natural antes de criar quando não oferece. Efeito externo de desfecho incerto — o processo caiu durante o envio — não é reenviado às cegas: vai para conciliação pela chave natural.
Por quê: “pelo menos uma vez” até o ERP, sem isso, é risco de pedido e pagamento em dobro · Aceite: CA-20, CA-21 · Evidência: E-10
Invalidação de token na transação da revogação
Revogar papel ou permissão de um usuário incrementa a versão do token (TokenVersion) na mesma transação da revogação — é a exceção declarada à regra de que reação vem depois do commit. Propagar a revogação para cache ou lista de bloqueio pode ser posterior; a fonte da verdade, não. Depois do commit, o token antigo é recusado mesmo que nenhum consumidor tenha rodado.
Por quê: controle de acesso não se aproxima — se a invalidação for reação e a reação falhar, quem perdeu o acesso continua com ele · Aceite: CA-22 a CA-24 · Evidência: E-11
A escada de escala continua de pé
A solução não pode eliminar o degrau 4 da escada de escala — instância por contexto: um contexto do mesmo tenant em instância de banco própria. Todo banco onde uma mensagem pode ser registrada tem entrega; nenhum fica sem quem o drene. Se a solução exigir uma conexão só por tenant, o estudo registra essa decisão na Arquitetura antes da adoção, revogando o degrau 4 de forma explícita — nunca por efeito colateral.
Por quê: o degrau 4 é a saída de escala mais barata que a fronteira do ADR 1 comprou, e a mudança atinge todos os produtos do Gryd.IO · Aceite: CA-25 · Evidência: E-12
Proporcional a um time de uma a três pessoas
Restrição do estudo. Nenhuma peça nova para o time operar além dos serviços gerenciados do ADR 7 — ou, havendo, o custo em horas por mês declarado. Uma consulta só responde “o que está aguardando, em falha e parado”, por tenant e por tipo, com a idade da mais antiga como sinal de saúde. Os critérios de aceite desta página rodam automatizados contra o banco real na suíte da plataforma.
Por quê: duas respostas para “o que está preso” é um operador cruzando dois sistemas por cliente, com centenas de clientes · Aceite: CA-26, CA-27 · Evidência: E-13
Como provar
Critérios de aceite
Cada linha é um teste automatizado. Verde sem prova de que a guarda rodou não conta: todo teste de tenant, permissão e ordem afirma também que o mecanismo executou — contador ou asserção dentro do consumidor. O spike da plataforma registrou uma suíte verde com a guarda de permissão executando zero vezes (E-07).
| ID | Cenário | Resultado esperado | Req. |
|---|---|---|---|
| CA-01 | Ato que coleta evento e sofre rollback | Nenhum consumidor recebe; nenhuma mensagem fica registrada | A1.1 |
| CA-02 | Consumidor lê o agregado ao receber o evento | Lê a versão confirmada; nunca estado anterior ao commit | A1.1 |
| CA-03 | Consumidor lança exceção | O ato continua gravado; o chamador recebe sucesso; a falha fica registrada e medida | A1.1 |
| CA-04 | Teste de arquitetura sobre plataforma e produto | Nenhum caminho publica evento antes do commit; um caminho novo assim quebra o build | A1.1 |
| CA-05 | Processo morto entre o commit e a entrega | Depois do reinício, a mensagem é entregue | A1.2 |
| CA-06 | Falha transitória na gravação, repetida pela estratégia de execução | Todo evento coletado é entregue; nenhum some na segunda tentativa | A1.2 |
| CA-07 | A mesma mensagem entregue duas vezes ao mesmo consumidor | Efeito uma vez só | A1.2 |
| CA-08 | Aviso agendado com duas réplicas do Worker | Um envio | A1.2 |
| CA-09 | Reinício com avisos imediatos e agendados pendentes | Todos saem depois do reinício; nenhum agendado sai antes do horário | A1.2 |
| CA-10 | Consumidor ou job sem tenant lê entidade de tenant, com dois tenants populados | Zero linhas ou erro; nunca linha de outro tenant | A1.3 |
| CA-11 | Mensagens dos tenants A e B processadas em sequência no mesmo processo | Cada execução enxerga só o próprio tenant; nada do contexto da anterior sobra | A1.3 |
| CA-12 | Configuração padrão de cada host (API, Worker, Portal), sem ajuste, lida numa requisição, dentro de um job e dentro de um consumidor | Leitura sem tenant falha fechada nos três fluxos — o resultado não depende do fluxo em que o host arrancou | A1.3 |
| CA-13 | Consumidor tenta executar ato que exige permissão usando o usuário causador da mensagem | Recusado: o usuário é dado da trilha, não identidade | A1.3 |
| CA-14 | M1 e M2 da mesma chave; M1 falha e aguarda nova tentativa; quatro instâncias | M2 não é entregue antes de M1 | A1.4 |
| CA-15 | M1 esgota as tentativas | A chave para com alerta; M2 continua sem entrega | A1.4 |
| CA-16 | Chave K1 parada; chegam mensagens da chave K2 | K2 é entregue normalmente | A1.4 |
| CA-17 | Pedido aprovado de fornecedor com conta nova em carência e conta anterior vigente | O pacote sai com a conta anterior | A1.5 |
| CA-18 | Fornecedor sem nenhuma conta utilizável | Mensagem aguardando, visível com motivo; sai sem ação manual quando a conta fica utilizável; nunca descartada | A1.5 |
| CA-19 | Reprocessar ou descartar mensagem parada | Só por pessoa com a permissão; descarte sem motivo é recusado; o ato fica registrado com o autor | A1.5 |
| CA-20 | O mesmo pacote entregue duas vezes a um simulador de ERP | Um documento no ERP; ExternalRef gravado uma vez | A1.6 |
| CA-21 | Processo cai depois de o ERP aceitar e antes de registrar a entrega | A retomada não cria segundo documento: concilia pela chave natural | A1.6 |
| CA-22 | Revogar papel e usar o token antigo logo após o commit | Recusado com 401 | A1.7 |
| CA-23 | O mesmo cenário, com o consumidor pós-commit forçado a falhar | O token antigo continua recusado | A1.7 |
| CA-24 | Revogação que sofre rollback | TokenVersion inalterada; o token continua válido | A1.7 |
| CA-25 | Mesmo tenant com dois contextos em duas instâncias de banco; uma mensagem registrada em cada | As duas são entregues | A1.8 |
| CA-26 | Consulta operacional única | Lista aguardando, em falha e parado, por tenant e tipo, com a idade da mais antiga | A1.9 |
| CA-27 | Relatório do estudo | Declara as peças novas a operar e as horas por mês, e anexa a execução de CA-01 a CA-26 contra banco real | A1.9 |
Evidência
O que o código mostra
Conferido no Gryd.IO, branch feature/grydfiles-scanner-obrigatorio, commit e4eb5a4f (11/09/2026). Comparado com 25775a68 e d6c5e9fa, que ficaram fora do histórico desse commit, mudaram em src/ só FileScannerRequirement.cs, GrydFilesBuilder.cs e GrydFilesServiceCollectionExtensions.cs, do GrydFiles; fora do GrydFiles, nada desde 2bc811df — e colhido dos dois estudos anteriores da plataforma — o de eventos e outbox e o spike de biblioteca de mensageria —, cujo diagnóstico passa a viver aqui. As linhas descrevem o estado do código, não uma escolha.
| ID | Onde | O que mostra | Req. |
|---|---|---|---|
| E-01 | GrydAuthDbContext.cs:200, 232, 247 | O único contexto do framework que despacha evento abre a transação, publica entre gravar e confirmar, e regrava o que os consumidores mudaram, até dez rodadas. Evento dentro da transação, e efeito por reação. | A1.1 |
| E-02 | GrydAuthDbContext.cs:433 | Se a publicação falha, os eventos voltam ao agregado para a nova tentativa ser segura. A coleta proposta no estudo de eventos limpava o agregado e descartava a fila em falha — perderia evento no retry. | A1.2 |
| E-03 | TenantQueryFilterExtensions.cs:136–142 · MultiTenancyOptions.cs:91 | Sem tenant e sem escopo, o predicado vale !RequireTenantOnRead, e a opção nasce false: todas as linhas de todos os tenants. No fluxo HTTP normal o ramo não é alcançado; em consumidor e job, é. É o achado de prioridade zero do estudo de eventos. | A1.3 |
| E-04 | JobExecutionAdapters.cs:40, 43–51 · JobExecutionContext.cs:18 | A execução de job resolve o escritor de contexto de tenant e não o usa; o contexto de execução tem TenantId, mas o adaptador o monta sem preenchê-lo; não há implementação de IJobFilter. | A1.3 |
| E-05 | GrydNotifications.Infrastructure/ServiceCollectionExtensions.cs:132–148 · GrydNotificationsOptions.cs:30 | Com DurableDelivery — desligado por padrão —, fila e agendamento de aviso gravam a intenção de entrega com a notificação, e o laço de entrega só roda onde RunBackgroundServices está ligado. Sem a opção, continuam em memória. | A1.2 |
| E-06 | GrydNotifications.Scheduling/ServiceCollectionExtensions.cs:31–32 · GrydJobs.Infrastructure/ServiceCollectionExtensions.cs:58 | Já existe também o agendador de aviso sobre GrydJobs, com armazenamento persistente. | A1.2 |
| E-07 | DurableNotificationProcessor.cs:50–56 · spike, “O que aconteceu com a tenancy” | Um consumidor já restaura o tenant da mensagem e liga a leitura exigindo tenant — o padrão existe, num lugar só. O spike mediu que escrita de contexto ambiente feita em passo assíncrono se perde em silêncio, e registrou uma suíte verde com a guarda de permissão executando zero vezes. | A1.3 |
| E-08 | estudo de eventos, “Entrega, ordem e idempotência” · PostgresOutbox.cs:29 | A reclamação proposta no estudo só pulava chave com mensagem morta: mensagem em falha, esperando nova tentativa, era ultrapassada. A primitiva do Core no commit conferido bloqueia a chave enquanto houver mensagem anterior não concluída. | A1.4 |
| E-09 | estudo de eventos, “Como um produto usa”, item 6 | A carência bancária foi escrita como “conta em carência não gera linha, e sem linha não há pacote”: pedido aprovado que nunca chega ao ERP, sem estado. O Fornecedor diz que a conta anterior continua vigente e pagável durante a janela. | A1.5 |
| E-10 | estudo de eventos, “Entrega, ordem e idempotência” · PostgresOutbox.cs:42, 66 | O estudo deixava a idempotência ao consumidor (“o defeito será dele”). A primitiva do Core já marca efeito externo de desfecho incerto como ReconciliationRequired em vez de reenviar. | A1.6 |
| E-11 | AuthorizationAffectingEventHandler.cs:43 · GrydAuthTokenProcessor.cs:241 | A versão do token é incrementada por um consumidor do evento de mudança de autorização e conferida a cada requisição. Hoje é atômica só porque o evento é publicado dentro da transação (E-01): mover a publicação para depois do commit sem mover este incremento é regressão de segurança. | A1.7 |
| E-12 | MultiTenancyDatabaseOptions.cs:12 · spike, critério 6 | O modo por módulo (Hybrid) continua no código. O spike montou um tenant com dois módulos em bancos diferentes, e o segundo banco ficou sem nenhuma tabela de entrega — mensagem gravada ali nunca sairia. O estudo de eventos propunha “um tenant, uma conexão”, que elimina o degrau 4. | A1.8 |
| E-13 | estudo de eventos, “Ciclo de vida da mensagem” · Arquitetura, ADR 7 | O próprio estudo recusava duas tabelas respondendo “o que está preso”; a pilha que ele propunha somava banco, agendador de jobs, biblioteca de mensageria, cache e fila gerenciada para um time de três. | A1.9 |
| E-14 | MultiTenancyServiceCollectionExtensions.cs:48 · TenantDataFilterAccessor.cs:28 · ITenantDataFilter.cs:31 · FileScanJob.cs:107, :122 · ScheduledReportJob.cs:90–91, 107–119 | A exigência de tenant na leitura é estado por fluxo de execução, gravado no fluxo do arranque: job ou consumidor que roda em outro fluxo pode encontrá-la desligada, e o teste de fumaça feito numa requisição não prova nada dentro de um job. O desligamento do filtro está disponível a qualquer código, e a varredura de arquivo o desliga na execução inteira e lê com a consulta que ignora os filtros. O envio agendado de relatório mostra o padrão que A1.3 pede: desliga o filtro só para ler o agendamento, que é quem nomeia o tenant, e executa com o tenant dele. | A1.3 |
Caminhos relativos a src/ do Gryd.IO. Afirmação nova sobre o framework entra nesta tabela com o commit em que foi conferida.
Sequência
O que cada requisito bloqueia
Nenhum requisito é “para quando houver escala”. Cada um tem um marco concreto do produto que não acontece sem ele. O mesmo quadro abre a demanda de plataforma de 11/09/2026 (item P1).
| Requisito | Bloqueia | Até a plataforma entregar |
|---|---|---|
| A1.1 · A1.7 | A Requisition — primeiro agregado que grava empenho na aprovação e publica evento. Os dois entram na mesma entrega: publicar depois do commit sem mover o incremento da versão do token abre acesso. | Nada substitui: sem A1.1, a Requisition não começa. |
| A1.2 | A primeira entrada em produção — que já nasce com a API em mais de uma réplica, o Worker em processo à parte e aviso de aprovação; é nela que entram também a entrega do veredito do GrydFiles ao Anexo e o aviso de troca de conta bancária. Não bloqueia o desenvolvimento da Requisição. | Nenhum paliativo no Nexio. O framework já tem peças candidatas (E-05, E-06); se servem, quem prova é o estudo. |
| A1.3 | O primeiro job ou consumidor do Nexio — virada de exercício do Orçamento, agendamento do motor de aprovação, jobs de guarda e de órfãos do Anexo, consumidor do estado do dono do Anexo —, e só com o regime ao lado em pé. O regime é do Nexio e não espera a plataforma, então não segura o desenvolvimento da Requisição. A entrega da plataforma é exigida onde o regime não alcança — job ou consumidor de módulo do framework que desliga o filtro, como a varredura e a entrega do veredito do GrydFiles —, antes da primeira Requisição com anexo. | Todo job do Nexio carrega tenantId (e onBehalfOfUserId, como dado, quando houver) no payload, abre o escopo explicitamente e liga de novo a exigência de tenant na leitura, que vale por fluxo e não por host (E-14). Teste de fumaça — consulta sem tenant, com dois tenants populados, devolve zero linhas — numa requisição na API e no Portal e, no Worker, dentro de um job e dentro de um consumidor. Nenhum código do Nexio fora do Migrator desliga o filtro (tabela de hosts e asserções da Arquitetura). |
| A1.4 · A1.5 · A1.6 | A primeira integração de saída (ERP). | Não há integração antes disso; ela espera o primeiro cliente que a exija. |
| A1.8 | A adoção de qualquer mecanismo. | — |
| A1.9 | A aceitação do estudo. | — |
Saída
O que o estudo devolve
Mecanismo e transporte escolhidos, registrados pela plataforma. A Arquitetura passa a citá-los como constatação nos ADRs 4 e 6 — sem virar requisito do Nexio.
CA-01 a CA-26 automatizados e verdes contra banco real, cada teste de guarda com o contador de que a guarda rodou.
As peças novas e as horas por mês de um time de três (CA-27). Peça sem esse número não entra.
Confirmação de que a escada de escala continua de pé (CA-25) — ou a decisão de revogá-la, registrada na Arquitetura antes da adoção.
Revisões
Histórico de revisões
| Versão | Data | O que mudou |
|---|---|---|
| v1.6 | 12/09/2026 | Correção da validação R6. Menor de redação: o bloqueio da entrega do veredito fala da Requisição em prosa, como o resto da página — nenhum requisito, critério de aceite ou evidência mudou nesta rodada. |
| v1.5 | 12/09/2026 | Correção da validação R5. Lição da eliminação a pedido do titular incorporada ao acervo de mensageria pela demanda de plataforma: consulta de pré-condição sem reserva precisa de trava comum com o efeito que ela prevê, ou o consumidor publica sobre um retrato vencido. Prosa: a Requisição em português onde não é o nome do agregado. |
| v1.4 | 11/09/2026 | Correção da validação R4. E-14: o envio agendado de relatório desliga o filtro só para ler o agendamento e executa com o tenant dele — é o padrão da A1.3, não exceção; a varredura de arquivo também lê com a consulta que ignora os filtros. A1.5: a repetição pós-commit grava o autor marcado como declarado, e o consumidor confere a pré-condição do destino antes de gravar ato irreversível. Evidências reconferidas no commit e4eb5a4f. |
| v1.3 | 11/09/2026 | Correção da validação R3. Quando a A1.3 bloqueia — uma resposta só, a mesma da Arquitetura e da demanda de plataforma: o primeiro job ou consumidor do Nexio, com o regime provisório em pé, sem segurar a Requisition; a entrega da plataforma é exigida onde o regime não alcança, antes da primeira Requisição com anexo. O regime ganha a exigência de tenant religada por fluxo, o teste de fumaça dentro de job e de consumidor e a proibição de desligar o filtro fora do Migrator; E-14 nova e CA-12 lido nos três fluxos. A1.5 cobre a repetição pós-commit de ato de pessoa com o autor como dado. Evidências reconferidas no commit d6c5e9fa. |
| v1.2 | 11/09/2026 | Correção da validação R2. A publicação garantida (A1.2) bloqueia a primeira entrada em produção, não o desenvolvimento da Requisition — mesma resposta da Arquitetura e da demanda de plataforma. O regime até a plataforma entregar ganha o teste de fumaça de leitura sem tenant por host. Evidências reconferidas no commit 25775a68. |
| v1.1 | 11/09/2026 | Evidências reconferidas no commit 2bc811df: o contexto de execução de job tem o campo de tenant e não o recebe (E-04). Quadro do que cada requisito bloqueia com os consumidores já declarados e sem antecipar o resultado do estudo. |
| v1.0 | 10/09/2026 | Criação. Reúne o problema, os requisitos e as evidências que estavam na Arquitetura (ADRs 4 e 6) e nos dois estudos da plataforma, sem escolher tecnologia (Ata de 10/09/2026, A1). |