{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://mosaicstack.dev/schemas/orchestrator/task.schema.json",
  "title": "Mosaic Orchestrator Task",
  "type": "object",
  "required": ["id", "title", "status"],
  "properties": {
    "id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": ["pending", "running", "gated", "completed", "failed", "escalated"]
    },
    "type": {
      "type": "string",
      "enum": ["coding", "deploy", "research", "review", "documentation", "infrastructure"],
      "description": "Task type - determines dispatch strategy and gate requirements"
    },
    "dispatch": {
      "type": "string",
      "enum": ["yolo", "acp", "exec"],
      "description": "Execution backend: yolo=mosaic yolo (full system), acp=OpenClaw sessions_spawn (sandboxed), exec=direct shell"
    },
    "runtime": {
      "type": "string",
      "description": "Preferred worker runtime, e.g. codex, claude, opencode"
    },
    "worktree": {
      "type": "string",
      "description": "Path to git worktree for this task, e.g. ~/src/repo-worktrees/task-042"
    },
    "branch": {
      "type": "string",
      "description": "Git branch name for this task"
    },
    "brief_path": {
      "type": "string",
      "description": "Path to markdown task brief relative to repo root"
    },
    "result_path": {
      "type": "string",
      "description": "Path to JSON result file relative to .mosaic/orchestrator/"
    },
    "issue": {
      "type": "string",
      "description": "Issue reference (e.g. #42)"
    },
    "pr": {
      "type": ["string", "null"],
      "description": "PR number/URL once opened"
    },
    "depends_on": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "List of task IDs this task depends on"
    },
    "depends_on_policy": {
      "type": "string",
      "enum": ["all", "any", "all_terminal"],
      "default": "all",
      "description": "How to evaluate dependency satisfaction"
    },
    "max_attempts": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "attempts": {
      "type": "integer",
      "minimum": 0,
      "default": 0
    },
    "timeout_seconds": {
      "type": "integer",
      "description": "Override default timeout for this task"
    },
    "command": {
      "type": "string",
      "description": "Worker command to execute for this task"
    },
    "quality_gates": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "command": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": ["mechanical", "ai-review", "ci-pipeline"]
              },
              "fail_on": {
                "type": "string",
                "enum": ["blocker", "any"]
              }
            },
            "required": ["command"],
            "additionalProperties": true
          }
        ]
      }
    },
    "metadata": {
      "type": "object"
    }
  },
  "additionalProperties": true
}
