364 lines
11 KiB
JSON
364 lines
11 KiB
JSON
|
|
{
|
||
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
|
|
"$id": "https://docforge.local/schema/generation-diff-v1.json",
|
||
|
|
"title": "DocForge latest primary-graph generation diff receipt",
|
||
|
|
"$defs": {
|
||
|
|
"sha256": {
|
||
|
|
"type": "string",
|
||
|
|
"pattern": "^[0-9a-f]{64}$"
|
||
|
|
},
|
||
|
|
"generation": {
|
||
|
|
"type": "object",
|
||
|
|
"required": [
|
||
|
|
"revision",
|
||
|
|
"source_hash",
|
||
|
|
"node_count",
|
||
|
|
"node_hash",
|
||
|
|
"edge_count",
|
||
|
|
"edge_hash",
|
||
|
|
"index_schema_version"
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"revision": { "type": "string", "minLength": 1 },
|
||
|
|
"source_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"node_count": { "type": "integer", "minimum": 0 },
|
||
|
|
"node_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"edge_count": { "type": "integer", "minimum": 0 },
|
||
|
|
"edge_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"index_schema_version": { "type": "integer", "minimum": 1 }
|
||
|
|
},
|
||
|
|
"additionalProperties": false
|
||
|
|
},
|
||
|
|
"node_item": {
|
||
|
|
"type": "object",
|
||
|
|
"required": [
|
||
|
|
"entity",
|
||
|
|
"change",
|
||
|
|
"node_id",
|
||
|
|
"before_content_hash",
|
||
|
|
"after_content_hash",
|
||
|
|
"before_source_path",
|
||
|
|
"after_source_path",
|
||
|
|
"before_node_hash",
|
||
|
|
"after_node_hash",
|
||
|
|
"changed_fields",
|
||
|
|
"item_hash"
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"entity": { "const": "node" },
|
||
|
|
"change": { "enum": ["added", "removed", "changed"] },
|
||
|
|
"node_id": { "type": "string", "minLength": 1 },
|
||
|
|
"before_content_hash": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/sha256" },
|
||
|
|
{ "type": "null" }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"after_content_hash": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/sha256" },
|
||
|
|
{ "type": "null" }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"before_source_path": { "type": ["string", "null"] },
|
||
|
|
"after_source_path": { "type": ["string", "null"] },
|
||
|
|
"before_node_hash": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/sha256" },
|
||
|
|
{ "type": "null" }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"after_node_hash": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/sha256" },
|
||
|
|
{ "type": "null" }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"changed_fields": {
|
||
|
|
"type": "array",
|
||
|
|
"items": {
|
||
|
|
"enum": [
|
||
|
|
"title",
|
||
|
|
"family",
|
||
|
|
"authority",
|
||
|
|
"status",
|
||
|
|
"tags",
|
||
|
|
"summary",
|
||
|
|
"content",
|
||
|
|
"source_path",
|
||
|
|
"source_anchor",
|
||
|
|
"content_hash"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"uniqueItems": true
|
||
|
|
},
|
||
|
|
"item_hash": { "$ref": "#/$defs/sha256" }
|
||
|
|
},
|
||
|
|
"allOf": [
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": { "change": { "const": "added" } },
|
||
|
|
"required": ["change"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"before_content_hash": { "type": "null" },
|
||
|
|
"before_source_path": { "type": "null" },
|
||
|
|
"before_node_hash": { "type": "null" },
|
||
|
|
"after_content_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"after_source_path": { "type": "string", "minLength": 1 },
|
||
|
|
"after_node_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"changed_fields": { "maxItems": 0 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": { "change": { "const": "removed" } },
|
||
|
|
"required": ["change"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"before_content_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"before_source_path": { "type": "string", "minLength": 1 },
|
||
|
|
"before_node_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"after_content_hash": { "type": "null" },
|
||
|
|
"after_source_path": { "type": "null" },
|
||
|
|
"after_node_hash": { "type": "null" },
|
||
|
|
"changed_fields": { "maxItems": 0 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": { "change": { "const": "changed" } },
|
||
|
|
"required": ["change"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"before_content_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"before_source_path": { "type": "string", "minLength": 1 },
|
||
|
|
"before_node_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"after_content_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"after_source_path": { "type": "string", "minLength": 1 },
|
||
|
|
"after_node_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"changed_fields": { "minItems": 1 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"additionalProperties": false
|
||
|
|
},
|
||
|
|
"edge_item": {
|
||
|
|
"type": "object",
|
||
|
|
"required": [
|
||
|
|
"entity",
|
||
|
|
"change",
|
||
|
|
"source_id",
|
||
|
|
"relation",
|
||
|
|
"target_id",
|
||
|
|
"item_hash"
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"entity": { "const": "edge" },
|
||
|
|
"change": { "enum": ["added", "removed"] },
|
||
|
|
"source_id": { "type": "string", "minLength": 1 },
|
||
|
|
"relation": { "type": "string", "minLength": 1 },
|
||
|
|
"target_id": { "type": "string", "minLength": 1 },
|
||
|
|
"item_hash": { "$ref": "#/$defs/sha256" }
|
||
|
|
},
|
||
|
|
"additionalProperties": false
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"type": "object",
|
||
|
|
"required": [
|
||
|
|
"schema_version",
|
||
|
|
"diff_semantics_version",
|
||
|
|
"project_id",
|
||
|
|
"project_root_fingerprint",
|
||
|
|
"adapter",
|
||
|
|
"kind",
|
||
|
|
"reason",
|
||
|
|
"from_generation",
|
||
|
|
"to_generation",
|
||
|
|
"summary",
|
||
|
|
"items",
|
||
|
|
"full_item_count",
|
||
|
|
"retained_item_count",
|
||
|
|
"details_truncated",
|
||
|
|
"truncation_reason",
|
||
|
|
"full_collection_hash",
|
||
|
|
"retained_collection_hash",
|
||
|
|
"index_signature",
|
||
|
|
"receipt_hash"
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"schema_version": { "const": 1 },
|
||
|
|
"diff_semantics_version": { "const": 1 },
|
||
|
|
"project_id": { "type": "string", "minLength": 1 },
|
||
|
|
"project_root_fingerprint": {
|
||
|
|
"type": "string",
|
||
|
|
"pattern": "^[0-9a-f]{16}$"
|
||
|
|
},
|
||
|
|
"adapter": { "type": "string", "minLength": 1 },
|
||
|
|
"kind": { "enum": ["baseline", "transition"] },
|
||
|
|
"reason": {
|
||
|
|
"enum": [
|
||
|
|
null,
|
||
|
|
"no_predecessor",
|
||
|
|
"predecessor_unsafe",
|
||
|
|
"predecessor_unsupported_schema",
|
||
|
|
"predecessor_foreign",
|
||
|
|
"predecessor_policy_incompatible",
|
||
|
|
"predecessor_corrupt",
|
||
|
|
"predecessor_unattested",
|
||
|
|
"predecessor_changed",
|
||
|
|
"no_meaningful_transition"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"from_generation": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/generation" },
|
||
|
|
{ "type": "null" }
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"to_generation": { "$ref": "#/$defs/generation" },
|
||
|
|
"summary": {
|
||
|
|
"type": "object",
|
||
|
|
"required": [
|
||
|
|
"nodes_added",
|
||
|
|
"nodes_removed",
|
||
|
|
"nodes_changed",
|
||
|
|
"edges_added",
|
||
|
|
"edges_removed",
|
||
|
|
"total_changes"
|
||
|
|
],
|
||
|
|
"properties": {
|
||
|
|
"nodes_added": { "type": "integer", "minimum": 0 },
|
||
|
|
"nodes_removed": { "type": "integer", "minimum": 0 },
|
||
|
|
"nodes_changed": { "type": "integer", "minimum": 0 },
|
||
|
|
"edges_added": { "type": "integer", "minimum": 0 },
|
||
|
|
"edges_removed": { "type": "integer", "minimum": 0 },
|
||
|
|
"total_changes": { "type": "integer", "minimum": 0 }
|
||
|
|
},
|
||
|
|
"additionalProperties": false
|
||
|
|
},
|
||
|
|
"items": {
|
||
|
|
"type": "array",
|
||
|
|
"maxItems": 1000,
|
||
|
|
"items": {
|
||
|
|
"oneOf": [
|
||
|
|
{ "$ref": "#/$defs/node_item" },
|
||
|
|
{ "$ref": "#/$defs/edge_item" }
|
||
|
|
]
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"full_item_count": { "type": "integer", "minimum": 0 },
|
||
|
|
"retained_item_count": {
|
||
|
|
"type": "integer",
|
||
|
|
"minimum": 0,
|
||
|
|
"maximum": 1000
|
||
|
|
},
|
||
|
|
"details_truncated": { "type": "boolean" },
|
||
|
|
"truncation_reason": {
|
||
|
|
"enum": [null, "receipt_item_limit", "receipt_byte_limit"]
|
||
|
|
},
|
||
|
|
"full_collection_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"retained_collection_hash": { "$ref": "#/$defs/sha256" },
|
||
|
|
"index_signature": {
|
||
|
|
"type": "object",
|
||
|
|
"required": ["device", "inode", "size", "mtime_ns", "ctime_ns"],
|
||
|
|
"properties": {
|
||
|
|
"device": { "type": "integer", "minimum": 0 },
|
||
|
|
"inode": { "type": "integer", "minimum": 0 },
|
||
|
|
"size": { "type": "integer", "minimum": 0 },
|
||
|
|
"mtime_ns": { "type": "integer", "minimum": 0 },
|
||
|
|
"ctime_ns": { "type": "integer", "minimum": 0 }
|
||
|
|
},
|
||
|
|
"additionalProperties": false
|
||
|
|
},
|
||
|
|
"receipt_hash": { "$ref": "#/$defs/sha256" }
|
||
|
|
},
|
||
|
|
"allOf": [
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": { "kind": { "const": "baseline" } },
|
||
|
|
"required": ["kind"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"from_generation": { "type": "null" },
|
||
|
|
"reason": { "not": { "type": "null" } },
|
||
|
|
"summary": {
|
||
|
|
"properties": {
|
||
|
|
"nodes_added": { "const": 0 },
|
||
|
|
"nodes_removed": { "const": 0 },
|
||
|
|
"nodes_changed": { "const": 0 },
|
||
|
|
"edges_added": { "const": 0 },
|
||
|
|
"edges_removed": { "const": 0 },
|
||
|
|
"total_changes": { "const": 0 }
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"full_item_count": { "const": 0 },
|
||
|
|
"retained_item_count": { "const": 0 },
|
||
|
|
"details_truncated": { "const": false },
|
||
|
|
"truncation_reason": { "const": null },
|
||
|
|
"full_collection_hash": {
|
||
|
|
"const": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945"
|
||
|
|
},
|
||
|
|
"retained_collection_hash": {
|
||
|
|
"const": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"else": {
|
||
|
|
"properties": {
|
||
|
|
"from_generation": { "$ref": "#/$defs/generation" },
|
||
|
|
"reason": { "type": "null" }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": { "truncation_reason": { "const": null } },
|
||
|
|
"required": ["truncation_reason"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"details_truncated": { "const": false },
|
||
|
|
"full_item_count": { "maximum": 1000 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": {
|
||
|
|
"truncation_reason": { "const": "receipt_item_limit" }
|
||
|
|
},
|
||
|
|
"required": ["truncation_reason"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"details_truncated": { "const": true },
|
||
|
|
"full_item_count": { "minimum": 1001 },
|
||
|
|
"retained_item_count": { "const": 1000 }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"if": {
|
||
|
|
"properties": {
|
||
|
|
"truncation_reason": { "const": "receipt_byte_limit" }
|
||
|
|
},
|
||
|
|
"required": ["truncation_reason"]
|
||
|
|
},
|
||
|
|
"then": {
|
||
|
|
"properties": {
|
||
|
|
"details_truncated": { "const": true }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"additionalProperties": false
|
||
|
|
}
|