kg-ssot 4.11.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/index.d.mts +5 -4
- package/index.mjs +2 -2
- package/kg.mjs +24 -7
- package/must.mjs +1 -1
- package/package.json +1 -1
- package/should.mjs +1 -1
- package/spec/kg-contract-v4.schema.json +4 -2
- package/spec/kg-contract-v4.should.schema.json +24 -7
- package/spec/release.json +7 -2
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ verdict(texto, { format: 'json' }); // .kg.json
|
|
|
42
42
|
`external_edges`. Os schemas ficam em `kg-ssot/spec/*`.
|
|
43
43
|
|
|
44
44
|
Desde a 4.10.0, este leitor também mede os avisos SHOULD, com os mesmos códigos do leitor de referência em todos os
|
|
45
|
-
casos da suíte. Desde a 4.11.0, as três construções raras do YAML em que ele divergia da referência (a tag `!` sem
|
|
45
|
+
casos da suíte, e desde a 4.13.0 trata o `\r` como quebra de linha, como a referência. Desde a 4.11.0, as três construções raras do YAML em que ele divergia da referência (a tag `!` sem
|
|
46
46
|
nome, o `!!timestamp` com texto que não é data e o tab fora de aspas) reprovam nos dois, com casos na suíte. A linha de cada ocorrência e as dicas de correção continuam só no leitor de referência em Python.
|
|
47
47
|
|
|
48
48
|
## TypeScript e CommonJS
|
package/index.d.mts
CHANGED
|
@@ -39,22 +39,23 @@ export function verdict(text: string, options?: Options): Verdict;
|
|
|
39
39
|
export function check(text: string, options?: Options): string[];
|
|
40
40
|
|
|
41
41
|
/** Os códigos SHOULD (avisos) do texto de um grafo, ordenados e sem repetição; vazio quando não há aviso. */
|
|
42
|
-
export function checkWarnings(text: string, options?:
|
|
42
|
+
export function checkWarnings(text: string, options?: Options): string[];
|
|
43
43
|
|
|
44
44
|
/** O veredito com um validador MUST qualquer (o núcleo, para quem compila o schema); com validateShould, mede também
|
|
45
45
|
* os avisos. */
|
|
46
46
|
export function verdictOf(text: string, validate: MustValidator,
|
|
47
47
|
options?: Options & { validateShould?: MustValidator }): Verdict;
|
|
48
48
|
|
|
49
|
-
/** Os avisos de coerência de um documento já lido (integrity.testimony-in-prod, verified-before-fact, untraced-decision, refutes-unreconciled).
|
|
50
|
-
|
|
49
|
+
/** Os avisos de coerência de um documento já lido (integrity.testimony-in-prod, verified-before-fact, untraced-decision, refutes-unreconciled).
|
|
50
|
+
* Com o corpus, a REFUTES que chega de outro grafo pelas external_edges também conta. */
|
|
51
|
+
export function coherenceCodes(doc: Record<string, unknown>, corpus?: Corpus | null): string[];
|
|
51
52
|
|
|
52
53
|
/** Os avisos do perfil JSON num .kg.yaml já lido (yaml.unsafe-integer, yaml.lone-surrogate, yaml.depth-over-128). */
|
|
53
54
|
export function yamlProfileCodes(doc: unknown): string[];
|
|
54
55
|
|
|
55
56
|
/** Os códigos SHOULD com os validadores MUST e SHOULD quaisquer. */
|
|
56
57
|
export function warnings(text: string, validate: MustValidator, validateShould: MustValidator,
|
|
57
|
-
options?:
|
|
58
|
+
options?: Options): string[];
|
|
58
59
|
|
|
59
60
|
/** Os códigos MUST com um validador MUST qualquer. */
|
|
60
61
|
export function codes(text: string, validate: MustValidator, options?: Options): string[];
|
package/index.mjs
CHANGED
|
@@ -17,8 +17,8 @@ export function verdict(text, { format = 'yaml', corpus = null } = {}) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/** Os códigos SHOULD (avisos) do texto de um grafo, ordenados e sem repetição; vazio quando não há aviso. */
|
|
20
|
-
export function checkWarnings(text, { format = 'yaml' } = {}) {
|
|
21
|
-
return warningsWith(text, validateMust, validateShould, { format });
|
|
20
|
+
export function checkWarnings(text, { format = 'yaml', corpus = null } = {}) {
|
|
21
|
+
return warningsWith(text, validateMust, validateShould, { format, corpus });
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/** Os códigos MUST do texto de um grafo, ordenados e sem repetição; vazio quando passa. */
|
package/kg.mjs
CHANGED
|
@@ -32,6 +32,7 @@ const MAX_DEPTH = 1000; // coleções abertas de uma vez (MAX_DEPTH da referênc
|
|
|
32
32
|
const PROFILE_DEPTH = 128;
|
|
33
33
|
const SLUG = /^[A-Za-z_][A-Za-z0-9_-]*$/;
|
|
34
34
|
const EXTERNAL_REF = /^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*\/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\.kg\.yaml#[A-Za-z][A-Za-z0-9_]*$/;
|
|
35
|
+
const isExternal = (ref) => typeof ref === 'string' && EXTERNAL_REF.test(ref); // is_external da referência
|
|
35
36
|
const CORE_INT = /^(?:[-+]?[0-9]+|0o[0-7]+|0x[0-9a-fA-F]+)$/;
|
|
36
37
|
const Y = 'tag:yaml.org,2002:';
|
|
37
38
|
// O timestamp do YAML 1.1 (o resolvedor implícito do PyYAML, que o Yaml12CoreLoader da referência mantém): no 1.2
|
|
@@ -253,6 +254,12 @@ function strictTokenError(tokens) {
|
|
|
253
254
|
if (typeof t.source === 'string') {
|
|
254
255
|
if ((t.type === 'space' || t.type === 'scalar' || t.type === 'directive') && t.source.includes('\t')) return true;
|
|
255
256
|
if (t.type === 'tag' && (t.source === '!' || t.source === '!<!>')) return true;
|
|
257
|
+
if ((t.type === 'single-quoted-scalar' || t.type === 'double-quoted-scalar')
|
|
258
|
+
&& t.source.split(/\r\n|\r|\n/).slice(1).some((line) => /^[ \t]*/.exec(line)[0].includes('\t'))) return true;
|
|
259
|
+
// o texto entre aspas que não fecha no próprio token: o yaml corta o escalar na quebra e lê o resto como outra
|
|
260
|
+
// coisa (aspa '' ou \" no fim da linha); o perfil recusa, como a referência
|
|
261
|
+
if (t.type === 'single-quoted-scalar' && !/^'(?:[^']|'')*'$/.test(t.source)) return true;
|
|
262
|
+
if (t.type === 'double-quoted-scalar' && !/^"(?:[^"\\]|\\[\s\S])*"$/.test(t.source)) return true;
|
|
256
263
|
}
|
|
257
264
|
for (const v of Object.values(t)) if (v !== null && typeof v === 'object') stack.push(v);
|
|
258
265
|
}
|
|
@@ -262,8 +269,11 @@ function strictTokenError(tokens) {
|
|
|
262
269
|
/** O parse do .kg.yaml no perfil do contrato: { doc, unquotedDate } ou { code: 'parse.*' }. */
|
|
263
270
|
export function parseYaml(text) {
|
|
264
271
|
let docs;
|
|
272
|
+
// O \r\n e o \r sozinho viram \n antes do parse, como na especificação do YAML e no leitor de referência (decisão
|
|
273
|
+
// de contrato de 2026-10-20): sem isso, o \r ficava como caractere dentro das aspas, e o CRLF entre aspas reprovava.
|
|
274
|
+
const src = text.includes('\r') ? text.replace(/\r\n?/g, '\n') : text;
|
|
265
275
|
try {
|
|
266
|
-
const tokens = Array.from(new Parser().parse(
|
|
276
|
+
const tokens = Array.from(new Parser().parse(src));
|
|
267
277
|
if (strictTokenError(tokens)) return { code: 'parse.yaml-error' };
|
|
268
278
|
docs = Array.from(new Composer({
|
|
269
279
|
version: '1.2', schema: 'core', uniqueKeys: false, merge: false, maxAliasCount: -1,
|
|
@@ -638,13 +648,20 @@ function containsValue(value, hit) {
|
|
|
638
648
|
/** Os avisos de coerência, que cruzam campos ou arestas (coherence_located da referência), um por ocorrência:
|
|
639
649
|
* integrity.testimony-in-prod, integrity.verified-before-fact, integrity.untraced-decision e
|
|
640
650
|
* integrity.refutes-unreconciled. */
|
|
641
|
-
export function coherenceCodes(doc) {
|
|
651
|
+
export function coherenceCodes(doc, corpus = null) {
|
|
642
652
|
const out = [];
|
|
643
653
|
const edges = Array.isArray(doc.edges) ? doc.edges : [];
|
|
644
654
|
const traced = new Set(edges.filter((e) => isObj(e) && get(e, 'edge_type') === 'TRACES_TO' && typeof get(e, 'from') === 'string')
|
|
645
655
|
.map((e) => e.from));
|
|
646
656
|
const refuted = new Set(edges.filter((e) => isObj(e) && get(e, 'edge_type') === 'REFUTES' && typeof get(e, 'to') === 'string')
|
|
647
657
|
.map((e) => e.to));
|
|
658
|
+
if (corpus !== null && corpus !== undefined) { // v4.5: a REFUTES que chega de outro grafo, só com o corpus (a ponta externa conferida)
|
|
659
|
+
const ext = Array.isArray(doc.external_edges) ? doc.external_edges : [];
|
|
660
|
+
for (const e of ext) {
|
|
661
|
+
if (isObj(e) && get(e, 'edge_type') === 'REFUTES' && isExternal(get(e, 'from'))
|
|
662
|
+
&& typeof get(e, 'to') === 'string' && !isExternal(get(e, 'to'))) refuted.add(e.to);
|
|
663
|
+
}
|
|
664
|
+
}
|
|
648
665
|
for (const n of located(doc, 'nodes')) {
|
|
649
666
|
const prov = isObj(get(n, 'provenance')) ? n.provenance : {};
|
|
650
667
|
const method = get(prov, 'method');
|
|
@@ -685,14 +702,14 @@ export function yamlProfileCodes(doc) {
|
|
|
685
702
|
/** Os códigos SHOULD de um texto (warnings da referência), ordenados e sem repetição: o que o schema SHOULD acusa e o
|
|
686
703
|
* MUST não, a data sem aspas e os avisos do perfil (só no .kg.yaml) e os de coerência. Texto que não parseia não
|
|
687
704
|
* recebe aviso. */
|
|
688
|
-
export function warnings(text, validate, validateShould, { format = 'yaml' } = {}) {
|
|
705
|
+
export function warnings(text, validate, validateShould, { format = 'yaml', corpus = null } = {}) {
|
|
689
706
|
const parsed = parse(text, format);
|
|
690
|
-
return parsed.code ? [] : warningsOf(parsed, validate, validateShould, format);
|
|
707
|
+
return parsed.code ? [] : warningsOf(parsed, validate, validateShould, format, null, corpus);
|
|
691
708
|
}
|
|
692
709
|
|
|
693
710
|
// Os avisos de um texto já parseado. mustCodes: os form.* do MUST, se quem chama já os tem (o verdictOf, para não
|
|
694
711
|
// validar duas vezes).
|
|
695
|
-
function warningsOf(parsed, validate, validateShould, format, mustCodes = null) {
|
|
712
|
+
function warningsOf(parsed, validate, validateShould, format, mustCodes = null, corpus = null) {
|
|
696
713
|
const { doc } = parsed;
|
|
697
714
|
let must = mustCodes;
|
|
698
715
|
if (must === null) {
|
|
@@ -705,7 +722,7 @@ function warningsOf(parsed, validate, validateShould, format, mustCodes = null)
|
|
|
705
722
|
if (parsed.unquotedDate) out.add('yaml.unquoted-date');
|
|
706
723
|
for (const c of yamlProfileCodes(doc)) out.add(c);
|
|
707
724
|
}
|
|
708
|
-
for (const c of coherenceCodes(doc)) out.add(c);
|
|
725
|
+
for (const c of coherenceCodes(doc, corpus)) out.add(c);
|
|
709
726
|
return [...out].sort();
|
|
710
727
|
}
|
|
711
728
|
|
|
@@ -718,6 +735,6 @@ export function verdictOf(text, validate, opts = {}) {
|
|
|
718
735
|
return { verdict: 'reject', codes: [parsed.code], warnings: validateShould ? [] : null, detail: '' };
|
|
719
736
|
}
|
|
720
737
|
const { codes: found, mustForm } = docCodesWithForm(parsed.doc, validate, corpus, format);
|
|
721
|
-
const warned = validateShould ? warningsOf(parsed, validate, validateShould, format, mustForm) : null;
|
|
738
|
+
const warned = validateShould ? warningsOf(parsed, validate, validateShould, format, mustForm, corpus) : null;
|
|
722
739
|
return { verdict: found.length ? 'reject' : 'accept', codes: found, warnings: warned, detail: '' };
|
|
723
740
|
}
|
package/must.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:kg-ssot:spec:kg-contract-v4.schema.json","title":"kg.yaml — contrato v4, nível MUST","description":"O contrato v4 do .kg.yaml, nível MUST (reprova), o vigente (substitui o v3). É o v3 com três promoções a MUST. (1) Proveniência estruturada: nó confirmed ou PROD exige provenance com source, locator e method (form.required.node.provenance), que no v3 só alertava; status unverifiable não exige, mesmo em PROD, porque é o destino do nó sem fonte recuperável. (2) Fonte que não é placeholder: provenance.source não pode ser placeholder: só espaço, ou um destes sozinho, sem distinguir maiúscula e com pontuação final (. ou :) e espaço em volta (inclusive NBSP, espaço ideográfico, BOM e espaço de largura zero) ignorados: desconhecida, desconhecido, unknown, n/a, n / a, na, n.a., none, null, sem fonte, tbd, um ou mais hífens, travessão, meia-risca, ?. A regra é um not+pattern sem lookahead, portável a leitores RE2: form.pattern.node.provenance.source. O vazio segue form.range.node.provenance.source, como no v3. Origem que é uma pessoa ou sessão recuperável é fonte válida, com method de testemunho. (3) Política de extensão: chave desconhecida sem o prefixo x_ no topo, no meta, no nó e na aresta reprova (form.unknown-key.<escopo>.<chave>), com a mesma lista de chaves conhecidas que o SHOULD v3 usava; nome sem x_ que nem é slug reprova como form.pattern.<escopo>.key. Chave x_ segue livre, e x_ com nome que não é slug só alerta. A chave on da aresta segue na lista porque já reprova como yaml.forbidden-key-on. Dentro de provenance, a chave desconhecida segue SHOULD. O resto é o v3: escrito à mão em JSON Schema 2020-12; PROD sem verified_at é SHOULD e o gatilho de TRANSITIONS é trigger; narrative no nó, note e purpose no meta, data no calendário (format: date é ASSERÇÃO) e .nan ou .inf reprovando como tipo; provenance, quando presente, com os três campos não vazios, e provenance: null reprova. O par SHOULD é kg-contract-v4.should.schema.json; as regras de perfil YAML (chave on proibida, chave duplicada, documento único) são do leitor, porque o JSON não as vê. No v4.3 entra external_edges, opcional, no topo: arestas entre grafos com uma ponta externa <caminho>#<id> e a outra local (ou o grafo inteiro, com from ausente), nos tipos SUPERSEDES, CONSTRAINS, SUPPORTS, REFUTES, TRACES_TO e DEPENDS_ON. A ponta local tem de existir (integrity.dangling-external-local); com o corpus, o arquivo e o id da ponta externa também (integrity.dangling-external). A chave é opcional: um grafo que não a usa tem o mesmo veredito do v4.2.","type":"object","required":["meta","nodes","edges"],"properties":{"meta":{"$ref":"#/$defs/meta"},"nodes":{"type":"array","items":{"$ref":"#/$defs/node"}},"edges":{"type":"array","items":{"$ref":"#/$defs/edge"}},"external_edges":{"type":"array","items":{"$ref":"#/$defs/externalEdge"}}},"$defs":{"date":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$","format":"date"},"partialDate":{"type":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$","if":{"pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},"then":{"format":"date"}},"nodeId":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]*$"},"layer":{"enum":["audit","domain"]},"meta":{"type":"object","required":["schema_version","id"],"properties":{"schema_version":{"const":"1"},"id":{"type":"string","minLength":1},"baseline":{"$ref":"#/$defs/date"},"date":{"$ref":"#/$defs/date"},"review_after":{"$ref":"#/$defs/date"},"layer":{"$ref":"#/$defs/layer"},"note":{"type":"string"},"purpose":{"type":"string"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["baseline","date","id","layer","note","purpose","review_after","schema_version"]}]}}},"node":{"type":"object","required":["id","node_type","plane","status","impact","confidence","label"],"properties":{"id":{"$ref":"#/$defs/nodeId"},"node_type":{"enum":["entity","claim","decision","question","evidence","artifact","state","event","rule","invariant","policy"]},"layer":{"$ref":"#/$defs/layer"},"plane":{"enum":["DEV","PROD"]},"status":{"enum":["open","confirmed","drifted","unverifiable","refuted","superseded","done"]},"impact":{"type":"integer","minimum":1,"maximum":5},"confidence":{"type":"number","minimum":0,"maximum":1},"label":{"type":"string","minLength":1},"trace":{"type":"string"},"verified_at":{"$ref":"#/$defs/date"},"verified_against":{"type":"string"},"valid_from":{"$ref":"#/$defs/partialDate"},"source_tier":{"type":"integer","minimum":1,"maximum":10},"source_kind":{"type":"string"},"owner":{"type":"string"},"drive_kind":{"type":"string"},"evidence_class":{"type":"string"},"sealed_by":{"type":"string"},"sealed_at":{"type":"string"},"narrative":{"type":"string"},"provenance":{"$ref":"#/$defs/provenance"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["confidence","drive_kind","evidence_class","id","impact","label","layer","narrative","node_type","owner","plane","provenance","sealed_at","sealed_by","source_kind","source_tier","status","trace","valid_from","verified_against","verified_at"]}]}},"if":{"anyOf":[{"properties":{"status":{"const":"confirmed"}},"required":["status"]},{"properties":{"plane":{"const":"PROD"}},"required":["plane"]}],"not":{"properties":{"status":{"const":"unverifiable"}},"required":["status"]}},"then":{"required":["provenance"]}},"edge":{"type":"object","required":["from","to","edge_type"],"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/nodeId"},"edge_type":{"enum":["SUPPORTS","REFUTES","SUPERSEDES","CAUSES","DEPENDS_ON","TRACES_TO","CONSTRAINS","HAS_STATE","TRANSITIONS","EMITS","READS","WRITES"]},"label":{"type":"string"},"trigger":{"$ref":"#/$defs/nodeId"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","on","to","trigger"]}]}}},"provenance":{"type":"object","required":["source","locator","method"],"properties":{"source":{"type":"string","minLength":1,"not":{"type":"string","pattern":"^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$"}},"locator":{"type":"string","minLength":1},"method":{"type":"string","minLength":1}}},"externalRef":{"type":"string","pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$","description":"Referência a um nó de outro grafo do mesmo repo: <caminho relativo à raiz do repo>#<id>. Os segmentos do caminho começam por letra, dígito ou _ e só levam [A-Za-z0-9_.-]: sem / inicial, sem . ou .., sem \\, sem :."},"externalEdge":{"description":"Aresta entre grafos (v4.3): exatamente uma ponta externa (<caminho>#<id>), a outra um id deste arquivo; from ausente vale o grafo inteiro. Só os tipos da camada audit.","type":"object","required":["to","edge_type"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"edge_type":{"enum":["SUPERSEDES","CONSTRAINS","SUPPORTS","REFUTES","TRACES_TO","DEPENDS_ON"]},"label":{"type":"string"}},"if":{"required":["from"],"properties":{"from":{"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"}}},"then":{"properties":{"to":{"$ref":"#/$defs/nodeId"}}},"else":{"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/externalRef"}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","to"]}]}}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edges","external_edges","meta","nodes"]}]}}};const pattern4 = new RegExp("^x_", "u");const pattern5 = new RegExp("^[A-Za-z_][A-Za-z0-9_-]*$", "u");const schema32 = {"type":"object","required":["schema_version","id"],"properties":{"schema_version":{"const":"1"},"id":{"type":"string","minLength":1},"baseline":{"$ref":"#/$defs/date"},"date":{"$ref":"#/$defs/date"},"review_after":{"$ref":"#/$defs/date"},"layer":{"$ref":"#/$defs/layer"},"note":{"type":"string"},"purpose":{"type":"string"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["baseline","date","id","layer","note","purpose","review_after","schema_version"]}]}}};const schema33 = {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$","format":"date"};const schema36 = {"enum":["audit","domain"]};const pattern8 = new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "u");import func1_mod from "ajv/dist/runtime/ucs2length.js";const func1 = func1_mod.default;const formats0 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;function validate21(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate21.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.schema_version === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "schema_version"},message:"must have required property '"+"schema_version"+"'",schema:schema32.required,parentSchema:schema32,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.id === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "id"},message:"must have required property '"+"id"+"'",schema:schema32.required,parentSchema:schema32,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err2 = {};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err3 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema32.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(!((((((((key0 === "baseline") || (key0 === "date")) || (key0 === "id")) || (key0 === "layer")) || (key0 === "note")) || (key0 === "purpose")) || (key0 === "review_after")) || (key0 === "schema_version"))){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema32.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema32.propertyNames.else.allOf[1].enum,parentSchema:schema32.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err5 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema32.propertyNames.if,parentSchema:schema32.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err6 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema32.propertyNames,parentSchema:schema32,data};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.schema_version !== undefined){let data0 = data.schema_version;if("1" !== data0){const err7 = {instancePath:instancePath+"/schema_version",schemaPath:"#/properties/schema_version/const",keyword:"const",params:{allowedValue: "1"},message:"must be equal to constant",schema:"1",parentSchema:schema32.properties.schema_version,data:data0};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.id !== undefined){let data1 = data.id;if(typeof data1 === "string"){if(func1(data1) < 1){const err8 = {instancePath:instancePath+"/id",schemaPath:"#/properties/id/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema32.properties.id,data:data1};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.id.type,parentSchema:schema32.properties.id,data:data1};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.baseline !== undefined){let data2 = data.baseline;if(typeof data2 === "string"){if(!pattern8.test(data2)){const err10 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(!(formats0.test(data2))){const err11 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.date !== undefined){let data3 = data.date;if(typeof data3 === "string"){if(!pattern8.test(data3)){const err13 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(!(formats0.test(data3))){const err14 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data.review_after !== undefined){let data4 = data.review_after;if(typeof data4 === "string"){if(!pattern8.test(data4)){const err16 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(!(formats0.test(data4))){const err17 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.layer !== undefined){let data5 = data.layer;if(!((data5 === "audit") || (data5 === "domain"))){const err19 = {instancePath:instancePath+"/layer",schemaPath:"#/$defs/layer/enum",keyword:"enum",params:{allowedValues: schema36.enum},message:"must be equal to one of the allowed values",schema:schema36.enum,parentSchema:schema36,data:data5};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.note !== undefined){let data6 = data.note;if(typeof data6 !== "string"){const err20 = {instancePath:instancePath+"/note",schemaPath:"#/properties/note/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.note.type,parentSchema:schema32.properties.note,data:data6};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.purpose !== undefined){let data7 = data.purpose;if(typeof data7 !== "string"){const err21 = {instancePath:instancePath+"/purpose",schemaPath:"#/properties/purpose/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.purpose.type,parentSchema:schema32.properties.purpose,data:data7};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}}else {const err22 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema32.type,parentSchema:schema32,data};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}validate21.errors = vErrors;return errors === 0;}validate21.evaluated = {"props":{"schema_version":true,"id":true,"baseline":true,"date":true,"review_after":true,"layer":true,"note":true,"purpose":true},"dynamicProps":false,"dynamicItems":false};const schema37 = {"type":"object","required":["id","node_type","plane","status","impact","confidence","label"],"properties":{"id":{"$ref":"#/$defs/nodeId"},"node_type":{"enum":["entity","claim","decision","question","evidence","artifact","state","event","rule","invariant","policy"]},"layer":{"$ref":"#/$defs/layer"},"plane":{"enum":["DEV","PROD"]},"status":{"enum":["open","confirmed","drifted","unverifiable","refuted","superseded","done"]},"impact":{"type":"integer","minimum":1,"maximum":5},"confidence":{"type":"number","minimum":0,"maximum":1},"label":{"type":"string","minLength":1},"trace":{"type":"string"},"verified_at":{"$ref":"#/$defs/date"},"verified_against":{"type":"string"},"valid_from":{"$ref":"#/$defs/partialDate"},"source_tier":{"type":"integer","minimum":1,"maximum":10},"source_kind":{"type":"string"},"owner":{"type":"string"},"drive_kind":{"type":"string"},"evidence_class":{"type":"string"},"sealed_by":{"type":"string"},"sealed_at":{"type":"string"},"narrative":{"type":"string"},"provenance":{"$ref":"#/$defs/provenance"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["confidence","drive_kind","evidence_class","id","impact","label","layer","narrative","node_type","owner","plane","provenance","sealed_at","sealed_by","source_kind","source_tier","status","trace","valid_from","verified_against","verified_at"]}]}},"if":{"anyOf":[{"properties":{"status":{"const":"confirmed"}},"required":["status"]},{"properties":{"plane":{"const":"PROD"}},"required":["plane"]}],"not":{"properties":{"status":{"const":"unverifiable"}},"required":["status"]}},"then":{"required":["provenance"]}};const schema38 = {"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]*$"};const schema41 = {"type":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$","if":{"pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},"then":{"format":"date"}};const schema42 = {"type":"object","required":["source","locator","method"],"properties":{"source":{"type":"string","minLength":1,"not":{"type":"string","pattern":"^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$"}},"locator":{"type":"string","minLength":1},"method":{"type":"string","minLength":1}}};const pattern13 = new RegExp("^[A-Za-z][A-Za-z0-9_]*$", "u");const pattern16 = new RegExp("^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$", "u");const pattern17 = new RegExp("^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$", "u");function validate23(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate23.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs1 = errors;let valid0 = true;const _errs2 = errors;const _errs3 = errors;const _errs4 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.status === undefined) && (missing0 = "status")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.status !== undefined){if("unverifiable" !== data.status){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var valid1 = _errs4 === errors;if(valid1){const err2 = {};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}else {errors = _errs3;if(vErrors !== null){if(_errs3){vErrors.length = _errs3;}else {vErrors = null;}}const _errs6 = errors;let valid3 = false;const _errs7 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing1;if((data.status === undefined) && (missing1 = "status")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}else {if(data.status !== undefined){if("confirmed" !== data.status){const err4 = {};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}}var _valid1 = _errs7 === errors;valid3 = valid3 || _valid1;if(_valid1){var props0 = {};props0.status = true;}const _errs9 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing2;if((data.plane === undefined) && (missing2 = "plane")){const err5 = {};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}else {if(data.plane !== undefined){if("PROD" !== data.plane){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}}}var _valid1 = _errs9 === errors;valid3 = valid3 || _valid1;if(_valid1){if(props0 !== true){props0 = props0 || {};props0.plane = true;}}if(!valid3){const err7 = {};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}if(_valid0){const _errs11 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.provenance === undefined){const err8 = {instancePath,schemaPath:"#/then/required",keyword:"required",params:{missingProperty: "provenance"},message:"must have required property '"+"provenance"+"'",schema:schema37.then.required,parentSchema:schema37.then,data};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}var _valid0 = _errs11 === errors;valid0 = _valid0;}if(!valid0){const err9 = {instancePath,schemaPath:"#/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema37.if,parentSchema:schema37,data};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.id === undefined){const err10 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "id"},message:"must have required property '"+"id"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(data.node_type === undefined){const err11 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "node_type"},message:"must have required property '"+"node_type"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data.plane === undefined){const err12 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "plane"},message:"must have required property '"+"plane"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if(data.status === undefined){const err13 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "status"},message:"must have required property '"+"status"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(data.impact === undefined){const err14 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "impact"},message:"must have required property '"+"impact"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data.confidence === undefined){const err15 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "confidence"},message:"must have required property '"+"confidence"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.label === undefined){const err16 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "label"},message:"must have required property '"+"label"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}for(const key0 in data){const _errs12 = errors;const _errs13 = errors;let valid7 = true;const _errs14 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err17 = {};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}var _valid2 = _errs14 === errors;errors = _errs13;if(vErrors !== null){if(_errs13){vErrors.length = _errs13;}else {vErrors = null;}}if(!_valid2){const _errs15 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err18 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema37.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(!(((((((((((((((((((((key0 === "confidence") || (key0 === "drive_kind")) || (key0 === "evidence_class")) || (key0 === "id")) || (key0 === "impact")) || (key0 === "label")) || (key0 === "layer")) || (key0 === "narrative")) || (key0 === "node_type")) || (key0 === "owner")) || (key0 === "plane")) || (key0 === "provenance")) || (key0 === "sealed_at")) || (key0 === "sealed_by")) || (key0 === "source_kind")) || (key0 === "source_tier")) || (key0 === "status")) || (key0 === "trace")) || (key0 === "valid_from")) || (key0 === "verified_against")) || (key0 === "verified_at"))){const err19 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema37.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema37.propertyNames.else.allOf[1].enum,parentSchema:schema37.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}var _valid2 = _errs15 === errors;valid7 = _valid2;}if(!valid7){const err20 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema37.propertyNames.if,parentSchema:schema37.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}var valid6 = _errs12 === errors;if(!valid6){const err21 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema37.propertyNames,parentSchema:schema37,data};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.id = true;props0.node_type = true;props0.layer = true;props0.plane = true;props0.status = true;props0.impact = true;props0.confidence = true;props0.label = true;props0.trace = true;props0.verified_at = true;props0.verified_against = true;props0.valid_from = true;props0.source_tier = true;props0.source_kind = true;props0.owner = true;props0.drive_kind = true;props0.evidence_class = true;props0.sealed_by = true;props0.sealed_at = true;props0.narrative = true;props0.provenance = true;}if(data.id !== undefined){let data3 = data.id;if(typeof data3 === "string"){if(!pattern13.test(data3)){const err22 = {instancePath:instancePath+"/id",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data3};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/id",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data3};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data.node_type !== undefined){let data4 = data.node_type;if(!(((((((((((data4 === "entity") || (data4 === "claim")) || (data4 === "decision")) || (data4 === "question")) || (data4 === "evidence")) || (data4 === "artifact")) || (data4 === "state")) || (data4 === "event")) || (data4 === "rule")) || (data4 === "invariant")) || (data4 === "policy"))){const err24 = {instancePath:instancePath+"/node_type",schemaPath:"#/properties/node_type/enum",keyword:"enum",params:{allowedValues: schema37.properties.node_type.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.node_type.enum,parentSchema:schema37.properties.node_type,data:data4};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data.layer !== undefined){let data5 = data.layer;if(!((data5 === "audit") || (data5 === "domain"))){const err25 = {instancePath:instancePath+"/layer",schemaPath:"#/$defs/layer/enum",keyword:"enum",params:{allowedValues: schema36.enum},message:"must be equal to one of the allowed values",schema:schema36.enum,parentSchema:schema36,data:data5};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data.plane !== undefined){let data6 = data.plane;if(!((data6 === "DEV") || (data6 === "PROD"))){const err26 = {instancePath:instancePath+"/plane",schemaPath:"#/properties/plane/enum",keyword:"enum",params:{allowedValues: schema37.properties.plane.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.plane.enum,parentSchema:schema37.properties.plane,data:data6};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data.status !== undefined){let data7 = data.status;if(!(((((((data7 === "open") || (data7 === "confirmed")) || (data7 === "drifted")) || (data7 === "unverifiable")) || (data7 === "refuted")) || (data7 === "superseded")) || (data7 === "done"))){const err27 = {instancePath:instancePath+"/status",schemaPath:"#/properties/status/enum",keyword:"enum",params:{allowedValues: schema37.properties.status.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.status.enum,parentSchema:schema37.properties.status,data:data7};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data.impact !== undefined){let data8 = data.impact;if(!((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8)))){const err28 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema37.properties.impact.type,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}if(typeof data8 == "number"){if(data8 > 5 || isNaN(data8)){const err29 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/maximum",keyword:"maximum",params:{comparison: "<=", limit: 5},message:"must be <= 5",schema:5,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}if(data8 < 1 || isNaN(data8)){const err30 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1",schema:1,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}if(data.confidence !== undefined){let data9 = data.confidence;if(typeof data9 == "number"){if(data9 > 1 || isNaN(data9)){const err31 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1",schema:1,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if(data9 < 0 || isNaN(data9)){const err32 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0",schema:0,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema37.properties.confidence.type,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}if(data.label !== undefined){let data10 = data.label;if(typeof data10 === "string"){if(func1(data10) < 1){const err34 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema37.properties.label,data:data10};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else {const err35 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.label.type,parentSchema:schema37.properties.label,data:data10};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}if(data.trace !== undefined){let data11 = data.trace;if(typeof data11 !== "string"){const err36 = {instancePath:instancePath+"/trace",schemaPath:"#/properties/trace/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.trace.type,parentSchema:schema37.properties.trace,data:data11};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}if(data.verified_at !== undefined){let data12 = data.verified_at;if(typeof data12 === "string"){if(!pattern8.test(data12)){const err37 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}if(!(formats0.test(data12))){const err38 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}if(data.verified_against !== undefined){let data13 = data.verified_against;if(typeof data13 !== "string"){const err40 = {instancePath:instancePath+"/verified_against",schemaPath:"#/properties/verified_against/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.verified_against.type,parentSchema:schema37.properties.verified_against,data:data13};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.valid_from !== undefined){let data14 = data.valid_from;const _errs42 = errors;let valid14 = true;const _errs43 = errors;if(typeof data14 === "string"){if(!pattern8.test(data14)){const err41 = {};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}var _valid3 = _errs43 === errors;errors = _errs42;if(vErrors !== null){if(_errs42){vErrors.length = _errs42;}else {vErrors = null;}}if(_valid3){const _errs44 = errors;if(typeof data14 === "string"){if(!(formats0.test(data14))){const err42 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/then/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema41.then,data:data14};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var _valid3 = _errs44 === errors;valid14 = _valid3;}if(!valid14){const err43 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema41.if,parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}if(typeof data14 === "string"){if(!pattern16.test(data14)){const err44 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/pattern",keyword:"pattern",params:{pattern: "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$"},message:"must match pattern \""+"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$"+"\"",schema:"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$",parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema41.type,parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.source_tier !== undefined){let data15 = data.source_tier;if(!((typeof data15 == "number") && (!(data15 % 1) && !isNaN(data15)))){const err46 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema37.properties.source_tier.type,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}if(typeof data15 == "number"){if(data15 > 10 || isNaN(data15)){const err47 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/maximum",keyword:"maximum",params:{comparison: "<=", limit: 10},message:"must be <= 10",schema:10,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}if(data15 < 1 || isNaN(data15)){const err48 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1",schema:1,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}}if(data.source_kind !== undefined){let data16 = data.source_kind;if(typeof data16 !== "string"){const err49 = {instancePath:instancePath+"/source_kind",schemaPath:"#/properties/source_kind/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.source_kind.type,parentSchema:schema37.properties.source_kind,data:data16};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}if(data.owner !== undefined){let data17 = data.owner;if(typeof data17 !== "string"){const err50 = {instancePath:instancePath+"/owner",schemaPath:"#/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.owner.type,parentSchema:schema37.properties.owner,data:data17};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}if(data.drive_kind !== undefined){let data18 = data.drive_kind;if(typeof data18 !== "string"){const err51 = {instancePath:instancePath+"/drive_kind",schemaPath:"#/properties/drive_kind/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.drive_kind.type,parentSchema:schema37.properties.drive_kind,data:data18};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.evidence_class !== undefined){let data19 = data.evidence_class;if(typeof data19 !== "string"){const err52 = {instancePath:instancePath+"/evidence_class",schemaPath:"#/properties/evidence_class/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.evidence_class.type,parentSchema:schema37.properties.evidence_class,data:data19};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}}if(data.sealed_by !== undefined){let data20 = data.sealed_by;if(typeof data20 !== "string"){const err53 = {instancePath:instancePath+"/sealed_by",schemaPath:"#/properties/sealed_by/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.sealed_by.type,parentSchema:schema37.properties.sealed_by,data:data20};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}}if(data.sealed_at !== undefined){let data21 = data.sealed_at;if(typeof data21 !== "string"){const err54 = {instancePath:instancePath+"/sealed_at",schemaPath:"#/properties/sealed_at/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.sealed_at.type,parentSchema:schema37.properties.sealed_at,data:data21};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}}if(data.narrative !== undefined){let data22 = data.narrative;if(typeof data22 !== "string"){const err55 = {instancePath:instancePath+"/narrative",schemaPath:"#/properties/narrative/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.narrative.type,parentSchema:schema37.properties.narrative,data:data22};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data.provenance !== undefined){let data23 = data.provenance;if(data23 && typeof data23 == "object" && !Array.isArray(data23)){if(data23.source === undefined){const err56 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "source"},message:"must have required property '"+"source"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}if(data23.locator === undefined){const err57 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "locator"},message:"must have required property '"+"locator"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}if(data23.method === undefined){const err58 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "method"},message:"must have required property '"+"method"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}if(data23.source !== undefined){let data24 = data23.source;const _errs66 = errors;const _errs67 = errors;if(errors === _errs67){if(typeof data24 === "string"){if(!pattern17.test(data24)){const err59 = {};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}else {const err60 = {};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}}var valid17 = _errs67 === errors;if(valid17){const err61 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema42.properties.source.not,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}else {errors = _errs66;if(vErrors !== null){if(_errs66){vErrors.length = _errs66;}else {vErrors = null;}}}if(typeof data24 === "string"){if(func1(data24) < 1){const err62 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}}else {const err63 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.source.type,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}if(data23.locator !== undefined){let data25 = data23.locator;if(typeof data25 === "string"){if(func1(data25) < 1){const err64 = {instancePath:instancePath+"/provenance/locator",schemaPath:"#/$defs/provenance/properties/locator/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.locator,data:data25};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/provenance/locator",schemaPath:"#/$defs/provenance/properties/locator/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.locator.type,parentSchema:schema42.properties.locator,data:data25};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data23.method !== undefined){let data26 = data23.method;if(typeof data26 === "string"){if(func1(data26) < 1){const err66 = {instancePath:instancePath+"/provenance/method",schemaPath:"#/$defs/provenance/properties/method/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.method,data:data26};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}}else {const err67 = {instancePath:instancePath+"/provenance/method",schemaPath:"#/$defs/provenance/properties/method/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.method.type,parentSchema:schema42.properties.method,data:data26};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}}else {const err68 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema42.type,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}}else {const err69 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema37.type,parentSchema:schema37,data};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}validate23.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate23.evaluated = {"dynamicProps":true,"dynamicItems":false};const schema43 = {"type":"object","required":["from","to","edge_type"],"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/nodeId"},"edge_type":{"enum":["SUPPORTS","REFUTES","SUPERSEDES","CAUSES","DEPENDS_ON","TRACES_TO","CONSTRAINS","HAS_STATE","TRANSITIONS","EMITS","READS","WRITES"]},"label":{"type":"string"},"trigger":{"$ref":"#/$defs/nodeId"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","on","to","trigger"]}]}}};function validate25(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate25.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.from === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "from"},message:"must have required property '"+"from"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.to === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "to"},message:"must have required property '"+"to"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.edge_type === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edge_type"},message:"must have required property '"+"edge_type"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema43.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(!((((((key0 === "edge_type") || (key0 === "from")) || (key0 === "label")) || (key0 === "on")) || (key0 === "to")) || (key0 === "trigger"))){const err5 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema43.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema43.propertyNames.else.allOf[1].enum,parentSchema:schema43.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err6 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema43.propertyNames.if,parentSchema:schema43.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err7 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema43.propertyNames,parentSchema:schema43,data};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.from !== undefined){let data0 = data.from;if(typeof data0 === "string"){if(!pattern13.test(data0)){const err8 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data0};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data0};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.to !== undefined){let data1 = data.to;if(typeof data1 === "string"){if(!pattern13.test(data1)){const err10 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.edge_type !== undefined){let data2 = data.edge_type;if(!((((((((((((data2 === "SUPPORTS") || (data2 === "REFUTES")) || (data2 === "SUPERSEDES")) || (data2 === "CAUSES")) || (data2 === "DEPENDS_ON")) || (data2 === "TRACES_TO")) || (data2 === "CONSTRAINS")) || (data2 === "HAS_STATE")) || (data2 === "TRANSITIONS")) || (data2 === "EMITS")) || (data2 === "READS")) || (data2 === "WRITES"))){const err12 = {instancePath:instancePath+"/edge_type",schemaPath:"#/properties/edge_type/enum",keyword:"enum",params:{allowedValues: schema43.properties.edge_type.enum},message:"must be equal to one of the allowed values",schema:schema43.properties.edge_type.enum,parentSchema:schema43.properties.edge_type,data:data2};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 !== "string"){const err13 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema43.properties.label.type,parentSchema:schema43.properties.label,data:data3};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.trigger !== undefined){let data4 = data.trigger;if(typeof data4 === "string"){if(!pattern13.test(data4)){const err14 = {instancePath:instancePath+"/trigger",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data4};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/trigger",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data4};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}else {const err16 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema43.type,parentSchema:schema43,data};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}validate25.errors = vErrors;return errors === 0;}validate25.evaluated = {"props":{"from":true,"to":true,"edge_type":true,"label":true,"trigger":true},"dynamicProps":false,"dynamicItems":false};const schema47 = {"description":"Aresta entre grafos (v4.3): exatamente uma ponta externa (<caminho>#<id>), a outra um id deste arquivo; from ausente vale o grafo inteiro. Só os tipos da camada audit.","type":"object","required":["to","edge_type"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"edge_type":{"enum":["SUPERSEDES","CONSTRAINS","SUPPORTS","REFUTES","TRACES_TO","DEPENDS_ON"]},"label":{"type":"string"}},"if":{"required":["from"],"properties":{"from":{"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"}}},"then":{"properties":{"to":{"$ref":"#/$defs/nodeId"}}},"else":{"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/externalRef"}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","to"]}]}}};const schema50 = {"type":"string","pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$","description":"Referência a um nó de outro grafo do mesmo repo: <caminho relativo à raiz do repo>#<id>. Os segmentos do caminho começam por letra, dígito ou _ e só levam [A-Za-z0-9_.-]: sem / inicial, sem . ou .., sem \\, sem :."};const pattern23 = new RegExp("^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$", "u");function validate27(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate27.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.from === undefined) && (missing0 = "from")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.from !== undefined){let data0 = data.from;if(typeof data0 === "string"){if(!pattern23.test(data0)){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.to !== undefined){let data1 = data.to;if(typeof data1 === "string"){if(!pattern13.test(data1)){const err2 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}else {const err3 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}var _valid0 = _errs4 === errors;valid0 = _valid0;if(valid0){var props0 = {};props0.to = true;props0.from = true;}ifClause0 = "then";}else {const _errs8 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.from !== undefined){let data2 = data.from;if(typeof data2 === "string"){if(!pattern13.test(data2)){const err4 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data2};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data2};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.to !== undefined){let data3 = data.to;if(typeof data3 === "string"){if(!pattern23.test(data3)){const err6 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/externalRef/pattern",keyword:"pattern",params:{pattern: "^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema50,data:data3};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/externalRef/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema50.type,parentSchema:schema50,data:data3};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}var _valid0 = _errs8 === errors;valid0 = _valid0;if(valid0){if(props0 !== true){props0 = props0 || {};props0.from = true;props0.to = true;}}ifClause0 = "else";}if(!valid0){const err8 = {instancePath,schemaPath:"#/if",keyword:"if",params:{failingKeyword: ifClause0},message:"must match \""+ifClause0+"\" schema",schema:schema47.if,parentSchema:schema47,data};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.to === undefined){const err9 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "to"},message:"must have required property '"+"to"+"'",schema:schema47.required,parentSchema:schema47,data};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data.edge_type === undefined){const err10 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edge_type"},message:"must have required property '"+"edge_type"+"'",schema:schema47.required,parentSchema:schema47,data};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key0 in data){const _errs15 = errors;const _errs16 = errors;let valid8 = true;const _errs17 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err11 = {};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}var _valid1 = _errs17 === errors;errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}if(!_valid1){const _errs18 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err12 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema47.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(!((((key0 === "edge_type") || (key0 === "from")) || (key0 === "label")) || (key0 === "to"))){const err13 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema47.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema47.propertyNames.else.allOf[1].enum,parentSchema:schema47.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}var _valid1 = _errs18 === errors;valid8 = _valid1;}if(!valid8){const err14 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema47.propertyNames.if,parentSchema:schema47.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}var valid7 = _errs15 === errors;if(!valid7){const err15 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema47.propertyNames,parentSchema:schema47,data};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.from = true;props0.to = true;props0.edge_type = true;props0.label = true;}if(data.from !== undefined){let data4 = data.from;if(typeof data4 !== "string"){const err16 = {instancePath:instancePath+"/from",schemaPath:"#/properties/from/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.from.type,parentSchema:schema47.properties.from,data:data4};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.to !== undefined){let data5 = data.to;if(typeof data5 !== "string"){const err17 = {instancePath:instancePath+"/to",schemaPath:"#/properties/to/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.to.type,parentSchema:schema47.properties.to,data:data5};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.edge_type !== undefined){let data6 = data.edge_type;if(!((((((data6 === "SUPERSEDES") || (data6 === "CONSTRAINS")) || (data6 === "SUPPORTS")) || (data6 === "REFUTES")) || (data6 === "TRACES_TO")) || (data6 === "DEPENDS_ON"))){const err18 = {instancePath:instancePath+"/edge_type",schemaPath:"#/properties/edge_type/enum",keyword:"enum",params:{allowedValues: schema47.properties.edge_type.enum},message:"must be equal to one of the allowed values",schema:schema47.properties.edge_type.enum,parentSchema:schema47.properties.edge_type,data:data6};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.label !== undefined){let data7 = data.label;if(typeof data7 !== "string"){const err19 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.label.type,parentSchema:schema47.properties.label,data:data7};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema47.type,parentSchema:schema47,data};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}validate27.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate27.evaluated = {"dynamicProps":true,"dynamicItems":false};function validate20(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL="urn:kg-ssot:spec:kg-contract-v4.schema.json" */;let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.meta === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "meta"},message:"must have required property '"+"meta"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.nodes === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "nodes"},message:"must have required property '"+"nodes"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.edges === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edges"},message:"must have required property '"+"edges"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(!((((key0 === "edges") || (key0 === "external_edges")) || (key0 === "meta")) || (key0 === "nodes"))){const err5 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema31.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema31.propertyNames.else.allOf[1].enum,parentSchema:schema31.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err6 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema31.propertyNames.if,parentSchema:schema31.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err7 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema31.propertyNames,parentSchema:schema31,data};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.meta !== undefined){if(!(validate21(data.meta, {instancePath:instancePath+"/meta",parentData:data,parentDataProperty:"meta",rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}}if(data.nodes !== undefined){let data1 = data.nodes;if(Array.isArray(data1)){const len0 = data1.length;for(let i0=0; i0<len0; i0++){if(!(validate23(data1[i0], {instancePath:instancePath+"/nodes/" + i0,parentData:data1,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}}else {const err8 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.nodes.type,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.edges !== undefined){let data3 = data.edges;if(Array.isArray(data3)){const len1 = data3.length;for(let i1=0; i1<len1; i1++){if(!(validate25(data3[i1], {instancePath:instancePath+"/edges/" + i1,parentData:data3,parentDataProperty:i1,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}}}else {const err9 = {instancePath:instancePath+"/edges",schemaPath:"#/properties/edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.edges.type,parentSchema:schema31.properties.edges,data:data3};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.external_edges !== undefined){let data5 = data.external_edges;if(Array.isArray(data5)){const len2 = data5.length;for(let i2=0; i2<len2; i2++){if(!(validate27(data5[i2], {instancePath:instancePath+"/external_edges/" + i2,parentData:data5,parentDataProperty:i2,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate27.errors : vErrors.concat(validate27.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+"/external_edges",schemaPath:"#/properties/external_edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.external_edges.type,parentSchema:schema31.properties.external_edges,data:data5};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {"props":{"meta":true,"nodes":true,"edges":true,"external_edges":true},"dynamicProps":false,"dynamicItems":false};
|
|
1
|
+
"use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:kg-ssot:spec:kg-contract-v4.schema.json","title":"kg.yaml — contrato v4, nível MUST","description":"O contrato v4 do .kg.yaml, nível MUST (reprova), o vigente (substitui o v3). É o v3 com três promoções a MUST. (1) Proveniência estruturada: nó confirmed ou PROD exige provenance com source, locator e method (form.required.node.provenance), que no v3 só alertava; status unverifiable não exige, mesmo em PROD, porque é o destino do nó sem fonte recuperável. (2) Fonte que não é placeholder: provenance.source não pode ser placeholder: só espaço, ou um destes sozinho, sem distinguir maiúscula e com pontuação final (. ou :) e espaço em volta (inclusive NBSP, espaço ideográfico, BOM e espaço de largura zero) ignorados: desconhecida, desconhecido, unknown, n/a, n / a, na, n.a., none, null, sem fonte, tbd, um ou mais hífens, travessão, meia-risca, ?. A regra é um not+pattern sem lookahead, portável a leitores RE2: form.pattern.node.provenance.source. O vazio segue form.range.node.provenance.source, como no v3. Origem que é uma pessoa ou sessão recuperável é fonte válida, com method de testemunho. (3) Política de extensão: chave desconhecida sem o prefixo x_ no topo, no meta, no nó e na aresta reprova (form.unknown-key.<escopo>.<chave>), com a mesma lista de chaves conhecidas que o SHOULD v3 usava; nome sem x_ que nem é slug reprova como form.pattern.<escopo>.key. Chave x_ segue livre, e x_ com nome que não é slug só alerta. A chave on da aresta segue na lista porque já reprova como yaml.forbidden-key-on. Dentro de provenance, a chave desconhecida segue SHOULD. O resto é o v3: escrito à mão em JSON Schema 2020-12; PROD sem verified_at é SHOULD e o gatilho de TRANSITIONS é trigger; narrative no nó, note e purpose no meta, data no calendário (format: date é ASSERÇÃO) e .nan ou .inf reprovando como tipo; provenance, quando presente, com os três campos não vazios, e provenance: null reprova. O par SHOULD é kg-contract-v4.should.schema.json; as regras de perfil YAML (chave on proibida, chave duplicada, documento único) são do leitor, porque o JSON não as vê. No v4.3 entra external_edges, opcional, no topo: arestas entre grafos com uma ponta externa <caminho>#<id> e a outra local (ou o grafo inteiro, com from ausente), nos tipos SUPERSEDES, CONSTRAINS, SUPPORTS, REFUTES, TRACES_TO e DEPENDS_ON. A ponta local tem de existir (integrity.dangling-external-local); com o corpus, o arquivo e o id da ponta externa também (integrity.dangling-external). A chave é opcional: um grafo que não a usa tem o mesmo veredito do v4.2. No v4.5 entra a chave verified_scope, opcional: o alcance do que o verified_at conferiu. O valor é julgado pelo SHOULD (o enum fato, mecanismo, nenhum), como a provenance.locality.","type":"object","required":["meta","nodes","edges"],"properties":{"meta":{"$ref":"#/$defs/meta"},"nodes":{"type":"array","items":{"$ref":"#/$defs/node"}},"edges":{"type":"array","items":{"$ref":"#/$defs/edge"}},"external_edges":{"type":"array","items":{"$ref":"#/$defs/externalEdge"}}},"$defs":{"date":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$","format":"date"},"partialDate":{"type":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$","if":{"pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},"then":{"format":"date"}},"nodeId":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]*$"},"layer":{"enum":["audit","domain"]},"meta":{"type":"object","required":["schema_version","id"],"properties":{"schema_version":{"const":"1"},"id":{"type":"string","minLength":1},"baseline":{"$ref":"#/$defs/date"},"date":{"$ref":"#/$defs/date"},"review_after":{"$ref":"#/$defs/date"},"layer":{"$ref":"#/$defs/layer"},"note":{"type":"string"},"purpose":{"type":"string"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["baseline","date","id","layer","note","purpose","review_after","schema_version"]}]}}},"node":{"type":"object","required":["id","node_type","plane","status","impact","confidence","label"],"properties":{"id":{"$ref":"#/$defs/nodeId"},"node_type":{"enum":["entity","claim","decision","question","evidence","artifact","state","event","rule","invariant","policy"]},"layer":{"$ref":"#/$defs/layer"},"plane":{"enum":["DEV","PROD"]},"status":{"enum":["open","confirmed","drifted","unverifiable","refuted","superseded","done"]},"impact":{"type":"integer","minimum":1,"maximum":5},"confidence":{"type":"number","minimum":0,"maximum":1},"label":{"type":"string","minLength":1},"trace":{"type":"string"},"verified_at":{"$ref":"#/$defs/date"},"verified_against":{"type":"string"},"verified_scope":{},"valid_from":{"$ref":"#/$defs/partialDate"},"source_tier":{"type":"integer","minimum":1,"maximum":10},"source_kind":{"type":"string"},"owner":{"type":"string"},"drive_kind":{"type":"string"},"evidence_class":{"type":"string"},"sealed_by":{"type":"string"},"sealed_at":{"type":"string"},"narrative":{"type":"string"},"provenance":{"$ref":"#/$defs/provenance"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["confidence","drive_kind","evidence_class","id","impact","label","layer","narrative","node_type","owner","plane","provenance","sealed_at","sealed_by","source_kind","source_tier","status","trace","valid_from","verified_against","verified_at","verified_scope"]}]}},"if":{"anyOf":[{"properties":{"status":{"const":"confirmed"}},"required":["status"]},{"properties":{"plane":{"const":"PROD"}},"required":["plane"]}],"not":{"properties":{"status":{"const":"unverifiable"}},"required":["status"]}},"then":{"required":["provenance"]}},"edge":{"type":"object","required":["from","to","edge_type"],"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/nodeId"},"edge_type":{"enum":["SUPPORTS","REFUTES","SUPERSEDES","CAUSES","DEPENDS_ON","TRACES_TO","CONSTRAINS","HAS_STATE","TRANSITIONS","EMITS","READS","WRITES"]},"label":{"type":"string"},"trigger":{"$ref":"#/$defs/nodeId"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","on","to","trigger"]}]}}},"provenance":{"type":"object","required":["source","locator","method"],"properties":{"source":{"type":"string","minLength":1,"not":{"type":"string","pattern":"^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$"}},"locator":{"type":"string","minLength":1},"method":{"type":"string","minLength":1}}},"externalRef":{"type":"string","pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$","description":"Referência a um nó de outro grafo do mesmo repo: <caminho relativo à raiz do repo>#<id>. Os segmentos do caminho começam por letra, dígito ou _ e só levam [A-Za-z0-9_.-]: sem / inicial, sem . ou .., sem \\, sem :."},"externalEdge":{"description":"Aresta entre grafos (v4.3): exatamente uma ponta externa (<caminho>#<id>), a outra um id deste arquivo; from ausente vale o grafo inteiro. Só os tipos da camada audit.","type":"object","required":["to","edge_type"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"edge_type":{"enum":["SUPERSEDES","CONSTRAINS","SUPPORTS","REFUTES","TRACES_TO","DEPENDS_ON"]},"label":{"type":"string"}},"if":{"required":["from"],"properties":{"from":{"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"}}},"then":{"properties":{"to":{"$ref":"#/$defs/nodeId"}}},"else":{"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/externalRef"}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","to"]}]}}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edges","external_edges","meta","nodes"]}]}}};const pattern4 = new RegExp("^x_", "u");const pattern5 = new RegExp("^[A-Za-z_][A-Za-z0-9_-]*$", "u");const schema32 = {"type":"object","required":["schema_version","id"],"properties":{"schema_version":{"const":"1"},"id":{"type":"string","minLength":1},"baseline":{"$ref":"#/$defs/date"},"date":{"$ref":"#/$defs/date"},"review_after":{"$ref":"#/$defs/date"},"layer":{"$ref":"#/$defs/layer"},"note":{"type":"string"},"purpose":{"type":"string"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["baseline","date","id","layer","note","purpose","review_after","schema_version"]}]}}};const schema33 = {"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$","format":"date"};const schema36 = {"enum":["audit","domain"]};const pattern8 = new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "u");import func1_mod from "ajv/dist/runtime/ucs2length.js";const func1 = func1_mod.default;const formats0 = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;function validate21(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate21.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.schema_version === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "schema_version"},message:"must have required property '"+"schema_version"+"'",schema:schema32.required,parentSchema:schema32,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.id === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "id"},message:"must have required property '"+"id"+"'",schema:schema32.required,parentSchema:schema32,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err2 = {};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err3 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema32.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}if(!((((((((key0 === "baseline") || (key0 === "date")) || (key0 === "id")) || (key0 === "layer")) || (key0 === "note")) || (key0 === "purpose")) || (key0 === "review_after")) || (key0 === "schema_version"))){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema32.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema32.propertyNames.else.allOf[1].enum,parentSchema:schema32.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err5 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema32.propertyNames.if,parentSchema:schema32.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err6 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema32.propertyNames,parentSchema:schema32,data};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}if(data.schema_version !== undefined){let data0 = data.schema_version;if("1" !== data0){const err7 = {instancePath:instancePath+"/schema_version",schemaPath:"#/properties/schema_version/const",keyword:"const",params:{allowedValue: "1"},message:"must be equal to constant",schema:"1",parentSchema:schema32.properties.schema_version,data:data0};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.id !== undefined){let data1 = data.id;if(typeof data1 === "string"){if(func1(data1) < 1){const err8 = {instancePath:instancePath+"/id",schemaPath:"#/properties/id/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema32.properties.id,data:data1};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.id.type,parentSchema:schema32.properties.id,data:data1};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.baseline !== undefined){let data2 = data.baseline;if(typeof data2 === "string"){if(!pattern8.test(data2)){const err10 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(!(formats0.test(data2))){const err11 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}else {const err12 = {instancePath:instancePath+"/baseline",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data2};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.date !== undefined){let data3 = data.date;if(typeof data3 === "string"){if(!pattern8.test(data3)){const err13 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(!(formats0.test(data3))){const err14 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/date",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data3};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data.review_after !== undefined){let data4 = data.review_after;if(typeof data4 === "string"){if(!pattern8.test(data4)){const err16 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}if(!(formats0.test(data4))){const err17 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}else {const err18 = {instancePath:instancePath+"/review_after",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data4};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.layer !== undefined){let data5 = data.layer;if(!((data5 === "audit") || (data5 === "domain"))){const err19 = {instancePath:instancePath+"/layer",schemaPath:"#/$defs/layer/enum",keyword:"enum",params:{allowedValues: schema36.enum},message:"must be equal to one of the allowed values",schema:schema36.enum,parentSchema:schema36,data:data5};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}if(data.note !== undefined){let data6 = data.note;if(typeof data6 !== "string"){const err20 = {instancePath:instancePath+"/note",schemaPath:"#/properties/note/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.note.type,parentSchema:schema32.properties.note,data:data6};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}}if(data.purpose !== undefined){let data7 = data.purpose;if(typeof data7 !== "string"){const err21 = {instancePath:instancePath+"/purpose",schemaPath:"#/properties/purpose/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema32.properties.purpose.type,parentSchema:schema32.properties.purpose,data:data7};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}}else {const err22 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema32.type,parentSchema:schema32,data};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}validate21.errors = vErrors;return errors === 0;}validate21.evaluated = {"props":{"schema_version":true,"id":true,"baseline":true,"date":true,"review_after":true,"layer":true,"note":true,"purpose":true},"dynamicProps":false,"dynamicItems":false};const schema37 = {"type":"object","required":["id","node_type","plane","status","impact","confidence","label"],"properties":{"id":{"$ref":"#/$defs/nodeId"},"node_type":{"enum":["entity","claim","decision","question","evidence","artifact","state","event","rule","invariant","policy"]},"layer":{"$ref":"#/$defs/layer"},"plane":{"enum":["DEV","PROD"]},"status":{"enum":["open","confirmed","drifted","unverifiable","refuted","superseded","done"]},"impact":{"type":"integer","minimum":1,"maximum":5},"confidence":{"type":"number","minimum":0,"maximum":1},"label":{"type":"string","minLength":1},"trace":{"type":"string"},"verified_at":{"$ref":"#/$defs/date"},"verified_against":{"type":"string"},"verified_scope":{},"valid_from":{"$ref":"#/$defs/partialDate"},"source_tier":{"type":"integer","minimum":1,"maximum":10},"source_kind":{"type":"string"},"owner":{"type":"string"},"drive_kind":{"type":"string"},"evidence_class":{"type":"string"},"sealed_by":{"type":"string"},"sealed_at":{"type":"string"},"narrative":{"type":"string"},"provenance":{"$ref":"#/$defs/provenance"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["confidence","drive_kind","evidence_class","id","impact","label","layer","narrative","node_type","owner","plane","provenance","sealed_at","sealed_by","source_kind","source_tier","status","trace","valid_from","verified_against","verified_at","verified_scope"]}]}},"if":{"anyOf":[{"properties":{"status":{"const":"confirmed"}},"required":["status"]},{"properties":{"plane":{"const":"PROD"}},"required":["plane"]}],"not":{"properties":{"status":{"const":"unverifiable"}},"required":["status"]}},"then":{"required":["provenance"]}};const schema38 = {"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]*$"};const schema41 = {"type":"string","pattern":"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$","if":{"pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},"then":{"format":"date"}};const schema42 = {"type":"object","required":["source","locator","method"],"properties":{"source":{"type":"string","minLength":1,"not":{"type":"string","pattern":"^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$"}},"locator":{"type":"string","minLength":1},"method":{"type":"string","minLength":1}}};const pattern13 = new RegExp("^[A-Za-z][A-Za-z0-9_]*$", "u");const pattern16 = new RegExp("^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$", "u");const pattern17 = new RegExp("^(?:[ \t\n\r ]+|[ \t\n\r ]*(?:[Dd][Ee][Ss][Cc][Oo][Nn][Hh][Ee][Cc][Ii][Dd][AaOo]|[Uu][Nn][Kk][Nn][Oo][Ww][Nn]|[Nn] ?/? ?[Aa]|[Nn]\\.[Aa]\\.?|[Nn][Oo][Nn][Ee]|[Nn][Uu][Ll][Ll]|[Ss][Ee][Mm] [Ff][Oo][Nn][Tt][Ee]|[Tt][Bb][Dd]|-+|—|–|\\?)[.:]?[ \t\n\r ]*)$", "u");function validate23(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate23.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs1 = errors;let valid0 = true;const _errs2 = errors;const _errs3 = errors;const _errs4 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.status === undefined) && (missing0 = "status")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.status !== undefined){if("unverifiable" !== data.status){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}var valid1 = _errs4 === errors;if(valid1){const err2 = {};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}else {errors = _errs3;if(vErrors !== null){if(_errs3){vErrors.length = _errs3;}else {vErrors = null;}}const _errs6 = errors;let valid3 = false;const _errs7 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing1;if((data.status === undefined) && (missing1 = "status")){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}else {if(data.status !== undefined){if("confirmed" !== data.status){const err4 = {};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}}}var _valid1 = _errs7 === errors;valid3 = valid3 || _valid1;if(_valid1){var props0 = {};props0.status = true;}const _errs9 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing2;if((data.plane === undefined) && (missing2 = "plane")){const err5 = {};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}else {if(data.plane !== undefined){if("PROD" !== data.plane){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}}}var _valid1 = _errs9 === errors;valid3 = valid3 || _valid1;if(_valid1){if(props0 !== true){props0 = props0 || {};props0.plane = true;}}if(!valid3){const err7 = {};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}else {errors = _errs6;if(vErrors !== null){if(_errs6){vErrors.length = _errs6;}else {vErrors = null;}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}if(_valid0){const _errs11 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.provenance === undefined){const err8 = {instancePath,schemaPath:"#/then/required",keyword:"required",params:{missingProperty: "provenance"},message:"must have required property '"+"provenance"+"'",schema:schema37.then.required,parentSchema:schema37.then,data};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}var _valid0 = _errs11 === errors;valid0 = _valid0;}if(!valid0){const err9 = {instancePath,schemaPath:"#/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema37.if,parentSchema:schema37,data};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.id === undefined){const err10 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "id"},message:"must have required property '"+"id"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}if(data.node_type === undefined){const err11 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "node_type"},message:"must have required property '"+"node_type"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}if(data.plane === undefined){const err12 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "plane"},message:"must have required property '"+"plane"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}if(data.status === undefined){const err13 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "status"},message:"must have required property '"+"status"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(data.impact === undefined){const err14 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "impact"},message:"must have required property '"+"impact"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}if(data.confidence === undefined){const err15 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "confidence"},message:"must have required property '"+"confidence"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(data.label === undefined){const err16 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "label"},message:"must have required property '"+"label"+"'",schema:schema37.required,parentSchema:schema37,data};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}for(const key0 in data){const _errs12 = errors;const _errs13 = errors;let valid7 = true;const _errs14 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err17 = {};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}var _valid2 = _errs14 === errors;errors = _errs13;if(vErrors !== null){if(_errs13){vErrors.length = _errs13;}else {vErrors = null;}}if(!_valid2){const _errs15 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err18 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema37.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(!((((((((((((((((((((((key0 === "confidence") || (key0 === "drive_kind")) || (key0 === "evidence_class")) || (key0 === "id")) || (key0 === "impact")) || (key0 === "label")) || (key0 === "layer")) || (key0 === "narrative")) || (key0 === "node_type")) || (key0 === "owner")) || (key0 === "plane")) || (key0 === "provenance")) || (key0 === "sealed_at")) || (key0 === "sealed_by")) || (key0 === "source_kind")) || (key0 === "source_tier")) || (key0 === "status")) || (key0 === "trace")) || (key0 === "valid_from")) || (key0 === "verified_against")) || (key0 === "verified_at")) || (key0 === "verified_scope"))){const err19 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema37.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema37.propertyNames.else.allOf[1].enum,parentSchema:schema37.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}var _valid2 = _errs15 === errors;valid7 = _valid2;}if(!valid7){const err20 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema37.propertyNames.if,parentSchema:schema37.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}var valid6 = _errs12 === errors;if(!valid6){const err21 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema37.propertyNames,parentSchema:schema37,data};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.id = true;props0.node_type = true;props0.layer = true;props0.plane = true;props0.status = true;props0.impact = true;props0.confidence = true;props0.label = true;props0.trace = true;props0.verified_at = true;props0.verified_against = true;props0.verified_scope = true;props0.valid_from = true;props0.source_tier = true;props0.source_kind = true;props0.owner = true;props0.drive_kind = true;props0.evidence_class = true;props0.sealed_by = true;props0.sealed_at = true;props0.narrative = true;props0.provenance = true;}if(data.id !== undefined){let data3 = data.id;if(typeof data3 === "string"){if(!pattern13.test(data3)){const err22 = {instancePath:instancePath+"/id",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data3};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}else {const err23 = {instancePath:instancePath+"/id",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data3};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data.node_type !== undefined){let data4 = data.node_type;if(!(((((((((((data4 === "entity") || (data4 === "claim")) || (data4 === "decision")) || (data4 === "question")) || (data4 === "evidence")) || (data4 === "artifact")) || (data4 === "state")) || (data4 === "event")) || (data4 === "rule")) || (data4 === "invariant")) || (data4 === "policy"))){const err24 = {instancePath:instancePath+"/node_type",schemaPath:"#/properties/node_type/enum",keyword:"enum",params:{allowedValues: schema37.properties.node_type.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.node_type.enum,parentSchema:schema37.properties.node_type,data:data4};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}if(data.layer !== undefined){let data5 = data.layer;if(!((data5 === "audit") || (data5 === "domain"))){const err25 = {instancePath:instancePath+"/layer",schemaPath:"#/$defs/layer/enum",keyword:"enum",params:{allowedValues: schema36.enum},message:"must be equal to one of the allowed values",schema:schema36.enum,parentSchema:schema36,data:data5};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data.plane !== undefined){let data6 = data.plane;if(!((data6 === "DEV") || (data6 === "PROD"))){const err26 = {instancePath:instancePath+"/plane",schemaPath:"#/properties/plane/enum",keyword:"enum",params:{allowedValues: schema37.properties.plane.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.plane.enum,parentSchema:schema37.properties.plane,data:data6};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}if(data.status !== undefined){let data7 = data.status;if(!(((((((data7 === "open") || (data7 === "confirmed")) || (data7 === "drifted")) || (data7 === "unverifiable")) || (data7 === "refuted")) || (data7 === "superseded")) || (data7 === "done"))){const err27 = {instancePath:instancePath+"/status",schemaPath:"#/properties/status/enum",keyword:"enum",params:{allowedValues: schema37.properties.status.enum},message:"must be equal to one of the allowed values",schema:schema37.properties.status.enum,parentSchema:schema37.properties.status,data:data7};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}if(data.impact !== undefined){let data8 = data.impact;if(!((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8)))){const err28 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema37.properties.impact.type,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}if(typeof data8 == "number"){if(data8 > 5 || isNaN(data8)){const err29 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/maximum",keyword:"maximum",params:{comparison: "<=", limit: 5},message:"must be <= 5",schema:5,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}if(data8 < 1 || isNaN(data8)){const err30 = {instancePath:instancePath+"/impact",schemaPath:"#/properties/impact/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1",schema:1,parentSchema:schema37.properties.impact,data:data8};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}if(data.confidence !== undefined){let data9 = data.confidence;if(typeof data9 == "number"){if(data9 > 1 || isNaN(data9)){const err31 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/maximum",keyword:"maximum",params:{comparison: "<=", limit: 1},message:"must be <= 1",schema:1,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}if(data9 < 0 || isNaN(data9)){const err32 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/minimum",keyword:"minimum",params:{comparison: ">=", limit: 0},message:"must be >= 0",schema:0,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+"/confidence",schemaPath:"#/properties/confidence/type",keyword:"type",params:{type: "number"},message:"must be number",schema:schema37.properties.confidence.type,parentSchema:schema37.properties.confidence,data:data9};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}if(data.label !== undefined){let data10 = data.label;if(typeof data10 === "string"){if(func1(data10) < 1){const err34 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema37.properties.label,data:data10};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}else {const err35 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.label.type,parentSchema:schema37.properties.label,data:data10};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}if(data.trace !== undefined){let data11 = data.trace;if(typeof data11 !== "string"){const err36 = {instancePath:instancePath+"/trace",schemaPath:"#/properties/trace/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.trace.type,parentSchema:schema37.properties.trace,data:data11};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}if(data.verified_at !== undefined){let data12 = data.verified_at;if(typeof data12 === "string"){if(!pattern8.test(data12)){const err37 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/pattern",keyword:"pattern",params:{pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},message:"must match pattern \""+"^[0-9]{4}-[0-9]{2}-[0-9]{2}$"+"\"",schema:"^[0-9]{4}-[0-9]{2}-[0-9]{2}$",parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}if(!(formats0.test(data12))){const err38 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}else {const err39 = {instancePath:instancePath+"/verified_at",schemaPath:"#/$defs/date/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema33.type,parentSchema:schema33,data:data12};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}}if(data.verified_against !== undefined){let data13 = data.verified_against;if(typeof data13 !== "string"){const err40 = {instancePath:instancePath+"/verified_against",schemaPath:"#/properties/verified_against/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.verified_against.type,parentSchema:schema37.properties.verified_against,data:data13};if(vErrors === null){vErrors = [err40];}else {vErrors.push(err40);}errors++;}}if(data.valid_from !== undefined){let data14 = data.valid_from;const _errs42 = errors;let valid14 = true;const _errs43 = errors;if(typeof data14 === "string"){if(!pattern8.test(data14)){const err41 = {};if(vErrors === null){vErrors = [err41];}else {vErrors.push(err41);}errors++;}}var _valid3 = _errs43 === errors;errors = _errs42;if(vErrors !== null){if(_errs42){vErrors.length = _errs42;}else {vErrors = null;}}if(_valid3){const _errs44 = errors;if(typeof data14 === "string"){if(!(formats0.test(data14))){const err42 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/then/format",keyword:"format",params:{format: "date"},message:"must match format \""+"date"+"\"",schema:"date",parentSchema:schema41.then,data:data14};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}var _valid3 = _errs44 === errors;valid14 = _valid3;}if(!valid14){const err43 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema41.if,parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}if(typeof data14 === "string"){if(!pattern16.test(data14)){const err44 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/pattern",keyword:"pattern",params:{pattern: "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$"},message:"must match pattern \""+"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$"+"\"",schema:"^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})(-(0[1-9]|1[0-2])(-[0-9]{2})?)?$",parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}else {const err45 = {instancePath:instancePath+"/valid_from",schemaPath:"#/$defs/partialDate/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema41.type,parentSchema:schema41,data:data14};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}if(data.source_tier !== undefined){let data15 = data.source_tier;if(!((typeof data15 == "number") && (!(data15 % 1) && !isNaN(data15)))){const err46 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/type",keyword:"type",params:{type: "integer"},message:"must be integer",schema:schema37.properties.source_tier.type,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}errors++;}if(typeof data15 == "number"){if(data15 > 10 || isNaN(data15)){const err47 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/maximum",keyword:"maximum",params:{comparison: "<=", limit: 10},message:"must be <= 10",schema:10,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err47];}else {vErrors.push(err47);}errors++;}if(data15 < 1 || isNaN(data15)){const err48 = {instancePath:instancePath+"/source_tier",schemaPath:"#/properties/source_tier/minimum",keyword:"minimum",params:{comparison: ">=", limit: 1},message:"must be >= 1",schema:1,parentSchema:schema37.properties.source_tier,data:data15};if(vErrors === null){vErrors = [err48];}else {vErrors.push(err48);}errors++;}}}if(data.source_kind !== undefined){let data16 = data.source_kind;if(typeof data16 !== "string"){const err49 = {instancePath:instancePath+"/source_kind",schemaPath:"#/properties/source_kind/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.source_kind.type,parentSchema:schema37.properties.source_kind,data:data16};if(vErrors === null){vErrors = [err49];}else {vErrors.push(err49);}errors++;}}if(data.owner !== undefined){let data17 = data.owner;if(typeof data17 !== "string"){const err50 = {instancePath:instancePath+"/owner",schemaPath:"#/properties/owner/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.owner.type,parentSchema:schema37.properties.owner,data:data17};if(vErrors === null){vErrors = [err50];}else {vErrors.push(err50);}errors++;}}if(data.drive_kind !== undefined){let data18 = data.drive_kind;if(typeof data18 !== "string"){const err51 = {instancePath:instancePath+"/drive_kind",schemaPath:"#/properties/drive_kind/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.drive_kind.type,parentSchema:schema37.properties.drive_kind,data:data18};if(vErrors === null){vErrors = [err51];}else {vErrors.push(err51);}errors++;}}if(data.evidence_class !== undefined){let data19 = data.evidence_class;if(typeof data19 !== "string"){const err52 = {instancePath:instancePath+"/evidence_class",schemaPath:"#/properties/evidence_class/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.evidence_class.type,parentSchema:schema37.properties.evidence_class,data:data19};if(vErrors === null){vErrors = [err52];}else {vErrors.push(err52);}errors++;}}if(data.sealed_by !== undefined){let data20 = data.sealed_by;if(typeof data20 !== "string"){const err53 = {instancePath:instancePath+"/sealed_by",schemaPath:"#/properties/sealed_by/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.sealed_by.type,parentSchema:schema37.properties.sealed_by,data:data20};if(vErrors === null){vErrors = [err53];}else {vErrors.push(err53);}errors++;}}if(data.sealed_at !== undefined){let data21 = data.sealed_at;if(typeof data21 !== "string"){const err54 = {instancePath:instancePath+"/sealed_at",schemaPath:"#/properties/sealed_at/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.sealed_at.type,parentSchema:schema37.properties.sealed_at,data:data21};if(vErrors === null){vErrors = [err54];}else {vErrors.push(err54);}errors++;}}if(data.narrative !== undefined){let data22 = data.narrative;if(typeof data22 !== "string"){const err55 = {instancePath:instancePath+"/narrative",schemaPath:"#/properties/narrative/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema37.properties.narrative.type,parentSchema:schema37.properties.narrative,data:data22};if(vErrors === null){vErrors = [err55];}else {vErrors.push(err55);}errors++;}}if(data.provenance !== undefined){let data23 = data.provenance;if(data23 && typeof data23 == "object" && !Array.isArray(data23)){if(data23.source === undefined){const err56 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "source"},message:"must have required property '"+"source"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err56];}else {vErrors.push(err56);}errors++;}if(data23.locator === undefined){const err57 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "locator"},message:"must have required property '"+"locator"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err57];}else {vErrors.push(err57);}errors++;}if(data23.method === undefined){const err58 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/required",keyword:"required",params:{missingProperty: "method"},message:"must have required property '"+"method"+"'",schema:schema42.required,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err58];}else {vErrors.push(err58);}errors++;}if(data23.source !== undefined){let data24 = data23.source;const _errs66 = errors;const _errs67 = errors;if(errors === _errs67){if(typeof data24 === "string"){if(!pattern17.test(data24)){const err59 = {};if(vErrors === null){vErrors = [err59];}else {vErrors.push(err59);}errors++;}}else {const err60 = {};if(vErrors === null){vErrors = [err60];}else {vErrors.push(err60);}errors++;}}var valid17 = _errs67 === errors;if(valid17){const err61 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema42.properties.source.not,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err61];}else {vErrors.push(err61);}errors++;}else {errors = _errs66;if(vErrors !== null){if(_errs66){vErrors.length = _errs66;}else {vErrors = null;}}}if(typeof data24 === "string"){if(func1(data24) < 1){const err62 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err62];}else {vErrors.push(err62);}errors++;}}else {const err63 = {instancePath:instancePath+"/provenance/source",schemaPath:"#/$defs/provenance/properties/source/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.source.type,parentSchema:schema42.properties.source,data:data24};if(vErrors === null){vErrors = [err63];}else {vErrors.push(err63);}errors++;}}if(data23.locator !== undefined){let data25 = data23.locator;if(typeof data25 === "string"){if(func1(data25) < 1){const err64 = {instancePath:instancePath+"/provenance/locator",schemaPath:"#/$defs/provenance/properties/locator/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.locator,data:data25};if(vErrors === null){vErrors = [err64];}else {vErrors.push(err64);}errors++;}}else {const err65 = {instancePath:instancePath+"/provenance/locator",schemaPath:"#/$defs/provenance/properties/locator/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.locator.type,parentSchema:schema42.properties.locator,data:data25};if(vErrors === null){vErrors = [err65];}else {vErrors.push(err65);}errors++;}}if(data23.method !== undefined){let data26 = data23.method;if(typeof data26 === "string"){if(func1(data26) < 1){const err66 = {instancePath:instancePath+"/provenance/method",schemaPath:"#/$defs/provenance/properties/method/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema42.properties.method,data:data26};if(vErrors === null){vErrors = [err66];}else {vErrors.push(err66);}errors++;}}else {const err67 = {instancePath:instancePath+"/provenance/method",schemaPath:"#/$defs/provenance/properties/method/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema42.properties.method.type,parentSchema:schema42.properties.method,data:data26};if(vErrors === null){vErrors = [err67];}else {vErrors.push(err67);}errors++;}}}else {const err68 = {instancePath:instancePath+"/provenance",schemaPath:"#/$defs/provenance/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema42.type,parentSchema:schema42,data:data23};if(vErrors === null){vErrors = [err68];}else {vErrors.push(err68);}errors++;}}}else {const err69 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema37.type,parentSchema:schema37,data};if(vErrors === null){vErrors = [err69];}else {vErrors.push(err69);}errors++;}validate23.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate23.evaluated = {"dynamicProps":true,"dynamicItems":false};const schema43 = {"type":"object","required":["from","to","edge_type"],"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/nodeId"},"edge_type":{"enum":["SUPPORTS","REFUTES","SUPERSEDES","CAUSES","DEPENDS_ON","TRACES_TO","CONSTRAINS","HAS_STATE","TRANSITIONS","EMITS","READS","WRITES"]},"label":{"type":"string"},"trigger":{"$ref":"#/$defs/nodeId"}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","on","to","trigger"]}]}}};function validate25(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate25.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.from === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "from"},message:"must have required property '"+"from"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.to === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "to"},message:"must have required property '"+"to"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.edge_type === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edge_type"},message:"must have required property '"+"edge_type"+"'",schema:schema43.required,parentSchema:schema43,data};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema43.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(!((((((key0 === "edge_type") || (key0 === "from")) || (key0 === "label")) || (key0 === "on")) || (key0 === "to")) || (key0 === "trigger"))){const err5 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema43.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema43.propertyNames.else.allOf[1].enum,parentSchema:schema43.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err6 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema43.propertyNames.if,parentSchema:schema43.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err7 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema43.propertyNames,parentSchema:schema43,data};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.from !== undefined){let data0 = data.from;if(typeof data0 === "string"){if(!pattern13.test(data0)){const err8 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data0};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}else {const err9 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data0};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.to !== undefined){let data1 = data.to;if(typeof data1 === "string"){if(!pattern13.test(data1)){const err10 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}else {const err11 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}if(data.edge_type !== undefined){let data2 = data.edge_type;if(!((((((((((((data2 === "SUPPORTS") || (data2 === "REFUTES")) || (data2 === "SUPERSEDES")) || (data2 === "CAUSES")) || (data2 === "DEPENDS_ON")) || (data2 === "TRACES_TO")) || (data2 === "CONSTRAINS")) || (data2 === "HAS_STATE")) || (data2 === "TRANSITIONS")) || (data2 === "EMITS")) || (data2 === "READS")) || (data2 === "WRITES"))){const err12 = {instancePath:instancePath+"/edge_type",schemaPath:"#/properties/edge_type/enum",keyword:"enum",params:{allowedValues: schema43.properties.edge_type.enum},message:"must be equal to one of the allowed values",schema:schema43.properties.edge_type.enum,parentSchema:schema43.properties.edge_type,data:data2};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(data.label !== undefined){let data3 = data.label;if(typeof data3 !== "string"){const err13 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema43.properties.label.type,parentSchema:schema43.properties.label,data:data3};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}if(data.trigger !== undefined){let data4 = data.trigger;if(typeof data4 === "string"){if(!pattern13.test(data4)){const err14 = {instancePath:instancePath+"/trigger",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data4};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}else {const err15 = {instancePath:instancePath+"/trigger",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data4};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}}else {const err16 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema43.type,parentSchema:schema43,data};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}validate25.errors = vErrors;return errors === 0;}validate25.evaluated = {"props":{"from":true,"to":true,"edge_type":true,"label":true,"trigger":true},"dynamicProps":false,"dynamicItems":false};const schema47 = {"description":"Aresta entre grafos (v4.3): exatamente uma ponta externa (<caminho>#<id>), a outra um id deste arquivo; from ausente vale o grafo inteiro. Só os tipos da camada audit.","type":"object","required":["to","edge_type"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"edge_type":{"enum":["SUPERSEDES","CONSTRAINS","SUPPORTS","REFUTES","TRACES_TO","DEPENDS_ON"]},"label":{"type":"string"}},"if":{"required":["from"],"properties":{"from":{"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"}}},"then":{"properties":{"to":{"$ref":"#/$defs/nodeId"}}},"else":{"properties":{"from":{"$ref":"#/$defs/nodeId"},"to":{"$ref":"#/$defs/externalRef"}}},"propertyNames":{"if":{"pattern":"^x_"},"else":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"enum":["edge_type","from","label","to"]}]}}};const schema50 = {"type":"string","pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$","description":"Referência a um nó de outro grafo do mesmo repo: <caminho relativo à raiz do repo>#<id>. Os segmentos do caminho começam por letra, dígito ou _ e só levam [A-Za-z0-9_.-]: sem / inicial, sem . ou .., sem \\, sem :."};const pattern23 = new RegExp("^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$", "u");function validate27(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){let vErrors = null;let errors = 0;const evaluated0 = validate27.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}const _errs1 = errors;let valid0 = true;const _errs2 = errors;if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.from === undefined) && (missing0 = "from")){const err0 = {};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}else {if(data.from !== undefined){let data0 = data.from;if(typeof data0 === "string"){if(!pattern23.test(data0)){const err1 = {};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}}}}var _valid0 = _errs2 === errors;errors = _errs1;if(vErrors !== null){if(_errs1){vErrors.length = _errs1;}else {vErrors = null;}}let ifClause0;if(_valid0){const _errs4 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.to !== undefined){let data1 = data.to;if(typeof data1 === "string"){if(!pattern13.test(data1)){const err2 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}else {const err3 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data1};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}var _valid0 = _errs4 === errors;valid0 = _valid0;if(valid0){var props0 = {};props0.to = true;props0.from = true;}ifClause0 = "then";}else {const _errs8 = errors;if(data && typeof data == "object" && !Array.isArray(data)){if(data.from !== undefined){let data2 = data.from;if(typeof data2 === "string"){if(!pattern13.test(data2)){const err4 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema38,data:data2};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}else {const err5 = {instancePath:instancePath+"/from",schemaPath:"#/$defs/nodeId/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema38.type,parentSchema:schema38,data:data2};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}}if(data.to !== undefined){let data3 = data.to;if(typeof data3 === "string"){if(!pattern23.test(data3)){const err6 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/externalRef/pattern",keyword:"pattern",params:{pattern: "^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"},message:"must match pattern \""+"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$"+"\"",schema:"^(?:[A-Za-z0-9_][A-Za-z0-9_.-]*/)*[A-Za-z0-9_][A-Za-z0-9_.-]*\\.kg\\.yaml#[A-Za-z][A-Za-z0-9_]*$",parentSchema:schema50,data:data3};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}}else {const err7 = {instancePath:instancePath+"/to",schemaPath:"#/$defs/externalRef/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema50.type,parentSchema:schema50,data:data3};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}var _valid0 = _errs8 === errors;valid0 = _valid0;if(valid0){if(props0 !== true){props0 = props0 || {};props0.from = true;props0.to = true;}}ifClause0 = "else";}if(!valid0){const err8 = {instancePath,schemaPath:"#/if",keyword:"if",params:{failingKeyword: ifClause0},message:"must match \""+ifClause0+"\" schema",schema:schema47.if,parentSchema:schema47,data};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.to === undefined){const err9 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "to"},message:"must have required property '"+"to"+"'",schema:schema47.required,parentSchema:schema47,data};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}if(data.edge_type === undefined){const err10 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edge_type"},message:"must have required property '"+"edge_type"+"'",schema:schema47.required,parentSchema:schema47,data};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}for(const key0 in data){const _errs15 = errors;const _errs16 = errors;let valid8 = true;const _errs17 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err11 = {};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}var _valid1 = _errs17 === errors;errors = _errs16;if(vErrors !== null){if(_errs16){vErrors.length = _errs16;}else {vErrors = null;}}if(!_valid1){const _errs18 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err12 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema47.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}if(!((((key0 === "edge_type") || (key0 === "from")) || (key0 === "label")) || (key0 === "to"))){const err13 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema47.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema47.propertyNames.else.allOf[1].enum,parentSchema:schema47.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}var _valid1 = _errs18 === errors;valid8 = _valid1;}if(!valid8){const err14 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema47.propertyNames.if,parentSchema:schema47.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}var valid7 = _errs15 === errors;if(!valid7){const err15 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema47.propertyNames,parentSchema:schema47,data};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.from = true;props0.to = true;props0.edge_type = true;props0.label = true;}if(data.from !== undefined){let data4 = data.from;if(typeof data4 !== "string"){const err16 = {instancePath:instancePath+"/from",schemaPath:"#/properties/from/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.from.type,parentSchema:schema47.properties.from,data:data4};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}if(data.to !== undefined){let data5 = data.to;if(typeof data5 !== "string"){const err17 = {instancePath:instancePath+"/to",schemaPath:"#/properties/to/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.to.type,parentSchema:schema47.properties.to,data:data5};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(data.edge_type !== undefined){let data6 = data.edge_type;if(!((((((data6 === "SUPERSEDES") || (data6 === "CONSTRAINS")) || (data6 === "SUPPORTS")) || (data6 === "REFUTES")) || (data6 === "TRACES_TO")) || (data6 === "DEPENDS_ON"))){const err18 = {instancePath:instancePath+"/edge_type",schemaPath:"#/properties/edge_type/enum",keyword:"enum",params:{allowedValues: schema47.properties.edge_type.enum},message:"must be equal to one of the allowed values",schema:schema47.properties.edge_type.enum,parentSchema:schema47.properties.edge_type,data:data6};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}if(data.label !== undefined){let data7 = data.label;if(typeof data7 !== "string"){const err19 = {instancePath:instancePath+"/label",schemaPath:"#/properties/label/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema47.properties.label.type,parentSchema:schema47.properties.label,data:data7};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}}else {const err20 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema47.type,parentSchema:schema47,data};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}validate27.errors = vErrors;evaluated0.props = props0;return errors === 0;}validate27.evaluated = {"dynamicProps":true,"dynamicItems":false};function validate20(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL="urn:kg-ssot:spec:kg-contract-v4.schema.json" */;let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){if(data.meta === undefined){const err0 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "meta"},message:"must have required property '"+"meta"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}if(data.nodes === undefined){const err1 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "nodes"},message:"must have required property '"+"nodes"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}if(data.edges === undefined){const err2 = {instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: "edges"},message:"must have required property '"+"edges"+"'",schema:schema31.required,parentSchema:schema31,data};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}for(const key0 in data){const _errs1 = errors;const _errs2 = errors;let valid1 = true;const _errs3 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err3 = {};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}var _valid0 = _errs3 === errors;errors = _errs2;if(vErrors !== null){if(_errs2){vErrors.length = _errs2;}else {vErrors = null;}}if(!_valid0){const _errs4 = errors;if(typeof key0 === "string"){if(!pattern5.test(key0)){const err4 = {instancePath,schemaPath:"#/propertyNames/else/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.propertyNames.else.allOf[0],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(!((((key0 === "edges") || (key0 === "external_edges")) || (key0 === "meta")) || (key0 === "nodes"))){const err5 = {instancePath,schemaPath:"#/propertyNames/else/allOf/1/enum",keyword:"enum",params:{allowedValues: schema31.propertyNames.else.allOf[1].enum},message:"must be equal to one of the allowed values",schema:schema31.propertyNames.else.allOf[1].enum,parentSchema:schema31.propertyNames.else.allOf[1],data:key0,propertyName:key0};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}var _valid0 = _errs4 === errors;valid1 = _valid0;}if(!valid1){const err6 = {instancePath,schemaPath:"#/propertyNames/if",keyword:"if",params:{failingKeyword: "else"},message:"must match \"else\" schema",schema:schema31.propertyNames.if,parentSchema:schema31.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}var valid0 = _errs1 === errors;if(!valid0){const err7 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema31.propertyNames,parentSchema:schema31,data};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}if(data.meta !== undefined){if(!(validate21(data.meta, {instancePath:instancePath+"/meta",parentData:data,parentDataProperty:"meta",rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}}if(data.nodes !== undefined){let data1 = data.nodes;if(Array.isArray(data1)){const len0 = data1.length;for(let i0=0; i0<len0; i0++){if(!(validate23(data1[i0], {instancePath:instancePath+"/nodes/" + i0,parentData:data1,parentDataProperty:i0,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}}}else {const err8 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.nodes.type,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}if(data.edges !== undefined){let data3 = data.edges;if(Array.isArray(data3)){const len1 = data3.length;for(let i1=0; i1<len1; i1++){if(!(validate25(data3[i1], {instancePath:instancePath+"/edges/" + i1,parentData:data3,parentDataProperty:i1,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}}}else {const err9 = {instancePath:instancePath+"/edges",schemaPath:"#/properties/edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.edges.type,parentSchema:schema31.properties.edges,data:data3};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}if(data.external_edges !== undefined){let data5 = data.external_edges;if(Array.isArray(data5)){const len2 = data5.length;for(let i2=0; i2<len2; i2++){if(!(validate27(data5[i2], {instancePath:instancePath+"/external_edges/" + i2,parentData:data5,parentDataProperty:i2,rootData,dynamicAnchors}))){vErrors = vErrors === null ? validate27.errors : vErrors.concat(validate27.errors);errors = vErrors.length;}}}else {const err10 = {instancePath:instancePath+"/external_edges",schemaPath:"#/properties/external_edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.external_edges.type,parentSchema:schema31.properties.external_edges,data:data5};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}}else {const err11 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {"props":{"meta":true,"nodes":true,"edges":true,"external_edges":true},"dynamicProps":false,"dynamicItems":false};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kg-ssot",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.0",
|
|
4
4
|
"description": "Leitor JS do contrato do grafo de conhecimento verificável KG-SSOT (.kg.yaml e .kg.json): validador pré-compilado, sem eval, para Node e React Native/Expo.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"knowledge-graph",
|
package/should.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:kg-ssot:spec:kg-contract-v4.should.schema.json","title":"kg.yaml — contrato v4, nível SHOULD","description":"O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida.","type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},"properties":{"meta":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"}},"nodes":{"type":"array","items":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},"properties":{"label":{"maxLength":280},"provenance":{"propertyNames":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"anyOf":[{"enum":["locality","locator","method","source"]},{"pattern":"^x_"}]}]},"properties":{"method":{"pattern":"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"},"locality":{"enum":["host","pessoa","repo","web"]}}}},"allOf":[{"if":{"properties":{"plane":{"const":"PROD"}},"required":["plane"]},"then":{"required":["verified_at"]}},{"if":{"properties":{"node_type":{"const":"claim"}},"required":["node_type","verified_at"]},"then":{"required":["verified_against"]}}]},"minItems":1},"edges":{"type":"array","items":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"}}}}};const pattern4 = new RegExp("^[A-Za-z_][A-Za-z0-9_-]*$", "u");const pattern8 = new RegExp("^x_", "u");const pattern9 = new RegExp("^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]", "u");import func1_mod from "ajv/dist/runtime/ucs2length.js";const func1 = func1_mod.default;function validate20(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL="urn:kg-ssot:spec:kg-contract-v4.should.schema.json" */;let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){for(const key0 in data){const _errs1 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err0 = {instancePath,schemaPath:"#/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}}var valid0 = _errs1 === errors;if(!valid0){const err1 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema31.propertyNames,parentSchema:schema31,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.meta !== undefined){let data0 = data.meta;if(data0 && typeof data0 == "object" && !Array.isArray(data0)){for(const key1 in data0){const _errs4 = errors;if(typeof key1 === "string"){if(!pattern4.test(key1)){const err2 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.meta.propertyNames,data:key1,propertyName:key1};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var valid2 = _errs4 === errors;if(!valid2){const err3 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/propertyNames",keyword:"propertyNames",params:{propertyName: key1},message:"property name must be valid",schema:schema31.properties.meta.propertyNames,parentSchema:schema31.properties.meta,data:data0};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}else {const err4 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.meta.type,parentSchema:schema31.properties.meta,data:data0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.nodes !== undefined){let data1 = data.nodes;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items",schema:1,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];const _errs10 = errors;let valid6 = true;const _errs11 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing0;if((data2.plane === undefined) && (missing0 = "plane")){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}else {if(data2.plane !== undefined){if("PROD" !== data2.plane){const err7 = {};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}}var _valid0 = _errs11 === errors;errors = _errs10;if(vErrors !== null){if(_errs10){vErrors.length = _errs10;}else {vErrors = null;}}if(_valid0){const _errs13 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_at === undefined){const err8 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/0/then/required",keyword:"required",params:{missingProperty: "verified_at"},message:"must have required property '"+"verified_at"+"'",schema:schema31.properties.nodes.items.allOf[0].then.required,parentSchema:schema31.properties.nodes.items.allOf[0].then,data:data2};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}var _valid0 = _errs13 === errors;valid6 = _valid0;}if(!valid6){const err9 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/0/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema31.properties.nodes.items.allOf[0].if,parentSchema:schema31.properties.nodes.items.allOf[0],data:data2};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}const _errs15 = errors;let valid8 = true;const _errs16 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing1;if(((data2.node_type === undefined) && (missing1 = "node_type")) || ((data2.verified_at === undefined) && (missing1 = "verified_at"))){const err10 = {};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}else {if(data2.node_type !== undefined){if("claim" !== data2.node_type){const err11 = {};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}}}}var _valid1 = _errs16 === errors;errors = _errs15;if(vErrors !== null){if(_errs15){vErrors.length = _errs15;}else {vErrors = null;}}if(_valid1){const _errs18 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_against === undefined){const err12 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/1/then/required",keyword:"required",params:{missingProperty: "verified_against"},message:"must have required property '"+"verified_against"+"'",schema:schema31.properties.nodes.items.allOf[1].then.required,parentSchema:schema31.properties.nodes.items.allOf[1].then,data:data2};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}}var _valid1 = _errs18 === errors;valid8 = _valid1;}if(!valid8){const err13 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/1/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema31.properties.nodes.items.allOf[1].if,parentSchema:schema31.properties.nodes.items.allOf[1],data:data2};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}if(data2 && typeof data2 == "object" && !Array.isArray(data2)){for(const key2 in data2){const _errs19 = errors;if(typeof key2 === "string"){if(!pattern4.test(key2)){const err14 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.nodes.items.propertyNames,data:key2,propertyName:key2};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}var valid10 = _errs19 === errors;if(!valid10){const err15 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/propertyNames",keyword:"propertyNames",params:{propertyName: key2},message:"property name must be valid",schema:schema31.properties.nodes.items.propertyNames,parentSchema:schema31.properties.nodes.items,data:data2};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}}if(data2.label !== undefined){let data5 = data2.label;if(typeof data5 === "string"){if(func1(data5) > 280){const err16 = {instancePath:instancePath+"/nodes/" + i0+"/label",schemaPath:"#/properties/nodes/items/properties/label/maxLength",keyword:"maxLength",params:{limit: 280},message:"must NOT have more than 280 characters",schema:280,parentSchema:schema31.properties.nodes.items.properties.label,data:data5};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}}if(data2.provenance !== undefined){let data6 = data2.provenance;if(data6 && typeof data6 == "object" && !Array.isArray(data6)){for(const key3 in data6){const _errs22 = errors;if(typeof key3 === "string"){if(!pattern4.test(key3)){const err17 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[0],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}const _errs25 = errors;let valid14 = false;const _errs26 = errors;if(!((((key3 === "locality") || (key3 === "locator")) || (key3 === "method")) || (key3 === "source"))){const err18 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf/0/enum",keyword:"enum",params:{allowedValues: schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0].enum},message:"must be equal to one of the allowed values",schema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0].enum,parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}var _valid2 = _errs26 === errors;valid14 = valid14 || _valid2;const _errs27 = errors;if(typeof key3 === "string"){if(!pattern8.test(key3)){const err19 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf/1/pattern",keyword:"pattern",params:{pattern: "^x_"},message:"must match pattern \""+"^x_"+"\"",schema:"^x_",parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[1],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}var _valid2 = _errs27 === errors;valid14 = valid14 || _valid2;if(!valid14){const err20 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf",keyword:"anyOf",params:{},message:"must match a schema in anyOf",schema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf,parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}else {errors = _errs25;if(vErrors !== null){if(_errs25){vErrors.length = _errs25;}else {vErrors = null;}}}var valid12 = _errs22 === errors;if(!valid12){const err21 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames",keyword:"propertyNames",params:{propertyName: key3},message:"property name must be valid",schema:schema31.properties.nodes.items.properties.provenance.propertyNames,parentSchema:schema31.properties.nodes.items.properties.provenance,data:data6};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}if(data6.method !== undefined){let data7 = data6.method;if(typeof data7 === "string"){if(!pattern9.test(data7)){const err22 = {instancePath:instancePath+"/nodes/" + i0+"/provenance/method",schemaPath:"#/properties/nodes/items/properties/provenance/properties/method/pattern",keyword:"pattern",params:{pattern: "^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"},message:"must match pattern \""+"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"+"\"",schema:"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]",parentSchema:schema31.properties.nodes.items.properties.provenance.properties.method,data:data7};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}}}if(data6.locality !== undefined){let data8 = data6.locality;if(!((((data8 === "host") || (data8 === "pessoa")) || (data8 === "repo")) || (data8 === "web"))){const err23 = {instancePath:instancePath+"/nodes/" + i0+"/provenance/locality",schemaPath:"#/properties/nodes/items/properties/provenance/properties/locality/enum",keyword:"enum",params:{allowedValues: schema31.properties.nodes.items.properties.provenance.properties.locality.enum},message:"must be equal to one of the allowed values",schema:schema31.properties.nodes.items.properties.provenance.properties.locality.enum,parentSchema:schema31.properties.nodes.items.properties.provenance.properties.locality,data:data8};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}}}}else {const err24 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.nodes.items.type,parentSchema:schema31.properties.nodes.items,data:data2};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}else {const err25 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.nodes.type,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}if(data.edges !== undefined){let data9 = data.edges;if(Array.isArray(data9)){const len1 = data9.length;for(let i1=0; i1<len1; i1++){let data10 = data9[i1];if(data10 && typeof data10 == "object" && !Array.isArray(data10)){for(const key4 in data10){const _errs34 = errors;if(typeof key4 === "string"){if(!pattern4.test(key4)){const err26 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.edges.items.propertyNames,data:key4,propertyName:key4};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}var valid18 = _errs34 === errors;if(!valid18){const err27 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/propertyNames",keyword:"propertyNames",params:{propertyName: key4},message:"property name must be valid",schema:schema31.properties.edges.items.propertyNames,parentSchema:schema31.properties.edges.items,data:data10};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.edges.items.type,parentSchema:schema31.properties.edges.items,data:data10};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}}else {const err29 = {instancePath:instancePath+"/edges",schemaPath:"#/properties/edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.edges.type,parentSchema:schema31.properties.edges,data:data9};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}}else {const err30 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {"props":{"meta":true,"nodes":true,"edges":true},"dynamicProps":false,"dynamicItems":false};
|
|
1
|
+
"use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:kg-ssot:spec:kg-contract-v4.should.schema.json","title":"kg.yaml — contrato v4, nível SHOULD","description":"O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida. No v4.5, provenance.locality ganha privado: documento fora do repo, não público e reverificável por quem tem acesso (Google Drive, wiki interna); o valor segue onde está a cópia lida, não a classificação do documento. Entra verified_scope, opcional, com o enum fato (o que o nó afirma foi conferido), mecanismo (só o mecanismo, como código ou configuração; o fato depende de outro ambiente) ou nenhum (conferido contra o repo na data, e nada ali sustenta nem refuta o fato): o valor fora do enum alerta como form.enum.node.verified_scope, e verified_scope sem verified_at alerta como form.required.node.verified_at. O leitor passa a contar para integrity.refutes-unreconciled a REFUTES que chega a um nó vivo pelas external_edges, quando tem o corpus.","type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},"properties":{"meta":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"}},"nodes":{"type":"array","items":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},"properties":{"label":{"maxLength":280},"provenance":{"propertyNames":{"allOf":[{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"},{"anyOf":[{"enum":["locality","locator","method","source"]},{"pattern":"^x_"}]}]},"properties":{"method":{"pattern":"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"},"locality":{"enum":["host","pessoa","privado","repo","web"]}}},"verified_scope":{"enum":["fato","mecanismo","nenhum"]}},"allOf":[{"if":{"anyOf":[{"properties":{"plane":{"const":"PROD"}},"required":["plane"]},{"required":["verified_scope"]}]},"then":{"required":["verified_at"]}},{"if":{"properties":{"node_type":{"const":"claim"}},"required":["node_type","verified_at"]},"then":{"required":["verified_against"]}}]},"minItems":1},"edges":{"type":"array","items":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_-]*$"}}}}};const pattern4 = new RegExp("^[A-Za-z_][A-Za-z0-9_-]*$", "u");const pattern8 = new RegExp("^x_", "u");const pattern9 = new RegExp("^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]", "u");import func1_mod from "ajv/dist/runtime/ucs2length.js";const func1 = func1_mod.default;function validate20(data, {instancePath="", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){/*# sourceURL="urn:kg-ssot:spec:kg-contract-v4.should.schema.json" */;let vErrors = null;let errors = 0;const evaluated0 = validate20.evaluated;if(evaluated0.dynamicProps){evaluated0.props = undefined;}if(evaluated0.dynamicItems){evaluated0.items = undefined;}if(data && typeof data == "object" && !Array.isArray(data)){for(const key0 in data){const _errs1 = errors;if(typeof key0 === "string"){if(!pattern4.test(key0)){const err0 = {instancePath,schemaPath:"#/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.propertyNames,data:key0,propertyName:key0};if(vErrors === null){vErrors = [err0];}else {vErrors.push(err0);}errors++;}}var valid0 = _errs1 === errors;if(!valid0){const err1 = {instancePath,schemaPath:"#/propertyNames",keyword:"propertyNames",params:{propertyName: key0},message:"property name must be valid",schema:schema31.propertyNames,parentSchema:schema31,data};if(vErrors === null){vErrors = [err1];}else {vErrors.push(err1);}errors++;}}if(data.meta !== undefined){let data0 = data.meta;if(data0 && typeof data0 == "object" && !Array.isArray(data0)){for(const key1 in data0){const _errs4 = errors;if(typeof key1 === "string"){if(!pattern4.test(key1)){const err2 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.meta.propertyNames,data:key1,propertyName:key1};if(vErrors === null){vErrors = [err2];}else {vErrors.push(err2);}errors++;}}var valid2 = _errs4 === errors;if(!valid2){const err3 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/propertyNames",keyword:"propertyNames",params:{propertyName: key1},message:"property name must be valid",schema:schema31.properties.meta.propertyNames,parentSchema:schema31.properties.meta,data:data0};if(vErrors === null){vErrors = [err3];}else {vErrors.push(err3);}errors++;}}}else {const err4 = {instancePath:instancePath+"/meta",schemaPath:"#/properties/meta/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.meta.type,parentSchema:schema31.properties.meta,data:data0};if(vErrors === null){vErrors = [err4];}else {vErrors.push(err4);}errors++;}}if(data.nodes !== undefined){let data1 = data.nodes;if(Array.isArray(data1)){if(data1.length < 1){const err5 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/minItems",keyword:"minItems",params:{limit: 1},message:"must NOT have fewer than 1 items",schema:1,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err5];}else {vErrors.push(err5);}errors++;}const len0 = data1.length;for(let i0=0; i0<len0; i0++){let data2 = data1[i0];const _errs10 = errors;let valid6 = true;const _errs11 = errors;const _errs12 = errors;let valid7 = false;const _errs13 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing0;if((data2.plane === undefined) && (missing0 = "plane")){const err6 = {};if(vErrors === null){vErrors = [err6];}else {vErrors.push(err6);}errors++;}else {if(data2.plane !== undefined){if("PROD" !== data2.plane){const err7 = {};if(vErrors === null){vErrors = [err7];}else {vErrors.push(err7);}errors++;}}}}var _valid1 = _errs13 === errors;valid7 = valid7 || _valid1;if(_valid1){var props0 = {};props0.plane = true;}const _errs15 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing1;if((data2.verified_scope === undefined) && (missing1 = "verified_scope")){const err8 = {};if(vErrors === null){vErrors = [err8];}else {vErrors.push(err8);}errors++;}}var _valid1 = _errs15 === errors;valid7 = valid7 || _valid1;if(!valid7){const err9 = {};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}else {errors = _errs12;if(vErrors !== null){if(_errs12){vErrors.length = _errs12;}else {vErrors = null;}}}var _valid0 = _errs11 === errors;errors = _errs10;if(vErrors !== null){if(_errs10){vErrors.length = _errs10;}else {vErrors = null;}}if(_valid0){const _errs16 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_at === undefined){const err10 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/0/then/required",keyword:"required",params:{missingProperty: "verified_at"},message:"must have required property '"+"verified_at"+"'",schema:schema31.properties.nodes.items.allOf[0].then.required,parentSchema:schema31.properties.nodes.items.allOf[0].then,data:data2};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}errors++;}}var _valid0 = _errs16 === errors;valid6 = _valid0;}if(!valid6){const err11 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/0/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema31.properties.nodes.items.allOf[0].if,parentSchema:schema31.properties.nodes.items.allOf[0],data:data2};if(vErrors === null){vErrors = [err11];}else {vErrors.push(err11);}errors++;}const _errs18 = errors;let valid9 = true;const _errs19 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing2;if(((data2.node_type === undefined) && (missing2 = "node_type")) || ((data2.verified_at === undefined) && (missing2 = "verified_at"))){const err12 = {};if(vErrors === null){vErrors = [err12];}else {vErrors.push(err12);}errors++;}else {if(data2.node_type !== undefined){if("claim" !== data2.node_type){const err13 = {};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}}}}var _valid2 = _errs19 === errors;errors = _errs18;if(vErrors !== null){if(_errs18){vErrors.length = _errs18;}else {vErrors = null;}}if(_valid2){const _errs21 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_against === undefined){const err14 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/1/then/required",keyword:"required",params:{missingProperty: "verified_against"},message:"must have required property '"+"verified_against"+"'",schema:schema31.properties.nodes.items.allOf[1].then.required,parentSchema:schema31.properties.nodes.items.allOf[1].then,data:data2};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}var _valid2 = _errs21 === errors;valid9 = _valid2;}if(!valid9){const err15 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/allOf/1/if",keyword:"if",params:{failingKeyword: "then"},message:"must match \"then\" schema",schema:schema31.properties.nodes.items.allOf[1].if,parentSchema:schema31.properties.nodes.items.allOf[1],data:data2};if(vErrors === null){vErrors = [err15];}else {vErrors.push(err15);}errors++;}if(props0 !== true){props0 = props0 || {};props0.node_type = true;}if(data2 && typeof data2 == "object" && !Array.isArray(data2)){for(const key2 in data2){const _errs22 = errors;if(typeof key2 === "string"){if(!pattern4.test(key2)){const err16 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.nodes.items.propertyNames,data:key2,propertyName:key2};if(vErrors === null){vErrors = [err16];}else {vErrors.push(err16);}errors++;}}var valid11 = _errs22 === errors;if(!valid11){const err17 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/propertyNames",keyword:"propertyNames",params:{propertyName: key2},message:"property name must be valid",schema:schema31.properties.nodes.items.propertyNames,parentSchema:schema31.properties.nodes.items,data:data2};if(vErrors === null){vErrors = [err17];}else {vErrors.push(err17);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.label = true;props0.provenance = true;props0.verified_scope = true;}if(data2.label !== undefined){let data5 = data2.label;if(typeof data5 === "string"){if(func1(data5) > 280){const err18 = {instancePath:instancePath+"/nodes/" + i0+"/label",schemaPath:"#/properties/nodes/items/properties/label/maxLength",keyword:"maxLength",params:{limit: 280},message:"must NOT have more than 280 characters",schema:280,parentSchema:schema31.properties.nodes.items.properties.label,data:data5};if(vErrors === null){vErrors = [err18];}else {vErrors.push(err18);}errors++;}}}if(data2.provenance !== undefined){let data6 = data2.provenance;if(data6 && typeof data6 == "object" && !Array.isArray(data6)){for(const key3 in data6){const _errs25 = errors;if(typeof key3 === "string"){if(!pattern4.test(key3)){const err19 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/0/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[0],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err19];}else {vErrors.push(err19);}errors++;}}const _errs28 = errors;let valid15 = false;const _errs29 = errors;if(!((((key3 === "locality") || (key3 === "locator")) || (key3 === "method")) || (key3 === "source"))){const err20 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf/0/enum",keyword:"enum",params:{allowedValues: schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0].enum},message:"must be equal to one of the allowed values",schema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0].enum,parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[0],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err20];}else {vErrors.push(err20);}errors++;}var _valid3 = _errs29 === errors;valid15 = valid15 || _valid3;const _errs30 = errors;if(typeof key3 === "string"){if(!pattern8.test(key3)){const err21 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf/1/pattern",keyword:"pattern",params:{pattern: "^x_"},message:"must match pattern \""+"^x_"+"\"",schema:"^x_",parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf[1],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err21];}else {vErrors.push(err21);}errors++;}}var _valid3 = _errs30 === errors;valid15 = valid15 || _valid3;if(!valid15){const err22 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames/allOf/1/anyOf",keyword:"anyOf",params:{},message:"must match a schema in anyOf",schema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1].anyOf,parentSchema:schema31.properties.nodes.items.properties.provenance.propertyNames.allOf[1],data:key3,propertyName:key3};if(vErrors === null){vErrors = [err22];}else {vErrors.push(err22);}errors++;}else {errors = _errs28;if(vErrors !== null){if(_errs28){vErrors.length = _errs28;}else {vErrors = null;}}}var valid13 = _errs25 === errors;if(!valid13){const err23 = {instancePath:instancePath+"/nodes/" + i0+"/provenance",schemaPath:"#/properties/nodes/items/properties/provenance/propertyNames",keyword:"propertyNames",params:{propertyName: key3},message:"property name must be valid",schema:schema31.properties.nodes.items.properties.provenance.propertyNames,parentSchema:schema31.properties.nodes.items.properties.provenance,data:data6};if(vErrors === null){vErrors = [err23];}else {vErrors.push(err23);}errors++;}}if(data6.method !== undefined){let data7 = data6.method;if(typeof data7 === "string"){if(!pattern9.test(data7)){const err24 = {instancePath:instancePath+"/nodes/" + i0+"/provenance/method",schemaPath:"#/properties/nodes/items/properties/provenance/properties/method/pattern",keyword:"pattern",params:{pattern: "^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"},message:"must match pattern \""+"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]"+"\"",schema:"^(?:medição|leitura|juízes|derivado|testemunho): [^ \t\n\r]",parentSchema:schema31.properties.nodes.items.properties.provenance.properties.method,data:data7};if(vErrors === null){vErrors = [err24];}else {vErrors.push(err24);}errors++;}}}if(data6.locality !== undefined){let data8 = data6.locality;if(!(((((data8 === "host") || (data8 === "pessoa")) || (data8 === "privado")) || (data8 === "repo")) || (data8 === "web"))){const err25 = {instancePath:instancePath+"/nodes/" + i0+"/provenance/locality",schemaPath:"#/properties/nodes/items/properties/provenance/properties/locality/enum",keyword:"enum",params:{allowedValues: schema31.properties.nodes.items.properties.provenance.properties.locality.enum},message:"must be equal to one of the allowed values",schema:schema31.properties.nodes.items.properties.provenance.properties.locality.enum,parentSchema:schema31.properties.nodes.items.properties.provenance.properties.locality,data:data8};if(vErrors === null){vErrors = [err25];}else {vErrors.push(err25);}errors++;}}}}if(data2.verified_scope !== undefined){let data9 = data2.verified_scope;if(!(((data9 === "fato") || (data9 === "mecanismo")) || (data9 === "nenhum"))){const err26 = {instancePath:instancePath+"/nodes/" + i0+"/verified_scope",schemaPath:"#/properties/nodes/items/properties/verified_scope/enum",keyword:"enum",params:{allowedValues: schema31.properties.nodes.items.properties.verified_scope.enum},message:"must be equal to one of the allowed values",schema:schema31.properties.nodes.items.properties.verified_scope.enum,parentSchema:schema31.properties.nodes.items.properties.verified_scope,data:data9};if(vErrors === null){vErrors = [err26];}else {vErrors.push(err26);}errors++;}}}else {const err27 = {instancePath:instancePath+"/nodes/" + i0,schemaPath:"#/properties/nodes/items/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.nodes.items.type,parentSchema:schema31.properties.nodes.items,data:data2};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}}}else {const err28 = {instancePath:instancePath+"/nodes",schemaPath:"#/properties/nodes/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.nodes.type,parentSchema:schema31.properties.nodes,data:data1};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}if(data.edges !== undefined){let data10 = data.edges;if(Array.isArray(data10)){const len1 = data10.length;for(let i1=0; i1<len1; i1++){let data11 = data10[i1];if(data11 && typeof data11 == "object" && !Array.isArray(data11)){for(const key4 in data11){const _errs38 = errors;if(typeof key4 === "string"){if(!pattern4.test(key4)){const err29 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/propertyNames/pattern",keyword:"pattern",params:{pattern: "^[A-Za-z_][A-Za-z0-9_-]*$"},message:"must match pattern \""+"^[A-Za-z_][A-Za-z0-9_-]*$"+"\"",schema:"^[A-Za-z_][A-Za-z0-9_-]*$",parentSchema:schema31.properties.edges.items.propertyNames,data:key4,propertyName:key4};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}var valid19 = _errs38 === errors;if(!valid19){const err30 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/propertyNames",keyword:"propertyNames",params:{propertyName: key4},message:"property name must be valid",schema:schema31.properties.edges.items.propertyNames,parentSchema:schema31.properties.edges.items,data:data11};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}}else {const err31 = {instancePath:instancePath+"/edges/" + i1,schemaPath:"#/properties/edges/items/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.properties.edges.items.type,parentSchema:schema31.properties.edges.items,data:data11};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}}else {const err32 = {instancePath:instancePath+"/edges",schemaPath:"#/properties/edges/type",keyword:"type",params:{type: "array"},message:"must be array",schema:schema31.properties.edges.type,parentSchema:schema31.properties.edges,data:data10};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}}else {const err33 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}validate20.errors = vErrors;return errors === 0;}validate20.evaluated = {"props":{"meta":true,"nodes":true,"edges":true},"dynamicProps":false,"dynamicItems":false};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "urn:kg-ssot:spec:kg-contract-v4.schema.json",
|
|
4
4
|
"title": "kg.yaml — contrato v4, nível MUST",
|
|
5
|
-
"description": "O contrato v4 do .kg.yaml, nível MUST (reprova), o vigente (substitui o v3). É o v3 com três promoções a MUST. (1) Proveniência estruturada: nó confirmed ou PROD exige provenance com source, locator e method (form.required.node.provenance), que no v3 só alertava; status unverifiable não exige, mesmo em PROD, porque é o destino do nó sem fonte recuperável. (2) Fonte que não é placeholder: provenance.source não pode ser placeholder: só espaço, ou um destes sozinho, sem distinguir maiúscula e com pontuação final (. ou :) e espaço em volta (inclusive NBSP, espaço ideográfico, BOM e espaço de largura zero) ignorados: desconhecida, desconhecido, unknown, n/a, n / a, na, n.a., none, null, sem fonte, tbd, um ou mais hífens, travessão, meia-risca, ?. A regra é um not+pattern sem lookahead, portável a leitores RE2: form.pattern.node.provenance.source. O vazio segue form.range.node.provenance.source, como no v3. Origem que é uma pessoa ou sessão recuperável é fonte válida, com method de testemunho. (3) Política de extensão: chave desconhecida sem o prefixo x_ no topo, no meta, no nó e na aresta reprova (form.unknown-key.<escopo>.<chave>), com a mesma lista de chaves conhecidas que o SHOULD v3 usava; nome sem x_ que nem é slug reprova como form.pattern.<escopo>.key. Chave x_ segue livre, e x_ com nome que não é slug só alerta. A chave on da aresta segue na lista porque já reprova como yaml.forbidden-key-on. Dentro de provenance, a chave desconhecida segue SHOULD. O resto é o v3: escrito à mão em JSON Schema 2020-12; PROD sem verified_at é SHOULD e o gatilho de TRANSITIONS é trigger; narrative no nó, note e purpose no meta, data no calendário (format: date é ASSERÇÃO) e .nan ou .inf reprovando como tipo; provenance, quando presente, com os três campos não vazios, e provenance: null reprova. O par SHOULD é kg-contract-v4.should.schema.json; as regras de perfil YAML (chave on proibida, chave duplicada, documento único) são do leitor, porque o JSON não as vê. No v4.3 entra external_edges, opcional, no topo: arestas entre grafos com uma ponta externa <caminho>#<id> e a outra local (ou o grafo inteiro, com from ausente), nos tipos SUPERSEDES, CONSTRAINS, SUPPORTS, REFUTES, TRACES_TO e DEPENDS_ON. A ponta local tem de existir (integrity.dangling-external-local); com o corpus, o arquivo e o id da ponta externa também (integrity.dangling-external). A chave é opcional: um grafo que não a usa tem o mesmo veredito do v4.2.",
|
|
5
|
+
"description": "O contrato v4 do .kg.yaml, nível MUST (reprova), o vigente (substitui o v3). É o v3 com três promoções a MUST. (1) Proveniência estruturada: nó confirmed ou PROD exige provenance com source, locator e method (form.required.node.provenance), que no v3 só alertava; status unverifiable não exige, mesmo em PROD, porque é o destino do nó sem fonte recuperável. (2) Fonte que não é placeholder: provenance.source não pode ser placeholder: só espaço, ou um destes sozinho, sem distinguir maiúscula e com pontuação final (. ou :) e espaço em volta (inclusive NBSP, espaço ideográfico, BOM e espaço de largura zero) ignorados: desconhecida, desconhecido, unknown, n/a, n / a, na, n.a., none, null, sem fonte, tbd, um ou mais hífens, travessão, meia-risca, ?. A regra é um not+pattern sem lookahead, portável a leitores RE2: form.pattern.node.provenance.source. O vazio segue form.range.node.provenance.source, como no v3. Origem que é uma pessoa ou sessão recuperável é fonte válida, com method de testemunho. (3) Política de extensão: chave desconhecida sem o prefixo x_ no topo, no meta, no nó e na aresta reprova (form.unknown-key.<escopo>.<chave>), com a mesma lista de chaves conhecidas que o SHOULD v3 usava; nome sem x_ que nem é slug reprova como form.pattern.<escopo>.key. Chave x_ segue livre, e x_ com nome que não é slug só alerta. A chave on da aresta segue na lista porque já reprova como yaml.forbidden-key-on. Dentro de provenance, a chave desconhecida segue SHOULD. O resto é o v3: escrito à mão em JSON Schema 2020-12; PROD sem verified_at é SHOULD e o gatilho de TRANSITIONS é trigger; narrative no nó, note e purpose no meta, data no calendário (format: date é ASSERÇÃO) e .nan ou .inf reprovando como tipo; provenance, quando presente, com os três campos não vazios, e provenance: null reprova. O par SHOULD é kg-contract-v4.should.schema.json; as regras de perfil YAML (chave on proibida, chave duplicada, documento único) são do leitor, porque o JSON não as vê. No v4.3 entra external_edges, opcional, no topo: arestas entre grafos com uma ponta externa <caminho>#<id> e a outra local (ou o grafo inteiro, com from ausente), nos tipos SUPERSEDES, CONSTRAINS, SUPPORTS, REFUTES, TRACES_TO e DEPENDS_ON. A ponta local tem de existir (integrity.dangling-external-local); com o corpus, o arquivo e o id da ponta externa também (integrity.dangling-external). A chave é opcional: um grafo que não a usa tem o mesmo veredito do v4.2. No v4.5 entra a chave verified_scope, opcional: o alcance do que o verified_at conferiu. O valor é julgado pelo SHOULD (o enum fato, mecanismo, nenhum), como a provenance.locality.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [
|
|
8
8
|
"meta",
|
|
@@ -189,6 +189,7 @@
|
|
|
189
189
|
"verified_against": {
|
|
190
190
|
"type": "string"
|
|
191
191
|
},
|
|
192
|
+
"verified_scope": {},
|
|
192
193
|
"valid_from": {
|
|
193
194
|
"$ref": "#/$defs/partialDate"
|
|
194
195
|
},
|
|
@@ -253,7 +254,8 @@
|
|
|
253
254
|
"trace",
|
|
254
255
|
"valid_from",
|
|
255
256
|
"verified_against",
|
|
256
|
-
"verified_at"
|
|
257
|
+
"verified_at",
|
|
258
|
+
"verified_scope"
|
|
257
259
|
]
|
|
258
260
|
}
|
|
259
261
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "urn:kg-ssot:spec:kg-contract-v4.should.schema.json",
|
|
4
4
|
"title": "kg.yaml — contrato v4, nível SHOULD",
|
|
5
|
-
"description": "O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida.",
|
|
5
|
+
"description": "O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida. No v4.5, provenance.locality ganha privado: documento fora do repo, não público e reverificável por quem tem acesso (Google Drive, wiki interna); o valor segue onde está a cópia lida, não a classificação do documento. Entra verified_scope, opcional, com o enum fato (o que o nó afirma foi conferido), mecanismo (só o mecanismo, como código ou configuração; o fato depende de outro ambiente) ou nenhum (conferido contra o repo na data, e nada ali sustenta nem refuta o fato): o valor fora do enum alerta como form.enum.node.verified_scope, e verified_scope sem verified_at alerta como form.required.node.verified_at. O leitor passa a contar para integrity.refutes-unreconciled a REFUTES que chega a um nó vivo pelas external_edges, quando tem o corpus.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"propertyNames": {
|
|
8
8
|
"pattern": "^[A-Za-z_][A-Za-z0-9_-]*$"
|
|
@@ -56,23 +56,40 @@
|
|
|
56
56
|
"enum": [
|
|
57
57
|
"host",
|
|
58
58
|
"pessoa",
|
|
59
|
+
"privado",
|
|
59
60
|
"repo",
|
|
60
61
|
"web"
|
|
61
62
|
]
|
|
62
63
|
}
|
|
63
64
|
}
|
|
65
|
+
},
|
|
66
|
+
"verified_scope": {
|
|
67
|
+
"enum": [
|
|
68
|
+
"fato",
|
|
69
|
+
"mecanismo",
|
|
70
|
+
"nenhum"
|
|
71
|
+
]
|
|
64
72
|
}
|
|
65
73
|
},
|
|
66
74
|
"allOf": [
|
|
67
75
|
{
|
|
68
76
|
"if": {
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
"
|
|
77
|
+
"anyOf": [
|
|
78
|
+
{
|
|
79
|
+
"properties": {
|
|
80
|
+
"plane": {
|
|
81
|
+
"const": "PROD"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"required": [
|
|
85
|
+
"plane"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"required": [
|
|
90
|
+
"verified_scope"
|
|
91
|
+
]
|
|
72
92
|
}
|
|
73
|
-
},
|
|
74
|
-
"required": [
|
|
75
|
-
"plane"
|
|
76
93
|
]
|
|
77
94
|
},
|
|
78
95
|
"then": {
|
package/spec/release.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.
|
|
3
|
-
"tag": "kg-ssot-v4.
|
|
2
|
+
"version": "4.13.0",
|
|
3
|
+
"tag": "kg-ssot-v4.13.0",
|
|
4
4
|
"contract": {
|
|
5
5
|
"must": "spec/kg-contract-v4.schema.json",
|
|
6
6
|
"should": "spec/kg-contract-v4.should.schema.json"
|
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
"tools/kg_prov_export.py",
|
|
29
29
|
"tools/kg_store.py",
|
|
30
30
|
"tools/kg_mcp.py",
|
|
31
|
+
"tools/kg_migrate.py",
|
|
32
|
+
"spec/kg-migrate-profile.schema.json",
|
|
33
|
+
"spec/migrate-examples/",
|
|
34
|
+
"tools/test_kg_migrate.py",
|
|
35
|
+
"tools/fixtures/migrate/",
|
|
31
36
|
"tools/requirements.txt",
|
|
32
37
|
"packaging/python/",
|
|
33
38
|
"packaging/npm/",
|