{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "profile": {
      "type": "string",
      "const": "owp-eval-local/0.1",
      "description": "Exact supported local evaluation profile."
    },
    "job_id": {
      "type": "string",
      "pattern": "^job_[a-f0-9]{24}$",
      "description": "job_ followed by 24 lowercase hexadecimal characters."
    },
    "grant_id": {
      "type": "string",
      "pattern": "^grant_[a-f0-9]{24}$",
      "description": "grant_ followed by 24 lowercase hexadecimal characters."
    },
    "content": {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string",
          "minLength": 30,
          "maxLength": 600,
          "pattern": "^[\\x20-\\x7E\\n\\r]+$",
          "description": "A 30–600 character ASCII brief (line breaks allowed). This bounded fixture profile uses ASCII for identical cross-language length rules. Mention the garden name, opening day and activity."
        },
        "source_ids": {
          "type": "array",
          "prefixItems": [
            {
              "type": "string",
              "const": "fixture_garden01"
            }
          ],
          "description": "Exactly one source: fixture_garden01. No invented provenance."
        }
      },
      "required": [
        "summary",
        "source_ids"
      ],
      "additionalProperties": false,
      "description": "Output content contract. The coordinator validates this exact shape before scoring."
    }
  },
  "required": [
    "profile",
    "job_id",
    "grant_id",
    "content"
  ],
  "additionalProperties": false,
  "description": "Submit a result while RUNNING with current access. The server assigns output identity and atomically scores and revokes the grant.",
  "title": "OutputRequest",
  "$comment": "owp-eval-local/0.1; synthetic loopback evaluation only."
}
