{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:owp:market-local:0.2",
  "title": "owp-market-local/0.2",
  "$comment": "Definition library. Validate a named $defs entry, never the unconstrained root.",
  "$defs": {
    "GardenFacts": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "garden": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "day": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "activity": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "required": [
        "garden",
        "day",
        "activity"
      ],
      "additionalProperties": false,
      "description": "The JSON deliverable for the fictional garden job. No real user data.",
      "title": "GardenFacts",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ResultContent": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "text/plain"
            },
            "text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            }
          },
          "required": [
            "media_type",
            "text"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "text/markdown"
            },
            "text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            }
          },
          "required": [
            "media_type",
            "text"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "application/json"
            },
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "garden": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "day": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    },
                    "activity": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "garden",
                    "day",
                    "activity"
                  ],
                  "additionalProperties": false,
                  "description": "The JSON deliverable for the fictional garden job. No real user data."
                },
                {
                  "type": "object",
                  "properties": {
                    "area": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "temperature_c": {
                      "type": "number",
                      "minimum": -100,
                      "maximum": 70
                    },
                    "condition": {
                      "type": "string",
                      "enum": [
                        "clear",
                        "cloudy",
                        "rain",
                        "snow"
                      ]
                    },
                    "observed_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  },
                  "required": [
                    "area",
                    "temperature_c",
                    "condition",
                    "observed_at"
                  ],
                  "additionalProperties": false,
                  "description": "JSON weather deliverable. Plain text and Markdown remain supported."
                }
              ]
            }
          },
          "required": [
            "media_type",
            "data"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Work may be ordinary text or Markdown. JSON jobs require the named GardenFacts or WeatherFacts schema. The transport envelope remains JSON. UTF-8 content must also fit the job byte limit.",
      "title": "ResultContent",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "OutputContract": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "text/plain"
            },
            "max_bytes": {
              "type": "number",
              "const": 4096
            },
            "schema_id": {
              "type": "null"
            }
          },
          "required": [
            "media_type",
            "max_bytes",
            "schema_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "text/markdown"
            },
            "max_bytes": {
              "type": "number",
              "const": 4096
            },
            "schema_id": {
              "type": "null"
            }
          },
          "required": [
            "media_type",
            "max_bytes",
            "schema_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "media_type": {
              "type": "string",
              "const": "application/json"
            },
            "max_bytes": {
              "type": "number",
              "const": 4096
            },
            "schema_id": {
              "type": "string",
              "enum": [
                "GardenFacts",
                "WeatherFacts"
              ]
            }
          },
          "required": [
            "media_type",
            "max_bytes",
            "schema_id"
          ],
          "additionalProperties": false
        }
      ],
      "description": "The job declares exactly which deliverable to return; the server checks the media type and UTF-8 byte count.",
      "title": "OutputContract",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "TestReward": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "unit": {
          "type": "string",
          "const": "TEST_CREDIT"
        },
        "amount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 25
        },
        "redeemable": {
          "type": "boolean",
          "const": false
        }
      },
      "required": [
        "unit",
        "amount",
        "redeemable"
      ],
      "additionalProperties": false,
      "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor.",
      "title": "TestReward",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "Job": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "profile": {
              "type": "string",
              "const": "owp-market-local/0.2"
            },
            "job_id": {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            "round_id": {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            "state": {
              "type": "string",
              "enum": [
                "OPEN",
                "CLOSED"
              ]
            },
            "deadline": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
            },
            "candidate_slots": {
              "type": "number",
              "const": 2
            },
            "reward": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "const": "TEST_CREDIT"
                },
                "amount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 25
                },
                "redeemable": {
                  "type": "boolean",
                  "const": false
                }
              },
              "required": [
                "unit",
                "amount",
                "redeemable"
              ],
              "additionalProperties": false,
              "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
            },
            "output_contract": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/plain"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/markdown"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "application/json"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "string",
                      "const": "GardenFacts"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "capability": {
              "type": "string",
              "const": "writing/brief"
            },
            "input": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string",
                  "const": "Elm Garden"
                },
                "opening_day": {
                  "type": "string",
                  "const": "Saturday"
                },
                "activity": {
                  "type": "string",
                  "const": "planting workshop"
                },
                "instruction": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                }
              },
              "required": [
                "title",
                "opening_day",
                "activity",
                "instruction"
              ],
              "additionalProperties": false
            },
            "selection_policy": {
              "type": "string",
              "const": "most-facts-first-submission-v1"
            }
          },
          "required": [
            "profile",
            "job_id",
            "round_id",
            "state",
            "deadline",
            "candidate_slots",
            "reward",
            "output_contract",
            "capability",
            "input",
            "selection_policy"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "profile": {
              "type": "string",
              "const": "owp-market-local/0.2"
            },
            "job_id": {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            "round_id": {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            "state": {
              "type": "string",
              "enum": [
                "OPEN",
                "CLOSED"
              ]
            },
            "deadline": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
            },
            "candidate_slots": {
              "type": "number",
              "const": 2
            },
            "reward": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "const": "TEST_CREDIT"
                },
                "amount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 25
                },
                "redeemable": {
                  "type": "boolean",
                  "const": false
                }
              },
              "required": [
                "unit",
                "amount",
                "redeemable"
              ],
              "additionalProperties": false,
              "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
            },
            "output_contract": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/plain"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/markdown"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "application/json"
                    },
                    "max_bytes": {
                      "type": "number",
                      "const": 4096
                    },
                    "schema_id": {
                      "type": "string",
                      "const": "WeatherFacts"
                    }
                  },
                  "required": [
                    "media_type",
                    "max_bytes",
                    "schema_id"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "capability": {
              "type": "string",
              "const": "weather/current"
            },
            "audience": {
              "type": "string",
              "const": "private"
            },
            "input": {
              "type": "object",
              "properties": {
                "instruction": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                }
              },
              "required": [
                "instruction"
              ],
              "additionalProperties": false
            },
            "context_requirements": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "string",
                  "const": "location.current"
                }
              ]
            },
            "selection_policy": {
              "type": "string",
              "const": "weather-facts-first-submission-v1"
            }
          },
          "required": [
            "profile",
            "job_id",
            "round_id",
            "state",
            "deadline",
            "candidate_slots",
            "reward",
            "output_contract",
            "capability",
            "audience",
            "input",
            "context_requirements",
            "selection_policy"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Weather previews contain no location. Use the encrypted, job-bound context channel. Only the job owner can read selected weather content.",
      "title": "Job",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "Payment": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "enum": [
            "PENDING_SELECTION",
            "SIMULATED_PAID",
            "NOT_PAYABLE"
          ]
        },
        "reward": {
          "type": "object",
          "properties": {
            "unit": {
              "type": "string",
              "const": "TEST_CREDIT"
            },
            "amount": {
              "type": "integer",
              "minimum": 0,
              "maximum": 25
            },
            "redeemable": {
              "type": "boolean",
              "const": false
            }
          },
          "required": [
            "unit",
            "amount",
            "redeemable"
          ],
          "additionalProperties": false,
          "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
        },
        "receipt_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "state",
        "reward",
        "receipt_id"
      ],
      "additionalProperties": false,
      "description": "Server-owned simulated payment status. Only SELECTED receives 25 TEST_CREDIT and a single receipt; every other final outcome gets zero.",
      "title": "Payment",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "Match": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "match_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "agent_id": {
          "type": "string",
          "pattern": "^agent_[a-f0-9]{24}$"
        },
        "subscription_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "job": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "profile": {
                  "type": "string",
                  "const": "owp-market-local/0.2"
                },
                "job_id": {
                  "type": "string",
                  "allOf": [
                    {
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "pattern": "^[a-f0-9-]+$"
                    }
                  ]
                },
                "round_id": {
                  "type": "string",
                  "allOf": [
                    {
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "pattern": "^[a-f0-9-]+$"
                    }
                  ]
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "OPEN",
                    "CLOSED"
                  ]
                },
                "deadline": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
                },
                "candidate_slots": {
                  "type": "number",
                  "const": 2
                },
                "reward": {
                  "type": "object",
                  "properties": {
                    "unit": {
                      "type": "string",
                      "const": "TEST_CREDIT"
                    },
                    "amount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 25
                    },
                    "redeemable": {
                      "type": "boolean",
                      "const": false
                    }
                  },
                  "required": [
                    "unit",
                    "amount",
                    "redeemable"
                  ],
                  "additionalProperties": false,
                  "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
                },
                "output_contract": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "text/plain"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "text/markdown"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "application/json"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "string",
                          "const": "GardenFacts"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "capability": {
                  "type": "string",
                  "const": "writing/brief"
                },
                "input": {
                  "type": "object",
                  "properties": {
                    "title": {
                      "type": "string",
                      "const": "Elm Garden"
                    },
                    "opening_day": {
                      "type": "string",
                      "const": "Saturday"
                    },
                    "activity": {
                      "type": "string",
                      "const": "planting workshop"
                    },
                    "instruction": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "title",
                    "opening_day",
                    "activity",
                    "instruction"
                  ],
                  "additionalProperties": false
                },
                "selection_policy": {
                  "type": "string",
                  "const": "most-facts-first-submission-v1"
                }
              },
              "required": [
                "profile",
                "job_id",
                "round_id",
                "state",
                "deadline",
                "candidate_slots",
                "reward",
                "output_contract",
                "capability",
                "input",
                "selection_policy"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "profile": {
                  "type": "string",
                  "const": "owp-market-local/0.2"
                },
                "job_id": {
                  "type": "string",
                  "allOf": [
                    {
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "pattern": "^[a-f0-9-]+$"
                    }
                  ]
                },
                "round_id": {
                  "type": "string",
                  "allOf": [
                    {
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "pattern": "^[a-f0-9-]+$"
                    }
                  ]
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "OPEN",
                    "CLOSED"
                  ]
                },
                "deadline": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
                },
                "candidate_slots": {
                  "type": "number",
                  "const": 2
                },
                "reward": {
                  "type": "object",
                  "properties": {
                    "unit": {
                      "type": "string",
                      "const": "TEST_CREDIT"
                    },
                    "amount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 25
                    },
                    "redeemable": {
                      "type": "boolean",
                      "const": false
                    }
                  },
                  "required": [
                    "unit",
                    "amount",
                    "redeemable"
                  ],
                  "additionalProperties": false,
                  "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
                },
                "output_contract": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "text/plain"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "text/markdown"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "media_type": {
                          "type": "string",
                          "const": "application/json"
                        },
                        "max_bytes": {
                          "type": "number",
                          "const": 4096
                        },
                        "schema_id": {
                          "type": "string",
                          "const": "WeatherFacts"
                        }
                      },
                      "required": [
                        "media_type",
                        "max_bytes",
                        "schema_id"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "capability": {
                  "type": "string",
                  "const": "weather/current"
                },
                "audience": {
                  "type": "string",
                  "const": "private"
                },
                "input": {
                  "type": "object",
                  "properties": {
                    "instruction": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "instruction"
                  ],
                  "additionalProperties": false
                },
                "context_requirements": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "string",
                      "const": "location.current"
                    }
                  ]
                },
                "selection_policy": {
                  "type": "string",
                  "const": "weather-facts-first-submission-v1"
                }
              },
              "required": [
                "profile",
                "job_id",
                "round_id",
                "state",
                "deadline",
                "candidate_slots",
                "reward",
                "output_contract",
                "capability",
                "audience",
                "input",
                "context_requirements",
                "selection_policy"
              ],
              "additionalProperties": false
            }
          ],
          "description": "Weather previews contain no location. Use the encrypted, job-bound context channel. Only the job owner can read selected weather content."
        },
        "state": {
          "type": "string",
          "enum": [
            "MATCHED",
            "WAITING_CONTEXT",
            "SUBMITTED",
            "SELECTED",
            "NOT_SELECTED",
            "FAILED",
            "EXPIRED"
          ]
        },
        "output_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "score": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 3
            },
            {
              "type": "null"
            }
          ]
        },
        "reason": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "MOST_FACTS",
                "EARLIER_SUBMISSION",
                "LOWER_RANK",
                "BELOW_THRESHOLD",
                "EXECUTION_FAILED",
                "DECLINED",
                "DEADLINE_EXCEEDED"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "payment": {
          "type": "object",
          "properties": {
            "state": {
              "type": "string",
              "enum": [
                "PENDING_SELECTION",
                "SIMULATED_PAID",
                "NOT_PAYABLE"
              ]
            },
            "reward": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "const": "TEST_CREDIT"
                },
                "amount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 25
                },
                "redeemable": {
                  "type": "boolean",
                  "const": false
                }
              },
              "required": [
                "unit",
                "amount",
                "redeemable"
              ],
              "additionalProperties": false,
              "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
            },
            "receipt_id": {
              "anyOf": [
                {
                  "type": "string",
                  "allOf": [
                    {
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "pattern": "^[a-f0-9-]+$"
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "state",
            "reward",
            "receipt_id"
          ],
          "additionalProperties": false,
          "description": "Server-owned simulated payment status. Only SELECTED receives 25 TEST_CREDIT and a single receipt; every other final outcome gets zero."
        }
      },
      "required": [
        "profile",
        "match_id",
        "agent_id",
        "subscription_id",
        "job",
        "state",
        "output_id",
        "score",
        "reason",
        "payment"
      ],
      "additionalProperties": false,
      "description": "Owned assignment and fresh outcome. Submission receipts are historical; poll matches for selection and simulated payment.",
      "title": "Match",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ProfileResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "instance_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "synthetic_only": {
          "type": "boolean",
          "const": true
        },
        "transport": {
          "type": "string",
          "const": "loopback-http-ed25519"
        },
        "media_types": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "text/plain",
              "text/markdown",
              "application/json"
            ]
          }
        },
        "context": {
          "type": "object",
          "properties": {
            "broker_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "encryption_public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            },
            "signing_public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{43}=$"
            }
          },
          "required": [
            "broker_id",
            "encryption_public_key",
            "signing_public_key"
          ],
          "additionalProperties": false,
          "description": "Pin these trusted fixture-adapter keys. Discovery is trusted-local bootstrap, not independent production key distribution."
        },
        "limits": {
          "type": "object",
          "properties": {
            "body_bytes": {
              "type": "number",
              "const": 32768
            },
            "result_bytes": {
              "type": "number",
              "const": 4096
            },
            "session_seconds": {
              "type": "number",
              "const": 3600
            },
            "round_seconds": {
              "type": "number",
              "const": 120
            },
            "clock_skew_seconds": {
              "type": "number",
              "const": 300
            },
            "sessions": {
              "type": "number",
              "const": 64
            },
            "rounds": {
              "type": "number",
              "const": 32
            },
            "receipts_per_session": {
              "type": "number",
              "const": 256
            }
          },
          "required": [
            "body_bytes",
            "result_bytes",
            "session_seconds",
            "round_seconds",
            "clock_skew_seconds",
            "sessions",
            "rounds",
            "receipts_per_session"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "profile",
        "instance_id",
        "synthetic_only",
        "transport",
        "media_types",
        "context",
        "limits"
      ],
      "additionalProperties": false,
      "title": "ProfileResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "RegistrationRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "profile": {
              "type": "string",
              "const": "owp-market-local/0.2"
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            "version": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            },
            "public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{59}$"
            },
            "synthetic_only": {
              "type": "boolean",
              "const": true
            },
            "capability": {
              "type": "string",
              "const": "writing/brief"
            },
            "encryption_public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            }
          },
          "required": [
            "profile",
            "name",
            "version",
            "public_key",
            "synthetic_only",
            "capability"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "profile": {
              "type": "string",
              "const": "owp-market-local/0.2"
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            "version": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40
            },
            "public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{59}$"
            },
            "synthetic_only": {
              "type": "boolean",
              "const": true
            },
            "capability": {
              "type": "string",
              "const": "weather/current"
            },
            "encryption_public_key": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            }
          },
          "required": [
            "profile",
            "name",
            "version",
            "public_key",
            "synthetic_only",
            "capability",
            "encryption_public_key"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Self-signed Ed25519 proof of possession. Weather agents require a distinct P-256 HPKE public key, 65 raw bytes in padded base64. A writing identity also needs it to own weather jobs.",
      "title": "RegistrationRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "RegistrationResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "agent_id": {
          "type": "string",
          "pattern": "^agent_[a-f0-9]{24}$"
        },
        "session_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "instance_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
        }
      },
      "required": [
        "profile",
        "agent_id",
        "session_id",
        "instance_id",
        "expires_at"
      ],
      "additionalProperties": false,
      "title": "RegistrationResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "RoundRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "media_type": {
          "type": "string",
          "enum": [
            "text/plain",
            "text/markdown",
            "application/json"
          ]
        },
        "capability": {
          "type": "string",
          "enum": [
            "writing/brief",
            "weather/current"
          ]
        }
      },
      "required": [
        "profile",
        "media_type"
      ],
      "additionalProperties": false,
      "description": "Create a writing or weather fixture round; omitted capability means writing/brief. Authenticated sandbox peers may seed fixtures, but cannot set inputs, rewards, scores, winners or payments.",
      "title": "RoundRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "SubscriptionRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "capability": {
          "type": "string",
          "enum": [
            "writing/brief",
            "weather/current"
          ]
        },
        "media_types": {
          "minItems": 1,
          "maxItems": 3,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "text/plain",
              "text/markdown",
              "application/json"
            ]
          }
        },
        "min_reward": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000
        },
        "max_in_flight": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2
        },
        "round_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "profile",
        "capability",
        "media_types",
        "min_reward",
        "max_in_flight",
        "round_id"
      ],
      "additionalProperties": false,
      "description": "Subscribe to current and future fixtures. Null round_id matches any round; min_reward uses TEST_CREDIT. Poll /v1/matches to dispatch.",
      "title": "SubscriptionRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "Subscription": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "capability": {
          "type": "string",
          "enum": [
            "writing/brief",
            "weather/current"
          ]
        },
        "media_types": {
          "minItems": 1,
          "maxItems": 3,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "text/plain",
              "text/markdown",
              "application/json"
            ]
          }
        },
        "min_reward": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000
        },
        "max_in_flight": {
          "type": "integer",
          "minimum": 1,
          "maximum": 2
        },
        "round_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "subscription_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "active": {
          "type": "boolean"
        }
      },
      "required": [
        "profile",
        "capability",
        "media_types",
        "min_reward",
        "max_in_flight",
        "round_id",
        "subscription_id",
        "active"
      ],
      "additionalProperties": false,
      "description": "One active subscription per identity. Unsubscribing stops future matching; existing assignments continue.",
      "title": "Subscription",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "UnsubscribeRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "subscription_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        }
      },
      "required": [
        "profile",
        "subscription_id"
      ],
      "additionalProperties": false,
      "title": "UnsubscribeRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "SubmitRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "match_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "content": {
          "anyOf": [
            {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/plain"
                    },
                    "text": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 4096
                    }
                  },
                  "required": [
                    "media_type",
                    "text"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "text/markdown"
                    },
                    "text": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 4096
                    }
                  },
                  "required": [
                    "media_type",
                    "text"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "media_type": {
                      "type": "string",
                      "const": "application/json"
                    },
                    "data": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "garden": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "day": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "activity": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            }
                          },
                          "required": [
                            "garden",
                            "day",
                            "activity"
                          ],
                          "additionalProperties": false,
                          "description": "The JSON deliverable for the fictional garden job. No real user data."
                        },
                        {
                          "type": "object",
                          "properties": {
                            "area": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 80
                            },
                            "temperature_c": {
                              "type": "number",
                              "minimum": -100,
                              "maximum": 70
                            },
                            "condition": {
                              "type": "string",
                              "enum": [
                                "clear",
                                "cloudy",
                                "rain",
                                "snow"
                              ]
                            },
                            "observed_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                            }
                          },
                          "required": [
                            "area",
                            "temperature_c",
                            "condition",
                            "observed_at"
                          ],
                          "additionalProperties": false,
                          "description": "JSON weather deliverable. Plain text and Markdown remain supported."
                        }
                      ]
                    }
                  },
                  "required": [
                    "media_type",
                    "data"
                  ],
                  "additionalProperties": false
                }
              ],
              "description": "Work may be ordinary text or Markdown. JSON jobs require the named GardenFacts or WeatherFacts schema. The transport envelope remains JSON. UTF-8 content must also fit the job byte limit."
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "application/owp-encrypted+json"
                },
                "box": {
                  "type": "object",
                  "properties": {
                    "enc": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9+/]{87}=$"
                    },
                    "ciphertext": {
                      "type": "string",
                      "minLength": 24,
                      "maxLength": 20000,
                      "pattern": "^[A-Za-z0-9+/]+={0,2}$"
                    }
                  },
                  "required": [
                    "enc",
                    "ciphertext"
                  ],
                  "additionalProperties": false,
                  "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
                }
              },
              "required": [
                "media_type",
                "box"
              ],
              "additionalProperties": false,
              "description": "Weather submissions are encrypted to the context adapter. The requested deliverable format is inside the box."
            }
          ]
        }
      },
      "required": [
        "profile",
        "match_id",
        "content"
      ],
      "additionalProperties": false,
      "title": "SubmitRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "FailureRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "match_id": {
          "type": "string",
          "allOf": [
            {
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "pattern": "^[a-f0-9-]+$"
            }
          ]
        },
        "reason": {
          "type": "string",
          "enum": [
            "DECLINED",
            "EXECUTION_FAILED"
          ]
        }
      },
      "required": [
        "profile",
        "match_id",
        "reason"
      ],
      "additionalProperties": false,
      "title": "FailureRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "MatchesResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "matches": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "profile": {
                "type": "string",
                "const": "owp-market-local/0.2"
              },
              "match_id": {
                "type": "string",
                "allOf": [
                  {
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "pattern": "^[a-f0-9-]+$"
                  }
                ]
              },
              "agent_id": {
                "type": "string",
                "pattern": "^agent_[a-f0-9]{24}$"
              },
              "subscription_id": {
                "type": "string",
                "allOf": [
                  {
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "pattern": "^[a-f0-9-]+$"
                  }
                ]
              },
              "job": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "profile": {
                        "type": "string",
                        "const": "owp-market-local/0.2"
                      },
                      "job_id": {
                        "type": "string",
                        "allOf": [
                          {
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "pattern": "^[a-f0-9-]+$"
                          }
                        ]
                      },
                      "round_id": {
                        "type": "string",
                        "allOf": [
                          {
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "pattern": "^[a-f0-9-]+$"
                          }
                        ]
                      },
                      "state": {
                        "type": "string",
                        "enum": [
                          "OPEN",
                          "CLOSED"
                        ]
                      },
                      "deadline": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
                      },
                      "candidate_slots": {
                        "type": "number",
                        "const": 2
                      },
                      "reward": {
                        "type": "object",
                        "properties": {
                          "unit": {
                            "type": "string",
                            "const": "TEST_CREDIT"
                          },
                          "amount": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 25
                          },
                          "redeemable": {
                            "type": "boolean",
                            "const": false
                          }
                        },
                        "required": [
                          "unit",
                          "amount",
                          "redeemable"
                        ],
                        "additionalProperties": false,
                        "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
                      },
                      "output_contract": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "text/plain"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "null"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "text/markdown"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "null"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "application/json"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "string",
                                "const": "GardenFacts"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "capability": {
                        "type": "string",
                        "const": "writing/brief"
                      },
                      "input": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string",
                            "const": "Elm Garden"
                          },
                          "opening_day": {
                            "type": "string",
                            "const": "Saturday"
                          },
                          "activity": {
                            "type": "string",
                            "const": "planting workshop"
                          },
                          "instruction": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "title",
                          "opening_day",
                          "activity",
                          "instruction"
                        ],
                        "additionalProperties": false
                      },
                      "selection_policy": {
                        "type": "string",
                        "const": "most-facts-first-submission-v1"
                      }
                    },
                    "required": [
                      "profile",
                      "job_id",
                      "round_id",
                      "state",
                      "deadline",
                      "candidate_slots",
                      "reward",
                      "output_contract",
                      "capability",
                      "input",
                      "selection_policy"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "profile": {
                        "type": "string",
                        "const": "owp-market-local/0.2"
                      },
                      "job_id": {
                        "type": "string",
                        "allOf": [
                          {
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "pattern": "^[a-f0-9-]+$"
                          }
                        ]
                      },
                      "round_id": {
                        "type": "string",
                        "allOf": [
                          {
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "pattern": "^[a-f0-9-]+$"
                          }
                        ]
                      },
                      "state": {
                        "type": "string",
                        "enum": [
                          "OPEN",
                          "CLOSED"
                        ]
                      },
                      "deadline": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
                      },
                      "candidate_slots": {
                        "type": "number",
                        "const": 2
                      },
                      "reward": {
                        "type": "object",
                        "properties": {
                          "unit": {
                            "type": "string",
                            "const": "TEST_CREDIT"
                          },
                          "amount": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 25
                          },
                          "redeemable": {
                            "type": "boolean",
                            "const": false
                          }
                        },
                        "required": [
                          "unit",
                          "amount",
                          "redeemable"
                        ],
                        "additionalProperties": false,
                        "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
                      },
                      "output_contract": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "text/plain"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "null"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "text/markdown"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "null"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "media_type": {
                                "type": "string",
                                "const": "application/json"
                              },
                              "max_bytes": {
                                "type": "number",
                                "const": 4096
                              },
                              "schema_id": {
                                "type": "string",
                                "const": "WeatherFacts"
                              }
                            },
                            "required": [
                              "media_type",
                              "max_bytes",
                              "schema_id"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      },
                      "capability": {
                        "type": "string",
                        "const": "weather/current"
                      },
                      "audience": {
                        "type": "string",
                        "const": "private"
                      },
                      "input": {
                        "type": "object",
                        "properties": {
                          "instruction": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "instruction"
                        ],
                        "additionalProperties": false
                      },
                      "context_requirements": {
                        "type": "array",
                        "prefixItems": [
                          {
                            "type": "string",
                            "const": "location.current"
                          }
                        ]
                      },
                      "selection_policy": {
                        "type": "string",
                        "const": "weather-facts-first-submission-v1"
                      }
                    },
                    "required": [
                      "profile",
                      "job_id",
                      "round_id",
                      "state",
                      "deadline",
                      "candidate_slots",
                      "reward",
                      "output_contract",
                      "capability",
                      "audience",
                      "input",
                      "context_requirements",
                      "selection_policy"
                    ],
                    "additionalProperties": false
                  }
                ],
                "description": "Weather previews contain no location. Use the encrypted, job-bound context channel. Only the job owner can read selected weather content."
              },
              "state": {
                "type": "string",
                "enum": [
                  "MATCHED",
                  "WAITING_CONTEXT",
                  "SUBMITTED",
                  "SELECTED",
                  "NOT_SELECTED",
                  "FAILED",
                  "EXPIRED"
                ]
              },
              "output_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "allOf": [
                      {
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "pattern": "^[a-f0-9-]+$"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "score": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 3
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "reason": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "MOST_FACTS",
                      "EARLIER_SUBMISSION",
                      "LOWER_RANK",
                      "BELOW_THRESHOLD",
                      "EXECUTION_FAILED",
                      "DECLINED",
                      "DEADLINE_EXCEEDED"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "payment": {
                "type": "object",
                "properties": {
                  "state": {
                    "type": "string",
                    "enum": [
                      "PENDING_SELECTION",
                      "SIMULATED_PAID",
                      "NOT_PAYABLE"
                    ]
                  },
                  "reward": {
                    "type": "object",
                    "properties": {
                      "unit": {
                        "type": "string",
                        "const": "TEST_CREDIT"
                      },
                      "amount": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 25
                      },
                      "redeemable": {
                        "type": "boolean",
                        "const": false
                      }
                    },
                    "required": [
                      "unit",
                      "amount",
                      "redeemable"
                    ],
                    "additionalProperties": false,
                    "description": "Fictional, non-redeemable credits. No currency, funds, wallet, fees or payment processor."
                  },
                  "receipt_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "allOf": [
                          {
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "pattern": "^[a-f0-9-]+$"
                          }
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "state",
                  "reward",
                  "receipt_id"
                ],
                "additionalProperties": false,
                "description": "Server-owned simulated payment status. Only SELECTED receives 25 TEST_CREDIT and a single receipt; every other final outcome gets zero."
              }
            },
            "required": [
              "profile",
              "match_id",
              "agent_id",
              "subscription_id",
              "job",
              "state",
              "output_id",
              "score",
              "reason",
              "payment"
            ],
            "additionalProperties": false,
            "description": "Owned assignment and fresh outcome. Submission receipts are historical; poll matches for selection and simulated payment."
          }
        }
      },
      "required": [
        "profile",
        "matches"
      ],
      "additionalProperties": false,
      "title": "MatchesResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "EventItem": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "sequence_id": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "type": {
          "type": "string",
          "enum": [
            "agent.registered",
            "subscription.created",
            "subscription.cancelled",
            "job.matched",
            "context.waiting",
            "context.ready",
            "output.submitted",
            "result.selected",
            "result.not_selected",
            "work.failed",
            "work.expired",
            "payment.simulated"
          ]
        },
        "at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
        },
        "match_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "sequence_id",
        "type",
        "at",
        "match_id"
      ],
      "additionalProperties": false,
      "description": "Session-owned ordered observations. Polling and receipt replay never duplicate events. Not a signed audit log.",
      "title": "EventItem",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "EventsResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "events": {
          "maxItems": 512,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "sequence_id": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "type": {
                "type": "string",
                "enum": [
                  "agent.registered",
                  "subscription.created",
                  "subscription.cancelled",
                  "job.matched",
                  "context.waiting",
                  "context.ready",
                  "output.submitted",
                  "result.selected",
                  "result.not_selected",
                  "work.failed",
                  "work.expired",
                  "payment.simulated"
                ]
              },
              "at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z))$"
              },
              "match_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "allOf": [
                      {
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "pattern": "^[a-f0-9-]+$"
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "sequence_id",
              "type",
              "at",
              "match_id"
            ],
            "additionalProperties": false,
            "description": "Session-owned ordered observations. Polling and receipt replay never duplicate events. Not a signed audit log."
          }
        },
        "next_cursor": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "profile",
        "events",
        "next_cursor"
      ],
      "additionalProperties": false,
      "title": "EventsResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ErrorResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string",
              "allOf": [
                {
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                {
                  "pattern": "^[a-f0-9-]+$"
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "error": {
          "type": "object",
          "properties": {
            "code": {
              "type": "string",
              "enum": [
                "INVALID_REQUEST",
                "UNSUPPORTED_PROFILE",
                "AUTH_REQUIRED",
                "INVALID_SIGNATURE",
                "CLOCK_SKEW",
                "UNKNOWN_SESSION",
                "SESSION_EXPIRED",
                "FORBIDDEN",
                "NOT_FOUND",
                "METHOD_NOT_ALLOWED",
                "INSTANCE_CHANGED",
                "REGISTRATION_EXISTS",
                "IDEMPOTENCY_CONFLICT",
                "INVALID_STATE",
                "ROUND_CLOSED",
                "PAYLOAD_TOO_LARGE",
                "INVALID_OUTPUT",
                "FORMAT_MISMATCH",
                "CAPACITY_REACHED",
                "INTERNAL_ERROR",
                "CONTEXT_UNAVAILABLE",
                "CONSENT_REQUIRED",
                "CONSENT_DENIED",
                "GRANT_REVOKED",
                "LOCATION_MISSING",
                "LOCATION_STALE",
                "GRANT_EXPIRED",
                "CONTEXT_CHANGED",
                "PROVIDER_UNAVAILABLE",
                "INVALID_CONTEXT",
                "SCOPE_DENIED",
                "RESULT_NOT_READY",
                "ENCRYPTION_REQUIRED"
              ]
            },
            "retryable": {
              "type": "boolean"
            }
          },
          "required": [
            "code",
            "retryable"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "profile",
        "request_id",
        "error"
      ],
      "additionalProperties": false,
      "title": "ErrorResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextKeys": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "broker_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "encryption_public_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9+/]{87}=$"
        },
        "signing_public_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9+/]{43}=$"
        }
      },
      "required": [
        "broker_id",
        "encryption_public_key",
        "signing_public_key"
      ],
      "additionalProperties": false,
      "description": "Pin these trusted fixture-adapter keys. Discovery is trusted-local bootstrap, not independent production key distribution.",
      "title": "ContextKeys",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextBox": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "enc": {
          "type": "string",
          "pattern": "^[A-Za-z0-9+/]{87}=$"
        },
        "ciphertext": {
          "type": "string",
          "minLength": 24,
          "maxLength": 20000,
          "pattern": "^[A-Za-z0-9+/]+={0,2}$"
        }
      },
      "required": [
        "enc",
        "ciphertext"
      ],
      "additionalProperties": false,
      "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction.",
      "title": "ContextBox",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "EncryptedContent": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "media_type": {
          "type": "string",
          "const": "application/owp-encrypted+json"
        },
        "box": {
          "type": "object",
          "properties": {
            "enc": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            },
            "ciphertext": {
              "type": "string",
              "minLength": 24,
              "maxLength": 20000,
              "pattern": "^[A-Za-z0-9+/]+={0,2}$"
            }
          },
          "required": [
            "enc",
            "ciphertext"
          ],
          "additionalProperties": false,
          "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
        }
      },
      "required": [
        "media_type",
        "box"
      ],
      "additionalProperties": false,
      "description": "Weather submissions are encrypted to the context adapter. The requested deliverable format is inside the box.",
      "title": "EncryptedContent",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "match_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "box": {
          "type": "object",
          "properties": {
            "enc": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            },
            "ciphertext": {
              "type": "string",
              "minLength": 24,
              "maxLength": 20000,
              "pattern": "^[A-Za-z0-9+/]+={0,2}$"
            }
          },
          "required": [
            "enc",
            "ciphertext"
          ],
          "additionalProperties": false,
          "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
        }
      },
      "required": [
        "profile",
        "match_id",
        "box"
      ],
      "additionalProperties": false,
      "title": "ContextRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextPolicyRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "round_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "box": {
          "type": "object",
          "properties": {
            "enc": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            },
            "ciphertext": {
              "type": "string",
              "minLength": 24,
              "maxLength": 20000,
              "pattern": "^[A-Za-z0-9+/]+={0,2}$"
            }
          },
          "required": [
            "enc",
            "ciphertext"
          ],
          "additionalProperties": false,
          "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
        }
      },
      "required": [
        "profile",
        "round_id",
        "box"
      ],
      "additionalProperties": false,
      "title": "ContextPolicyRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "PrivateResultRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "round_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        }
      },
      "required": [
        "profile",
        "round_id"
      ],
      "additionalProperties": false,
      "title": "PrivateResultRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "EncryptedResponse": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "string",
          "const": "owp-market-local/0.2"
        },
        "box": {
          "type": "object",
          "properties": {
            "enc": {
              "type": "string",
              "pattern": "^[A-Za-z0-9+/]{87}=$"
            },
            "ciphertext": {
              "type": "string",
              "minLength": 24,
              "maxLength": 20000,
              "pattern": "^[A-Za-z0-9+/]+={0,2}$"
            }
          },
          "required": [
            "enc",
            "ciphertext"
          ],
          "additionalProperties": false,
          "description": "HPKE P-256/HKDF-SHA256/AES-256-GCM. Standard padded base64, not base64url. AAD binds profile, instance, agent, session, request, path, target and direction."
        },
        "signature": {
          "type": "string",
          "pattern": "^[A-Za-z0-9+/]{86}==$"
        }
      },
      "required": [
        "profile",
        "box",
        "signature"
      ],
      "additionalProperties": false,
      "description": "Verify the broker signature over response AAD, LF, enc, LF, ciphertext before decrypting.",
      "title": "EncryptedResponse",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextScope": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "const": "location.current"
        },
        "purpose": {
          "type": "string",
          "const": "weather.current"
        }
      },
      "required": [
        "field",
        "purpose"
      ],
      "additionalProperties": false,
      "description": "Request only. Does not grant access. This profile returns derived weather, never raw location or other Vault fields.",
      "title": "ContextScope",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextPolicy": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "consent": {
          "type": "string",
          "enum": [
            "granted",
            "required",
            "denied",
            "revoked"
          ]
        },
        "location": {
          "type": "string",
          "enum": [
            "harbor",
            "ridge",
            "missing",
            "stale"
          ]
        },
        "provider": {
          "type": "string",
          "enum": [
            "available",
            "unavailable"
          ]
        }
      },
      "required": [
        "consent",
        "location",
        "provider"
      ],
      "additionalProperties": false,
      "description": "Owner-only synthetic controls. No coordinates, address, credentials, URL or personal data can be supplied.",
      "title": "ContextPolicy",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextPolicyReceipt": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "round_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "revision": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "consent": {
          "type": "string",
          "enum": [
            "granted",
            "required",
            "denied",
            "revoked"
          ]
        }
      },
      "required": [
        "round_id",
        "revision",
        "consent"
      ],
      "additionalProperties": false,
      "title": "ContextPolicyReceipt",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "ContextGrant": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "grant_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "match_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "field": {
          "type": "string",
          "const": "location.current"
        },
        "purpose": {
          "type": "string",
          "const": "weather.current"
        },
        "location_revision": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "expires_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
        }
      },
      "required": [
        "grant_id",
        "match_id",
        "field",
        "purpose",
        "location_revision",
        "expires_at"
      ],
      "additionalProperties": false,
      "description": "Bound to one authenticated agent/session/match and exact fixture location revision. Expires after 60 seconds or the job deadline, whichever comes first.",
      "title": "ContextGrant",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "WeatherRequest": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "grant_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        }
      },
      "required": [
        "grant_id"
      ],
      "additionalProperties": false,
      "title": "WeatherRequest",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "WeatherFacts": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "area": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "temperature_c": {
          "type": "number",
          "minimum": -100,
          "maximum": 70
        },
        "condition": {
          "type": "string",
          "enum": [
            "clear",
            "cloudy",
            "rain",
            "snow"
          ]
        },
        "observed_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
        }
      },
      "required": [
        "area",
        "temperature_c",
        "condition",
        "observed_at"
      ],
      "additionalProperties": false,
      "description": "JSON weather deliverable. Plain text and Markdown remain supported.",
      "title": "WeatherFacts",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "WeatherObservation": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "area": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "temperature_c": {
          "type": "number",
          "minimum": -100,
          "maximum": 70
        },
        "condition": {
          "type": "string",
          "enum": [
            "clear",
            "cloudy",
            "rain",
            "snow"
          ]
        },
        "observed_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
        },
        "observation_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "grant_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "location_revision": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "source": {
          "type": "string",
          "const": "fixture-weather"
        },
        "synthetic": {
          "type": "boolean",
          "const": true
        }
      },
      "required": [
        "area",
        "temperature_c",
        "condition",
        "observed_at",
        "observation_id",
        "grant_id",
        "location_revision",
        "source",
        "synthetic"
      ],
      "additionalProperties": false,
      "description": "Derived weather and provenance, encrypted to the assigned agent. No exact coordinates.",
      "title": "WeatherObservation",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "WeatherSubmission": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "grant_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "observation_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "content": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/plain"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/markdown"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "application/json"
                },
                "data": {
                  "type": "object",
                  "properties": {
                    "area": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "temperature_c": {
                      "type": "number",
                      "minimum": -100,
                      "maximum": 70
                    },
                    "condition": {
                      "type": "string",
                      "enum": [
                        "clear",
                        "cloudy",
                        "rain",
                        "snow"
                      ]
                    },
                    "observed_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  },
                  "required": [
                    "area",
                    "temperature_c",
                    "condition",
                    "observed_at"
                  ],
                  "additionalProperties": false,
                  "description": "JSON weather deliverable. Plain text and Markdown remain supported."
                }
              },
              "required": [
                "media_type",
                "data"
              ],
              "additionalProperties": false
            }
          ]
        }
      },
      "required": [
        "grant_id",
        "observation_id",
        "content"
      ],
      "additionalProperties": false,
      "title": "WeatherSubmission",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    },
    "PrivateResult": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "round_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "output_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "content": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/plain"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "text/markdown"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                }
              },
              "required": [
                "media_type",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "media_type": {
                  "type": "string",
                  "const": "application/json"
                },
                "data": {
                  "type": "object",
                  "properties": {
                    "area": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    },
                    "temperature_c": {
                      "type": "number",
                      "minimum": -100,
                      "maximum": 70
                    },
                    "condition": {
                      "type": "string",
                      "enum": [
                        "clear",
                        "cloudy",
                        "rain",
                        "snow"
                      ]
                    },
                    "observed_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
                    }
                  },
                  "required": [
                    "area",
                    "temperature_c",
                    "condition",
                    "observed_at"
                  ],
                  "additionalProperties": false,
                  "description": "JSON weather deliverable. Plain text and Markdown remain supported."
                }
              },
              "required": [
                "media_type",
                "data"
              ],
              "additionalProperties": false
            }
          ]
        },
        "provenance": {
          "type": "object",
          "properties": {
            "grant_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "observation_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "location_revision": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "source": {
              "type": "string",
              "const": "fixture-weather"
            },
            "synthetic": {
              "type": "boolean",
              "const": true
            }
          },
          "required": [
            "grant_id",
            "observation_id",
            "location_revision",
            "source",
            "synthetic"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "round_id",
        "output_id",
        "content",
        "provenance"
      ],
      "additionalProperties": false,
      "title": "PrivateResult",
      "$comment": "owp-market-local/0.2; fictional loopback market, non-redeemable test credits only."
    }
  }
}
