Files
motovaultpro/.ai/workflow-contract.json
2026-01-01 22:17:25 -06:00

120 lines
4.3 KiB
JSON

{
"name": "MotoVaultPro Solo Sprint Workflow",
"version": "1.0",
"principles": [
"Issues are the source of truth.",
"One status label per issue.",
"Work is timeboxed into 14-day sprints using milestones.",
"Every PR must link to at least one issue and satisfy its acceptance criteria."
],
"sprints": {
"length_days": 14,
"milestone_naming": "Sprint YYYY-MM-DD (start date)",
"default_start_day": "Monday",
"calendar_reference": ".gitea/SPRINTS.md",
"process": [
"If a milestone for the current sprint does not exist, create it.",
"Assign selected issues to the current sprint milestone."
]
},
"labels": {
"status_prefix": "status/",
"status_values": [
"status/backlog",
"status/ready",
"status/in-progress",
"status/review",
"status/blocked",
"status/done"
],
"type_prefix": "type/",
"type_values": [
"type/feature",
"type/bug",
"type/chore",
"type/docs"
],
"rules": [
"Exactly one status/* label must be present on open issues.",
"Exactly one type/* label must be present on issues.",
"When moving status, remove the previous status/* label first."
]
},
"branching": {
"branch_format": "issue-{index}-{slug}",
"target_branch": "main",
"example": "issue-42-add-fuel-efficiency-report"
},
"commit_conventions": {
"message_format": "{type}: {short summary} (refs #{index})",
"allowed_types": ["feat", "fix", "chore", "docs", "refactor", "test"],
"examples": [
"feat: add fuel efficiency calculation (refs #42)",
"fix: correct VIN validation for pre-1981 vehicles (refs #1)"
]
},
"pull_requests": {
"title_format": "{type}: {summary} (#{index})",
"body_requirements": [
"Link issue(s) using 'Fixes #123' or 'Relates to #123'.",
"Include test plan and results.",
"Confirm acceptance criteria completion."
],
"merge_policy": "squash_or_rebase_ok",
"template_location": ".gitea/PULL_REQUEST_TEMPLATE.md"
},
"execution_loop": [
"List repo issues in current sprint milestone with status/ready; if none, pull from status/backlog and promote the best candidate to status/ready.",
"Select one issue (prefer smallest size and highest priority).",
"Move issue to status/in-progress.",
"Create branch issue-{index}-{slug}.",
"Implement changes with focused commits.",
"Open PR targeting main and linking issue(s).",
"Move issue to status/review.",
"If CI/tests fail, iterate until pass.",
"When PR is merged, move issue to status/done and close issue if not auto-closed."
],
"gitea_mcp_tools": {
"repository": {
"owner": "egullickson",
"repo": "motovaultpro"
},
"issue_operations": {
"list_issues": "mcp__gitea-mcp__list_repo_issues",
"get_issue": "mcp__gitea-mcp__get_issue_by_index",
"create_issue": "mcp__gitea-mcp__create_issue",
"edit_issue": "mcp__gitea-mcp__edit_issue"
},
"label_operations": {
"list_labels": "mcp__gitea-mcp__list_repo_labels",
"add_labels": "mcp__gitea-mcp__add_issue_labels",
"remove_label": "mcp__gitea-mcp__remove_issue_label",
"replace_labels": "mcp__gitea-mcp__replace_issue_labels"
},
"milestone_operations": {
"list_milestones": "mcp__gitea-mcp__list_milestones",
"create_milestone": "mcp__gitea-mcp__create_milestone",
"get_milestone": "mcp__gitea-mcp__get_milestone"
},
"branch_operations": {
"list_branches": "mcp__gitea-mcp__list_branches",
"create_branch": "mcp__gitea-mcp__create_branch"
},
"pr_operations": {
"list_prs": "mcp__gitea-mcp__list_repo_pull_requests",
"create_pr": "mcp__gitea-mcp__create_pull_request",
"get_pr": "mcp__gitea-mcp__get_pull_request_by_index"
}
},
"fallbacks": {
"if_label_update_not_available_in_mcp": [
"Use REST API issue label endpoints to add/replace labels.",
"If REST is unavailable, add a comment 'STATUS: <status/...>' and proceed, but do not leave multiple status labels."
],
"if_milestone_ops_not_available_in_mcp": [
"Use REST API to create/list milestones and assign issues to the sprint milestone.",
"If milestone cannot be set, add a comment 'SPRINT: <milestone name>'."
]
}
}