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>
This commit is contained in:
120
.wave/contracts/audit-report.schema.json
Normal file
120
.wave/contracts/audit-report.schema.json
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"$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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user