2. Conceitos¶
English | Português (Brasil)
Tradução do original em inglês; quando os dois divergirem, vale o inglês.
← O que é · Índice · Referência do formato →
O grafo¶
Um grafo é um arquivo, .kg.yaml (ou o gêmeo em JSON, .kg.json), com três chaves obrigatórias no topo: meta
(a identidade do grafo), nodes (as afirmações) e edges (as relações entre elas). Uma quarta chave,
external_edges, é opcional e liga um nó deste arquivo a um nó de outro. Um repositório pode ter quantos grafos você
quiser.
meta:
schema_version: "1"
id: exemplo
nodes:
- id: Q_CACHE_TTL
node_type: question
plane: DEV
status: open
impact: 3
confidence: 0.5
label: O cache de sessão precisa de TTL?
edges: []
Esse grafo passa no nível MUST? Não. Um nó sem nenhuma aresta é órfão e reprova (integrity.orphan-node): todo
nó precisa de pelo menos uma aresta. O exemplo completo, com uma evidência ligada à pergunta, está no
capítulo 8.
O nó¶
Cada nó é uma afirmação curta. Ele tem sete campos obrigatórios:
| Campo | O que diz |
|---|---|
id |
Identificador único no arquivo: começa por letra, depois letras, dígitos e _ |
node_type |
Que tipo de afirmação é (tabela abaixo) |
plane |
DEV ou PROD |
status |
Em que pé a afirmação está (tabela abaixo) |
impact |
Inteiro de 1 a 5: quanto custa se a afirmação estiver errada |
confidence |
Número de 0 a 1: quanto você confia nela hoje |
label |
A afirmação em si, em texto curto |
Tipos de nó (node_type)¶
O contrato fecha a lista em onze tipos, em duas famílias. Os nomes são do contrato; o uso descrito é o convencional.
| Família | Tipo | Uso |
|---|---|---|
| Investigação | question |
Uma pergunta aberta |
claim |
Uma afirmação que precisa de evidência | |
evidence |
Algo observado ou medido, que sustenta ou refuta outra coisa | |
decision |
Uma escolha, aberta ou selada | |
artifact |
Uma coisa que existe (um arquivo, um serviço, uma release) | |
entity |
Um ente do domínio que outros nós citam | |
| Domínio | state |
Um estado de uma entidade |
event |
Um evento que dispara transições | |
rule |
Uma regra de negócio | |
invariant |
Algo que tem de valer sempre | |
policy |
Uma política que governa regras |
O campo opcional layer (no meta ou no nó) declara a camada: audit (investigação) ou domain (modelo de
domínio).
Status¶
A lista é do contrato; o uso descrito é o convencional. As exigências em negrito são do contrato.
| Status | Uso |
|---|---|
open |
Ainda em aberto |
confirmed |
Conferida, com fonte. Exige provenance |
drifted |
Era verdade, e o sistema vivo mudou desde a conferência |
unverifiable |
Não há fonte recuperável. É o destino honesto de um nó sem origem, e não exige provenance |
refuted |
A evidência contrária venceu |
superseded |
Outro nó tomou o lugar deste (aresta SUPERSEDES) |
done |
Concluída (uma tarefa, um épico) |
Planos: DEV e PROD¶
PROD marca uma afirmação sobre o que está em produção, ou da qual a produção depende. Pesa mais: todo nó PROD
exige provenance (MUST, salvo unverifiable), e o contrato alerta quando ele não tem verified_at (SHOULD). DEV é
todo o resto: hipótese, investigação, plano.
As arestas¶
Uma aresta tem from, to e edge_type, e opcionalmente label e trigger. As duas pontas têm de existir no
arquivo.
| Tipo | Leitura |
|---|---|
SUPPORTS |
from sustenta to |
REFUTES |
from contradiz to |
SUPERSEDES |
from substitui to |
CAUSES |
from causa to |
DEPENDS_ON |
from depende de to |
TRACES_TO |
from tem origem em to |
CONSTRAINS |
from restringe to |
HAS_STATE |
a entidade from tem o estado to |
TRANSITIONS |
o estado from passa a to; o evento que dispara vai em trigger |
EMITS |
from emite o evento to |
READS · WRITES |
from lê ou escreve to |
A chave on numa aresta é proibida (yaml.forbidden-key-on): um leitor YAML 1.1 lê on como o booleano true, e a
chave some. O gatilho de uma transição vai em trigger.
Arestas entre grafos (external_edges)¶
Desde a 4.3.0, um grafo pode apontar para um nó de outro grafo do mesmo repositório. Cada aresta externa tem
exatamente uma ponta externa, escrita <caminho a partir da raiz do repositório>#<id>. O caminho pode terminar em
.kg.yaml ou, desde a 4.14.0, em .kg.json. A outra ponta é um id deste arquivo. Quando a ponta externa é o to,
você pode omitir o from, e a aresta então vale pelo grafo inteiro. Só seis tipos cruzam grafos: SUPERSEDES,
CONSTRAINS, SUPPORTS, REFUTES, TRACES_TO e DEPENDS_ON.
O leitor confere a ponta externa só quando você lhe passa a raiz do repositório (--corpus). Num repositório git, ele
lê só os .kg.yaml e .kg.json rastreados: um grafo alvo que ainda não passou por git add não conta. Fora de um
repositório git, lê todos. Sem --corpus, o leitor confere a forma e a ponta local, e a saída diz que ele não conferiu
o resto.
Proveniência¶
provenance diz de onde veio a afirmação. São três campos, todos obrigatórios e não vazios sempre que o objeto
existe:
| Campo | O que diz | Exemplo |
|---|---|---|
source |
A fonte: um arquivo, um endereço, uma pessoa | tests/payment_retry_test.py |
locator |
Onde, dentro da fonte | test_retry_is_idempotent |
method |
Como a afirmação saiu da fonte, na forma <classe>: <detalhe> |
measurement: teste de integração no CI |
source não pode ser um marcador vazio: desconhecida, unknown, n/a, none, null, tbd, sem fonte, um ou mais
hífens, travessão, meia-risca ou ? reprovam (form.pattern.node.provenance.source). Se não há fonte, o nó é
unverifiable, não confirmed.
As cinco classes de method¶
Os nomes das classes são valores literais do contrato, escritos em inglês exatamente como aqui. Desde o contrato v4.16, os nomes em português (entre parênteses) seguem aceitos como alias, sem aviso.
| Classe | Quando usar |
|---|---|
measurement (medição) |
Você rodou algo e observou o resultado: um teste, um benchmark, uma consulta |
reading (leitura) |
Você leu a fonte primária, e a afirmação está nela |
judges (juízes) |
Mais de um avaliador independente votou |
derived (derivado) |
A afirmação foi deduzida de outros nós, sem conferência nova |
testimony (testemunho) |
Alguém relatou. Inclui a medição feita por terceiro que você só leu |
Um method fora dessa forma alerta no contrato v4 (form.pattern.node.provenance.method). No v5 vai reprovar.
Um quarto campo, opcional, locality, diz se um terceiro consegue reverificar a fonte: repo (arquivo versionado no
mesmo repositório), web (endereço público), host (só existe numa máquina), pessoa (relato de alguém) ou, desde a
4.12.0, privado (fora do repositório e não público, mas reverificável por quem tem acesso, como o Google Drive da
empresa).
O carimbo de verificação¶
| Campo | O que diz |
|---|---|
verified_at |
A data da última conferência, AAAA-MM-DD |
verified_against |
Contra o que foi conferido: o comando, o arquivo, a versão |
valid_from |
Desde quando o fato vale (AAAA, AAAA-MM ou AAAA-MM-DD) |
Uma claim com verified_at e sem verified_against alerta (form.required.node.verified_against): carimbo sem alvo
não distingue o verificado do apenas declarado. Um verified_at anterior ao valid_from também alerta
(integrity.verified-before-fact).
Escreva as datas entre aspas: verified_at: "2026-10-12". Sem aspas, um leitor YAML pode transformar a data num
objeto de data, e o contrato alerta (yaml.unquoted-date).
Rótulo e narrativa¶
label é o fato, curto. O contrato alerta acima de 280 caracteres (form.range.node.label). A história, o
contexto e o raciocínio vão em narrative, um campo livre. Essa separação deixa o rótulo comparável e a narrativa
livre.
Extensões: o prefixo x_¶
Uma chave fora da gramática reprova (form.unknown-key.<escopo>.<chave>) no topo, no meta, no nó e na aresta. Para
guardar um dado seu, use o prefixo x_: x_prioridade: alta passa. Dentro de provenance, a chave desconhecida só
alerta.