Dados — consistência, isolamento e evolução¶
Esta página registra achados de código e oportunidades de validação. O modelo atual descreve o comportamento implementado; as ações abaixo são propostas, não mudanças aprovadas ou aplicadas aos bancos.
| Prioridade | Evidência / achado | Consequência e próxima avaliação |
|---|---|---|
| Alta | Produtores Java declaram outbox_events.eventId como ObjectId; Dispatcher Go declara string. Contrato comparado |
Validar a decodificação BSON com o codec usado pelo Dispatcher e um documento produzido pelo Java. A diferença de tipos não prova, isoladamente, falha de ambiente |
| Alta | Checker consulta *:ratelimit:{id} e usa primeiro resultado. GET e DECR são separados. Implementação |
Identidade global do ID e isolamento de tenant precisam ser garantidos pelo contrato; avaliar colisão e admissão concorrente sem presumir que tenantId no Mongo autoriza esse acesso |
| Alta | Broker realiza GET/verificação/INCR separadamente e não declara TTL no contador. Implementação | Avaliar concorrência acima do limite e recuperação de saldo após interrupção antes da liberação; não equivale a incidente comprovado |
| Alta | Inbox OpenAPI insere após o efeito e não consulta registro prévio. Não declara unique para eventId. Handler, repository | O nome Inbox não garante deduplicação. Testar redelivery entre gravação da projeção, registro e ACK |
| Média | Dispatcher confirma publicação antes de marcar SENT; claim/lease e retry permitem reentrega. Dreno | Contratos consumidores precisam tolerar repetição; medir retenção de SENT e Inbox, sem TTL declarado |
| Média | Registry declara unique para alias, não para tenantId. Reconciliação escreve uma chave por tenant. Índices, cache | Verificar invariantes de múltiplos aliases para o mesmo tenant e ordenação da reconciliação; não afirmar duplicatas existentes |
| Média | Cache Invalidator usa curingas/KEYS; monitor contém FLUSHALL. Serviço, script | Avaliar custo de keyspace e impacto sobre quotas/locks antes de qualquer alteração operacional |
| Média | Referências por IDs e snapshots não possuem foreign keys; várias coleções consultadas por referência não declaram índices secundários. Relacionamentos | Planejar testes de exclusão/cascata e avaliar consultas com volume real; ausência de índice no código não comprova ausência física no banco |
| Média | Gateway OpenAPI armazena gatewayId para fontes Gateway e Template; source é parâmetro de geração, não discriminador persistido. Modelo |
Avaliar identidade e colisão entre domínios e comportamento de eventos de exclusão |
| Média | Snapshot de Templates exige dados publicados completos; upgrades dependem de proveniência e IDs estáveis. Versionamento | Preservar rejeição de origens insuficientes e testes de concorrência/reentrada; não reparar documentos históricos por heurística |
| Média | Arquivos são blobs externos mais metadados Mongo; registro global possui owner. Modelo | Avaliar falhas entre upload, vinculação, publicação e limpeza; referência cruzada não garante atomicidade entre storage e Mongo |
Limites de evidência para continuidade¶
- A biblioteca tenant seleciona collections injetadas de IP Policy e Rate Limit; seus nomes físicos não são literais no código dos serviços. Documentar a biblioteca quando seu fonte estiver disponível.
- Defaults de CacheUtil/CacheStore e formato interno de collections JobRunr pertencem às bibliotecas. Não derivar esses contratos de DTOs ou de nomes de classes.
- Presença de getters calculados no codec POJO merece testes de BSON na evolução do modelo; não confundir propriedades de JSON com campos independentes.
- Repositórios Gateway não definem schemas internos de Keycloak, Cloudflare, GCS/MinIO ou mappings/retention do Elasticsearch.
- Nenhuma consulta a bancos corporativos foi necessária para esta documentação. Eventual comparação física de índices, retenção e dados órfãos deve usar evidências próprias desses ambientes.
Esses limites não substituem o inventário: todos os 23 serviços backend foram classificados, inclusive leitores de stores externos e componentes sem persistência própria.