CHECK permite, as enumerações, as chaves estrangeiras. O comando niadra types derive dos SDKs lê o catálogo de uma tabela dentro da sua empresa, propõe o tipo e lista o que uma pessoa precisa olhar antes de enviar. O catálogo, a proposta e a revisão nunca saem da sua empresa pela ferramenta; só a impressão digital do esquema e as contagens do que mudou saem, e só quando você manda.
Antes de começar
- O SDK de Python (
pip install niadra) ou o de TypeScript (npm install @niadra/sdk); o comando é o mesmo nos dois. - Uma conexão só de leitura ao banco, de preferência a uma réplica: a ferramenta lê o catálogo (
pg_catalog), nunca uma linha, numa transação de leitura comsearch_pathsó empg_catalog, então todo nome fora dele vem qualificado pelo esquema. Passe a conexão em--dsnou na variávelNIADRA_DERIVE_DSN. - Para enviar a declaração, o papel
integrationno Console (ou uma chaveadmin); uma declaração que toca sensibilidade, acesso, dado pessoal, licença ou finalidades pede tambémsecurity.
1. Proponha o tipo
CHECK, as enumerações, as chaves estrangeiras e os gatilhos. Ela o normaliza (ordena por nome, para o mesmo esquema dar sempre a mesma impressão digital) e propõe:
Os nomes do catálogo viram nomes do tipo (minúsculas ASCII,
_ no lugar de qualquer outro caractere, c_ na frente de um que começa por dígito, _ atrás de uma palavra que a linguagem reserva): Delivery Window vira delivery_window, state vira state_, 2fa vira c_2fa. A proposta não declara afirmação, frescor, fontes, ciclo de vida nem finalidades: isso é o que as regras da sua empresa dizem, e uma pessoa acrescenta.
2. Revise
Com a proposta, a ferramenta lista o que uma pessoa precisa olhar, nesta ordem: as colunas que não viraram campo, com o tipo; osCHECKs que não são uma lista de constantes de uma coluna (uma comparação, duas condições), que vão à revisão; a coluna de estados cujos valores não podem ser estados; as chaves estrangeiras que não viraram relação; e cada gatilho, com o nome e se está ativo. Um gatilho é código: as transições que ele impõe são da sua empresa declarar em lifecycle, e a ferramenta nunca as adivinha. A revisão fica com a sua empresa.
Depois complete o tipo com o que só a sua empresa sabe: a classe de frescor e a idade de afirmação de cada campo que um agente pode afirmar, as fontes e a precedência delas, os valores computados pelas suas regras, o ciclo de vida, os temporizadores e as finalidades. A proposta valida contra o esquema aberto object-type.v0.json, e a validação da Niadra além do esquema (toda expressão resolve contra o tipo, todo estado nomeado é declarado) roda quando você envia.
3. Envie a declaração
O tipo entra no documentoobject-types do espaço, por um diff aprovado no Console ou pela API de controle:
state ligada, POST /v1/objects/push passa a receber o estado desse tipo, e as leituras passam a dizer o frescor e o que pode ser afirmado.
4. Confira a deriva
Um esquema muda.--check lê o catálogo de novo, calcula a impressão digital e compara a proposta atual com a declaração que você guardou:
mirror_of.fingerprint. As mudanças contam fields_added, fields_removed, fields_retyped, states_added, states_removed, relations_added, relations_removed e key_changed, e listam em fields os campos removidos ou retipados (até 50); nunca um nome novo, um valor ou uma definição. Uma deriva com todas as contagens em zero mudou uma parte que o tipo não mostra: um CHECK de outra coluna, um gatilho, um tipo de coluna que dá o mesmo tipo de campo. O comando sai com 0 quando nada derivou, 1 quando derivou e 2 quando não conseguiu rodar, então ele cabe no CI que roda as suas migrações.
Sem --no-send, o comando reporta a impressão digital e as contagens a POST /v1/types/fingerprint, com uma chave de escopo state:push, e a Niadra compara com mirror_of.fingerprint do tipo declarado. A mesma impressão digital responde drift: false. Outra, num tipo com drift: alert, responde drift: true e issue_id: abre um problema de dados do tipo drift para o dono do dado, ou conta mais uma ocorrência no que já está aberto, nomeia o campo quando changes.fields nomeia um só e envia o webhook type.drift uma vez por problema, quando ele abre. Num tipo com drift: ignore, a resposta é drift: true sem problema aberto. Um tipo que o espaço não declara responde 404, e um tipo declarado sem mirror_of.fingerprint responde 422 no_fingerprint. --no-send mantém a conferência local, para um CI que não tem a chave. A Niadra aponta deriva por outro caminho mesmo assim: uma transição vista nas fontes que o tipo não declara, ou um valor fora do vocabulário, abre o mesmo problema de dados, por observação.
O passo de CI pronto, com types derive --check e contract test, está em examples/ci/niadra-checks.yml nos dois SDKs.
O que sai da sua empresa
Pela ferramenta, nada além da impressão digital (um SHA-256 sobre o catálogo normalizado, em JSON canônico) e das contagens do que mudou, e só quando você não passa--no-send. O catálogo, a proposta, a revisão e a declaração completa ficam com você até você enviar a declaração pela configuração, que é o que a Niadra guarda. Uma linha da tabela nunca é lida.
Próximos passos
Tipos de objeto e estado
o formato completo de um tipo e o que a leitura devolve.
O worker de resolução
o estado que o seu sistema envia e as releituras que a Niadra pede.
Agentes de varejo
um tipo de item derivado da tabela de variantes.
Problemas de dados
onde a deriva e os campos nulos chegam.

