Files
librenotes/.wave/contracts/audit-report.schema.json
Michael Czechowski 59411ede0f Add Wave contract schemas for pipeline validation
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>
2026-02-25 17:02:07 +01:00

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