kg-ssot 4.10.0 → 4.12.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 +2 -2
- package/index.d.mts +5 -4
- package/index.mjs +2 -2
- package/kg.mjs +58 -13
- 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 +2 -2
package/README.md
CHANGED
|
@@ -42,8 +42,8 @@ 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.
|
|
46
|
-
`!!timestamp` com texto que não é data e o tab
|
|
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
|
|
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
|
|
49
49
|
|
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).
|
|
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
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// - warnings: os avisos SHOULD (warnings da referência): o schema SHOULD sem o que o MUST já acusa, a data sem
|
|
14
14
|
// aspas, os três avisos do perfil no .kg.yaml (yaml.unsafe-integer, yaml.lone-surrogate, yaml.depth-over-128)
|
|
15
15
|
// e os de coerência (coherence_located).
|
|
16
|
-
import {
|
|
16
|
+
import { Composer, Parser, isAlias, isMap, isPair, isScalar, isSeq } from 'yaml';
|
|
17
17
|
|
|
18
18
|
// format: date é asserção (ADR 002): AAAA-MM-DD que existe no calendário, ano de 0001 a 9999, como o
|
|
19
19
|
// datetime.date.fromisoformat do leitor de referência. É uma regex, e não uma função, para que o validador
|
|
@@ -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
|
|
@@ -40,6 +41,10 @@ const YAML11_TIMESTAMP = new RegExp('^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0
|
|
|
40
41
|
+ '|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[ \\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\\.[0-9]*)?'
|
|
41
42
|
+ '(?:[ \\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$');
|
|
42
43
|
|
|
44
|
+
// O !!timestamp explícito aceito pelo perfil (STRICT_TIMESTAMP da referência): a interseção do construtor do PyYAML com
|
|
45
|
+
// o do yaml, sem tab entre a data e a hora (decisão de contrato de 2026-10-19).
|
|
46
|
+
const STRICT_TIMESTAMP = /^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}(?:(?:[Tt]| +)[0-9]{1,2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]+)?(?: *(?:Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$/;
|
|
47
|
+
|
|
43
48
|
class ParseError extends Error {
|
|
44
49
|
constructor(code) { super(code); this.code = code; }
|
|
45
50
|
}
|
|
@@ -104,7 +109,11 @@ function scalarOf(node) {
|
|
|
104
109
|
const big = src.startsWith('0o') ? BigInt(src) : BigInt(src.replace(/^\+/, ''));
|
|
105
110
|
return { value: Number(big), key: big.toString(), int: true };
|
|
106
111
|
}
|
|
107
|
-
if (tag === `${Y}timestamp`)
|
|
112
|
+
if (tag === `${Y}timestamp`) {
|
|
113
|
+
const src = String(node.source ?? value);
|
|
114
|
+
if (!STRICT_TIMESTAMP.test(src)) throw new ParseError('parse.yaml-error'); // !!timestamp sem data na forma estrita
|
|
115
|
+
return { value: src, key: src };
|
|
116
|
+
}
|
|
108
117
|
if (tag === `${Y}binary`) return { value: BYTES, key: "b''" };
|
|
109
118
|
if (value === null || value === undefined) return { value: null, key: 'null' };
|
|
110
119
|
if (typeof value === 'boolean') return { value, key: String(value) };
|
|
@@ -233,17 +242,38 @@ const codePoints = (text) => {
|
|
|
233
242
|
return n;
|
|
234
243
|
};
|
|
235
244
|
|
|
245
|
+
// O que o perfil recusa já na leitura dos tokens, como o parser puro do PyYAML da referência
|
|
246
|
+
// (decisão de contrato de 2026-10-19, «o mais estrito nos três»): o tab fora de aspas, de bloco e de comentário (no
|
|
247
|
+
// espaço entre tokens ou dentro de um escalar plain) e a tag ! sem nome, também na forma !<!>. Sem recursão.
|
|
248
|
+
function strictTokenError(tokens) {
|
|
249
|
+
const stack = [...tokens];
|
|
250
|
+
while (stack.length) {
|
|
251
|
+
const t = stack.pop();
|
|
252
|
+
if (Array.isArray(t)) { for (const x of t) stack.push(x); continue; } // sem spread: lista enorme estoura a pilha
|
|
253
|
+
if (t === null || typeof t !== 'object') continue;
|
|
254
|
+
if (typeof t.source === 'string') {
|
|
255
|
+
if ((t.type === 'space' || t.type === 'scalar' || t.type === 'directive') && t.source.includes('\t')) return true;
|
|
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
|
+
}
|
|
260
|
+
for (const v of Object.values(t)) if (v !== null && typeof v === 'object') stack.push(v);
|
|
261
|
+
}
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
|
|
236
265
|
/** O parse do .kg.yaml no perfil do contrato: { doc, unquotedDate } ou { code: 'parse.*' }. */
|
|
237
266
|
export function parseYaml(text) {
|
|
238
267
|
let docs;
|
|
239
268
|
try {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
269
|
+
const tokens = Array.from(new Parser().parse(text));
|
|
270
|
+
if (strictTokenError(tokens)) return { code: 'parse.yaml-error' };
|
|
271
|
+
docs = Array.from(new Composer({
|
|
272
|
+
version: '1.2', schema: 'core', uniqueKeys: false, merge: false, maxAliasCount: -1,
|
|
273
|
+
}).compose(tokens));
|
|
243
274
|
} catch {
|
|
244
275
|
return { code: 'parse.yaml-error' }; // aninhamento que estoura a pilha do parser, entre outros
|
|
245
276
|
}
|
|
246
|
-
if (!Array.isArray(docs)) docs = [docs]; // EmptyStream é lista; um documento só também vem como lista
|
|
247
277
|
const raw = [];
|
|
248
278
|
const marks = {};
|
|
249
279
|
try {
|
|
@@ -609,12 +639,22 @@ function containsValue(value, hit) {
|
|
|
609
639
|
}
|
|
610
640
|
|
|
611
641
|
/** Os avisos de coerência, que cruzam campos ou arestas (coherence_located da referência), um por ocorrência:
|
|
612
|
-
* integrity.testimony-in-prod, integrity.verified-before-fact
|
|
613
|
-
|
|
642
|
+
* integrity.testimony-in-prod, integrity.verified-before-fact, integrity.untraced-decision e
|
|
643
|
+
* integrity.refutes-unreconciled. */
|
|
644
|
+
export function coherenceCodes(doc, corpus = null) {
|
|
614
645
|
const out = [];
|
|
615
646
|
const edges = Array.isArray(doc.edges) ? doc.edges : [];
|
|
616
647
|
const traced = new Set(edges.filter((e) => isObj(e) && get(e, 'edge_type') === 'TRACES_TO' && typeof get(e, 'from') === 'string')
|
|
617
648
|
.map((e) => e.from));
|
|
649
|
+
const refuted = new Set(edges.filter((e) => isObj(e) && get(e, 'edge_type') === 'REFUTES' && typeof get(e, 'to') === 'string')
|
|
650
|
+
.map((e) => e.to));
|
|
651
|
+
if (corpus !== null && corpus !== undefined) { // v4.5: a REFUTES que chega de outro grafo, só com o corpus (a ponta externa conferida)
|
|
652
|
+
const ext = Array.isArray(doc.external_edges) ? doc.external_edges : [];
|
|
653
|
+
for (const e of ext) {
|
|
654
|
+
if (isObj(e) && get(e, 'edge_type') === 'REFUTES' && isExternal(get(e, 'from'))
|
|
655
|
+
&& typeof get(e, 'to') === 'string' && !isExternal(get(e, 'to'))) refuted.add(e.to);
|
|
656
|
+
}
|
|
657
|
+
}
|
|
618
658
|
for (const n of located(doc, 'nodes')) {
|
|
619
659
|
const prov = isObj(get(n, 'provenance')) ? n.provenance : {};
|
|
620
660
|
const method = get(prov, 'method');
|
|
@@ -634,6 +674,11 @@ export function coherenceCodes(doc) {
|
|
|
634
674
|
&& !(typeof get(n, 'id') === 'string' && traced.has(n.id))) {
|
|
635
675
|
out.push('integrity.untraced-decision');
|
|
636
676
|
}
|
|
677
|
+
const status = get(n, 'status');
|
|
678
|
+
if (typeof get(n, 'id') === 'string' && refuted.has(n.id) && !['superseded', 'refuted'].includes(status)
|
|
679
|
+
&& !(status === 'done' && get(n, 'node_type') === 'question')) {
|
|
680
|
+
out.push('integrity.refutes-unreconciled');
|
|
681
|
+
}
|
|
637
682
|
}
|
|
638
683
|
return out;
|
|
639
684
|
}
|
|
@@ -650,14 +695,14 @@ export function yamlProfileCodes(doc) {
|
|
|
650
695
|
/** Os códigos SHOULD de um texto (warnings da referência), ordenados e sem repetição: o que o schema SHOULD acusa e o
|
|
651
696
|
* 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
|
|
652
697
|
* recebe aviso. */
|
|
653
|
-
export function warnings(text, validate, validateShould, { format = 'yaml' } = {}) {
|
|
698
|
+
export function warnings(text, validate, validateShould, { format = 'yaml', corpus = null } = {}) {
|
|
654
699
|
const parsed = parse(text, format);
|
|
655
|
-
return parsed.code ? [] : warningsOf(parsed, validate, validateShould, format);
|
|
700
|
+
return parsed.code ? [] : warningsOf(parsed, validate, validateShould, format, null, corpus);
|
|
656
701
|
}
|
|
657
702
|
|
|
658
703
|
// Os avisos de um texto já parseado. mustCodes: os form.* do MUST, se quem chama já os tem (o verdictOf, para não
|
|
659
704
|
// validar duas vezes).
|
|
660
|
-
function warningsOf(parsed, validate, validateShould, format, mustCodes = null) {
|
|
705
|
+
function warningsOf(parsed, validate, validateShould, format, mustCodes = null, corpus = null) {
|
|
661
706
|
const { doc } = parsed;
|
|
662
707
|
let must = mustCodes;
|
|
663
708
|
if (must === null) {
|
|
@@ -670,7 +715,7 @@ function warningsOf(parsed, validate, validateShould, format, mustCodes = null)
|
|
|
670
715
|
if (parsed.unquotedDate) out.add('yaml.unquoted-date');
|
|
671
716
|
for (const c of yamlProfileCodes(doc)) out.add(c);
|
|
672
717
|
}
|
|
673
|
-
for (const c of coherenceCodes(doc)) out.add(c);
|
|
718
|
+
for (const c of coherenceCodes(doc, corpus)) out.add(c);
|
|
674
719
|
return [...out].sort();
|
|
675
720
|
}
|
|
676
721
|
|
|
@@ -683,6 +728,6 @@ export function verdictOf(text, validate, opts = {}) {
|
|
|
683
728
|
return { verdict: 'reject', codes: [parsed.code], warnings: validateShould ? [] : null, detail: '' };
|
|
684
729
|
}
|
|
685
730
|
const { codes: found, mustForm } = docCodesWithForm(parsed.doc, validate, corpus, format);
|
|
686
|
-
const warned = validateShould ? warningsOf(parsed, validate, validateShould, format, mustForm) : null;
|
|
731
|
+
const warned = validateShould ? warningsOf(parsed, validate, validateShould, format, mustForm, corpus) : null;
|
|
687
732
|
return { verdict: found.length ? 'reject' : 'accept', codes: found, warnings: warned, detail: '' };
|
|
688
733
|
}
|
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.12.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.","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.",
|
|
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