{
  "type": "object",
  "additionalProperties": false,
  "required": ["plan", "digest"],
  "properties": {
    "plan": {
      "type": "object",
      "additionalProperties": false,
      "required": ["schema_version", "steps"],
      "properties": {
        "schema_version": { "const": 1 },
        "steps": {
          "type": "array",
          "minItems": 1,
          "maxItems": 16,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["id", "command", "args", "timeout_ms", "max_output_bytes"],
            "properties": {
              "id": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
              "command": { "type": "string", "enum": ["typescript", "vitest", "oms"] },
              "args": {
                "type": "array",
                "maxItems": 16,
                "items": { "type": "string", "minLength": 1, "maxLength": 4096 }
              },
              "timeout_ms": { "type": "integer", "minimum": 1, "maximum": 3600000 },
              "max_output_bytes": { "type": "integer", "minimum": 1, "maximum": 4194304 }
            }
          }
        }
      }
    },
    "digest": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
  }
}
