{ "$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" } } }