JSON Schema definitions for all pipeline handover contracts including issue analysis, research, enhancement, and sync flows. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
121 lines
3.6 KiB
JSON
121 lines
3.6 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "Audit Report",
|
|
"description": "Zettelkasten health audit covering orphans, dangling links, and index gaps",
|
|
"type": "object",
|
|
"required": ["orphans", "dangling_links", "stats", "index_gaps", "dead_ends"],
|
|
"properties": {
|
|
"orphans": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["filename", "title"],
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string",
|
|
"description": "Hex-ID filename of the orphan note"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Title of the orphan note"
|
|
},
|
|
"suggested_connection": {
|
|
"type": "string",
|
|
"description": "Suggested note to link from"
|
|
}
|
|
}
|
|
},
|
|
"description": "Notes with no incoming or outgoing links"
|
|
},
|
|
"dangling_links": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["source_filename", "target_filename", "link_text"],
|
|
"properties": {
|
|
"source_filename": {
|
|
"type": "string",
|
|
"description": "File containing the broken link"
|
|
},
|
|
"target_filename": {
|
|
"type": "string",
|
|
"description": "Target file that doesn't exist"
|
|
},
|
|
"link_text": {
|
|
"type": "string",
|
|
"description": "Display text of the broken link"
|
|
},
|
|
"suggested_fix": {
|
|
"type": "string",
|
|
"enum": ["retarget", "remove"],
|
|
"description": "Suggested fix action"
|
|
}
|
|
}
|
|
},
|
|
"description": "Links pointing to non-existent notes"
|
|
},
|
|
"stats": {
|
|
"type": "object",
|
|
"required": ["total_notes", "total_links"],
|
|
"properties": {
|
|
"total_notes": { "type": "integer", "minimum": 0 },
|
|
"total_links": { "type": "integer", "minimum": 0 },
|
|
"label_notes": { "type": "integer", "minimum": 0 },
|
|
"orphan_count": { "type": "integer", "minimum": 0 },
|
|
"dangling_count": { "type": "integer", "minimum": 0 },
|
|
"avg_links_per_note": { "type": "number", "minimum": 0 }
|
|
},
|
|
"description": "Overall collection statistics"
|
|
},
|
|
"index_gaps": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["section", "description"],
|
|
"properties": {
|
|
"section": {
|
|
"type": "string",
|
|
"description": "Section name missing from index"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "What's missing"
|
|
},
|
|
"suggested_entry_point": {
|
|
"type": "string",
|
|
"description": "Suggested note to use as entry point"
|
|
}
|
|
}
|
|
},
|
|
"description": "Sections or keywords missing from the index note"
|
|
},
|
|
"dead_ends": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["filename", "title"],
|
|
"properties": {
|
|
"filename": {
|
|
"type": "string",
|
|
"description": "Hex-ID filename of the dead-end note"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Title of the note"
|
|
},
|
|
"outgoing_links": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Number of outgoing links (may have outgoing but no incoming)"
|
|
}
|
|
}
|
|
},
|
|
"description": "Notes with no incoming links (reachable only via search)"
|
|
},
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
}
|
|
}
|
|
}
|