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:
44
.wave/contracts/adr-context.schema.json
Normal file
44
.wave/contracts/adr-context.schema.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "ADR Context",
|
||||||
|
"description": "Contextual information gathered for an Architecture Decision Record",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["decision_topic", "current_state", "constraints", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"decision_topic": { "type": "string", "minLength": 5 },
|
||||||
|
"current_state": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string", "minLength": 10 },
|
||||||
|
"affected_files": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"affected_components": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"constraints": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["type", "description"],
|
||||||
|
"properties": {
|
||||||
|
"type": { "type": "string", "enum": ["technical", "organizational", "timeline"] },
|
||||||
|
"description": { "type": "string", "minLength": 5 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"precedents": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"location": { "type": "string" },
|
||||||
|
"outcome": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stakeholders": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
38
.wave/contracts/adr-options.schema.json
Normal file
38
.wave/contracts/adr-options.schema.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "ADR Options Analysis",
|
||||||
|
"description": "Analysis of options for an architectural decision",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["decision_topic", "options", "recommendation", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"decision_topic": { "type": "string", "minLength": 5 },
|
||||||
|
"options": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 2,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "description", "pros", "cons"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string", "minLength": 1 },
|
||||||
|
"description": { "type": "string", "minLength": 10 },
|
||||||
|
"pros": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"cons": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large", "epic"] },
|
||||||
|
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
|
||||||
|
"reversibility": { "type": "string", "enum": ["easy", "moderate", "difficult", "irreversible"] },
|
||||||
|
"compatibility": { "type": "string", "enum": ["high", "medium", "low"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["option", "rationale", "confidence"],
|
||||||
|
"properties": {
|
||||||
|
"option": { "type": "string", "minLength": 1 },
|
||||||
|
"rationale": { "type": "string", "minLength": 20 },
|
||||||
|
"confidence": { "type": "string", "enum": ["high", "medium", "low"] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
60
.wave/contracts/analysis-report.schema.json
Normal file
60
.wave/contracts/analysis-report.schema.json
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Analysis Report",
|
||||||
|
"description": "Cross-artifact consistency and quality analysis report before implementation.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_requirements", "total_tasks", "coverage_percent", "can_proceed", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"total_requirements": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Total number of requirements extracted from spec"
|
||||||
|
},
|
||||||
|
"total_tasks": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Total number of tasks in the task breakdown"
|
||||||
|
},
|
||||||
|
"coverage_percent": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Percentage of requirements covered by tasks (0-100)"
|
||||||
|
},
|
||||||
|
"can_proceed": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the feature is ready for implementation"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief summary of the analysis findings"
|
||||||
|
},
|
||||||
|
"issues": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"critical": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of critical severity issues"
|
||||||
|
},
|
||||||
|
"high": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of high severity issues"
|
||||||
|
},
|
||||||
|
"medium": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of medium severity issues"
|
||||||
|
},
|
||||||
|
"low": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of low severity issues"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Issue counts grouped by severity level"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
55
.wave/contracts/categorized-changes.schema.json
Normal file
55
.wave/contracts/categorized-changes.schema.json
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Categorized Changelog Changes",
|
||||||
|
"description": "Categorized and described changes for changelog generation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["version_label", "sections", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"version_label": { "type": "string", "minLength": 1 },
|
||||||
|
"breaking_changes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"migration": { "type": "string" },
|
||||||
|
"related_commits": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sections": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["title", "type", "entries"],
|
||||||
|
"properties": {
|
||||||
|
"title": { "type": "string" },
|
||||||
|
"type": { "type": "string" },
|
||||||
|
"entries": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"scope": { "type": "string" },
|
||||||
|
"commits": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"notable": { "type": "boolean" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"contributors": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"stats": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"total_entries": { "type": "integer" },
|
||||||
|
"notable_entries": { "type": "integer" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
36
.wave/contracts/checklist-status.schema.json
Normal file
36
.wave/contracts/checklist-status.schema.json
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Checklist Status",
|
||||||
|
"description": "Status report from the checklist step: quality checklist generation for requirement validation.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["checklist_files", "total_items", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"checklist_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Paths to generated checklist files"
|
||||||
|
},
|
||||||
|
"total_items": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of checklist items across all files"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of the checklists generated"
|
||||||
|
},
|
||||||
|
"critical_gaps": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of critical quality gaps identified"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
30
.wave/contracts/clarify-status.schema.json
Normal file
30
.wave/contracts/clarify-status.schema.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Clarify Status",
|
||||||
|
"description": "Status report from the clarify step: ambiguity resolution and spec refinement.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["questions_asked", "answers_encoded", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"questions_asked": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of clarification questions identified"
|
||||||
|
},
|
||||||
|
"answers_encoded": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of clarifications resolved and encoded into the spec"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of clarifications made"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
84
.wave/contracts/comment-result.schema.json
Normal file
84
.wave/contracts/comment-result.schema.json
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Comment Result",
|
||||||
|
"description": "Result of posting research report as a GitHub issue comment",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["success", "issue_reference", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the comment was successfully posted"
|
||||||
|
},
|
||||||
|
"issue_reference": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "repository"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Issue number that was commented on"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$",
|
||||||
|
"description": "Repository full name"
|
||||||
|
},
|
||||||
|
"issue_url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "URL to the issue"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"comment": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "GitHub comment ID"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "Direct URL to the posted comment"
|
||||||
|
},
|
||||||
|
"body_length": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Length of the posted comment body in characters"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the comment was created"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Details of the posted comment (only present if success=true)"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["authentication_failed", "rate_limit_exceeded", "issue_not_found", "issue_locked", "permission_denied", "comment_too_long", "network_error", "api_error", "unknown_error"],
|
||||||
|
"description": "Error code"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable error message"
|
||||||
|
},
|
||||||
|
"retryable": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the operation can be retried"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Error details (only present if success=false)"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Operation timestamp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
53
.wave/contracts/commit-analysis.schema.json
Normal file
53
.wave/contracts/commit-analysis.schema.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Commit Analysis",
|
||||||
|
"description": "Structured analysis of git commits for changelog generation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["range", "commits", "summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"range": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["from", "to", "total_commits"],
|
||||||
|
"properties": {
|
||||||
|
"from": { "type": "string", "minLength": 1 },
|
||||||
|
"to": { "type": "string", "minLength": 1 },
|
||||||
|
"total_commits": { "type": "integer", "minimum": 0 },
|
||||||
|
"date_range": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"start": { "type": "string" },
|
||||||
|
"end": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commits": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["hash", "date", "type", "subject"],
|
||||||
|
"properties": {
|
||||||
|
"hash": { "type": "string", "minLength": 4 },
|
||||||
|
"author": { "type": "string" },
|
||||||
|
"date": { "type": "string" },
|
||||||
|
"type": { "type": "string", "enum": ["feat", "fix", "docs", "refactor", "test", "chore", "perf", "ci", "other"] },
|
||||||
|
"scope": { "type": ["string", "null"] },
|
||||||
|
"subject": { "type": "string", "minLength": 1 },
|
||||||
|
"breaking": { "type": "boolean" },
|
||||||
|
"breaking_note": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["by_type"],
|
||||||
|
"properties": {
|
||||||
|
"by_type": { "type": "object" },
|
||||||
|
"breaking_changes": { "type": "integer", "minimum": 0 },
|
||||||
|
"contributors": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"most_changed_scopes": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
96
.wave/contracts/connections.schema.json
Normal file
96
.wave/contracts/connections.schema.json
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Connections",
|
||||||
|
"description": "Mapping of new content to existing Zettelkasten notes and addresses",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["source_title", "related_notes", "suggested_placements"],
|
||||||
|
"properties": {
|
||||||
|
"source_title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Title of the source being connected"
|
||||||
|
},
|
||||||
|
"related_notes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["filename", "title", "folgezettel_address", "relationship"],
|
||||||
|
"properties": {
|
||||||
|
"filename": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[0-9a-f]{8}\\.md$",
|
||||||
|
"description": "Hex-ID filename of the related note"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Full title of the related note"
|
||||||
|
},
|
||||||
|
"folgezettel_address": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Folgezettel address of the related note"
|
||||||
|
},
|
||||||
|
"relationship": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Why this note is related to the source"
|
||||||
|
},
|
||||||
|
"link_direction": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["from_new", "to_new", "bidirectional"],
|
||||||
|
"description": "Whether the new note should link to this, or this should link to new"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Existing notes related to the source content"
|
||||||
|
},
|
||||||
|
"suggested_placements": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["folgezettel_address", "parent_note", "section", "rationale"],
|
||||||
|
"properties": {
|
||||||
|
"folgezettel_address": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Suggested Folgezettel address for a new note"
|
||||||
|
},
|
||||||
|
"parent_note": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Filename of the parent note in the Folgezettel sequence"
|
||||||
|
},
|
||||||
|
"section": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Top-level section name"
|
||||||
|
},
|
||||||
|
"rationale": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Why this placement makes sense"
|
||||||
|
},
|
||||||
|
"concept": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which concept from the source this placement is for"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Suggested positions in the Folgezettel for new notes"
|
||||||
|
},
|
||||||
|
"index_update_needed": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the index note should be updated"
|
||||||
|
},
|
||||||
|
"suggested_index_entries": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["keyword", "rationale"],
|
||||||
|
"properties": {
|
||||||
|
"keyword": { "type": "string" },
|
||||||
|
"rationale": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Suggested new entries for the index note"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
81
.wave/contracts/convergent-proposals.schema.json
Normal file
81
.wave/contracts/convergent-proposals.schema.json
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Convergent Proposals",
|
||||||
|
"description": "Prioritized simplification proposals from convergent thinking phase",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["source_findings", "validation_summary", "proposals", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"source_findings": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_reviewed", "confirmed", "partially_confirmed", "rejected"],
|
||||||
|
"properties": {
|
||||||
|
"total_reviewed": { "type": "integer" },
|
||||||
|
"confirmed": { "type": "integer" },
|
||||||
|
"partially_confirmed": { "type": "integer" },
|
||||||
|
"rejected": { "type": "integer" },
|
||||||
|
"rejection_reasons": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["finding_id", "reason"],
|
||||||
|
"properties": {
|
||||||
|
"finding_id": { "type": "string" },
|
||||||
|
"reason": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"validation_summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Narrative summary of the converge→diverge→converge validation process"
|
||||||
|
},
|
||||||
|
"proposals": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "description", "source_findings", "impact", "effort", "risk", "tier", "files"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^SMP-\\d{3}$" },
|
||||||
|
"title": { "type": "string" },
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"source_findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "DVG-xxx IDs this proposal addresses"
|
||||||
|
},
|
||||||
|
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
|
||||||
|
"effort": { "type": "string", "enum": ["small", "medium", "large"] },
|
||||||
|
"risk": { "type": "string", "enum": ["low", "medium", "high"] },
|
||||||
|
"tier": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 3,
|
||||||
|
"description": "Priority tier: 1=do now, 2=do next, 3=consider later"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Files that would be modified"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "SMP-xxx IDs that must be applied first"
|
||||||
|
},
|
||||||
|
"lines_removed_estimate": { "type": "integer" },
|
||||||
|
"second_order_effects": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Insights discovered during deeper probing"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"eighty_twenty_analysis": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which 20% of proposals yield 80% of the simplification benefit"
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
24
.wave/contracts/coverage-analysis.schema.json
Normal file
24
.wave/contracts/coverage-analysis.schema.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["current_coverage", "uncovered_functions", "uncovered_branches", "edge_cases", "mock_requirements"],
|
||||||
|
"properties": {
|
||||||
|
"current_coverage": { "type": "string" },
|
||||||
|
"uncovered_functions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"uncovered_branches": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"edge_cases": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"mock_requirements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
42
.wave/contracts/dead-code-scan.schema.json
Normal file
42
.wave/contracts/dead-code-scan.schema.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Dead Code Scan",
|
||||||
|
"description": "Scan results for dead or redundant code",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "findings", "summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"target": { "type": "string", "minLength": 1 },
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "type", "location", "description", "confidence", "safe_to_remove"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^DC-[0-9]{3}$" },
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["unused_export", "unreachable", "orphaned_file", "redundant", "stale_test", "unused_import", "commented_code"]
|
||||||
|
},
|
||||||
|
"location": { "type": "string", "minLength": 1 },
|
||||||
|
"symbol": { "type": "string" },
|
||||||
|
"description": { "type": "string", "minLength": 5 },
|
||||||
|
"evidence": { "type": "string" },
|
||||||
|
"confidence": { "type": "string", "enum": ["high", "medium", "low"] },
|
||||||
|
"safe_to_remove": { "type": "boolean" },
|
||||||
|
"removal_note": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_findings"],
|
||||||
|
"properties": {
|
||||||
|
"total_findings": { "type": "integer", "minimum": 0 },
|
||||||
|
"by_type": { "type": "object" },
|
||||||
|
"high_confidence_count": { "type": "integer", "minimum": 0 },
|
||||||
|
"estimated_lines_removable": { "type": "integer", "minimum": 0 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
22
.wave/contracts/debug-hypotheses.schema.json
Normal file
22
.wave/contracts/debug-hypotheses.schema.json
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["hypotheses"],
|
||||||
|
"properties": {
|
||||||
|
"hypotheses": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "description", "likelihood", "test_approach"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"description": { "type": "string", "minLength": 1 },
|
||||||
|
"likelihood": { "type": "string", "enum": ["high", "medium", "low"] },
|
||||||
|
"test_approach": { "type": "string", "minLength": 1 },
|
||||||
|
"expected_result_if_true": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
21
.wave/contracts/debug-reproduction.schema.json
Normal file
21
.wave/contracts/debug-reproduction.schema.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["expected_behavior", "actual_behavior", "reproduction_steps", "relevant_files"],
|
||||||
|
"properties": {
|
||||||
|
"expected_behavior": { "type": "string", "minLength": 1 },
|
||||||
|
"actual_behavior": { "type": "string", "minLength": 1 },
|
||||||
|
"reproduction_steps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"relevant_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"environmental_factors": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
31
.wave/contracts/diff-analysis.schema.json
Normal file
31
.wave/contracts/diff-analysis.schema.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["files_changed", "modules_affected", "related_tests", "breaking_changes"],
|
||||||
|
"properties": {
|
||||||
|
"files_changed": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "change_type", "purpose"],
|
||||||
|
"properties": {
|
||||||
|
"path": { "type": "string" },
|
||||||
|
"change_type": { "type": "string", "enum": ["added", "modified", "deleted"] },
|
||||||
|
"purpose": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modules_affected": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"related_tests": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"breaking_changes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
82
.wave/contracts/divergent-findings.schema.json
Normal file
82
.wave/contracts/divergent-findings.schema.json
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Divergent Findings",
|
||||||
|
"description": "Broad-net findings from divergent thinking phase of the recinq pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["scope", "findings", "metrics_summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"scope": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "files_scanned", "total_lines"],
|
||||||
|
"properties": {
|
||||||
|
"target": { "type": "string", "description": "What was analyzed (path, module, or 'whole-project')" },
|
||||||
|
"files_scanned": { "type": "integer" },
|
||||||
|
"total_lines": { "type": "integer" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "category", "title", "description", "evidence", "severity"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^DVG-\\d{3}$" },
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"premature_abstraction",
|
||||||
|
"unnecessary_indirection",
|
||||||
|
"overengineering",
|
||||||
|
"yagni_violation",
|
||||||
|
"accidental_complexity",
|
||||||
|
"copy_paste_drift",
|
||||||
|
"dead_weight",
|
||||||
|
"naming_lie",
|
||||||
|
"dependency_gravity",
|
||||||
|
"missing_abstraction",
|
||||||
|
"other"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"title": { "type": "string" },
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"evidence": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["files"],
|
||||||
|
"properties": {
|
||||||
|
"files": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"line_count": { "type": "integer" },
|
||||||
|
"reference_count": { "type": "integer" },
|
||||||
|
"change_frequency": { "type": "integer" },
|
||||||
|
"metrics": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"severity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"]
|
||||||
|
},
|
||||||
|
"confidence": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "How confident the provocateur is in this finding"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metrics_summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_findings"],
|
||||||
|
"properties": {
|
||||||
|
"total_findings": { "type": "integer" },
|
||||||
|
"by_category": { "type": "object", "additionalProperties": { "type": "integer" } },
|
||||||
|
"by_severity": { "type": "object", "additionalProperties": { "type": "integer" } },
|
||||||
|
"hotspot_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Files appearing in multiple findings"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
87
.wave/contracts/doc-consistency-report.schema.json
Normal file
87
.wave/contracts/doc-consistency-report.schema.json
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Documentation Consistency Report",
|
||||||
|
"description": "Output from the analyze-consistency step: list of inconsistencies between code and documentation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["summary", "inconsistencies", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_count", "by_severity"],
|
||||||
|
"properties": {
|
||||||
|
"total_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of inconsistencies found"
|
||||||
|
},
|
||||||
|
"by_severity": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"critical": { "type": "integer", "minimum": 0 },
|
||||||
|
"high": { "type": "integer", "minimum": 0 },
|
||||||
|
"medium": { "type": "integer", "minimum": 0 },
|
||||||
|
"low": { "type": "integer", "minimum": 0 }
|
||||||
|
},
|
||||||
|
"description": "Count of inconsistencies by severity level"
|
||||||
|
},
|
||||||
|
"clean": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "True if no inconsistencies were found"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"inconsistencies": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "severity", "category", "title", "description", "source_location", "doc_location"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^DOC-[0-9]{3}$",
|
||||||
|
"description": "Unique inconsistency ID (DOC-001, DOC-002, etc.)"
|
||||||
|
},
|
||||||
|
"severity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"],
|
||||||
|
"description": "Severity of the inconsistency"
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["cli_flags", "personas", "pipelines", "contracts", "env_vars", "api", "stale_reference", "missing_docs", "other"],
|
||||||
|
"description": "Category of the inconsistency"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"maxLength": 200,
|
||||||
|
"description": "Short title describing the inconsistency"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Detailed description of the inconsistency and what needs to change"
|
||||||
|
},
|
||||||
|
"source_location": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "File and line where the source of truth is (code, pipeline, etc.)"
|
||||||
|
},
|
||||||
|
"doc_location": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "File and section where the documentation is stale or missing"
|
||||||
|
},
|
||||||
|
"fix_description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What specifically needs to be updated"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "List of documentation inconsistencies"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the analysis was performed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
.wave/contracts/doc-issue-result.schema.json
Normal file
71
.wave/contracts/doc-issue-result.schema.json
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Documentation Issue Result",
|
||||||
|
"description": "Output from the create-issue step: GitHub issue creation result",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["success", "repository", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the issue was successfully created"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$",
|
||||||
|
"description": "Repository full name (owner/repo)"
|
||||||
|
},
|
||||||
|
"issue": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "GitHub issue number"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "URL to the created issue"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Issue title"
|
||||||
|
},
|
||||||
|
"inconsistency_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of inconsistencies reported in the issue"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Details of the created issue (only present if success=true)"
|
||||||
|
},
|
||||||
|
"skipped": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "True if no issue was created because no inconsistencies were found"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["authentication_failed", "rate_limit_exceeded", "permission_denied", "network_error", "api_error", "unknown_error"],
|
||||||
|
"description": "Error code"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable error message"
|
||||||
|
},
|
||||||
|
"retryable": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the operation can be retried"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Error details (only present if success=false)"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Operation timestamp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
112
.wave/contracts/doc-scan-results.schema.json
Normal file
112
.wave/contracts/doc-scan-results.schema.json
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Documentation Scan Results",
|
||||||
|
"description": "Output from the scan-changes step: changed files and current documentation state snapshot",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["scan_scope", "changed_files", "documentation_snapshot", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"scan_scope": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["mode", "range"],
|
||||||
|
"properties": {
|
||||||
|
"mode": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["diff", "full"],
|
||||||
|
"description": "Whether this was a diff-based or full scan"
|
||||||
|
},
|
||||||
|
"range": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Git range used for diff (e.g. 'main...HEAD') or 'full' for full scan"
|
||||||
|
},
|
||||||
|
"base_ref": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Base reference for comparison"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"changed_files": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_count", "categories"],
|
||||||
|
"properties": {
|
||||||
|
"total_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of changed files"
|
||||||
|
},
|
||||||
|
"categories": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"go_code": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed Go source files"
|
||||||
|
},
|
||||||
|
"cli_commands": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed CLI command files (cmd/wave/commands/)"
|
||||||
|
},
|
||||||
|
"pipelines": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed pipeline definitions"
|
||||||
|
},
|
||||||
|
"personas": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed persona definitions"
|
||||||
|
},
|
||||||
|
"contracts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed contract schemas"
|
||||||
|
},
|
||||||
|
"documentation": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Changed documentation files (docs/, README.md, CLAUDE.md, etc.)"
|
||||||
|
},
|
||||||
|
"other": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Other changed files"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"documentation_snapshot": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["files"],
|
||||||
|
"properties": {
|
||||||
|
"files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "exists"],
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to the documentation file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the file exists"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief summary of the file's content and key sections"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Key documentation files and their current state"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the scan was performed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
38
.wave/contracts/doc-sync-scan.schema.json
Normal file
38
.wave/contracts/doc-sync-scan.schema.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Doc Sync Scan Results",
|
||||||
|
"description": "Documentation inconsistency scan for doc-sync pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["scan_scope", "findings", "summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"scan_scope": { "type": "string", "minLength": 1 },
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "type", "severity", "title", "description"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^DOC-[0-9]{3}$" },
|
||||||
|
"type": { "type": "string", "enum": ["MISSING_DOCS", "STALE_DOCS", "INACCURATE", "INCOMPLETE"] },
|
||||||
|
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
|
||||||
|
"title": { "type": "string", "minLength": 3 },
|
||||||
|
"doc_location": { "type": "string" },
|
||||||
|
"code_location": { "type": "string" },
|
||||||
|
"description": { "type": "string", "minLength": 10 },
|
||||||
|
"suggested_fix": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_findings"],
|
||||||
|
"properties": {
|
||||||
|
"total_findings": { "type": "integer", "minimum": 0 },
|
||||||
|
"by_type": { "type": "object" },
|
||||||
|
"by_severity": { "type": "object" },
|
||||||
|
"fixable_count": { "type": "integer", "minimum": 0 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
112
.wave/contracts/docs-phase.schema.json
Normal file
112
.wave/contracts/docs-phase.schema.json
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://schema.recinq.com/wave/docs-phase.schema.json",
|
||||||
|
"title": "Wave Docs Phase Output Contract",
|
||||||
|
"description": "Validates docs phase outputs for prototype-driven development pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"phase": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "docs",
|
||||||
|
"description": "Phase identifier"
|
||||||
|
},
|
||||||
|
"artifacts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"feature_docs": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*feature-docs\\.md$",
|
||||||
|
"description": "Path to feature documentation file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Feature documentation file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Documentation content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"stakeholder_summary": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*stakeholder-summary\\.md$",
|
||||||
|
"description": "Path to stakeholder summary file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Stakeholder summary file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Summary content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["feature_docs", "stakeholder_summary"],
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"coverage_percentage": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Specification coverage in documentation"
|
||||||
|
},
|
||||||
|
"readability_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Documentation readability rating"
|
||||||
|
},
|
||||||
|
"documentation_quality": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["poor", "fair", "good", "excellent"],
|
||||||
|
"description": "Overall documentation quality assessment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["documentation_quality"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When docs phase was completed"
|
||||||
|
},
|
||||||
|
"duration_seconds": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Time taken for docs phase"
|
||||||
|
},
|
||||||
|
"source_spec_path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to source specification file"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["timestamp", "source_spec_path"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["phase", "artifacts", "validation", "metadata"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
110
.wave/contracts/dummy-phase.schema.json
Normal file
110
.wave/contracts/dummy-phase.schema.json
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://schema.recinq.com/wave/dummy-phase.schema.json",
|
||||||
|
"title": "Wave Dummy Phase Output Contract",
|
||||||
|
"description": "Validates dummy phase outputs for prototype-driven development pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"phase": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "dummy",
|
||||||
|
"description": "Phase identifier"
|
||||||
|
},
|
||||||
|
"artifacts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"prototype": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*prototype/?$",
|
||||||
|
"description": "Path to prototype directory"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Prototype directory must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "code",
|
||||||
|
"description": "Prototype content type"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interface_definitions": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*interfaces\\.md$",
|
||||||
|
"description": "Path to interface definitions file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Interface definitions file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Interface definitions content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["prototype", "interface_definitions"],
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"runnable": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the prototype can be executed"
|
||||||
|
},
|
||||||
|
"interface_completeness": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Percentage of interfaces stubbed"
|
||||||
|
},
|
||||||
|
"prototype_quality": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["poor", "fair", "good", "excellent"],
|
||||||
|
"description": "Overall prototype quality assessment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["runnable", "prototype_quality"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When dummy phase was completed"
|
||||||
|
},
|
||||||
|
"duration_seconds": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Time taken for dummy phase"
|
||||||
|
},
|
||||||
|
"source_docs_path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to source documentation file"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["timestamp", "source_docs_path"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["phase", "artifacts", "validation", "metadata"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
98
.wave/contracts/editorial-plan.schema.json
Normal file
98
.wave/contracts/editorial-plan.schema.json
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Editorial Plan",
|
||||||
|
"description": "Analysis of a blog draft with a mapped editorial plan based on author criticism",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["draft_filename", "draft_title", "sections", "editorial_actions"],
|
||||||
|
"properties": {
|
||||||
|
"draft_filename": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[0-9a-f]{8}\\.md$",
|
||||||
|
"description": "Hex-ID filename of the draft note"
|
||||||
|
},
|
||||||
|
"draft_title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Title of the blog draft"
|
||||||
|
},
|
||||||
|
"sections": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["heading", "line_range", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"heading": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Section heading text"
|
||||||
|
},
|
||||||
|
"line_range": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Line range in the file (e.g., 15-42)"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief summary of what this section covers"
|
||||||
|
},
|
||||||
|
"word_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Structural map of the draft's sections"
|
||||||
|
},
|
||||||
|
"editorial_actions": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "type", "target_section", "description", "criticism_addressed"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^EDIT-[0-9]{3}$",
|
||||||
|
"description": "Unique action identifier"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["rewrite", "restructure", "cut", "expand", "add", "replace_example", "fix_tone", "fix_links"],
|
||||||
|
"description": "Type of editorial action"
|
||||||
|
},
|
||||||
|
"target_section": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Section heading this action targets, or 'global' for whole-draft changes"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specific description of what to change and why"
|
||||||
|
},
|
||||||
|
"criticism_addressed": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which part of the author's criticism this action addresses"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "How critical this edit is"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Ordered list of editorial actions to apply"
|
||||||
|
},
|
||||||
|
"linked_notes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["filename", "title"],
|
||||||
|
"properties": {
|
||||||
|
"filename": { "type": "string" },
|
||||||
|
"title": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Notes currently linked from the draft"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
76
.wave/contracts/explain-analysis.schema.json
Normal file
76
.wave/contracts/explain-analysis.schema.json
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Code Architecture Analysis",
|
||||||
|
"description": "Architecture and design analysis of explored code",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["topic", "patterns", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"topic": { "type": "string", "minLength": 3 },
|
||||||
|
"patterns": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "where", "why"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"where": { "type": "string" },
|
||||||
|
"why": { "type": "string" },
|
||||||
|
"quality": { "type": "string", "enum": ["well-implemented", "adequate", "needs-improvement"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"data_flow": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"stages": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"key_transformations": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error_handling": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"strategy": { "type": "string" },
|
||||||
|
"patterns": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"gaps": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"concurrency": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"model": { "type": "string" },
|
||||||
|
"primitives": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"risks": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extension_points": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["interface", "file"],
|
||||||
|
"properties": {
|
||||||
|
"interface": { "type": "string" },
|
||||||
|
"file": { "type": "string" },
|
||||||
|
"purpose": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_decisions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["decision"],
|
||||||
|
"properties": {
|
||||||
|
"decision": { "type": "string" },
|
||||||
|
"rationale": { "type": "string" },
|
||||||
|
"trade_offs": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
62
.wave/contracts/explain-exploration.schema.json
Normal file
62
.wave/contracts/explain-exploration.schema.json
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Explain Exploration Results",
|
||||||
|
"description": "Structured exploration of a codebase topic for explanation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["topic", "entry_points", "key_types", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"topic": { "type": "string", "minLength": 1 },
|
||||||
|
"entry_points": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["file", "symbol", "role"],
|
||||||
|
"properties": {
|
||||||
|
"file": { "type": "string", "minLength": 1 },
|
||||||
|
"symbol": { "type": "string", "minLength": 1 },
|
||||||
|
"role": { "type": "string", "minLength": 1 },
|
||||||
|
"line": { "type": "integer", "minimum": 1 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"key_types": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "file", "purpose"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string", "minLength": 1 },
|
||||||
|
"file": { "type": "string", "minLength": 1 },
|
||||||
|
"purpose": { "type": "string", "minLength": 1 },
|
||||||
|
"methods": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"relationships": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"call_flows": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "steps"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"steps": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"description": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"depends_on": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"depended_by": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"external": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test_files": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"config_points": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"file_count": { "type": "integer", "minimum": 0 },
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
52
.wave/contracts/feature-exploration.schema.json
Normal file
52
.wave/contracts/feature-exploration.schema.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Feature Exploration",
|
||||||
|
"description": "Codebase exploration for feature implementation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["feature", "scope", "related_files", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"feature": { "type": "string", "minLength": 1 },
|
||||||
|
"scope": { "type": "string", "enum": ["small", "medium", "large"] },
|
||||||
|
"related_files": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "relevance", "reason"],
|
||||||
|
"properties": {
|
||||||
|
"path": { "type": "string", "minLength": 1 },
|
||||||
|
"relevance": { "type": "string", "enum": ["primary", "secondary"] },
|
||||||
|
"reason": { "type": "string", "minLength": 1 },
|
||||||
|
"key_symbols": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patterns_to_follow": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"example_file": { "type": "string" },
|
||||||
|
"relevance": { "type": "string", "enum": ["must_follow", "should_follow"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"affected_modules": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"test_files": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"risks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description", "severity"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"severity": { "type": "string", "enum": ["high", "medium", "low"] },
|
||||||
|
"mitigation": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
33
.wave/contracts/feature-plan.schema.json
Normal file
33
.wave/contracts/feature-plan.schema.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Feature Implementation Plan",
|
||||||
|
"description": "Ordered implementation plan for a feature",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["feature", "steps", "total_complexity", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"feature": { "type": "string", "minLength": 5 },
|
||||||
|
"steps": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "description"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^S\\d{2}$" },
|
||||||
|
"title": { "type": "string" },
|
||||||
|
"description": { "type": "string" },
|
||||||
|
"files_to_modify": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"files_to_create": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"tests_to_write": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"acceptance_criteria": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"complexity": { "type": "string", "enum": ["S", "M", "L"] },
|
||||||
|
"dependencies": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_complexity": { "type": "string", "enum": ["S", "M", "L", "XL"] },
|
||||||
|
"branch_name_suggestion": { "type": "string" },
|
||||||
|
"commit_message_suggestion": { "type": "string" },
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
38
.wave/contracts/findings.schema.json
Normal file
38
.wave/contracts/findings.schema.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Investigation Findings",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"root_cause",
|
||||||
|
"affected_files",
|
||||||
|
"fix_approach"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"root_cause": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Description of the root cause"
|
||||||
|
},
|
||||||
|
"affected_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "List of affected file paths"
|
||||||
|
},
|
||||||
|
"recent_commits": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "List of relevant commit hashes"
|
||||||
|
},
|
||||||
|
"blast_radius": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Assessment of what else could be affected"
|
||||||
|
},
|
||||||
|
"fix_approach": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Recommended approach to fix the issue"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
65
.wave/contracts/github-enhancement-plan.schema.json
Normal file
65
.wave/contracts/github-enhancement-plan.schema.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Issue Enhancement Plan",
|
||||||
|
"description": "Schema for GitHub issue enhancement recommendations",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issues_to_enhance"],
|
||||||
|
"properties": {
|
||||||
|
"issues_to_enhance": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "enhancements"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"current_title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suggested_title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"current_body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"body_template": {
|
||||||
|
"type": ["string", "null"],
|
||||||
|
"description": "Enhanced body template preserving original content"
|
||||||
|
},
|
||||||
|
"suggested_labels": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enhancements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"description": "List of specific enhancements to apply"
|
||||||
|
},
|
||||||
|
"rationale": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Why these enhancements are recommended"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_to_enhance": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"enhancement_strategy": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Overall strategy for enhancements"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
.wave/contracts/github-enhancement-results.schema.json
Normal file
71
.wave/contracts/github-enhancement-results.schema.json
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Issue Enhancement Results",
|
||||||
|
"description": "Schema for GitHub issue enhancement execution results",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["enhanced_issues", "total_attempted", "total_successful"],
|
||||||
|
"properties": {
|
||||||
|
"enhanced_issues": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "success", "changes_made", "url"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"changes_made": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "List of changes successfully applied"
|
||||||
|
},
|
||||||
|
"title_updated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"body_updated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"labels_added": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"comment_added": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Error message if enhancement failed"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_attempted": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"total_successful": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"total_failed": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
86
.wave/contracts/github-issue-analysis.schema.json
Normal file
86
.wave/contracts/github-issue-analysis.schema.json
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Issue Analysis",
|
||||||
|
"description": "Schema for GitHub issue quality analysis results",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["repository", "total_issues", "poor_quality_issues"],
|
||||||
|
"properties": {
|
||||||
|
"repository": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["owner", "name"],
|
||||||
|
"properties": {
|
||||||
|
"owner": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_issues": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"analyzed_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"poor_quality_issues": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["number", "title", "quality_score", "problems"],
|
||||||
|
"properties": {
|
||||||
|
"number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"quality_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"problems": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recommendations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quality_threshold": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
87
.wave/contracts/github-verification-report.schema.json
Normal file
87
.wave/contracts/github-verification-report.schema.json
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Enhancement Verification Report",
|
||||||
|
"description": "Schema for verifying GitHub issue enhancements were applied",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_enhanced", "successful_enhancements", "failed_enhancements"],
|
||||||
|
"properties": {
|
||||||
|
"total_enhanced": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"successful_enhancements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "verified_changes"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"verified_changes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quality_score_before": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"quality_score_after": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"failed_enhancements": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "problems"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"problems": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quality_improvement": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"average_score_before": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"average_score_after": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100
|
||||||
|
},
|
||||||
|
"improvement_percentage": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable summary of verification results"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
.wave/contracts/hello-world-result.schema.json
Normal file
26
.wave/contracts/hello-world-result.schema.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Hello World Result",
|
||||||
|
"description": "Verification result from the hello-world verify step",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["success", "message"],
|
||||||
|
"properties": {
|
||||||
|
"success": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the hello-world pipeline completed successfully"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable verification result"
|
||||||
|
},
|
||||||
|
"checks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"description": "Optional list of individual verification checks performed"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
138
.wave/contracts/implement-phase.schema.json
Normal file
138
.wave/contracts/implement-phase.schema.json
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://schema.recinq.com/wave/implement-phase.schema.json",
|
||||||
|
"title": "Wave Implement Phase Output Contract",
|
||||||
|
"description": "Validates implementation phase outputs for prototype-driven development pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"phase": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "implement",
|
||||||
|
"description": "Phase identifier"
|
||||||
|
},
|
||||||
|
"artifacts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"implementation_plan": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*implementation-plan\\.md$",
|
||||||
|
"description": "Path to implementation plan file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Implementation plan file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Implementation plan content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"progress_checklist": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*implementation-checklist\\.md$",
|
||||||
|
"description": "Path to progress checklist file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Progress checklist file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Checklist content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["implementation_plan", "progress_checklist"],
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"tests_executed": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether test suite was executed"
|
||||||
|
},
|
||||||
|
"test_results": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"total": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of tests"
|
||||||
|
},
|
||||||
|
"passed": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of tests that passed"
|
||||||
|
},
|
||||||
|
"failed": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of tests that failed"
|
||||||
|
},
|
||||||
|
"coverage_percent": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Test coverage percentage"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["total", "passed", "failed"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"implementation_readiness": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["ready", "partial", "needs_work"],
|
||||||
|
"description": "Assessment of implementation readiness"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["tests_executed", "implementation_readiness"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When implementation phase was completed"
|
||||||
|
},
|
||||||
|
"duration_seconds": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Time taken for implementation phase"
|
||||||
|
},
|
||||||
|
"previous_phases": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["spec", "docs", "dummy"]
|
||||||
|
},
|
||||||
|
"minItems": 3,
|
||||||
|
"maxItems": 3,
|
||||||
|
"description": "Previous phases that fed into this implementation"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["timestamp", "previous_phases"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["phase", "artifacts", "validation", "metadata"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
44
.wave/contracts/improvement-assessment.schema.json
Normal file
44
.wave/contracts/improvement-assessment.schema.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Improvement Assessment",
|
||||||
|
"description": "Structured assessment of code improvement opportunities",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "findings", "summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"target": { "type": "string", "minLength": 1 },
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "category", "title", "location", "description", "impact", "effort"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^IMP-[0-9]{3}$" },
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["error_handling", "performance", "testability", "robustness", "maintainability", "code_quality"]
|
||||||
|
},
|
||||||
|
"title": { "type": "string", "minLength": 3 },
|
||||||
|
"location": { "type": "string", "minLength": 1 },
|
||||||
|
"description": { "type": "string", "minLength": 10 },
|
||||||
|
"current_code": { "type": "string" },
|
||||||
|
"suggested_fix": { "type": "string", "minLength": 5 },
|
||||||
|
"impact": { "type": "string", "enum": ["high", "medium", "low"] },
|
||||||
|
"effort": { "type": "string", "enum": ["trivial", "small", "medium", "large"] },
|
||||||
|
"risk": { "type": "string", "enum": ["none", "low", "medium", "high"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_findings", "overall_quality"],
|
||||||
|
"properties": {
|
||||||
|
"total_findings": { "type": "integer", "minimum": 0 },
|
||||||
|
"by_category": { "type": "object" },
|
||||||
|
"quick_wins": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"high_impact": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"overall_quality": { "type": "string", "minLength": 10 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
91
.wave/contracts/issue-assessment.schema.json
Normal file
91
.wave/contracts/issue-assessment.schema.json
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Issue Implementation Assessment",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["implementable", "issue", "assessment"],
|
||||||
|
"properties": {
|
||||||
|
"implementable": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Must be true for the pipeline to proceed. Set to false if the issue lacks sufficient detail."
|
||||||
|
},
|
||||||
|
"issue": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["number", "title", "body", "repository", "url"],
|
||||||
|
"properties": {
|
||||||
|
"number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"comments": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "object" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"assessment": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["quality_score", "complexity", "skip_steps", "branch_name"],
|
||||||
|
"properties": {
|
||||||
|
"quality_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "How well-specified the issue is (0-100)"
|
||||||
|
},
|
||||||
|
"complexity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["trivial", "simple", "medium", "complex"],
|
||||||
|
"description": "Estimated implementation complexity"
|
||||||
|
},
|
||||||
|
"skip_steps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["specify", "clarify", "checklist", "analyze"]
|
||||||
|
},
|
||||||
|
"description": "Speckit steps that can be skipped because the issue provides sufficient detail"
|
||||||
|
},
|
||||||
|
"branch_name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Suggested branch name for the implementation"
|
||||||
|
},
|
||||||
|
"missing_info": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Information that would improve the issue but isn't blocking"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief summary of the assessment"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
96
.wave/contracts/issue-content.schema.json
Normal file
96
.wave/contracts/issue-content.schema.json
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "GitHub Issue Content",
|
||||||
|
"description": "Parsed content from a GitHub issue for research pipeline processing",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "title", "body", "author", "url", "repository"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "GitHub issue number"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"maxLength": 256,
|
||||||
|
"description": "Issue title"
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Issue body/description text"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["login"],
|
||||||
|
"properties": {
|
||||||
|
"login": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "GitHub username of issue author"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name"],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Label name"
|
||||||
|
},
|
||||||
|
"color": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Label color hex code"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Label description"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Labels applied to the issue"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "HTML URL to the GitHub issue"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["owner", "name", "full_name"],
|
||||||
|
"properties": {
|
||||||
|
"owner": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Repository owner"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Repository name"
|
||||||
|
},
|
||||||
|
"full_name": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$",
|
||||||
|
"description": "Full repository name (owner/repo)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["open", "closed"],
|
||||||
|
"description": "Issue state"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Issue creation timestamp"
|
||||||
|
},
|
||||||
|
"comments_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of comments on the issue"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
72
.wave/contracts/issue-impl-plan.schema.json
Normal file
72
.wave/contracts/issue-impl-plan.schema.json
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Issue Implementation Plan",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "branch_name", "feature_dir", "tasks"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"branch_name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to the feature directory under specs/"
|
||||||
|
},
|
||||||
|
"spec_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to the spec.md file"
|
||||||
|
},
|
||||||
|
"plan_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to the plan.md file"
|
||||||
|
},
|
||||||
|
"tasks_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to the tasks.md file"
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "description"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Task identifier"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief task title"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Detailed task description"
|
||||||
|
},
|
||||||
|
"file_changes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "action"],
|
||||||
|
"properties": {
|
||||||
|
"path": { "type": "string" },
|
||||||
|
"action": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["create", "modify", "delete"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief summary of the implementation plan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
116
.wave/contracts/issue-update-context.schema.json
Normal file
116
.wave/contracts/issue-update-context.schema.json
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Issue Update Context",
|
||||||
|
"description": "Schema for gathered context about a GitHub issue and recent codebase changes",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["repository", "issue", "changes_since_creation", "referenced_files"],
|
||||||
|
"properties": {
|
||||||
|
"repository": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["owner", "name"],
|
||||||
|
"properties": {
|
||||||
|
"owner": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"issue": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["number", "title", "body", "url", "created_at"],
|
||||||
|
"properties": {
|
||||||
|
"number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"comments": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"author": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"created_at": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"changes_since_creation": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["commits", "commit_count"],
|
||||||
|
"properties": {
|
||||||
|
"commits": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commit_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"releases": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"referenced_files": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["found", "missing"],
|
||||||
|
"properties": {
|
||||||
|
"found": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"missing": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"criticism": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"project_context": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
73
.wave/contracts/issue-update-draft.schema.json
Normal file
73
.wave/contracts/issue-update-draft.schema.json
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Issue Update Draft",
|
||||||
|
"description": "Schema for a drafted update to a GitHub issue",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "original_title", "updated_title", "title_changed", "original_body", "updated_body", "staleness_assessment", "changes_made"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"original_title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"updated_title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"title_changed": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"original_body": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updated_body": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
},
|
||||||
|
"staleness_assessment": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["overall_staleness", "sections"],
|
||||||
|
"properties": {
|
||||||
|
"overall_staleness": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["low", "medium", "high", "critical"]
|
||||||
|
},
|
||||||
|
"sections": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "status", "reason"],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["STILL_VALID", "OUTDATED", "INCOMPLETE", "WRONG"]
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"changes_made": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"minItems": 1
|
||||||
|
},
|
||||||
|
"criticism_addressed": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
57
.wave/contracts/issue-update-result.schema.json
Normal file
57
.wave/contracts/issue-update-result.schema.json
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Issue Update Result",
|
||||||
|
"description": "Schema for the result of applying an issue update",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "success", "changes_applied", "verification"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"title_updated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"body_updated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"changes_applied": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"verification": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["title_matches", "body_matches"],
|
||||||
|
"properties": {
|
||||||
|
"title_matches": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"body_matches": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"discrepancies": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"staleness_assessment": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["low", "medium", "high", "critical"]
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"type": ["string", "null"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
179
.wave/contracts/plan-exploration.schema.json
Normal file
179
.wave/contracts/plan-exploration.schema.json
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Plan Exploration",
|
||||||
|
"description": "Structured codebase exploration output for feature planning",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["feature_context", "related_files", "patterns", "affected_modules", "testing_landscape", "risks", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"feature_context": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["input_summary", "scope_assessment"],
|
||||||
|
"properties": {
|
||||||
|
"input_summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 10,
|
||||||
|
"description": "Brief summary of the feature or task being planned"
|
||||||
|
},
|
||||||
|
"scope_assessment": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["small", "medium", "large", "epic"],
|
||||||
|
"description": "Estimated scope of the work"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "relevance", "reason"],
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "File path relative to project root"
|
||||||
|
},
|
||||||
|
"relevance": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["primary", "secondary", "reference"],
|
||||||
|
"description": "How relevant this file is to the feature"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Why this file is relevant"
|
||||||
|
},
|
||||||
|
"key_symbols": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Important functions, types, or constants in this file"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Files related to the feature"
|
||||||
|
},
|
||||||
|
"patterns": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "name", "description", "relevance"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^PAT-[0-9]{3}$",
|
||||||
|
"description": "Pattern identifier"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Short name for the pattern"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What the pattern is and how it works"
|
||||||
|
},
|
||||||
|
"example_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "File that best demonstrates this pattern"
|
||||||
|
},
|
||||||
|
"relevance": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["must_follow", "should_follow", "informational"],
|
||||||
|
"description": "How important it is to follow this pattern"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Codebase patterns and conventions discovered"
|
||||||
|
},
|
||||||
|
"affected_modules": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "description", "impact_level"],
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Module or package path"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What this module does"
|
||||||
|
},
|
||||||
|
"impact_level": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["direct", "indirect", "none"],
|
||||||
|
"description": "Level of impact from the planned changes"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Modules this one depends on"
|
||||||
|
},
|
||||||
|
"dependents": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Modules that depend on this one"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Modules affected by the planned changes"
|
||||||
|
},
|
||||||
|
"testing_landscape": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["existing_test_files", "testing_patterns"],
|
||||||
|
"properties": {
|
||||||
|
"existing_test_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Test files relevant to the feature"
|
||||||
|
},
|
||||||
|
"testing_patterns": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Testing patterns used in the codebase (e.g., table-driven, mocks)"
|
||||||
|
},
|
||||||
|
"coverage_gaps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Areas lacking test coverage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"risks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description", "severity"],
|
||||||
|
"properties": {
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What the risk is"
|
||||||
|
},
|
||||||
|
"severity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "Risk severity"
|
||||||
|
},
|
||||||
|
"mitigation": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "How to mitigate this risk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Risks identified during exploration"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the exploration was completed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
235
.wave/contracts/plan-review.schema.json
Normal file
235
.wave/contracts/plan-review.schema.json
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Plan Review",
|
||||||
|
"description": "Structured review of a task breakdown plan",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["verdict", "summary", "task_reviews", "cross_cutting_concerns", "recommendations", "risk_assessment", "timestamp", "markdown_content"],
|
||||||
|
"properties": {
|
||||||
|
"verdict": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["decision", "confidence", "rationale"],
|
||||||
|
"properties": {
|
||||||
|
"decision": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["approve", "approve_with_notes", "revise"],
|
||||||
|
"description": "Overall verdict on the plan"
|
||||||
|
},
|
||||||
|
"confidence": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "Confidence in the verdict"
|
||||||
|
},
|
||||||
|
"rationale": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"description": "Explanation for the verdict"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_tasks_reviewed", "issues_found", "issues_by_severity", "strengths"],
|
||||||
|
"properties": {
|
||||||
|
"total_tasks_reviewed": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Number of tasks reviewed"
|
||||||
|
},
|
||||||
|
"issues_found": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of issues found"
|
||||||
|
},
|
||||||
|
"issues_by_severity": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"critical": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"high": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"medium": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"low": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Issues broken down by severity"
|
||||||
|
},
|
||||||
|
"strengths": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Things the plan does well"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"task_reviews": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["task_id", "status"],
|
||||||
|
"properties": {
|
||||||
|
"task_id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^T[0-9]{2}$",
|
||||||
|
"description": "ID of the reviewed task"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["ok", "needs_refinement", "missing_details", "overcomplicated", "wrong_persona", "bad_dependencies"],
|
||||||
|
"description": "Review status for this task"
|
||||||
|
},
|
||||||
|
"issues": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "severity", "description", "suggestion"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^REV-[0-9]{3}$",
|
||||||
|
"description": "Issue identifier"
|
||||||
|
},
|
||||||
|
"severity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"],
|
||||||
|
"description": "Issue severity"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What the issue is"
|
||||||
|
},
|
||||||
|
"suggestion": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "How to fix it"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Issues found in this task"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Per-task review results"
|
||||||
|
},
|
||||||
|
"cross_cutting_concerns": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "category", "description", "affected_tasks", "recommendation"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^CC-[0-9]{3}$",
|
||||||
|
"description": "Concern identifier"
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Category of concern (e.g., testing, security, performance)"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What the concern is"
|
||||||
|
},
|
||||||
|
"affected_tasks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^T[0-9]{2}$"
|
||||||
|
},
|
||||||
|
"description": "Tasks affected by this concern"
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Recommended action"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Concerns that span multiple tasks"
|
||||||
|
},
|
||||||
|
"recommendations": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "priority", "description", "type"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^REC-[0-9]{3}$",
|
||||||
|
"description": "Recommendation identifier"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"],
|
||||||
|
"description": "Priority of the recommendation"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What should be done"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["add_task", "modify_task", "remove_task", "reorder", "split_task", "merge_tasks", "change_persona", "add_dependency"],
|
||||||
|
"description": "Type of change recommended"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Actionable recommendations for improving the plan"
|
||||||
|
},
|
||||||
|
"risk_assessment": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["overall_risk", "key_risks"],
|
||||||
|
"properties": {
|
||||||
|
"overall_risk": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "Overall risk level of the plan"
|
||||||
|
},
|
||||||
|
"key_risks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["description", "severity", "likelihood"],
|
||||||
|
"properties": {
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Risk description"
|
||||||
|
},
|
||||||
|
"severity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"]
|
||||||
|
},
|
||||||
|
"likelihood": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"]
|
||||||
|
},
|
||||||
|
"mitigation": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "How to mitigate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Key risks identified in the plan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the review was completed"
|
||||||
|
},
|
||||||
|
"markdown_content": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 50,
|
||||||
|
"description": "Pre-rendered human-readable review in markdown format"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
40
.wave/contracts/plan-status.schema.json
Normal file
40
.wave/contracts/plan-status.schema.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Plan Status",
|
||||||
|
"description": "Status report from the plan step: research, design, and implementation plan generation.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["plan_file", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"plan_file": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the generated implementation plan file"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of the plan produced"
|
||||||
|
},
|
||||||
|
"research_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to research.md if generated"
|
||||||
|
},
|
||||||
|
"data_model_file": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to data-model.md if generated"
|
||||||
|
},
|
||||||
|
"constitution_issues": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Constitution compliance issues found during planning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
142
.wave/contracts/plan-tasks.schema.json
Normal file
142
.wave/contracts/plan-tasks.schema.json
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Plan Tasks",
|
||||||
|
"description": "Structured task breakdown for feature implementation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["feature_summary", "tasks", "execution_order", "metadata", "markdown_content"],
|
||||||
|
"properties": {
|
||||||
|
"feature_summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["title", "description", "total_tasks", "estimated_total_complexity"],
|
||||||
|
"properties": {
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 5,
|
||||||
|
"description": "Short title for the feature"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"description": "Brief description of what the feature does"
|
||||||
|
},
|
||||||
|
"total_tasks": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Total number of tasks in the breakdown"
|
||||||
|
},
|
||||||
|
"estimated_total_complexity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["S", "M", "L", "XL"],
|
||||||
|
"description": "Overall complexity estimate"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "description", "persona", "complexity", "acceptance_criteria"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^T[0-9]{2}$",
|
||||||
|
"description": "Task identifier (T01, T02, etc.)"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 5,
|
||||||
|
"description": "Short task title"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"description": "What needs to be done"
|
||||||
|
},
|
||||||
|
"persona": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["navigator", "philosopher", "craftsman", "auditor", "planner", "implementer", "reviewer"],
|
||||||
|
"description": "Which persona should execute this task"
|
||||||
|
},
|
||||||
|
"complexity": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["S", "M", "L", "XL"],
|
||||||
|
"description": "Task complexity estimate"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^T[0-9]{2}$"
|
||||||
|
},
|
||||||
|
"description": "Task IDs that must complete before this one"
|
||||||
|
},
|
||||||
|
"acceptance_criteria": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "How to verify the task is complete"
|
||||||
|
},
|
||||||
|
"affected_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Files that will be created or modified"
|
||||||
|
},
|
||||||
|
"risks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Risks specific to this task"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Ordered list of tasks"
|
||||||
|
},
|
||||||
|
"execution_order": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["phase", "task_ids"],
|
||||||
|
"properties": {
|
||||||
|
"phase": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Execution phase number"
|
||||||
|
},
|
||||||
|
"task_ids": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^T[0-9]{2}$"
|
||||||
|
},
|
||||||
|
"description": "Tasks that can run in parallel in this phase"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Parallelization groups for task execution"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["generated_at"],
|
||||||
|
"properties": {
|
||||||
|
"generated_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the plan was generated"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"markdown_content": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 50,
|
||||||
|
"description": "Pre-rendered human-readable plan in markdown format"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
43
.wave/contracts/pr-result.schema.json
Normal file
43
.wave/contracts/pr-result.schema.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Pull Request Result",
|
||||||
|
"description": "Result of creating a pull request. Used by pipeline steps that produce a PR as their final output.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["pr_url", "pr_number", "branch", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"pr_url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "URL to the created pull request"
|
||||||
|
},
|
||||||
|
"pr_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Pull request number"
|
||||||
|
},
|
||||||
|
"branch": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Branch name for the pull request"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of what the pull request does"
|
||||||
|
},
|
||||||
|
"copilot_review_requested": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether a Copilot review was requested for the PR"
|
||||||
|
},
|
||||||
|
"closes_issue": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether the PR closes a linked issue"
|
||||||
|
},
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Issue number that this PR addresses"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
42
.wave/contracts/probed-findings.schema.json
Normal file
42
.wave/contracts/probed-findings.schema.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Probed Findings",
|
||||||
|
"description": "Deep-dive analysis from the recinq probe step",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "total_probed", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"target": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What was analyzed (path, module, or 'whole-project')"
|
||||||
|
},
|
||||||
|
"total_probed": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Total number of confirmed findings that were probed deeper"
|
||||||
|
},
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "deeper_analysis", "files"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Original finding ID (e.g. DVG-001)"
|
||||||
|
},
|
||||||
|
"deeper_analysis": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Extended analysis including dependency graph, second-order effects, and cross-finding patterns"
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "File paths involved in this finding and its connections"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"description": "Per-finding deep-dive results"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
119
.wave/contracts/project-survey.schema.json
Normal file
119
.wave/contracts/project-survey.schema.json
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Project Survey",
|
||||||
|
"description": "Structured survey of a project for onboarding guide generation",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["project", "build", "structure", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"project": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "language", "purpose"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string", "minLength": 1 },
|
||||||
|
"language": { "type": "string", "minLength": 1 },
|
||||||
|
"framework": { "type": "string" },
|
||||||
|
"purpose": { "type": "string", "minLength": 5 },
|
||||||
|
"license": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["commands"],
|
||||||
|
"properties": {
|
||||||
|
"commands": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"build": { "type": "string" },
|
||||||
|
"test": { "type": "string" },
|
||||||
|
"run": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prerequisites": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"ci_system": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"structure": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "purpose"],
|
||||||
|
"properties": {
|
||||||
|
"path": { "type": "string", "minLength": 1 },
|
||||||
|
"purpose": { "type": "string", "minLength": 1 },
|
||||||
|
"key_files": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"architecture": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"entry_points": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"components": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "role"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"package": { "type": "string" },
|
||||||
|
"role": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patterns": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"key_deps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "purpose"],
|
||||||
|
"properties": {
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"purpose": { "type": "string" },
|
||||||
|
"import": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"total_count": { "type": "integer", "minimum": 0 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"configuration": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"env_vars": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"config_files": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"feature_flags": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"testing": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"framework": { "type": "string" },
|
||||||
|
"patterns": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"run_command": { "type": "string" },
|
||||||
|
"coverage_command": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"workflow": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"branch_strategy": { "type": "string" },
|
||||||
|
"commit_convention": { "type": "string" },
|
||||||
|
"pr_process": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"documentation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"locations": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"quality": { "type": "string", "enum": ["good", "adequate", "sparse", "missing"] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
29
.wave/contracts/publish-result.schema.json
Normal file
29
.wave/contracts/publish-result.schema.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Code Review Publish Result",
|
||||||
|
"description": "Result of publishing a code review comment on a pull request",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["comment_url", "pr_number"],
|
||||||
|
"properties": {
|
||||||
|
"comment_url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "URL to the posted review comment"
|
||||||
|
},
|
||||||
|
"pr_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "PR number that was reviewed"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$",
|
||||||
|
"description": "Repository full name (owner/repo)"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Brief summary of the review"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
43
.wave/contracts/recinq-context.schema.json
Normal file
43
.wave/contracts/recinq-context.schema.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Recinq Context",
|
||||||
|
"description": "Parsed input context from the recinq gather step",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["input_type", "original_input", "focus_hint"],
|
||||||
|
"properties": {
|
||||||
|
"input_type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["issue", "pr", "local"],
|
||||||
|
"description": "The kind of input: GitHub issue, GitHub PR, or local path/description"
|
||||||
|
},
|
||||||
|
"original_input": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The raw input string exactly as given by the user"
|
||||||
|
},
|
||||||
|
"focus_hint": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Summary of what should be simplified or focused on"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "GitHub issue or PR URL (empty for local input)"
|
||||||
|
},
|
||||||
|
"repo": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "GitHub owner/repo (empty for local input)"
|
||||||
|
},
|
||||||
|
"number": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "GitHub issue or PR number (0 for local input)"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "GitHub issue or PR title (empty for local input)"
|
||||||
|
},
|
||||||
|
"body": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "GitHub issue or PR body (empty for local input)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
27
.wave/contracts/refactor-analysis.schema.json
Normal file
27
.wave/contracts/refactor-analysis.schema.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target_files", "affected_callers", "existing_tests", "integration_points", "risk_assessment"],
|
||||||
|
"properties": {
|
||||||
|
"target_files": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"affected_callers": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"existing_tests": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"integration_points": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"risk_assessment": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["low", "medium", "high"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
178
.wave/contracts/research-findings.schema.json
Normal file
178
.wave/contracts/research-findings.schema.json
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Research Findings",
|
||||||
|
"description": "Web research results organized by topic with sources and insights",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_reference", "findings_by_topic", "research_metadata"],
|
||||||
|
"properties": {
|
||||||
|
"issue_reference": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "repository"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"findings_by_topic": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["topic_id", "topic_title", "findings", "confidence_level"],
|
||||||
|
"properties": {
|
||||||
|
"topic_id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^TOPIC-[0-9]{3}$",
|
||||||
|
"description": "Reference to topic ID from research-topics"
|
||||||
|
},
|
||||||
|
"topic_title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Topic title for readability"
|
||||||
|
},
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "summary", "source", "relevance_score"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^FINDING-[0-9]{3}$",
|
||||||
|
"description": "Unique finding identifier"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"maxLength": 2000,
|
||||||
|
"description": "Summarized finding content"
|
||||||
|
},
|
||||||
|
"key_points": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Bullet points of key insights"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["url", "title", "type"],
|
||||||
|
"properties": {
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "Source URL"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Source page/article title"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"],
|
||||||
|
"description": "Type of source"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Author or organization name"
|
||||||
|
},
|
||||||
|
"credibility_score": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1,
|
||||||
|
"description": "Source credibility assessment (0-1)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"relevance_score": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1,
|
||||||
|
"description": "Relevance to the topic (0-1)"
|
||||||
|
},
|
||||||
|
"quotes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["text"],
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Direct quote from source"
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Context for the quote"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Notable quotes from the source"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Individual research findings for this topic"
|
||||||
|
},
|
||||||
|
"confidence_level": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low", "inconclusive"],
|
||||||
|
"description": "Overall confidence in findings for this topic"
|
||||||
|
},
|
||||||
|
"consensus": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Summary of consensus across sources"
|
||||||
|
},
|
||||||
|
"gaps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Questions that couldn't be fully answered"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Research findings organized by topic"
|
||||||
|
},
|
||||||
|
"research_metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["started_at", "completed_at"],
|
||||||
|
"properties": {
|
||||||
|
"started_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Research start timestamp"
|
||||||
|
},
|
||||||
|
"completed_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Research completion timestamp"
|
||||||
|
},
|
||||||
|
"persona": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Wave persona that conducted research"
|
||||||
|
},
|
||||||
|
"total_sources_consulted": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Total number of sources examined"
|
||||||
|
},
|
||||||
|
"sources_included": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Number of sources included in findings"
|
||||||
|
},
|
||||||
|
"search_queries_used": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Search queries that were used"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
206
.wave/contracts/research-report.schema.json
Normal file
206
.wave/contracts/research-report.schema.json
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Research Report",
|
||||||
|
"description": "Synthesized research report for GitHub issue comment",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_reference", "executive_summary", "detailed_findings", "recommendations", "sources", "markdown_content"],
|
||||||
|
"properties": {
|
||||||
|
"issue_reference": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "repository", "title"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"executive_summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["overview", "key_findings", "primary_recommendation"],
|
||||||
|
"properties": {
|
||||||
|
"overview": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 50,
|
||||||
|
"maxLength": 1000,
|
||||||
|
"description": "Brief overview of research conducted and main conclusions"
|
||||||
|
},
|
||||||
|
"key_findings": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 7,
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Top findings as bullet points"
|
||||||
|
},
|
||||||
|
"primary_recommendation": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"description": "Single most important recommendation"
|
||||||
|
},
|
||||||
|
"confidence_assessment": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "Overall confidence in the research conclusions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"detailed_findings": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["section_title", "content", "relevance"],
|
||||||
|
"properties": {
|
||||||
|
"section_title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 3,
|
||||||
|
"description": "Section heading"
|
||||||
|
},
|
||||||
|
"topic_id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^TOPIC-[0-9]{3}$",
|
||||||
|
"description": "Reference to original topic if applicable"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 50,
|
||||||
|
"description": "Detailed markdown content for this section"
|
||||||
|
},
|
||||||
|
"relevance": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "supplementary"],
|
||||||
|
"description": "How relevant this section is to the issue"
|
||||||
|
},
|
||||||
|
"code_examples": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["code", "language"],
|
||||||
|
"properties": {
|
||||||
|
"code": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Code snippet"
|
||||||
|
},
|
||||||
|
"language": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Language for syntax highlighting"
|
||||||
|
},
|
||||||
|
"caption": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Explanation of the code"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Code examples for this section"
|
||||||
|
},
|
||||||
|
"related_sources": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^SRC-[0-9]{3}$"
|
||||||
|
},
|
||||||
|
"description": "References to sources list"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Detailed findings organized by section"
|
||||||
|
},
|
||||||
|
"recommendations": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 10,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "description", "priority"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^REC-[0-9]{3}$",
|
||||||
|
"description": "Recommendation identifier"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 5,
|
||||||
|
"maxLength": 100,
|
||||||
|
"description": "Concise recommendation title"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 20,
|
||||||
|
"description": "Detailed recommendation explanation"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"],
|
||||||
|
"description": "Recommendation priority"
|
||||||
|
},
|
||||||
|
"effort_estimate": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["trivial", "small", "medium", "large", "unknown"],
|
||||||
|
"description": "Estimated implementation effort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Actionable recommendations based on research"
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "url", "title"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^SRC-[0-9]{3}$",
|
||||||
|
"description": "Source identifier for cross-referencing"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "Source URL"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Source title"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["official_docs", "github_issue", "github_discussion", "stack_overflow", "blog_post", "tutorial", "api_reference", "academic_paper", "forum_post", "other"]
|
||||||
|
},
|
||||||
|
"reliability": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["authoritative", "reputable", "community", "unverified"],
|
||||||
|
"description": "Source reliability assessment"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "All sources cited in the report"
|
||||||
|
},
|
||||||
|
"markdown_content": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 100,
|
||||||
|
"description": "Pre-rendered markdown content ready for GitHub comment"
|
||||||
|
},
|
||||||
|
"follow_up_questions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Questions that warrant further investigation"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
106
.wave/contracts/research-topics.schema.json
Normal file
106
.wave/contracts/research-topics.schema.json
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Research Topics",
|
||||||
|
"description": "Extracted research topics from GitHub issue analysis",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_reference", "topics"],
|
||||||
|
"properties": {
|
||||||
|
"issue_reference": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["issue_number", "repository"],
|
||||||
|
"properties": {
|
||||||
|
"issue_number": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Reference to source issue number"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[^/]+/[^/]+$",
|
||||||
|
"description": "Repository full name (owner/repo)"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Issue title for context"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"topics": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 10,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "questions", "keywords", "priority"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^TOPIC-[0-9]{3}$",
|
||||||
|
"description": "Unique topic identifier (e.g., TOPIC-001)"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 5,
|
||||||
|
"maxLength": 200,
|
||||||
|
"description": "Concise topic title"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Detailed description of what needs to be researched"
|
||||||
|
},
|
||||||
|
"questions": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 5,
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 10
|
||||||
|
},
|
||||||
|
"description": "Specific questions to answer through research"
|
||||||
|
},
|
||||||
|
"keywords": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 10,
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 2
|
||||||
|
},
|
||||||
|
"description": "Search keywords for web research"
|
||||||
|
},
|
||||||
|
"priority": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["critical", "high", "medium", "low"],
|
||||||
|
"description": "Research priority level"
|
||||||
|
},
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["technical", "documentation", "best_practices", "security", "performance", "compatibility", "other"],
|
||||||
|
"description": "Topic category for organization"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "List of research topics extracted from the issue"
|
||||||
|
},
|
||||||
|
"extraction_metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"extracted_at": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "Timestamp when topics were extracted"
|
||||||
|
},
|
||||||
|
"persona": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Wave persona that performed the extraction"
|
||||||
|
},
|
||||||
|
"confidence": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1,
|
||||||
|
"description": "Confidence score for topic relevance (0-1)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
73
.wave/contracts/security-scan.schema.json
Normal file
73
.wave/contracts/security-scan.schema.json
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Security Scan Results",
|
||||||
|
"description": "Output from the security scan step",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "findings", "summary", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"target": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "What was scanned"
|
||||||
|
},
|
||||||
|
"attack_surface": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["entry_point", "type", "description"],
|
||||||
|
"properties": {
|
||||||
|
"entry_point": { "type": "string", "minLength": 1 },
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["http_handler", "cli_input", "file_parser", "db_query", "api_call", "ipc", "other"]
|
||||||
|
},
|
||||||
|
"description": { "type": "string", "minLength": 1 },
|
||||||
|
"risk_level": { "type": "string", "enum": ["high", "medium", "low"] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "title", "severity", "category", "location", "description"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string", "pattern": "^SEC-[0-9]{3}$" },
|
||||||
|
"title": { "type": "string", "minLength": 5 },
|
||||||
|
"severity": { "type": "string", "enum": ["CRITICAL", "HIGH", "MEDIUM", "LOW"] },
|
||||||
|
"category": { "type": "string", "minLength": 1 },
|
||||||
|
"location": { "type": "string", "minLength": 1 },
|
||||||
|
"description": { "type": "string", "minLength": 10 },
|
||||||
|
"evidence": { "type": "string" },
|
||||||
|
"exploitability": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"secrets_check": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"hardcoded_secrets": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"insecure_configs": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_findings", "by_severity", "risk_assessment"],
|
||||||
|
"properties": {
|
||||||
|
"total_findings": { "type": "integer", "minimum": 0 },
|
||||||
|
"by_severity": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["CRITICAL", "HIGH", "MEDIUM", "LOW"],
|
||||||
|
"properties": {
|
||||||
|
"CRITICAL": { "type": "integer", "minimum": 0 },
|
||||||
|
"HIGH": { "type": "integer", "minimum": 0 },
|
||||||
|
"MEDIUM": { "type": "integer", "minimum": 0 },
|
||||||
|
"LOW": { "type": "integer", "minimum": 0 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"risk_assessment": { "type": "string", "minLength": 10 }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
31
.wave/contracts/smoke-test.schema.json
Normal file
31
.wave/contracts/smoke-test.schema.json
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Smoke Test Analysis",
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"summary",
|
||||||
|
"files_examined",
|
||||||
|
"recommendation"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 10,
|
||||||
|
"description": "Brief summary of the analysis"
|
||||||
|
},
|
||||||
|
"files_examined": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"description": "List of files that were examined"
|
||||||
|
},
|
||||||
|
"recommendation": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 10,
|
||||||
|
"description": "Recommendation based on analysis"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
78
.wave/contracts/source-extract.schema.json
Normal file
78
.wave/contracts/source-extract.schema.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Source Extract",
|
||||||
|
"description": "Extracted content from a single web source for ingestion",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["url", "title", "summary", "key_concepts"],
|
||||||
|
"properties": {
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "Original URL that was fetched"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Article or page title"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Author name"
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Publication date"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 50,
|
||||||
|
"maxLength": 3000,
|
||||||
|
"description": "Summary of the source content"
|
||||||
|
},
|
||||||
|
"key_concepts": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["concept", "description"],
|
||||||
|
"properties": {
|
||||||
|
"concept": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Name of the key concept"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Explanation of the concept as presented in the source"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Key concepts extracted from the source"
|
||||||
|
},
|
||||||
|
"notable_quotes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["text"],
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Direct quote"
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Context for the quote"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Notable direct quotes from the source"
|
||||||
|
},
|
||||||
|
"author_year_key": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[A-Z][a-zA-Z]+[0-9]{4}[a-z]?$",
|
||||||
|
"description": "Suggested AuthorYear key for bibliographic note (e.g., Willison2026)"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
119
.wave/contracts/spec-phase.schema.json
Normal file
119
.wave/contracts/spec-phase.schema.json
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://schema.recinq.com/wave/spec-phase.schema.json",
|
||||||
|
"title": "Wave Spec Phase Output Contract",
|
||||||
|
"description": "Validates spec phase outputs for prototype-driven development pipeline",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"phase": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "spec",
|
||||||
|
"description": "Phase identifier"
|
||||||
|
},
|
||||||
|
"artifacts": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"spec": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*spec\\.md$",
|
||||||
|
"description": "Path to specification file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Specification file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Specification content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"requirements": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^.*requirements\\.md$",
|
||||||
|
"description": "Path to requirements file"
|
||||||
|
},
|
||||||
|
"exists": {
|
||||||
|
"type": "boolean",
|
||||||
|
"const": true,
|
||||||
|
"description": "Requirements file must exist"
|
||||||
|
},
|
||||||
|
"content_type": {
|
||||||
|
"type": "string",
|
||||||
|
"const": "markdown",
|
||||||
|
"description": "Requirements content format"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["path", "exists", "content_type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["spec"],
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"validation": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"completeness_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Specification completeness rating"
|
||||||
|
},
|
||||||
|
"clarity_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Specification clarity rating"
|
||||||
|
},
|
||||||
|
"testability_score": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 100,
|
||||||
|
"description": "Specification testability rating"
|
||||||
|
},
|
||||||
|
"specification_quality": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["poor", "fair", "good", "excellent"],
|
||||||
|
"description": "Overall specification quality assessment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["specification_quality"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When spec phase was completed"
|
||||||
|
},
|
||||||
|
"duration_seconds": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"description": "Time taken for spec phase"
|
||||||
|
},
|
||||||
|
"input_description": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Original project description input"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["timestamp", "input_description"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["phase", "artifacts", "validation", "metadata"],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
35
.wave/contracts/specify-status.schema.json
Normal file
35
.wave/contracts/specify-status.schema.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Specify Status",
|
||||||
|
"description": "Status report from the specify step: feature branch creation and spec authoring.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["branch_name", "spec_file", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"branch_name": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Git branch name created for the feature"
|
||||||
|
},
|
||||||
|
"spec_file": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the generated spec.md file"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of what was created"
|
||||||
|
},
|
||||||
|
"checklist_status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["pass", "fail"],
|
||||||
|
"description": "Result of self-validation against the quality checklist"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
97
.wave/contracts/supervision-evaluation.schema.json
Normal file
97
.wave/contracts/supervision-evaluation.schema.json
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Supervision Evaluation",
|
||||||
|
"description": "Quality evaluation of both output and process",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["output_quality", "process_quality", "overall_score", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"output_quality": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["correctness", "completeness", "test_coverage", "code_quality"],
|
||||||
|
"properties": {
|
||||||
|
"correctness": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"completeness": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test_coverage": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"code_quality": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"process_quality": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["efficiency", "scope_discipline", "tool_usage"],
|
||||||
|
"properties": {
|
||||||
|
"efficiency": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scope_discipline": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tool_usage": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["score", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"token_economy": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"score": { "type": "string", "enum": ["excellent", "good", "adequate", "poor"] },
|
||||||
|
"findings": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overall_score": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["excellent", "good", "adequate", "poor"]
|
||||||
|
},
|
||||||
|
"key_strengths": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"key_concerns": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" }
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
83
.wave/contracts/supervision-evidence.schema.json
Normal file
83
.wave/contracts/supervision-evidence.schema.json
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Supervision Evidence",
|
||||||
|
"description": "Evidence gathered for supervising completed work",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["scope", "commits", "artifacts", "test_results", "timestamp"],
|
||||||
|
"properties": {
|
||||||
|
"scope": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "What was inspected and how it was identified",
|
||||||
|
"required": ["description", "detection_method"],
|
||||||
|
"properties": {
|
||||||
|
"description": { "type": "string", "minLength": 5 },
|
||||||
|
"detection_method": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["auto_detect", "pipeline_run", "branch", "pr", "freeform"]
|
||||||
|
},
|
||||||
|
"pipeline_name": { "type": "string" },
|
||||||
|
"branch_name": { "type": "string" },
|
||||||
|
"pr_number": { "type": "integer" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commits": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["hash", "message", "files_changed"],
|
||||||
|
"properties": {
|
||||||
|
"hash": { "type": "string" },
|
||||||
|
"message": { "type": "string" },
|
||||||
|
"author": { "type": "string" },
|
||||||
|
"files_changed": { "type": "integer" },
|
||||||
|
"insertions": { "type": "integer" },
|
||||||
|
"deletions": { "type": "integer" },
|
||||||
|
"has_session_transcript": { "type": "boolean" },
|
||||||
|
"transcript_summary": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"artifacts": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Pipeline workspace artifacts found",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["path", "type"],
|
||||||
|
"properties": {
|
||||||
|
"path": { "type": "string" },
|
||||||
|
"type": { "type": "string" },
|
||||||
|
"size_bytes": { "type": "integer" },
|
||||||
|
"summary": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test_results": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["ran", "passed"],
|
||||||
|
"properties": {
|
||||||
|
"ran": { "type": "boolean" },
|
||||||
|
"passed": { "type": "boolean" },
|
||||||
|
"total_tests": { "type": "integer" },
|
||||||
|
"failed_tests": { "type": "integer" },
|
||||||
|
"coverage_percent": { "type": "number" },
|
||||||
|
"details": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"session_transcripts": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Claudit session transcripts from git notes",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["commit_hash", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"commit_hash": { "type": "string" },
|
||||||
|
"summary": { "type": "string" },
|
||||||
|
"tool_calls_count": { "type": "integer" },
|
||||||
|
"notable_detours": { "type": "array", "items": { "type": "string" } },
|
||||||
|
"errors_encountered": { "type": "array", "items": { "type": "string" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timestamp": { "type": "string", "format": "date-time" }
|
||||||
|
}
|
||||||
|
}
|
||||||
33
.wave/contracts/tasks-status.schema.json
Normal file
33
.wave/contracts/tasks-status.schema.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Speckit Tasks Status",
|
||||||
|
"description": "Status report from the tasks step: dependency-ordered task breakdown generation.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["total_tasks", "feature_dir", "summary"],
|
||||||
|
"properties": {
|
||||||
|
"total_tasks": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"description": "Total number of tasks generated"
|
||||||
|
},
|
||||||
|
"feature_dir": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Path to the feature directory"
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "Brief description of the task breakdown"
|
||||||
|
},
|
||||||
|
"tasks_per_story": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Mapping of user story identifiers to task counts"
|
||||||
|
},
|
||||||
|
"parallel_opportunities": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of tasks that can be executed in parallel"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
50
.wave/contracts/validated-findings.schema.json
Normal file
50
.wave/contracts/validated-findings.schema.json
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Validated Findings",
|
||||||
|
"description": "Convergent validation results from the recinq converge step",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["target", "total_findings", "confirmed", "rejected", "findings"],
|
||||||
|
"properties": {
|
||||||
|
"target": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "What was analyzed (path, module, or 'whole-project')"
|
||||||
|
},
|
||||||
|
"total_findings": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Total number of divergent findings reviewed"
|
||||||
|
},
|
||||||
|
"confirmed": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of findings classified as CONFIRMED or PARTIALLY_CONFIRMED"
|
||||||
|
},
|
||||||
|
"rejected": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of findings classified as REJECTED"
|
||||||
|
},
|
||||||
|
"findings": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "status", "rationale"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Original finding ID (e.g. DVG-001)"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["CONFIRMED", "PARTIALLY_CONFIRMED", "REJECTED"],
|
||||||
|
"description": "Validation classification"
|
||||||
|
},
|
||||||
|
"rationale": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Explanation of why the finding was classified this way"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
},
|
||||||
|
"description": "Per-finding validation results"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
85
.wave/contracts/web-findings.schema.json
Normal file
85
.wave/contracts/web-findings.schema.json
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Web Findings",
|
||||||
|
"description": "Structured web research results for a given topic",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["topic", "sources", "search_queries"],
|
||||||
|
"properties": {
|
||||||
|
"topic": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The topic that was researched"
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["url", "title", "key_ideas", "relevance_to_topic"],
|
||||||
|
"properties": {
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"description": "Source URL"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Article or page title"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Author name if available"
|
||||||
|
},
|
||||||
|
"date": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Publication date if available"
|
||||||
|
},
|
||||||
|
"key_ideas": {
|
||||||
|
"type": "array",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Key ideas extracted from the source"
|
||||||
|
},
|
||||||
|
"quotes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["text"],
|
||||||
|
"properties": {
|
||||||
|
"text": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Direct quote from source"
|
||||||
|
},
|
||||||
|
"context": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Context for the quote"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Notable direct quotes"
|
||||||
|
},
|
||||||
|
"relevance_to_topic": {
|
||||||
|
"type": "number",
|
||||||
|
"minimum": 0,
|
||||||
|
"maximum": 1,
|
||||||
|
"description": "Relevance score (0-1)"
|
||||||
|
},
|
||||||
|
"source_type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["blog_post", "academic_paper", "documentation", "news_article", "conference_talk", "book_excerpt", "other"],
|
||||||
|
"description": "Type of source"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Web sources found and analyzed"
|
||||||
|
},
|
||||||
|
"search_queries": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Search queries that were executed"
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
72
.wave/contracts/zettel-references.schema.json
Normal file
72
.wave/contracts/zettel-references.schema.json
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"title": "Zettel References",
|
||||||
|
"description": "Notes found in the Zettelkasten relevant to a given topic",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["query_keywords", "references", "index_entry_points"],
|
||||||
|
"properties": {
|
||||||
|
"query_keywords": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Keywords used for searching"
|
||||||
|
},
|
||||||
|
"references": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["filename", "title", "folgezettel_address", "relevance", "key_quotes"],
|
||||||
|
"properties": {
|
||||||
|
"filename": {
|
||||||
|
"type": "string",
|
||||||
|
"pattern": "^[0-9a-f]{8}\\.md$",
|
||||||
|
"description": "Hex-ID filename of the note"
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Full title including Folgezettel address"
|
||||||
|
},
|
||||||
|
"folgezettel_address": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Folgezettel address (e.g., 3.1c2)"
|
||||||
|
},
|
||||||
|
"relevance": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["high", "medium", "low"],
|
||||||
|
"description": "Relevance to the search topic"
|
||||||
|
},
|
||||||
|
"key_quotes": {
|
||||||
|
"type": "array",
|
||||||
|
"items": { "type": "string" },
|
||||||
|
"description": "Notable passages from the note"
|
||||||
|
},
|
||||||
|
"section": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Top-level section the note belongs to"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Relevant notes found in the Zettelkasten"
|
||||||
|
},
|
||||||
|
"index_entry_points": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["keyword", "filename", "title"],
|
||||||
|
"properties": {
|
||||||
|
"keyword": { "type": "string" },
|
||||||
|
"filename": { "type": "string" },
|
||||||
|
"title": { "type": "string" }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": "Entry points from the index note"
|
||||||
|
},
|
||||||
|
"total_notes_searched": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"timestamp": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user