kg-ssot 4.15.0 → 4.16.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kg-ssot",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.16.0",
|
|
4
4
|
"description": "Leitor JS do contrato do grafo de conhecimento verificável KG-SSOT (.kg.yaml e .kg.json): validador pré-compilado, sem eval, para Node e React Native/Expo.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"knowledge-graph",
|
package/should.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";export const validate = validate20;export default validate20;const schema31 = {"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"urn:kg-ssot:spec:kg-contract-v4.should.schema.json","title":"kg.yaml — contrato v4, nível SHOULD","description":"O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida. 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. No v4.8, reverify_every e retain_for alertam fora da duração ISO 8601 só com data, ou zerada como P0D (form.pattern.node.reverify_every, form.pattern.node.retain_for), reverify_on vazio ou fora de texto alerta, e reverify_every sem verified_at alerta como form.required.node.verified_at: a cadência conta a partir do carimbo.","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"]},"reverify_every":{"type":"string","allOf":[{"pattern":"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},{"not":{"type":"string","pattern":"^P(?:0+[YMWD])+$"}}]},"reverify_on":{"type":"string","minLength":1},"retain_for":{"type":"string","allOf":[{"pattern":"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},{"not":{"type":"string","pattern":"^P(?:0+[YMWD])+$"}}]}},"allOf":[{"if":{"anyOf":[{"properties":{"plane":{"const":"PROD"}},"required":["plane"]},{"required":["verified_scope"]},{"required":["reverify_every"]}]},"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");const pattern10 = new RegExp("^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$", "u");const pattern11 = new RegExp("^P(?:0+[YMWD])+$", "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;const _errs16 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing2;if((data2.reverify_every === undefined) && (missing2 = "reverify_every")){const err9 = {};if(vErrors === null){vErrors = [err9];}else {vErrors.push(err9);}errors++;}}var _valid1 = _errs16 === errors;valid7 = valid7 || _valid1;if(!valid7){const err10 = {};if(vErrors === null){vErrors = [err10];}else {vErrors.push(err10);}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 _errs17 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_at === undefined){const err11 = {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 = [err11];}else {vErrors.push(err11);}errors++;}}var _valid0 = _errs17 === errors;valid6 = _valid0;}if(!valid6){const err12 = {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 = [err12];}else {vErrors.push(err12);}errors++;}const _errs19 = errors;let valid9 = true;const _errs20 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){let missing3;if(((data2.node_type === undefined) && (missing3 = "node_type")) || ((data2.verified_at === undefined) && (missing3 = "verified_at"))){const err13 = {};if(vErrors === null){vErrors = [err13];}else {vErrors.push(err13);}errors++;}else {if(data2.node_type !== undefined){if("claim" !== data2.node_type){const err14 = {};if(vErrors === null){vErrors = [err14];}else {vErrors.push(err14);}errors++;}}}}var _valid2 = _errs20 === errors;errors = _errs19;if(vErrors !== null){if(_errs19){vErrors.length = _errs19;}else {vErrors = null;}}if(_valid2){const _errs22 = errors;if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.verified_against === undefined){const err15 = {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 = [err15];}else {vErrors.push(err15);}errors++;}}var _valid2 = _errs22 === errors;valid9 = _valid2;}if(!valid9){const err16 = {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 = [err16];}else {vErrors.push(err16);}errors++;}if(props0 !== true){props0 = props0 || {};props0.node_type = true;}if(data2 && typeof data2 == "object" && !Array.isArray(data2)){for(const key2 in data2){const _errs23 = errors;if(typeof key2 === "string"){if(!pattern4.test(key2)){const err17 = {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 = [err17];}else {vErrors.push(err17);}errors++;}}var valid11 = _errs23 === errors;if(!valid11){const err18 = {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 = [err18];}else {vErrors.push(err18);}errors++;}}if(props0 !== true){props0 = props0 || {};props0.label = true;props0.provenance = true;props0.verified_scope = true;props0.reverify_every = true;props0.reverify_on = true;props0.retain_for = true;}if(data2.label !== undefined){let data5 = data2.label;if(typeof data5 === "string"){if(func1(data5) > 280){const err19 = {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 = [err19];}else {vErrors.push(err19);}errors++;}}}if(data2.provenance !== undefined){let data6 = data2.provenance;if(data6 && typeof data6 == "object" && !Array.isArray(data6)){for(const key3 in data6){const _errs26 = errors;if(typeof key3 === "string"){if(!pattern4.test(key3)){const err20 = {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 = [err20];}else {vErrors.push(err20);}errors++;}}const _errs29 = errors;let valid15 = false;const _errs30 = errors;if(!((((key3 === "locality") || (key3 === "locator")) || (key3 === "method")) || (key3 === "source"))){const err21 = {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 = [err21];}else {vErrors.push(err21);}errors++;}var _valid3 = _errs30 === errors;valid15 = valid15 || _valid3;const _errs31 = errors;if(typeof key3 === "string"){if(!pattern8.test(key3)){const err22 = {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 = [err22];}else {vErrors.push(err22);}errors++;}}var _valid3 = _errs31 === errors;valid15 = valid15 || _valid3;if(!valid15){const err23 = {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 = [err23];}else {vErrors.push(err23);}errors++;}else {errors = _errs29;if(vErrors !== null){if(_errs29){vErrors.length = _errs29;}else {vErrors = null;}}}var valid13 = _errs26 === errors;if(!valid13){const err24 = {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 = [err24];}else {vErrors.push(err24);}errors++;}}if(data6.method !== undefined){let data7 = data6.method;if(typeof data7 === "string"){if(!pattern9.test(data7)){const err25 = {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 = [err25];}else {vErrors.push(err25);}errors++;}}}if(data6.locality !== undefined){let data8 = data6.locality;if(!(((((data8 === "host") || (data8 === "pessoa")) || (data8 === "privado")) || (data8 === "repo")) || (data8 === "web"))){const err26 = {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 = [err26];}else {vErrors.push(err26);}errors++;}}}}if(data2.verified_scope !== undefined){let data9 = data2.verified_scope;if(!(((data9 === "fato") || (data9 === "mecanismo")) || (data9 === "nenhum"))){const err27 = {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 = [err27];}else {vErrors.push(err27);}errors++;}}if(data2.reverify_every !== undefined){let data10 = data2.reverify_every;if(typeof data10 !== "string"){const err28 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.reverify_every.type,parentSchema:schema31.properties.nodes.items.properties.reverify_every,data:data10};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}if(typeof data10 === "string"){if(!pattern10.test(data10)){const err29 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/allOf/0/pattern",keyword:"pattern",params:{pattern: "^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},message:"must match pattern \""+"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"+"\"",schema:"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$",parentSchema:schema31.properties.nodes.items.properties.reverify_every.allOf[0],data:data10};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}const _errs39 = errors;const _errs40 = errors;if(errors === _errs40){if(typeof data10 === "string"){if(!pattern11.test(data10)){const err30 = {};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}else {const err31 = {};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}}var valid18 = _errs40 === errors;if(valid18){const err32 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/allOf/1/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema31.properties.nodes.items.properties.reverify_every.allOf[1].not,parentSchema:schema31.properties.nodes.items.properties.reverify_every.allOf[1],data:data10};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}else {errors = _errs39;if(vErrors !== null){if(_errs39){vErrors.length = _errs39;}else {vErrors = null;}}}}if(data2.reverify_on !== undefined){let data11 = data2.reverify_on;if(typeof data11 === "string"){if(func1(data11) < 1){const err33 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_on",schemaPath:"#/properties/nodes/items/properties/reverify_on/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema31.properties.nodes.items.properties.reverify_on,data:data11};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}else {const err34 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_on",schemaPath:"#/properties/nodes/items/properties/reverify_on/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.reverify_on.type,parentSchema:schema31.properties.nodes.items.properties.reverify_on,data:data11};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}}if(data2.retain_for !== undefined){let data12 = data2.retain_for;if(typeof data12 !== "string"){const err35 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.retain_for.type,parentSchema:schema31.properties.nodes.items.properties.retain_for,data:data12};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}if(typeof data12 === "string"){if(!pattern10.test(data12)){const err36 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/allOf/0/pattern",keyword:"pattern",params:{pattern: "^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},message:"must match pattern \""+"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"+"\"",schema:"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$",parentSchema:schema31.properties.nodes.items.properties.retain_for.allOf[0],data:data12};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}const _errs48 = errors;const _errs49 = errors;if(errors === _errs49){if(typeof data12 === "string"){if(!pattern11.test(data12)){const err37 = {};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}else {const err38 = {};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}}var valid20 = _errs49 === errors;if(valid20){const err39 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/allOf/1/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema31.properties.nodes.items.properties.retain_for.allOf[1].not,parentSchema:schema31.properties.nodes.items.properties.retain_for.allOf[1],data:data12};if(vErrors === null){vErrors = [err39];}else {vErrors.push(err39);}errors++;}else {errors = _errs48;if(vErrors !== null){if(_errs48){vErrors.length = _errs48;}else {vErrors = null;}}}}}else {const err40 = {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 = [err40];}else {vErrors.push(err40);}errors++;}}}else {const err41 = {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 = [err41];}else {vErrors.push(err41);}errors++;}}if(data.edges !== undefined){let data13 = data.edges;if(Array.isArray(data13)){const len1 = data13.length;for(let i1=0; i1<len1; i1++){let data14 = data13[i1];if(data14 && typeof data14 == "object" && !Array.isArray(data14)){for(const key4 in data14){const _errs55 = errors;if(typeof key4 === "string"){if(!pattern4.test(key4)){const err42 = {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 = [err42];}else {vErrors.push(err42);}errors++;}}var valid23 = _errs55 === errors;if(!valid23){const err43 = {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:data14};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}}else {const err44 = {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:data14};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}}else {const err45 = {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:data13};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}errors++;}}}else {const err46 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err46];}else {vErrors.push(err46);}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. No v4.8, reverify_every e retain_for alertam fora da duração ISO 8601 só com data, ou zerada como P0D (form.pattern.node.reverify_every, form.pattern.node.retain_for), reverify_on vazio ou fora de texto alerta, e reverify_every sem verified_at alerta como form.required.node.verified_at: a cadência conta a partir do carimbo. No v4.9, reverify_every sem verified_at deixa de alertar: é o estado inicial de uma regra de coleta, cadência definida e nenhuma verificação ainda, e quem o lista é o relatório de vencimento (kg_validate.py --due, na lista unstamped), fora do veredito. O nó PROD sem verified_at segue alertando.","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"]},"reverify_every":{"type":"string","allOf":[{"pattern":"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},{"not":{"type":"string","pattern":"^P(?:0+[YMWD])+$"}}]},"reverify_on":{"type":"string","minLength":1},"retain_for":{"type":"string","allOf":[{"pattern":"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},{"not":{"type":"string","pattern":"^P(?:0+[YMWD])+$"}}]}},"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");const pattern10 = new RegExp("^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$", "u");const pattern11 = new RegExp("^P(?:0+[YMWD])+$", "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;props0.reverify_every = true;props0.reverify_on = true;props0.retain_for = 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++;}}if(data2.reverify_every !== undefined){let data10 = data2.reverify_every;if(typeof data10 !== "string"){const err27 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.reverify_every.type,parentSchema:schema31.properties.nodes.items.properties.reverify_every,data:data10};if(vErrors === null){vErrors = [err27];}else {vErrors.push(err27);}errors++;}if(typeof data10 === "string"){if(!pattern10.test(data10)){const err28 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/allOf/0/pattern",keyword:"pattern",params:{pattern: "^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},message:"must match pattern \""+"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"+"\"",schema:"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$",parentSchema:schema31.properties.nodes.items.properties.reverify_every.allOf[0],data:data10};if(vErrors === null){vErrors = [err28];}else {vErrors.push(err28);}errors++;}}const _errs38 = errors;const _errs39 = errors;if(errors === _errs39){if(typeof data10 === "string"){if(!pattern11.test(data10)){const err29 = {};if(vErrors === null){vErrors = [err29];}else {vErrors.push(err29);}errors++;}}else {const err30 = {};if(vErrors === null){vErrors = [err30];}else {vErrors.push(err30);}errors++;}}var valid18 = _errs39 === errors;if(valid18){const err31 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_every",schemaPath:"#/properties/nodes/items/properties/reverify_every/allOf/1/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema31.properties.nodes.items.properties.reverify_every.allOf[1].not,parentSchema:schema31.properties.nodes.items.properties.reverify_every.allOf[1],data:data10};if(vErrors === null){vErrors = [err31];}else {vErrors.push(err31);}errors++;}else {errors = _errs38;if(vErrors !== null){if(_errs38){vErrors.length = _errs38;}else {vErrors = null;}}}}if(data2.reverify_on !== undefined){let data11 = data2.reverify_on;if(typeof data11 === "string"){if(func1(data11) < 1){const err32 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_on",schemaPath:"#/properties/nodes/items/properties/reverify_on/minLength",keyword:"minLength",params:{limit: 1},message:"must NOT have fewer than 1 characters",schema:1,parentSchema:schema31.properties.nodes.items.properties.reverify_on,data:data11};if(vErrors === null){vErrors = [err32];}else {vErrors.push(err32);}errors++;}}else {const err33 = {instancePath:instancePath+"/nodes/" + i0+"/reverify_on",schemaPath:"#/properties/nodes/items/properties/reverify_on/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.reverify_on.type,parentSchema:schema31.properties.nodes.items.properties.reverify_on,data:data11};if(vErrors === null){vErrors = [err33];}else {vErrors.push(err33);}errors++;}}if(data2.retain_for !== undefined){let data12 = data2.retain_for;if(typeof data12 !== "string"){const err34 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/type",keyword:"type",params:{type: "string"},message:"must be string",schema:schema31.properties.nodes.items.properties.retain_for.type,parentSchema:schema31.properties.nodes.items.properties.retain_for,data:data12};if(vErrors === null){vErrors = [err34];}else {vErrors.push(err34);}errors++;}if(typeof data12 === "string"){if(!pattern10.test(data12)){const err35 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/allOf/0/pattern",keyword:"pattern",params:{pattern: "^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"},message:"must match pattern \""+"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$"+"\"",schema:"^P(?:[0-9]+Y(?:[0-9]+M)?(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+M(?:[0-9]+W)?(?:[0-9]+D)?|[0-9]+W(?:[0-9]+D)?|[0-9]+D)$",parentSchema:schema31.properties.nodes.items.properties.retain_for.allOf[0],data:data12};if(vErrors === null){vErrors = [err35];}else {vErrors.push(err35);}errors++;}}const _errs47 = errors;const _errs48 = errors;if(errors === _errs48){if(typeof data12 === "string"){if(!pattern11.test(data12)){const err36 = {};if(vErrors === null){vErrors = [err36];}else {vErrors.push(err36);}errors++;}}else {const err37 = {};if(vErrors === null){vErrors = [err37];}else {vErrors.push(err37);}errors++;}}var valid20 = _errs48 === errors;if(valid20){const err38 = {instancePath:instancePath+"/nodes/" + i0+"/retain_for",schemaPath:"#/properties/nodes/items/properties/retain_for/allOf/1/not",keyword:"not",params:{},message:"must NOT be valid",schema:schema31.properties.nodes.items.properties.retain_for.allOf[1].not,parentSchema:schema31.properties.nodes.items.properties.retain_for.allOf[1],data:data12};if(vErrors === null){vErrors = [err38];}else {vErrors.push(err38);}errors++;}else {errors = _errs47;if(vErrors !== null){if(_errs47){vErrors.length = _errs47;}else {vErrors = null;}}}}}else {const err39 = {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 = [err39];}else {vErrors.push(err39);}errors++;}}}else {const err40 = {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 = [err40];}else {vErrors.push(err40);}errors++;}}if(data.edges !== undefined){let data13 = data.edges;if(Array.isArray(data13)){const len1 = data13.length;for(let i1=0; i1<len1; i1++){let data14 = data13[i1];if(data14 && typeof data14 == "object" && !Array.isArray(data14)){for(const key4 in data14){const _errs54 = errors;if(typeof key4 === "string"){if(!pattern4.test(key4)){const err41 = {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 = [err41];}else {vErrors.push(err41);}errors++;}}var valid23 = _errs54 === errors;if(!valid23){const err42 = {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:data14};if(vErrors === null){vErrors = [err42];}else {vErrors.push(err42);}errors++;}}}else {const err43 = {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:data14};if(vErrors === null){vErrors = [err43];}else {vErrors.push(err43);}errors++;}}}else {const err44 = {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:data13};if(vErrors === null){vErrors = [err44];}else {vErrors.push(err44);}errors++;}}}else {const err45 = {instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object",schema:schema31.type,parentSchema:schema31,data};if(vErrors === null){vErrors = [err45];}else {vErrors.push(err45);}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.should.schema.json",
|
|
4
4
|
"title": "kg.yaml — contrato v4, nível SHOULD",
|
|
5
|
-
"description": "O contrato v4 do .kg.yaml, nível SHOULD (alerta, não reprova), o vigente. É o SHOULD v3 menos o que o v4 promoveu a MUST: a chave desconhecida sem x_ no topo, no meta, no nó e na aresta e o nó confirmed ou PROD sem provenance. Segue alertando: nome de chave que não é slug ([A-Za-z_][A-Za-z0-9_-]*), como form.pattern.<escopo>.key, que sem x_ também reprova no MUST; nó PROD sem verified_at; label do nó acima de 280 caracteres, form.range.node.label, porque a narrativa vai para narrative; a chave desconhecida dentro de provenance, fechada em source, locator, method e x_; e o grafo sem nós (nodes: []), como form.range.top.nodes: é válido, como o primeiro uso de um app, mas o aviso pega o parse que falhou em silêncio. No v4, provenance.method alerta (form.pattern.node.provenance.method) quando não segue a forma canônica '<classe>: <detalhe>', com a classe em medição, leitura, juízes, derivado, testemunho; reprova no v5. Medição feita por terceiro e lida pelo autor do grafo é testemunho. No v4.1 entram quatro avisos que o próprio arquivo decide. O schema acusa a claim com verified_at e sem verified_against (form.required.node.verified_against): carimbo sem alvo não distingue verificado de declarado. Só a claim: evidence é a própria âncora, artifact nomeia o alvo, question não afirma e a origem da decision é cobrada por integrity.untraced-decision. O leitor acusa três avisos que cruzam campos ou arestas, por isso não cabem no schema: integrity.testimony-in-prod (nó PROD cuja base é testemunho), integrity.verified-before-fact (verified_at anterior a valid_from) e integrity.untraced-decision (decision viva sem trace, sem provenance e sem aresta TRACES_TO saindo dela). No v4.2 entra provenance.locality, opcional, com o enum repo (arquivo versionado no próprio repo), web (endereço público), host (só existe numa máquina: journal local, caminho fora do repo) ou pessoa (relato de alguém): o valor fora do enum alerta como form.enum.node.provenance.locality. Serve para medir o que é reverificável por terceiros e para barrar host na publicação. No v4.4 entra o quarto aviso do leitor, integrity.refutes-unreconciled: nó que recebe REFUTES e segue vivo (nem superseded nem refuted; a question done já está respondida, e não alerta). O grafo afirma e refuta a mesma coisa; o radar do framework onde o formato nasceu reprova o caso como contradição. Aqui é SHOULD agora e vira MUST numa versão futura, depois que os adotantes medirem a própria dívida. 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. No v4.8, reverify_every e retain_for alertam fora da duração ISO 8601 só com data, ou zerada como P0D (form.pattern.node.reverify_every, form.pattern.node.retain_for), reverify_on vazio ou fora de texto alerta, e reverify_every sem verified_at alerta como form.required.node.verified_at: a cadência conta a partir do carimbo.",
|
|
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. No v4.8, reverify_every e retain_for alertam fora da duração ISO 8601 só com data, ou zerada como P0D (form.pattern.node.reverify_every, form.pattern.node.retain_for), reverify_on vazio ou fora de texto alerta, e reverify_every sem verified_at alerta como form.required.node.verified_at: a cadência conta a partir do carimbo. No v4.9, reverify_every sem verified_at deixa de alertar: é o estado inicial de uma regra de coleta, cadência definida e nenhuma verificação ainda, e quem o lista é o relatório de vencimento (kg_validate.py --due, na lista unstamped), fora do veredito. O nó PROD sem verified_at segue alertando.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"propertyNames": {
|
|
8
8
|
"pattern": "^[A-Za-z_][A-Za-z0-9_-]*$"
|
|
@@ -121,11 +121,6 @@
|
|
|
121
121
|
"required": [
|
|
122
122
|
"verified_scope"
|
|
123
123
|
]
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
"required": [
|
|
127
|
-
"reverify_every"
|
|
128
|
-
]
|
|
129
124
|
}
|
|
130
125
|
]
|
|
131
126
|
},
|
package/spec/release.json
CHANGED