{
  "openapi": "3.0.2",
  "info": {
    "title": "Redis Agent Playbooks data-plane API",
    "version": "1.0.0",
    "description": "Public type-specific FAQ and Skill authoring, publication, and exact-version API."
  },
  "paths": {
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills": {
      "post": {
        "operationId": "CreateSkill",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSkillRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "CreateSkill 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateSkillResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Create a skill"
      },
      "get": {
        "operationId": "ListSkills",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Default updatedAt descending, then entry ID ascending.",
            "schema": {
              "$ref": "#/components/schemas/EntrySort"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Defaults to DESC. ID ties are always ASC.",
            "schema": {
              "$ref": "#/components/schemas/SortOrder"
            }
          },
          {
            "name": "createdAfter",
            "in": "query",
            "description": "Exclusive bound at microsecond precision.",
            "schema": {
              "type": "string",
              "description": "Exclusive bound at microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Exclusive bound at microsecond precision.",
            "schema": {
              "type": "string",
              "description": "Exclusive bound at microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "published",
            "in": "query",
            "description": "Selects publication presence.",
            "schema": {
              "type": "boolean",
              "description": "Selects publication presence."
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`.",
            "schema": {
              "type": "string",
              "maxLength": 1024,
              "minLength": 1,
              "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ListSkills 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSkillsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "List skills"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/{skillId}": {
      "get": {
        "operationId": "GetSkill",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetSkill 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSkillResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Get a skill"
      },
      "delete": {
        "operationId": "DeleteSkill",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "DeleteSkill 204 response"
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Delete a skill"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/{skillId}/versions": {
      "post": {
        "operationId": "AppendSkillVersion",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppendSkillVersionRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "AppendSkillVersion 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppendSkillVersionResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Append a skill version"
      },
      "get": {
        "operationId": "ListSkillVersions",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          },
          {
            "name": "createdAfter",
            "in": "query",
            "description": "UTC timestamp resolved to microsecond precision.",
            "schema": {
              "type": "string",
              "description": "UTC timestamp resolved to microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "UTC timestamp resolved to microsecond precision.",
            "schema": {
              "type": "string",
              "description": "UTC timestamp resolved to microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`.",
            "schema": {
              "type": "string",
              "maxLength": 1024,
              "minLength": 1,
              "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ListSkillVersions 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListSkillVersionsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "List skill versions"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/{skillId}/versions/{version}": {
      "get": {
        "operationId": "GetSkillVersion",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          },
          {
            "name": "version",
            "in": "path",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "format": "int32"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetSkillVersion 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetSkillVersionResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Get a skill version"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/{skillId}/publication": {
      "put": {
        "description": "Publishes the selected immutable Skill version. Repeating the currently published version is a no-op. Concurrent publication changes are last-write-wins in Playbook v1.",
        "operationId": "PublishSkill",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublishSkillRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "PublishSkill 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublishSkillResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Publish a skill version"
      },
      "delete": {
        "description": "Withdraws the Skill publication without changing version content. An already-unpublished entry is a no-op. Concurrent publication changes are last-write-wins in Playbook v1.",
        "operationId": "WithdrawSkill",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "WithdrawSkill 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawSkillResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Withdraw a skill"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/{skillId}/versions/{version}/resources/{resourceId}": {
      "get": {
        "description": "Returns the exact immutable Skill resource bytes. The Content-Digest response header carries their SHA-256 digest using RFC 9530 syntax.",
        "operationId": "GetSkillResource",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "skillId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          },
          {
            "name": "version",
            "in": "path",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "format": "int32"
            },
            "required": true
          },
          {
            "name": "resourceId",
            "in": "path",
            "description": "Opaque immutable Skill resource identifier.",
            "schema": {
              "type": "string",
              "pattern": "^res_[0-9a-f]{24}$",
              "description": "Opaque immutable Skill resource identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetSkillResource 200 response",
            "headers": {
              "Content-Digest": {
                "description": "SHA-256 content digest using the RFC 9530 Content-Digest representation.",
                "schema": {
                  "type": "string",
                  "pattern": "^sha-256=:[A-Za-z0-9+/]{43}=:$",
                  "description": "SHA-256 content digest using the RFC 9530 Content-Digest representation."
                },
                "required": true
              },
              "Content-Type": {
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GetSkillResourceOutputPayload"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Read a skill resource"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/bulk-delete": {
      "post": {
        "description": "Deletes the requested Skill families sequentially. Each family deletion is atomic, but the batch is not: a family that cannot be deleted is reported in errors and the others are still processed, and deletions completed before a request-level error remain applied. Retrying the same request is safe because already absent entries are ignored.",
        "operationId": "DeleteSkills",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteSkillsRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "DeleteSkills 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteSkillsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Skills"
        ],
        "summary": "Delete multiple skills"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs": {
      "post": {
        "operationId": "CreateFaq",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateFaqRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "CreateFaq 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateFaqResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Create an FAQ"
      },
      "get": {
        "operationId": "ListFaqs",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Default updatedAt descending, then entry ID ascending.",
            "schema": {
              "$ref": "#/components/schemas/EntrySort"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Defaults to DESC. ID ties are always ASC.",
            "schema": {
              "$ref": "#/components/schemas/SortOrder"
            }
          },
          {
            "name": "createdAfter",
            "in": "query",
            "description": "Exclusive bound at microsecond precision.",
            "schema": {
              "type": "string",
              "description": "Exclusive bound at microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Exclusive bound at microsecond precision.",
            "schema": {
              "type": "string",
              "description": "Exclusive bound at microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "published",
            "in": "query",
            "description": "Selects publication presence.",
            "schema": {
              "type": "boolean",
              "description": "Selects publication presence."
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`.",
            "schema": {
              "type": "string",
              "maxLength": 1024,
              "minLength": 1,
              "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ListFaqs 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListFaqsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "List FAQs"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/{faqId}": {
      "get": {
        "operationId": "GetFaq",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetFaq 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetFaqResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Get an FAQ"
      },
      "delete": {
        "operationId": "DeleteFaq",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "DeleteFaq 204 response"
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Delete an FAQ"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/{faqId}/versions": {
      "post": {
        "operationId": "AppendFaqVersion",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppendFaqVersionRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "AppendFaqVersion 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppendFaqVersionResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Append an FAQ version"
      },
      "get": {
        "operationId": "ListFaqVersions",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          },
          {
            "name": "createdAfter",
            "in": "query",
            "description": "UTC timestamp resolved to microsecond precision.",
            "schema": {
              "type": "string",
              "description": "UTC timestamp resolved to microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "UTC timestamp resolved to microsecond precision.",
            "schema": {
              "type": "string",
              "description": "UTC timestamp resolved to microsecond precision.",
              "format": "date-time"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`.",
            "schema": {
              "type": "string",
              "maxLength": 1024,
              "minLength": 1,
              "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ListFaqVersions 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListFaqVersionsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "List FAQ versions"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/{faqId}/versions/{version}": {
      "get": {
        "operationId": "GetFaqVersion",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          },
          {
            "name": "version",
            "in": "path",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "format": "int32"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetFaqVersion 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetFaqVersionResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Get an FAQ version"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/{faqId}/publication": {
      "put": {
        "description": "Publishes the selected immutable FAQ version. Repeating the currently published version is a no-op. Concurrent publication changes are last-write-wins in Playbook v1.",
        "operationId": "PublishFaq",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublishFaqRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "PublishFaq 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublishFaqResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Publish an FAQ version"
      },
      "delete": {
        "description": "Withdraws the FAQ publication without changing version content. An already-unpublished entry is a no-op. Concurrent publication changes are last-write-wins in Playbook v1.",
        "operationId": "WithdrawFaq",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "faqId",
            "in": "path",
            "description": "Opaque stable entry identifier.",
            "schema": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "WithdrawFaq 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawFaqResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Withdraw an FAQ"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/bulk-delete": {
      "post": {
        "description": "Deletes the requested FAQ families sequentially. Each family deletion is atomic, but the batch is not: a family that cannot be deleted is reported in errors and the others are still processed, and deletions completed before a request-level error remain applied. Retrying the same request is safe because already absent entries are ignored.",
        "operationId": "DeleteFaqs",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteFaqsRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "DeleteFaqs 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteFaqsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "FAQs"
        ],
        "summary": "Delete multiple FAQs"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/entries/discover": {
      "post": {
        "operationId": "DiscoverEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiscoverEntriesRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "DiscoverEntries 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscoverEntriesResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Retrieval"
        ],
        "summary": "Discover published entries"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/faqs/search": {
      "post": {
        "operationId": "SearchFaqs",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchFaqsRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "SearchFaqs 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchFaqsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Retrieval"
        ],
        "summary": "Search published FAQs"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/skills/search": {
      "post": {
        "operationId": "SearchSkills",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchSkillsRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "SearchSkills 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchSkillsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Retrieval"
        ],
        "summary": "Search published skills"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/entries/lookup": {
      "post": {
        "description": "Resolves bounded entry references to compact management state. Results preserve input order and report misses explicitly. Each item is authoritative when read, but the batch is not a global snapshot.",
        "operationId": "LookupEntries",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LookupEntriesRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "LookupEntries 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LookupEntriesResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Retrieval"
        ],
        "summary": "Look up entries"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals": {
      "post": {
        "description": "Submit an FAQ for human review. Extraction and agent submissions share proposalPolicy.maxOpenProposals. When the Inbox is full, HTTP 409 content-limit-exceeded identifies the configured limit and observed open count; the proposal was not saved. Review/dismiss existing proposals or ask an administrator to increase the configured limit before retrying. Capacity is advisory because Search is eventually consistent.",
        "operationId": "CreateProposal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProposalRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "CreateProposal 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Create a proposal"
      },
      "get": {
        "operationId": "ListProposals",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "view",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/ProposalView"
            },
            "required": true
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "Default updatedAt descending, then proposal ID ascending.",
            "schema": {
              "$ref": "#/components/schemas/ProposalSort"
            }
          },
          {
            "name": "sortOrder",
            "in": "query",
            "description": "Defaults to ASC for deadlines, DESC otherwise. ID ties are always ASC.",
            "schema": {
              "$ref": "#/components/schemas/SortOrder"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`.",
            "schema": {
              "type": "string",
              "maxLength": 1024,
              "minLength": 1,
              "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
            }
          },
          {
            "name": "actionType",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/ProposalActionType"
            }
          },
          {
            "name": "entryKind",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/EntryType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ListProposals 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListProposalsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "List proposals"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/{proposalId}/evidence/{evidenceId}": {
      "put": {
        "operationId": "SubmitProposalEvidence",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitProposalEvidenceRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          },
          {
            "name": "evidenceId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^evd_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "SubmitProposalEvidence 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitProposalEvidenceResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Submit proposal evidence"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/search": {
      "post": {
        "operationId": "SearchProposals",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchProposalsRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "SearchProposals 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchProposalsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Search proposals"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/{proposalId}": {
      "get": {
        "operationId": "GetProposal",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetProposal 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Get a proposal"
      },
      "patch": {
        "operationId": "ReplaceProposal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceProposalRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "ReplaceProposal 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReplaceProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Replace a proposal candidate",
        "description": "Replaces an open proposal's candidate with the complete action supplied.\nexpectedRevision is required and must match the revision you reviewed.\nA stale revision returns HTTP 412 /errors/revision-conflict."
      },
      "delete": {
        "operationId": "PurgeProposal",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "204": {
            "description": "PurgeProposal 204 response"
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Purge a proposal"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/{proposalId}/resources/{resourceId}": {
      "get": {
        "description": "Returns exact candidate file bytes for the requested proposal revision.\nThe expectedRevision query parameter is required. A stale revision returns\nHTTP 412 /errors/revision-conflict; responses must not be cached.",
        "operationId": "GetProposalResource",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          },
          {
            "name": "resourceId",
            "in": "path",
            "description": "Opaque immutable Skill resource identifier.",
            "schema": {
              "type": "string",
              "pattern": "^res_[0-9a-f]{24}$",
              "description": "Opaque immutable Skill resource identifier."
            },
            "required": true
          },
          {
            "name": "expectedRevision",
            "in": "query",
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional.",
            "schema": {
              "type": "string",
              "maxLength": 64,
              "minLength": 1,
              "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetProposalResource 200 response",
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "Content-Digest": {
                "description": "SHA-256 content digest using the RFC 9530 Content-Digest representation.",
                "schema": {
                  "type": "string",
                  "pattern": "^sha-256=:[A-Za-z0-9+/]{43}=:$",
                  "description": "SHA-256 content digest using the RFC 9530 Content-Digest representation."
                },
                "required": true
              },
              "Content-Type": {
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GetProposalResourceOutputPayload"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Read a proposal resource"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/{proposalId}/acceptance": {
      "post": {
        "description": "Promotes the reviewed FAQ or skill candidate into one canonical unpublished entry.\nexpectedRevision is required and must match the revision you reviewed.\nConcurrent calls and retries resume or return the proposal's recorded target.\nA complete target may be visible to management before the proposal reaches\npromoted, but remains absent from serving until separately published.",
        "operationId": "AcceptProposal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AcceptProposalRequestContent"
              }
            }
          },
          "required": true
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "AcceptProposal 201 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AcceptProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Accept a reviewed proposal"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/proposals/{proposalId}/dismissal": {
      "put": {
        "operationId": "DismissProposal",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DismissProposalRequestContent"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "DismissProposal 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DismissProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Dismiss a proposal",
        "description": "Moves an open proposal to trash. expectedRevision is optional; when supplied,\na mismatch on an open proposal returns HTTP 412 /errors/revision-conflict.\nAn already trashed proposal is a successful no-op regardless of revision."
      },
      "delete": {
        "operationId": "RestoreProposal",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "proposalId",
            "in": "path",
            "schema": {
              "type": "string",
              "pattern": "^prp_[0-9a-f]{32}$"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "RestoreProposal 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestoreProposalResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Proposals"
        ],
        "summary": "Restore a proposal"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/health": {
      "get": {
        "operationId": "GetPlaybookHealth",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "GetPlaybookHealth 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPlaybookHealthResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Maintenance"
        ],
        "summary": "Check playbook health"
      }
    },
    "/iris/data/v1/agent-playbooks/playbooks/{playbookId}/stats": {
      "get": {
        "description": "Returns independent best-effort indexed observations using content-read permissions.\nIndexing delay, expiry and concurrent writes can make counts differ from list results\nor prevent publication buckets from summing to the total. This is not an atomic\nsnapshot or a receipt of entries deleted by clear or bulk delete.",
        "operationId": "GetPlaybookStats",
        "parameters": [
          {
            "name": "playbookId",
            "in": "path",
            "description": "Opaque Playbook identifier.",
            "schema": {
              "type": "string",
              "pattern": "^pb_[0-9a-f]{32}$",
              "description": "Opaque Playbook identifier."
            },
            "required": true
          },
          {
            "name": "published",
            "in": "query",
            "description": "Applies only to FAQ/Skill inventory. Intersects each publication bucket.",
            "schema": {
              "type": "boolean",
              "description": "Applies only to FAQ/Skill inventory. Intersects each publication bucket."
            }
          },
          {
            "name": "createdAfter",
            "in": "query",
            "description": "Applies only to FAQ/Skill inventory; exclusive microsecond bound.",
            "schema": {
              "type": "string",
              "description": "Applies only to FAQ/Skill inventory; exclusive microsecond bound.",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Applies only to FAQ/Skill inventory; exclusive microsecond bound.",
            "schema": {
              "type": "string",
              "description": "Applies only to FAQ/Skill inventory; exclusive microsecond bound.",
              "format": "date-time"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "Applies only to proposals. Omit to observe both Inbox and Trash.",
            "schema": {
              "$ref": "#/components/schemas/ProposalView"
            }
          },
          {
            "name": "actionType",
            "in": "query",
            "description": "Applies only to proposals, matching ListProposals selectors.",
            "schema": {
              "$ref": "#/components/schemas/ProposalActionType"
            }
          },
          {
            "name": "entryKind",
            "in": "query",
            "description": "Applies only to proposals, matching ListProposals selectors.",
            "schema": {
              "$ref": "#/components/schemas/EntryType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "GetPlaybookStats 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPlaybookStatsResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "tags": [
          "Maintenance"
        ],
        "summary": "Inspect playbook inventory"
      }
    },
    "/iris/data/v1/agent-playbooks/health/live": {
      "get": {
        "description": "Reports that this API process can answer requests, independently of downstream dependencies.",
        "operationId": "GetServiceLiveness",
        "responses": {
          "200": {
            "description": "GetServiceLiveness 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetServiceLivenessResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "security": [],
        "tags": [
          "Maintenance"
        ],
        "summary": "Check service liveness"
      }
    },
    "/iris/data/v1/agent-playbooks/health/ready": {
      "get": {
        "description": "Evaluates the same serving dependencies as the operational readiness probe. Returns 503 without dependency details when the service cannot serve requests.",
        "operationId": "GetServiceReadiness",
        "responses": {
          "200": {
            "description": "GetServiceReadiness 200 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetServiceReadinessResponseContent"
                }
              }
            }
          },
          "400": {
            "description": "BadRequestError 400 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorResponseContent"
                }
              }
            }
          },
          "401": {
            "description": "AuthenticationError 401 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationErrorResponseContent"
                }
              }
            }
          },
          "403": {
            "description": "ForbiddenError 403 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorResponseContent"
                }
              }
            }
          },
          "404": {
            "description": "NotFoundError 404 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponseContent"
                }
              }
            }
          },
          "408": {
            "description": "TimeoutError 408 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimeoutErrorResponseContent"
                }
              }
            }
          },
          "409": {
            "description": "ConflictError 409 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorResponseContent"
                }
              }
            }
          },
          "412": {
            "description": "PreconditionFailedError 412 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreconditionFailedErrorResponseContent"
                }
              }
            }
          },
          "413": {
            "description": "PayloadTooLargeError 413 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorResponseContent"
                }
              }
            }
          },
          "423": {
            "description": "ResourceSuspendedError 423 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceSuspendedErrorResponseContent"
                }
              }
            }
          },
          "424": {
            "description": "FailedDependencyError 424 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FailedDependencyErrorResponseContent"
                }
              }
            }
          },
          "429": {
            "description": "TooManyRequestsError 429 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorResponseContent"
                }
              }
            }
          },
          "500": {
            "description": "UnexpectedError 500 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnexpectedErrorResponseContent"
                }
              }
            }
          },
          "503": {
            "description": "ServiceUnavailableError 503 response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailableErrorResponseContent"
                }
              }
            }
          }
        },
        "security": [],
        "tags": [
          "Maintenance"
        ],
        "summary": "Check service readiness"
      }
    }
  },
  "components": {
    "schemas": {
      "AcceptProposalRequestContent": {
        "type": "object",
        "properties": {
          "expectedRevision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          }
        },
        "required": [
          "expectedRevision"
        ]
      },
      "AcceptProposalResponseContent": {
        "type": "object",
        "description": "Historical completion receipt, independent of the target's current state.",
        "properties": {
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "result"
        ]
      },
      "AddProposalAction": {
        "type": "object",
        "properties": {
          "target": {
            "$ref": "#/components/schemas/ProposalTarget"
          },
          "candidate": {
            "$ref": "#/components/schemas/ProposalCandidate"
          }
        },
        "required": [
          "candidate",
          "target"
        ]
      },
      "AddProposalActionInput": {
        "type": "object",
        "properties": {
          "target": {
            "$ref": "#/components/schemas/ProposalTargetInput"
          },
          "candidate": {
            "$ref": "#/components/schemas/ProposalCandidateInput"
          }
        },
        "required": [
          "candidate",
          "target"
        ]
      },
      "AddProposalActionPreview": {
        "type": "object",
        "properties": {
          "target": {
            "$ref": "#/components/schemas/ProposalTarget"
          },
          "candidate": {
            "$ref": "#/components/schemas/ProposalCandidatePreview"
          }
        },
        "required": [
          "candidate",
          "target"
        ]
      },
      "AppendFaqVersionRequestContent": {
        "type": "object",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/FaqAuthoredContent"
          }
        },
        "required": [
          "content"
        ]
      },
      "AppendFaqVersionResponseContent": {
        "type": "object",
        "properties": {
          "entry": {
            "$ref": "#/components/schemas/StableEntry"
          },
          "version": {
            "$ref": "#/components/schemas/Version"
          }
        },
        "required": [
          "entry",
          "version"
        ]
      },
      "AppendSkillVersionRequestContent": {
        "type": "object",
        "properties": {
          "packageBase64": {
            "type": "string",
            "maxLength": 6990508,
            "minLength": 1,
            "description": "Base64-encoded ZIP with exactly one enclosing Skill directory. Place SKILL.md directly inside it, for example demo/SKILL.md, and put all resources beneath demo/. The SKILL.md frontmatter name must match the directory name. A flat ZIP with SKILL.md at archive root is not supported. Invalid layout returns HTTP 400 with an errors entry pointing to /packageBase64."
          },
          "content": {
            "$ref": "#/components/schemas/ContentMetadata"
          }
        },
        "required": [
          "packageBase64"
        ]
      },
      "AppendSkillVersionResponseContent": {
        "type": "object",
        "properties": {
          "entry": {
            "$ref": "#/components/schemas/StableEntry"
          },
          "version": {
            "$ref": "#/components/schemas/Version"
          }
        },
        "required": [
          "entry",
          "version"
        ]
      },
      "AttributeMap": {
        "type": "object",
        "additionalProperties": {},
        "maxProperties": 32,
        "description": "Exact-match attributes. Values are typed scalars or nonempty lists of typed scalars."
      },
      "AuthenticationErrorResponseContent": {
        "type": "object",
        "description": "Authentication credentials are missing, malformed, or invalid.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 401,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/AuthenticationErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "AuthenticationErrorType": {
        "type": "string",
        "description": "Problem type URI for authentication errors.",
        "enum": [
          "/errors/authentication-failed"
        ]
      },
      "AuthoredContent": {
        "type": "object",
        "description": "Complete normalized authored content. Responses emit empty intents/attributes collections.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          },
          "payload": {
            "$ref": "#/components/schemas/EntryPayload"
          }
        },
        "required": [
          "payload"
        ]
      },
      "BadRequestErrorResponseContent": {
        "type": "object",
        "description": "Request validation or input decoding failed.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 400,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/BadRequestErrorType"
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FieldError"
            },
            "description": "Every invalid request member found, when the failure is about members."
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "BadRequestErrorType": {
        "type": "string",
        "description": "Problem type URI for bad request errors.",
        "enum": [
          "/errors/invalid-data",
          "/errors/invalid-cursor",
          "/errors/unknown-request-member",
          "/errors/invalid-model-config",
          "/errors/model-config-immutable",
          "/errors/model-config-not-supported"
        ]
      },
      "BulkDeleteEntryError": {
        "type": "object",
        "description": "Why one entry of a bulk delete was not deleted, as RFC 9457 problem fields.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "entryId",
          "status",
          "title",
          "type"
        ]
      },
      "CandidatePreviewContent": {
        "type": "object",
        "properties": {
          "payload": {
            "$ref": "#/components/schemas/CandidatePreviewPayload"
          },
          "metadata": {
            "description": "Author-provided context, not verified attribution. Returned verbatim."
          }
        },
        "required": [
          "payload"
        ]
      },
      "CandidatePreviewPayload": {
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqCandidatePreview"
              }
            },
            "required": [
              "faq"
            ]
          },
          {
            "type": "object",
            "title": "skill",
            "properties": {
              "skill": {
                "$ref": "#/components/schemas/SkillCandidatePreview"
              }
            },
            "required": [
              "skill"
            ]
          }
        ]
      },
      "ConflictErrorResponseContent": {
        "type": "object",
        "description": "The request conflicts with the current state of the resource.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 409,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/ConflictErrorType"
          },
          "existingId": {
            "type": "string",
            "description": "The ID of the existing resource the request collided with, when the conflict names one."
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "ConflictErrorType": {
        "type": "string",
        "description": "Problem type URI for conflict errors.",
        "enum": [
          "/errors/conflict",
          "/errors/entry-not-published",
          "/errors/entry-key-conflict",
          "/errors/content-limit-exceeded",
          "/errors/pinned-entry-unavailable",
          "/errors/proposal-already-exists",
          "/errors/proposal-evidence-conflict",
          "/errors/proposal-evidence-capacity",
          "/errors/proposal-trashed",
          "/errors/proposal-open",
          "/errors/proposal-promotion-locked",
          "/errors/extraction-disabled",
          "/errors/gateway-mutation-in-progress",
          "/errors/surface-mutation-in-progress",
          "/errors/namespace-conflict",
          "/errors/gateway-not-empty",
          "/errors/gateway-deleting",
          "/errors/catalog-publication-conflict",
          "/errors/summary-view-conflict"
        ]
      },
      "ContentMetadata": {
        "type": "object",
        "description": "Author-provided context shared by FAQ, Skill and proposal authoring.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          }
        }
      },
      "ContentPreview": {
        "type": "object",
        "description": "Compact published content shared by management entries and serving previews.\nFAQ answers are included; Skill instructions and resource descriptors require a Version read.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          },
          "payload": {
            "$ref": "#/components/schemas/PreviewPayload"
          }
        },
        "required": [
          "payload"
        ]
      },
      "CreateFaqRequestContent": {
        "type": "object",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/FaqAuthoredContent"
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          }
        },
        "required": [
          "content"
        ]
      },
      "CreateFaqResponseContent": {
        "type": "object",
        "properties": {
          "entry": {
            "$ref": "#/components/schemas/StableEntry"
          },
          "version": {
            "$ref": "#/components/schemas/Version"
          }
        },
        "required": [
          "entry",
          "version"
        ]
      },
      "CreateProposalRequestContent": {
        "type": "object",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalActionInput"
          }
        },
        "required": [
          "action"
        ]
      },
      "CreateProposalResponseContent": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalAction"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalEvidence"
            },
            "maxItems": 100
          },
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidence",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "CreateSkillRequestContent": {
        "type": "object",
        "properties": {
          "packageBase64": {
            "type": "string",
            "maxLength": 6990508,
            "minLength": 1,
            "description": "Base64-encoded ZIP with exactly one enclosing Skill directory. Place SKILL.md directly inside it, for example demo/SKILL.md, and put all resources beneath demo/. The SKILL.md frontmatter name must match the directory name. A flat ZIP with SKILL.md at archive root is not supported. Invalid layout returns HTTP 400 with an errors entry pointing to /packageBase64."
          },
          "content": {
            "$ref": "#/components/schemas/ContentMetadata"
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          }
        },
        "required": [
          "packageBase64"
        ]
      },
      "CreateSkillResponseContent": {
        "type": "object",
        "properties": {
          "entry": {
            "$ref": "#/components/schemas/StableEntry"
          },
          "version": {
            "$ref": "#/components/schemas/Version"
          }
        },
        "required": [
          "entry",
          "version"
        ]
      },
      "DeleteFaqsRequestContent": {
        "type": "object",
        "properties": {
          "entryIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "maxItems": 100,
            "minItems": 1,
            "uniqueItems": true
          }
        },
        "required": [
          "entryIds"
        ]
      },
      "DeleteFaqsResponseContent": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "maxItems": 100,
            "description": "Entries removed by this successful attempt. Entries already absent at the start\nof the attempt are ignored and are not listed, so a retry can return an empty list."
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkDeleteEntryError"
            },
            "maxItems": 100,
            "description": "Requested entries this attempt did not delete, one problem each; the other entries\nwere still processed. Empty when every entry was deleted or already absent. Retry\nthe listed entries."
          }
        },
        "required": [
          "deleted",
          "errors"
        ]
      },
      "DeleteSkillsRequestContent": {
        "type": "object",
        "properties": {
          "entryIds": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "maxItems": 100,
            "minItems": 1,
            "uniqueItems": true
          }
        },
        "required": [
          "entryIds"
        ]
      },
      "DeleteSkillsResponseContent": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^ent_[0-9a-f]{32}$",
              "description": "Opaque stable entry identifier."
            },
            "maxItems": 100,
            "description": "Entries removed by this successful attempt. Entries already absent at the start\nof the attempt are ignored and are not listed, so a retry can return an empty list."
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkDeleteEntryError"
            },
            "maxItems": 100,
            "description": "Requested entries this attempt did not delete, one problem each; the other entries\nwere still processed. Empty when every entry was deleted or already absent. Retry\nthe listed entries."
          }
        },
        "required": [
          "deleted",
          "errors"
        ]
      },
      "DiscoverEntriesRequestContent": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 4096,
            "minLength": 1
          },
          "filter": {
            "$ref": "#/components/schemas/Filter"
          },
          "limit": {
            "type": "integer",
            "maximum": 50,
            "minimum": 1,
            "description": "Optional request cap, still bounded by the Playbook discovery maxResults policy.",
            "format": "int32"
          },
          "pinnedEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntryReference"
            },
            "maxItems": 50
          }
        },
        "required": [
          "query"
        ]
      },
      "DiscoverEntriesResponseContent": {
        "type": "object",
        "properties": {
          "pinnedEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PinnedPlaybookPreviewEntry"
            }
          },
          "discoveredEntries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscoveredPlaybookPreviewEntry"
            }
          },
          "truncated": {
            "type": "boolean",
            "description": "True when eligible fetched candidates exceed the result slots left by pins, independently of token admission. This count signal is bounded to the fetched candidates, not the entire index."
          },
          "budgetTruncated": {
            "type": "boolean",
            "description": "True when the token budget skips an eligible fetched entry while filling result slots. Later fetched candidates may fill those slots if they fit; admission stops at the result count limit or the end of the fetched candidates. Empty results with this flag do not mean no knowledge matched. Omitted means false; independent of count-based truncated."
          }
        },
        "required": [
          "discoveredEntries",
          "pinnedEntries",
          "truncated"
        ]
      },
      "DiscoveredPlaybookPreviewEntry": {
        "type": "object",
        "description": "Scored published preview shared by type-specific search and unified discovery.\nFAQs include their answer; Skills expose only their name, description and exact-version URI.",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "Zero through five unique intent strings. Each intent contains 1 through 2,048 characters after normalization. Invalid lists return HTTP 400 with an errors entry pointing to the invalid intents member."
          },
          "faq": {
            "$ref": "#/components/schemas/FaqContent"
          },
          "skill": {
            "$ref": "#/components/schemas/SkillPreviewContent"
          },
          "score": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "description": "Normalized cosine similarity: (2 - Redis cosine distance) / 2.",
            "format": "double"
          }
        },
        "required": [
          "entryId",
          "intents",
          "kind",
          "score",
          "version"
        ]
      },
      "DismissProposalRequestContent": {
        "type": "object",
        "properties": {
          "expectedRevision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Optional revision check for an open proposal; omission dismisses the current\ncandidate regardless of revision. A mismatch returns 412 /errors/revision-conflict.\nDismissal preserves the candidate for restoration; an already trashed proposal\nis a successful no-op regardless of the supplied revision."
          }
        }
      },
      "DismissProposalResponseContent": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalAction"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalEvidence"
            },
            "maxItems": 100
          },
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidence",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "EntryLookupResult": {
        "oneOf": [
          {
            "type": "object",
            "title": "found",
            "properties": {
              "found": {
                "$ref": "#/components/schemas/FoundEntryLookupResult"
              }
            },
            "required": [
              "found"
            ]
          },
          {
            "type": "object",
            "title": "missing",
            "properties": {
              "missing": {
                "$ref": "#/components/schemas/MissingEntryLookupResult"
              }
            },
            "required": [
              "missing"
            ]
          }
        ]
      },
      "EntryLookupState": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latest": {
            "$ref": "#/components/schemas/EntryVersionDigest"
          },
          "versionCount": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/EntryVersionDigest"
          }
        },
        "required": [
          "entryId",
          "kind",
          "latest",
          "versionCount"
        ]
      },
      "EntryPayload": {
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqContent"
              }
            },
            "required": [
              "faq"
            ]
          },
          {
            "type": "object",
            "title": "skill",
            "properties": {
              "skill": {
                "$ref": "#/components/schemas/SkillContent"
              }
            },
            "required": [
              "skill"
            ]
          }
        ]
      },
      "EntryReference": {
        "description": "One discovery pin. Exactly one identifier must be set.",
        "oneOf": [
          {
            "type": "object",
            "title": "entryId",
            "properties": {
              "entryId": {
                "type": "string",
                "pattern": "^ent_[0-9a-f]{32}$",
                "description": "Opaque stable entry identifier."
              }
            },
            "required": [
              "entryId"
            ]
          },
          {
            "type": "object",
            "title": "entryKey",
            "properties": {
              "entryKey": {
                "type": "string",
                "maxLength": 64,
                "minLength": 1,
                "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                "description": "Optional Playbook-unique immutable human-readable entry key."
              }
            },
            "required": [
              "entryKey"
            ]
          }
        ]
      },
      "EntrySort": {
        "type": "string",
        "enum": [
          "createdAt",
          "updatedAt"
        ],
        "default": "updatedAt"
      },
      "EntryType": {
        "type": "string",
        "enum": [
          "FAQ",
          "SKILL"
        ]
      },
      "EntryVersionDigest": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of normalized authored Playbook content in sha256:<lowercase-hex> form. The canonicalization contract is documented as playbook-entry-v1."
          }
        },
        "required": [
          "contentDigest",
          "version"
        ]
      },
      "EqualsPredicate": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,63}$"
          },
          "value": {}
        },
        "required": [
          "name",
          "value"
        ]
      },
      "EvidenceProducer": {
        "type": "object",
        "description": "Caller-declared producing component, prompt, and source-code build revision.\nThese fields describe the original observation and are not authenticated attribution.",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9][a-z0-9.-]*$"
          },
          "promptVersion": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]*$"
          },
          "commitSHA": {
            "type": "string",
            "pattern": "^[0-9a-f]{40}([0-9a-f]{24})?$"
          }
        },
        "required": [
          "name"
        ]
      },
      "FailedDependencyErrorResponseContent": {
        "type": "object",
        "description": "A dependent resource required to process the request is unavailable or unhealthy.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 424,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/FailedDependencyErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "FailedDependencyErrorType": {
        "type": "string",
        "description": "Problem type URI for failed-dependency errors.",
        "enum": [
          "/errors/resource-unavailable",
          "/errors/database-out-of-memory",
          "/errors/invalid-model-credentials",
          "/errors/model-quota-exceeded"
        ]
      },
      "FaqAuthoredContent": {
        "type": "object",
        "description": "Author-provided context shared by FAQ, Skill and proposal authoring.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          },
          "payload": {
            "$ref": "#/components/schemas/FaqPayload"
          }
        },
        "required": [
          "payload"
        ]
      },
      "FaqCandidatePreview": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "maxLength": 2048,
            "minLength": 1
          }
        },
        "required": [
          "question"
        ]
      },
      "FaqContent": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "maxLength": 2048,
            "minLength": 1
          },
          "answer": {
            "type": "string",
            "maxLength": 32768,
            "minLength": 1
          }
        },
        "required": [
          "answer",
          "question"
        ]
      },
      "FaqPayload": {
        "description": "FAQ writes accept only a FAQ payload; complete Skill payloads are archive-derived.",
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqContent"
              }
            },
            "required": [
              "faq"
            ]
          }
        ]
      },
      "FieldError": {
        "type": "object",
        "description": "One invalid request member. A body member is named by `pointer`, a path or query parameter by `parameter`; exactly one of the two is present.",
        "properties": {
          "pointer": {
            "type": "string",
            "description": "JSON Pointer (RFC 6901) to the invalid body member, such as `/vectorSpace/dimensions`."
          },
          "parameter": {
            "type": "string",
            "description": "Name of the invalid path or query parameter, such as `limit`."
          },
          "detail": {
            "type": "string",
            "description": "What is wrong with the member, in fixed words about the rule it broke, never the rejected value."
          }
        },
        "required": [
          "detail"
        ]
      },
      "Filter": {
        "description": "Recursive exact-match filter. Servers enforce depth five and at most 64 leaves.",
        "oneOf": [
          {
            "type": "object",
            "title": "and",
            "properties": {
              "and": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Filter"
                },
                "minItems": 1
              }
            },
            "required": [
              "and"
            ]
          },
          {
            "type": "object",
            "title": "or",
            "properties": {
              "or": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Filter"
                },
                "minItems": 1
              }
            },
            "required": [
              "or"
            ]
          },
          {
            "type": "object",
            "title": "eq",
            "properties": {
              "eq": {
                "$ref": "#/components/schemas/EqualsPredicate"
              }
            },
            "required": [
              "eq"
            ]
          }
        ]
      },
      "ForbiddenErrorResponseContent": {
        "type": "object",
        "description": "The caller is authenticated but not allowed to access the requested resource.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 403,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/ForbiddenErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "ForbiddenErrorType": {
        "type": "string",
        "description": "Problem type URI for authorization errors.",
        "enum": [
          "/errors/insufficient-permissions"
        ]
      },
      "FoundEntryLookupResult": {
        "type": "object",
        "properties": {
          "reference": {
            "$ref": "#/components/schemas/EntryReference"
          },
          "entry": {
            "$ref": "#/components/schemas/EntryLookupState"
          }
        },
        "required": [
          "entry",
          "reference"
        ]
      },
      "GetFaqResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "GetFaqVersionResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of normalized authored Playbook content in sha256:<lowercase-hex> form. The canonicalization contract is documented as playbook-entry-v1."
          },
          "content": {
            "$ref": "#/components/schemas/AuthoredContent"
          }
        },
        "required": [
          "content",
          "contentDigest",
          "createdAt",
          "entryId",
          "entryKind",
          "version"
        ]
      },
      "GetPlaybookHealthResponseContent": {
        "type": "object",
        "properties": {
          "playbookId": {
            "type": "string",
            "pattern": "^pb_[0-9a-f]{32}$",
            "description": "Opaque Playbook identifier."
          },
          "status": {
            "$ref": "#/components/schemas/ReadyStatus"
          },
          "metadataRedis": {
            "$ref": "#/components/schemas/ReadyStatus"
          },
          "contentRedis": {
            "$ref": "#/components/schemas/ReadyStatus"
          },
          "inference": {
            "$ref": "#/components/schemas/ReadyStatus"
          },
          "license": {
            "$ref": "#/components/schemas/ReadyStatus"
          }
        },
        "required": [
          "contentRedis",
          "inference",
          "license",
          "metadataRedis",
          "playbookId",
          "status"
        ]
      },
      "GetPlaybookStatsResponseContent": {
        "type": "object",
        "properties": {
          "observedAt": {
            "type": "string",
            "description": "Observation start in UTC, also used to evaluate proposal lifecycle deadlines.\nIndividual queries may complete later; this does not imply snapshot isolation.",
            "format": "date-time"
          },
          "faqs": {
            "$ref": "#/components/schemas/InventoryStats"
          },
          "skills": {
            "$ref": "#/components/schemas/InventoryStats"
          },
          "proposals": {
            "$ref": "#/components/schemas/ProposalStats"
          }
        },
        "required": [
          "faqs",
          "observedAt",
          "proposals",
          "skills"
        ]
      },
      "GetProposalResourceOutputPayload": {
        "type": "string",
        "format": "binary"
      },
      "GetProposalResponseContent": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalAction"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalEvidence"
            },
            "maxItems": 100
          },
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidence",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "GetServiceLivenessResponseContent": {
        "type": "object",
        "description": "A service that can answer the request. Readiness failures use the shared\nHTTP 503 problem response; dependency names and errors are not public.",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ServiceHealthStatus"
          }
        },
        "required": [
          "status"
        ]
      },
      "GetServiceReadinessResponseContent": {
        "type": "object",
        "description": "A service that can answer the request. Readiness failures use the shared\nHTTP 503 problem response; dependency names and errors are not public.",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/ServiceHealthStatus"
          }
        },
        "required": [
          "status"
        ]
      },
      "GetSkillResourceOutputPayload": {
        "type": "string",
        "format": "binary"
      },
      "GetSkillResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "GetSkillVersionResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of normalized authored Playbook content in sha256:<lowercase-hex> form. The canonicalization contract is documented as playbook-entry-v1."
          },
          "content": {
            "$ref": "#/components/schemas/AuthoredContent"
          }
        },
        "required": [
          "content",
          "contentDigest",
          "createdAt",
          "entryId",
          "entryKind",
          "version"
        ]
      },
      "InventoryStats": {
        "type": "object",
        "description": "Each bucket intersects all requested inventory filters.",
        "properties": {
          "total": {
            "$ref": "#/components/schemas/ObservedCount"
          },
          "published": {
            "$ref": "#/components/schemas/ObservedCount"
          },
          "unpublished": {
            "$ref": "#/components/schemas/ObservedCount"
          }
        },
        "required": [
          "published",
          "total",
          "unpublished"
        ]
      },
      "ListFaqVersionsResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Version"
            }
          },
          "nextCursor": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
          }
        },
        "required": [
          "items"
        ]
      },
      "ListFaqsResponseContent": {
        "type": "object",
        "properties": {
          "nextCursor": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "description": "Continue until nextCursor is absent, including after short or empty pages.\nLive updates/indexing delay can repeat or skip moved items; this is not a snapshot."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableEntry"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "ListProposalsResponseContent": {
        "type": "object",
        "properties": {
          "nextCursor": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "description": "Continue until nextCursor is absent, including after short or empty pages.\nLive updates/indexing delay can repeat or skip moved items; this is not a snapshot."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalPreview"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "ListSkillVersionsResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Version"
            }
          },
          "nextCursor": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "description": "Opaque position in a list, returned as `nextCursor` and passed back as `cursor`."
          }
        },
        "required": [
          "items"
        ]
      },
      "ListSkillsResponseContent": {
        "type": "object",
        "properties": {
          "nextCursor": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "description": "Continue until nextCursor is absent, including after short or empty pages.\nLive updates/indexing delay can repeat or skip moved items; this is not a snapshot."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StableEntry"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "LookupEntriesRequestContent": {
        "type": "object",
        "properties": {
          "references": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntryReference"
            },
            "maxItems": 100,
            "minItems": 1,
            "uniqueItems": true
          }
        },
        "required": [
          "references"
        ]
      },
      "LookupEntriesResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntryLookupResult"
            }
          },
          "maxVersions": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          }
        },
        "required": [
          "items",
          "maxVersions"
        ]
      },
      "MissingEntryLookupResult": {
        "type": "object",
        "properties": {
          "reference": {
            "$ref": "#/components/schemas/EntryReference"
          }
        },
        "required": [
          "reference"
        ]
      },
      "NewEntryTarget": {
        "type": "object",
        "properties": {
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          }
        }
      },
      "NotFoundErrorResponseContent": {
        "type": "object",
        "description": "The requested resource does not exist.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 404,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/NotFoundErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "NotFoundErrorType": {
        "type": "string",
        "description": "Problem type URI for not-found errors.",
        "enum": [
          "/errors/resource-not-found",
          "/errors/gateway-not-found",
          "/errors/upstream-not-found"
        ]
      },
      "ObservedCount": {
        "type": "object",
        "description": "A successful empty query has available=true and value=0. Failed, timed-out,\npartial or malformed counts have available=false and no value.",
        "properties": {
          "available": {
            "type": "boolean"
          },
          "value": {
            "type": "integer",
            "minimum": 0,
            "format": "int64"
          }
        },
        "required": [
          "available"
        ]
      },
      "PayloadTooLargeErrorResponseContent": {
        "type": "object",
        "description": "The request payload exceeds the maximum supported size.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 413,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/PayloadTooLargeErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "PayloadTooLargeErrorType": {
        "type": "string",
        "description": "Problem type URI for payload-too-large errors.",
        "enum": [
          "/errors/payload-too-large"
        ]
      },
      "PinnedPlaybookPreviewEntry": {
        "type": "object",
        "description": "Flat preview wire shape. Exactly one of faq or skill is present and matches kind.",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "Zero through five unique intent strings. Each intent contains 1 through 2,048 characters after normalization. Invalid lists return HTTP 400 with an errors entry pointing to the invalid intents member."
          },
          "faq": {
            "$ref": "#/components/schemas/FaqContent"
          },
          "skill": {
            "$ref": "#/components/schemas/SkillPreviewContent"
          }
        },
        "required": [
          "entryId",
          "intents",
          "kind",
          "version"
        ]
      },
      "PreconditionFailedErrorResponseContent": {
        "type": "object",
        "description": "The write named an expected revision (expectedRevision or If-Match) that is no longer current. Read the resource again and retry.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 412,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/PreconditionFailedErrorType"
          },
          "currentRevision": {
            "type": "string",
            "description": "The resource's current revision, when the service reports it. Read the resource again before retrying; do not send this value back without reading."
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "PreconditionFailedErrorType": {
        "type": "string",
        "description": "Problem type URI for a write whose expected revision is no longer current. A write guarded by an If-Match header on an HTTP entity tag uses a different type; see the Identity Service API.",
        "enum": [
          "/errors/revision-conflict"
        ]
      },
      "PreviewPayload": {
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqContent"
              }
            },
            "required": [
              "faq"
            ]
          },
          {
            "type": "object",
            "title": "skill",
            "properties": {
              "skill": {
                "$ref": "#/components/schemas/SkillPreviewContent"
              }
            },
            "required": [
              "skill"
            ]
          }
        ]
      },
      "ProposalAcceptanceResult": {
        "description": "Clients must preserve unrecognized result members.",
        "oneOf": [
          {
            "type": "object",
            "title": "versionCreated",
            "properties": {
              "versionCreated": {
                "$ref": "#/components/schemas/ProposalVersionCreated"
              }
            },
            "required": [
              "versionCreated"
            ]
          }
        ]
      },
      "ProposalAction": {
        "description": "Exactly one action. Response clients must preserve unrecognized members.",
        "oneOf": [
          {
            "type": "object",
            "title": "add",
            "properties": {
              "add": {
                "$ref": "#/components/schemas/AddProposalAction"
              }
            },
            "required": [
              "add"
            ]
          }
        ]
      },
      "ProposalActionInput": {
        "oneOf": [
          {
            "type": "object",
            "title": "add",
            "properties": {
              "add": {
                "$ref": "#/components/schemas/AddProposalActionInput"
              }
            },
            "required": [
              "add"
            ],
            "additionalProperties": false
          }
        ]
      },
      "ProposalActionPreview": {
        "oneOf": [
          {
            "type": "object",
            "title": "add",
            "properties": {
              "add": {
                "$ref": "#/components/schemas/AddProposalActionPreview"
              }
            },
            "required": [
              "add"
            ]
          }
        ]
      },
      "ProposalActionType": {
        "type": "string",
        "enum": [
          "ADD"
        ]
      },
      "ProposalCandidate": {
        "type": "object",
        "description": "Complete normalized candidate. Proposal resources have no entry-version URI.",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/ProposalContent"
          }
        },
        "required": [
          "content"
        ]
      },
      "ProposalCandidateInput": {
        "type": "object",
        "description": "Proposal authoring accepts FAQ content or a complete Skill ZIP.",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/ProposalInputContent"
          }
        },
        "required": [
          "content"
        ]
      },
      "ProposalCandidatePreview": {
        "type": "object",
        "properties": {
          "content": {
            "$ref": "#/components/schemas/CandidatePreviewContent"
          }
        },
        "required": [
          "content"
        ]
      },
      "ProposalContent": {
        "type": "object",
        "description": "Author-provided context shared by FAQ, Skill and proposal authoring.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          },
          "payload": {
            "$ref": "#/components/schemas/ProposalPayload"
          }
        },
        "required": [
          "payload"
        ]
      },
      "ProposalEvidence": {
        "type": "object",
        "description": "Immutable reviewer context relevant to the proposal's underlying need. An\nobservation may disagree with the proposed answer; it is not a vote or proof.\nEvidence survives candidate edits and is never copied into an accepted entry.",
        "properties": {
          "observedAt": {
            "type": "string",
            "description": "Time of the source observation, not submission or retry time.",
            "format": "date-time"
          },
          "producer": {
            "$ref": "#/components/schemas/EvidenceProducer"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "evidenceId": {
            "type": "string",
            "pattern": "^evd_[0-9a-f]{32}$",
            "description": "Identity scoped to this proposal: exact replay is unchanged; changed payload conflicts."
          }
        },
        "required": [
          "evidenceId",
          "observedAt",
          "producer",
          "source"
        ]
      },
      "ProposalEvidenceDisposition": {
        "type": "string",
        "enum": [
          "ADDED",
          "ALREADY_PRESENT"
        ]
      },
      "ProposalInputContent": {
        "type": "object",
        "description": "Proposal input owns its payload independently of normalized read content.",
        "properties": {
          "intents": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 2048,
              "minLength": 1
            },
            "maxItems": 5,
            "uniqueItems": true,
            "description": "At most five unique intents, each 1 through 2,048 characters after normalization. Omission is an empty list. Validation failures identify this member in the HTTP 400 errors array."
          },
          "attributes": {
            "$ref": "#/components/schemas/AttributeMap"
          },
          "metadata": {
            "description": "Author-provided JSON metadata. Its normalized JSON encoding must not exceed 65,536 bytes or nesting depth 16; deployments may enforce lower limits. Exceeding the byte limit returns payload-too-large, while excessive nesting returns invalid-data."
          },
          "payload": {
            "$ref": "#/components/schemas/ProposalInputPayload"
          }
        },
        "required": [
          "payload"
        ]
      },
      "ProposalInputPayload": {
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqContent"
              }
            },
            "required": [
              "faq"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "title": "skillPackage",
            "properties": {
              "skillPackage": {
                "$ref": "#/components/schemas/ProposalSkillPackage"
              }
            },
            "required": [
              "skillPackage"
            ],
            "additionalProperties": false
          }
        ]
      },
      "ProposalPayload": {
        "oneOf": [
          {
            "type": "object",
            "title": "faq",
            "properties": {
              "faq": {
                "$ref": "#/components/schemas/FaqContent"
              }
            },
            "required": [
              "faq"
            ]
          },
          {
            "type": "object",
            "title": "skill",
            "properties": {
              "skill": {
                "$ref": "#/components/schemas/ProposalSkillContent"
              }
            },
            "required": [
              "skill"
            ]
          }
        ]
      },
      "ProposalPreview": {
        "type": "object",
        "description": "Compact management projection; GET the proposal for the complete candidate.",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalActionPreview"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "ProposalResource": {
        "type": "object",
        "properties": {
          "resourceId": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "digest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of exact resource bytes in sha256:<lowercase-hex> form."
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "mimeType": {
            "type": "string"
          },
          "executable": {
            "type": "boolean"
          }
        },
        "required": [
          "digest",
          "executable",
          "mimeType",
          "path",
          "resourceId",
          "sizeBytes"
        ]
      },
      "ProposalSkillContent": {
        "type": "object",
        "properties": {
          "format": {
            "$ref": "#/components/schemas/SkillFormat"
          },
          "manifest": {
            "$ref": "#/components/schemas/SkillManifest"
          },
          "instructions": {
            "type": "string"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalResource"
            }
          }
        },
        "required": [
          "format",
          "instructions",
          "manifest",
          "resources"
        ]
      },
      "ProposalSkillPackage": {
        "type": "object",
        "properties": {
          "packageBase64": {
            "type": "string",
            "maxLength": 6990508,
            "minLength": 1
          }
        },
        "required": [
          "packageBase64"
        ]
      },
      "ProposalSort": {
        "type": "string",
        "enum": [
          "createdAt",
          "inboxExpiresAt",
          "purgeAt",
          "updatedAt",
          "evidenceCount"
        ],
        "default": "updatedAt"
      },
      "ProposalSource": {
        "type": "object",
        "description": "Caller-supplied origin and observed material, not verified attribution.\nOn a proposal this is immutable creation context, excluded from evidenceCount.\nOn evidence this describes an additional observation relevant to the same need.\nReference locates the input; content preserves the submitter's observation or\nexcerpt. Both, when present, must be JSON objects. Their fields are source-specific.\nAgent Memory extraction uses agent-memory-session or agent-memory-summary references and\nquestionAnswer content; its question/answer are model-derived, not verbatim events.",
        "properties": {
          "kind": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1
          },
          "reference": {},
          "content": {}
        },
        "required": [
          "kind"
        ]
      },
      "ProposalState": {
        "type": "string",
        "enum": [
          "OPEN",
          "TRASHED",
          "PROMOTING",
          "PROMOTED"
        ]
      },
      "ProposalStats": {
        "type": "object",
        "properties": {
          "inbox": {
            "$ref": "#/components/schemas/ObservedCount"
          },
          "trash": {
            "$ref": "#/components/schemas/ObservedCount"
          }
        }
      },
      "ProposalTarget": {
        "description": "Exactly one target. Launch supports creating a new entry.",
        "oneOf": [
          {
            "type": "object",
            "title": "newEntry",
            "properties": {
              "newEntry": {
                "$ref": "#/components/schemas/NewEntryTarget"
              }
            },
            "required": [
              "newEntry"
            ]
          }
        ]
      },
      "ProposalTargetInput": {
        "description": "Exactly one target. Request clients must send only a supported member.",
        "oneOf": [
          {
            "type": "object",
            "title": "newEntry",
            "properties": {
              "newEntry": {
                "$ref": "#/components/schemas/NewEntryTarget"
              }
            },
            "required": [
              "newEntry"
            ],
            "additionalProperties": false
          }
        ]
      },
      "ProposalVersionCreated": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of normalized authored Playbook content in sha256:<lowercase-hex> form. The canonicalization contract is documented as playbook-entry-v1."
          }
        },
        "required": [
          "contentDigest",
          "entryId",
          "entryKind",
          "version"
        ]
      },
      "ProposalView": {
        "type": "string",
        "enum": [
          "INBOX",
          "TRASH"
        ]
      },
      "Publication": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "at": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "content": {
            "$ref": "#/components/schemas/ContentPreview"
          }
        },
        "required": [
          "at",
          "content",
          "version"
        ]
      },
      "PublishFaqRequestContent": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          }
        },
        "required": [
          "version"
        ]
      },
      "PublishFaqResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "PublishSkillRequestContent": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          }
        },
        "required": [
          "version"
        ]
      },
      "PublishSkillResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "ReadyStatus": {
        "type": "string",
        "enum": [
          "READY"
        ]
      },
      "ReplaceProposalRequestContent": {
        "type": "object",
        "properties": {
          "action": {
            "$ref": "#/components/schemas/ProposalActionInput"
          },
          "expectedRevision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          }
        },
        "required": [
          "action",
          "expectedRevision"
        ]
      },
      "ReplaceProposalResponseContent": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalAction"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalEvidence"
            },
            "maxItems": 100
          },
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidence",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "ResourceDescriptor": {
        "type": "object",
        "properties": {
          "resourceId": {
            "type": "string",
            "pattern": "^res_[0-9a-f]{24}$",
            "description": "REST and storage locator used by the exact resource-content route; not Skill identity."
          },
          "uri": {
            "type": "string",
            "description": "Canonical URI for this exact Skill file version on the Playbook MCP server."
          },
          "path": {
            "type": "string"
          },
          "digest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of exact resource bytes in sha256:<lowercase-hex> form."
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "mimeType": {
            "type": "string"
          },
          "executable": {
            "type": "boolean"
          }
        },
        "required": [
          "digest",
          "executable",
          "mimeType",
          "path",
          "resourceId",
          "sizeBytes",
          "uri"
        ]
      },
      "ResourceSuspendedErrorResponseContent": {
        "type": "object",
        "description": "The requested resource exists but is suspended by an administrator.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 423,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/ResourceSuspendedErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "ResourceSuspendedErrorType": {
        "type": "string",
        "description": "Problem type URI for suspended resources.",
        "enum": [
          "/errors/resource-suspended"
        ]
      },
      "RestoreProposalResponseContent": {
        "type": "object",
        "properties": {
          "proposalId": {
            "type": "string",
            "pattern": "^prp_[0-9a-f]{32}$"
          },
          "state": {
            "$ref": "#/components/schemas/ProposalState"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "Present for actions that author content; absent for candidate-free actions."
          },
          "revision": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "description": "Resource revision. Opaque: each change to a resource's own configuration writes a\nnew value, and a resource never gets a value it had before. Compare for equality\nonly; its format is the service's, so only its length is constrained. Returned as\n`revision`; sent back as `expectedRevision` to make a write conditional. Omitting\n`expectedRevision` makes the write unconditional."
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 0,
            "description": "Attached records only, excluding creation source; not distinct sessions or confidence.",
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last successful candidate replacement, new evidence, dismissal, or restoration\n(creation initially). Duplicate evidence, repeated dismissal/restoration, and\ntime-based expiry do not change it. New evidence, replacement, and restoration\nalso refresh inbox/purge deadlines.",
            "format": "date-time"
          },
          "inboxExpiresAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "purgeAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          },
          "action": {
            "$ref": "#/components/schemas/ProposalAction"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProposalEvidence"
            },
            "maxItems": 100
          },
          "result": {
            "$ref": "#/components/schemas/ProposalAcceptanceResult"
          }
        },
        "required": [
          "action",
          "createdAt",
          "evidence",
          "evidenceCount",
          "inboxExpiresAt",
          "proposalId",
          "purgeAt",
          "revision",
          "state",
          "updatedAt"
        ]
      },
      "ScoredProposalPreview": {
        "type": "object",
        "properties": {
          "proposal": {
            "$ref": "#/components/schemas/ProposalPreview"
          },
          "score": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "description": "A relevance score in [0, 1]. Higher is closer, and every threshold in the API\n(`minScore`) points the same way: higher is stricter.",
            "format": "double"
          }
        },
        "required": [
          "proposal",
          "score"
        ]
      },
      "SearchFaqsRequestContent": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 4096,
            "minLength": 1
          },
          "filter": {
            "$ref": "#/components/schemas/Filter"
          },
          "minScore": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "description": "Normalized cosine similarity floor applied to this request. Omission uses the corresponding FAQ or Skill discovery threshold.",
            "format": "double"
          },
          "limit": {
            "type": "integer",
            "maximum": 50,
            "minimum": 1,
            "description": "Caller-controlled top K. Omission uses discovery.maxResults; an explicit value is not capped by discovery policy.",
            "format": "int32"
          }
        },
        "required": [
          "query"
        ]
      },
      "SearchFaqsResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscoveredPlaybookPreviewEntry"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "SearchProposalsRequestContent": {
        "type": "object",
        "properties": {
          "actionType": {
            "$ref": "#/components/schemas/ProposalActionType"
          },
          "entryKind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "query": {
            "type": "string",
            "maxLength": 4096,
            "minLength": 1
          },
          "minScore": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "description": "A relevance score in [0, 1]. Higher is closer, and every threshold in the API\n(`minScore`) points the same way: higher is stricter.",
            "format": "double"
          },
          "limit": {
            "type": "integer",
            "default": 10,
            "maximum": 50,
            "minimum": 1,
            "description": "Maximum result count. Omission uses 10.",
            "format": "int32"
          }
        },
        "required": [
          "query"
        ]
      },
      "SearchProposalsResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScoredProposalPreview"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "SearchSkillsRequestContent": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 4096,
            "minLength": 1
          },
          "filter": {
            "$ref": "#/components/schemas/Filter"
          },
          "minScore": {
            "type": "number",
            "maximum": 1,
            "minimum": 0,
            "description": "Normalized cosine similarity floor applied to this request. Omission uses the corresponding FAQ or Skill discovery threshold.",
            "format": "double"
          },
          "limit": {
            "type": "integer",
            "maximum": 50,
            "minimum": 1,
            "description": "Caller-controlled top K. Omission uses discovery.maxResults; an explicit value is not capped by discovery policy.",
            "format": "int32"
          }
        },
        "required": [
          "query"
        ]
      },
      "SearchSkillsResponseContent": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscoveredPlaybookPreviewEntry"
            }
          }
        },
        "required": [
          "items"
        ]
      },
      "ServiceHealthStatus": {
        "type": "string",
        "enum": [
          "UP"
        ]
      },
      "ServiceUnavailableErrorResponseContent": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 503,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/ServiceUnavailableErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "ServiceUnavailableErrorType": {
        "type": "string",
        "enum": [
          "/errors/service-unavailable",
          "/errors/playbook-not-ready",
          "/errors/resource-unavailable"
        ]
      },
      "SkillCandidatePreview": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "description",
          "name"
        ]
      },
      "SkillContent": {
        "type": "object",
        "description": "Complete parsed Skill content, including the instructions extracted from SKILL.md.\nResources contain descriptors and URIs, never file bytes. Search and discovery use the\nsmaller SkillPreviewContent, also used by StableEntry publications. Version responses use this complete shape.",
        "properties": {
          "format": {
            "$ref": "#/components/schemas/SkillFormat"
          },
          "manifest": {
            "$ref": "#/components/schemas/SkillManifest"
          },
          "instructions": {
            "type": "string"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceDescriptor"
            }
          }
        },
        "required": [
          "format",
          "instructions",
          "manifest",
          "resources"
        ]
      },
      "SkillFormat": {
        "type": "string",
        "enum": [
          "agent-skills"
        ]
      },
      "SkillManifest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "description": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1
          },
          "license": {
            "type": "string"
          },
          "compatibility": {
            "type": "string",
            "maxLength": 500,
            "minLength": 1
          },
          "metadata": {
            "$ref": "#/components/schemas/SkillMetadata"
          },
          "allowedTools": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "description",
          "name"
        ]
      },
      "SkillMetadata": {
        "type": "object",
        "additionalProperties": {
          "type": "string"
        }
      },
      "SkillPreviewContent": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "uri": {
            "type": "string",
            "description": "Canonical SKILL.md URI for the exact published Skill version."
          }
        },
        "required": [
          "description",
          "name",
          "uri"
        ]
      },
      "SortOrder": {
        "type": "string",
        "enum": [
          "ASC",
          "DESC"
        ]
      },
      "StableEntry": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "SubmitProposalEvidenceRequestContent": {
        "type": "object",
        "properties": {
          "observedAt": {
            "type": "string",
            "description": "Time of the source observation, not submission or retry time.",
            "format": "date-time"
          },
          "producer": {
            "$ref": "#/components/schemas/EvidenceProducer"
          },
          "source": {
            "$ref": "#/components/schemas/ProposalSource"
          }
        },
        "required": [
          "observedAt",
          "producer",
          "source"
        ]
      },
      "SubmitProposalEvidenceResponseContent": {
        "type": "object",
        "properties": {
          "evidenceId": {
            "type": "string",
            "pattern": "^evd_[0-9a-f]{32}$"
          },
          "disposition": {
            "$ref": "#/components/schemas/ProposalEvidenceDisposition"
          },
          "evidenceCount": {
            "type": "integer",
            "maximum": 100,
            "minimum": 1,
            "format": "int32"
          },
          "updatedAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          }
        },
        "required": [
          "disposition",
          "evidenceCount",
          "evidenceId",
          "updatedAt"
        ]
      },
      "TimeoutErrorResponseContent": {
        "type": "object",
        "description": "The request timed out before the service could complete it.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 408,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/TimeoutErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "TimeoutErrorType": {
        "type": "string",
        "description": "Problem type URI for timeout errors.",
        "enum": [
          "/errors/timeout"
        ]
      },
      "TooManyRequestsErrorResponseContent": {
        "type": "object",
        "description": "The service rejected the request because rate limits were exceeded.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 429,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/TooManyRequestsErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "TooManyRequestsErrorType": {
        "type": "string",
        "description": "Problem type URI for rate-limit errors.",
        "enum": [
          "/errors/too-many-requests"
        ]
      },
      "UnexpectedErrorResponseContent": {
        "type": "object",
        "description": "The service failed with an unexpected internal error.",
        "properties": {
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem\n                                      type.  It SHOULD NOT change from occurrence to occurrence of the\n                                      problem, except for purposes of localization (e.g., using\n                                      proactive content negotiation; see [RFC7231], Section 3.4)."
          },
          "status": {
            "type": "integer",
            "default": 500,
            "description": "The HTTP status code ([RFC7231], Section 6) generated by the origin server for this occurrence of the problem.",
            "format": "int32"
          },
          "detail": {
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "A URI reference that identifies the specific occurrence of the problem.  It may or may not yield further information if dereferenced."
          },
          "type": {
            "$ref": "#/components/schemas/UnexpectedErrorType"
          }
        },
        "required": [
          "status",
          "title",
          "type"
        ]
      },
      "UnexpectedErrorType": {
        "type": "string",
        "description": "Problem type URI for unexpected internal errors.",
        "enum": [
          "/errors/unexpected-error",
          "/errors/content-integrity-failed"
        ]
      },
      "Version": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "format": "int32"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "contentDigest": {
            "type": "string",
            "pattern": "^sha256:[0-9a-f]{64}$",
            "description": "SHA-256 digest of normalized authored Playbook content in sha256:<lowercase-hex> form. The canonicalization contract is documented as playbook-entry-v1."
          },
          "content": {
            "$ref": "#/components/schemas/AuthoredContent"
          }
        },
        "required": [
          "content",
          "contentDigest",
          "createdAt",
          "entryId",
          "entryKind",
          "version"
        ]
      },
      "WithdrawFaqResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      },
      "WithdrawSkillResponseContent": {
        "type": "object",
        "properties": {
          "entryId": {
            "type": "string",
            "pattern": "^ent_[0-9a-f]{32}$",
            "description": "Opaque stable entry identifier."
          },
          "entryKey": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
            "description": "Optional Playbook-unique immutable human-readable entry key."
          },
          "kind": {
            "$ref": "#/components/schemas/EntryType"
          },
          "latestVersion": {
            "type": "integer",
            "minimum": 1,
            "description": "Newest immutable version number. Versions are append-only, so this also equals the version count.",
            "format": "int32"
          },
          "publication": {
            "$ref": "#/components/schemas/Publication"
          },
          "createdAt": {
            "type": "string",
            "description": "UTC timestamp resolved to microsecond precision.",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "description": "Last create, append, publication change, or withdrawal of an existing publication. Repeating the current publication, already-unpublished withdrawal, and reads leave it unchanged. Publication/append updates never move this timestamp backwards.",
            "format": "date-time"
          }
        },
        "required": [
          "createdAt",
          "entryId",
          "kind",
          "latestVersion",
          "updatedAt"
        ]
      }
    },
    "securitySchemes": {
      "smithy.api.httpBearerAuth": {
        "type": "http",
        "description": "HTTP Bearer authentication",
        "scheme": "Bearer"
      }
    }
  },
  "security": [
    {
      "smithy.api.httpBearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Skills"
    },
    {
      "name": "FAQs"
    },
    {
      "name": "Retrieval"
    },
    {
      "name": "Proposals"
    },
    {
      "name": "Maintenance"
    }
  ]
}
