Files
scopone/.github/schemas/progress.schema.json
2026-04-10 22:35:01 +02:00

140 lines
4.9 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": true,
"required": [
"jira",
"type",
"slug",
"branch",
"build_command",
"test_command",
"max_parallel_tasks",
"docs_cache_state_path",
"docs_trusted_for_planning",
"trust_status",
"git_gate_completed",
"cycle_acceleration_mode",
"startup",
"metrics",
"iteration_number",
"current_phase",
"current_step",
"status",
"created_at",
"last_updated",
"last_checkpoint",
"iterations"
],
"properties": {
"jira": {"type": "string"},
"type": {"type": "string"},
"slug": {"type": "string"},
"branch": {"type": "string"},
"build_command": {"type": "string"},
"test_command": {"type": "string"},
"max_parallel_tasks": {"type": "integer", "minimum": 1},
"docs_cache_state_path": {"type": "string"},
"docs_trusted_for_planning": {"type": "boolean"},
"trust_status": {"type": "string", "enum": ["trusted", "stale", "unknown"]},
"git_gate_completed": {"type": "boolean"},
"cycle_acceleration_mode": {"type": "string", "enum": ["standard", "trivial_graph"]},
"startup": {
"type": "object",
"required": ["docs_state", "impact_scan", "planning_ready", "updated_at"],
"properties": {
"docs_state": {
"type": "object",
"required": [
"architecture_exists",
"code_style_exists",
"findings_exists",
"docs_trusted_for_planning",
"refresh_required"
],
"properties": {
"architecture_exists": {"type": "boolean"},
"code_style_exists": {"type": "boolean"},
"findings_exists": {"type": "boolean"},
"docs_trusted_for_planning": {"type": "boolean"},
"refresh_required": {"type": "boolean"}
}
},
"impact_scan": {
"type": "object",
"required": ["affected_areas", "likely_files"],
"properties": {
"affected_areas": {"type": "array", "items": {"type": "string"}},
"likely_files": {"type": "array", "items": {"type": "string"}}
}
},
"planning_ready": {"type": "boolean"},
"updated_at": {"type": "string"}
}
},
"metrics": {
"type": "object",
"required": [
"tasks_total",
"tasks_completed",
"groups_total",
"groups_completed",
"percent_complete",
"elapsed_minutes_estimate",
"remaining_minutes_estimate",
"eta_confidence",
"first_code_change_at",
"lead_time_to_first_code_change_minutes",
"latest_group_cycle_minutes_estimate",
"latest_iteration_cycle_minutes_estimate"
],
"properties": {
"tasks_total": {"type": "integer", "minimum": 0},
"tasks_completed": {"type": "integer", "minimum": 0},
"groups_total": {"type": "integer", "minimum": 0},
"groups_completed": {"type": "integer", "minimum": 0},
"percent_complete": {"type": "integer", "minimum": 0, "maximum": 100},
"elapsed_minutes_estimate": {"type": "number", "minimum": 0},
"remaining_minutes_estimate": {"type": ["number", "null"], "minimum": 0},
"eta_confidence": {"type": "string", "enum": ["low", "medium", "high"]},
"first_code_change_at": {"type": ["string", "null"]},
"lead_time_to_first_code_change_minutes": {"type": ["number", "null"], "minimum": 0},
"latest_group_cycle_minutes_estimate": {"type": ["number", "null"], "minimum": 0},
"latest_iteration_cycle_minutes_estimate": {"type": ["number", "null"], "minimum": 0}
}
},
"iteration_number": {"type": "integer", "minimum": 0},
"current_phase": {"type": "string"},
"current_step": {"type": "string"},
"current_task_id": {"type": ["string", "null"]},
"current_task_attempt": {"type": "integer", "minimum": 0},
"status": {"type": "string", "enum": ["PENDING", "PAUSED", "ACCEPTED", "REJECTED"]},
"created_at": {"type": "string"},
"last_updated": {"type": "string"},
"last_checkpoint": {
"type": "object",
"required": ["timestamp", "git_head", "phase", "step"],
"properties": {
"timestamp": {"type": "string"},
"git_head": {"type": "string"},
"phase": {"type": "string"},
"step": {"type": "string"}
}
},
"iterations": {
"type": "array",
"items": {
"type": "object",
"required": ["number", "status", "started_at", "completed_at", "tasks_total", "tasks_accepted"],
"properties": {
"number": {"type": "integer", "minimum": 0},
"status": {"type": "string"},
"started_at": {"type": "string"},
"completed_at": {"type": ["string", "null"]},
"tasks_total": {"type": "integer", "minimum": 0},
"tasks_accepted": {"type": "integer", "minimum": 0}
}
}
}
}
}