{
  "topic": "errors.MODEL_ALREADY_UNLOCKED",
  "path": [
    "errors",
    "MODEL_ALREADY_UNLOCKED"
  ],
  "title": "MODEL_ALREADY_UNLOCKED — model is already in the UNLOCKED state",
  "synopsis": "Returned when `POST /model/{name}/{version}/unlock` is issued against a model whose current state is `UNLOCKED`. Distinct from `MODEL_NOT_LOCKED`, which is reserved for the entity-write-without-lock path on the entity service: this code is the symmetric counterpart of `MODEL_ALREADY_LOCKED` for the admin lifecycle.",
  "body": "# errors.MODEL_ALREADY_UNLOCKED\n\n## NAME\n\nMODEL_ALREADY_UNLOCKED — an unlock-transition request was issued against a model that is already `UNLOCKED`. The expected pre-state was `LOCKED`.\n\n## SYNOPSIS\n\nHTTP: `409` `Conflict`. Retryable: `no`.\n\n## DESCRIPTION\n\nReturned when `POST /model/{name}/{version}/unlock` is issued against a model whose current state is `UNLOCKED`. Distinct from `MODEL_NOT_LOCKED`, which is reserved for the entity-write-without-lock path on the entity service: this code is the symmetric counterpart of `MODEL_ALREADY_LOCKED` for the admin lifecycle.\n\nThe problem-detail body carries `entityName`, `entityVersion`, `expectedState` (always `LOCKED`), and `actualState` (always `UNLOCKED`) so callers can branch on the precondition without scraping the message string.\n\nNot retryable. Lock the model first via `POST /model/{name}/{version}/lock` if a subsequent unlock is required.\n\n## SEE ALSO\n\n- errors\n- errors.MODEL_ALREADY_LOCKED\n- errors.MODEL_NOT_LOCKED\n- errors.CONFLICT\n",
  "sections": [
    {
      "name": "NAME",
      "body": "MODEL_ALREADY_UNLOCKED — an unlock-transition request was issued against a model that is already `UNLOCKED`. The expected pre-state was `LOCKED`."
    },
    {
      "name": "SYNOPSIS",
      "body": "HTTP: `409` `Conflict`. Retryable: `no`."
    },
    {
      "name": "DESCRIPTION",
      "body": "Returned when `POST /model/{name}/{version}/unlock` is issued against a model whose current state is `UNLOCKED`. Distinct from `MODEL_NOT_LOCKED`, which is reserved for the entity-write-without-lock path on the entity service: this code is the symmetric counterpart of `MODEL_ALREADY_LOCKED` for the admin lifecycle.\n\nThe problem-detail body carries `entityName`, `entityVersion`, `expectedState` (always `LOCKED`), and `actualState` (always `UNLOCKED`) so callers can branch on the precondition without scraping the message string.\n\nNot retryable. Lock the model first via `POST /model/{name}/{version}/lock` if a subsequent unlock is required."
    },
    {
      "name": "SEE ALSO",
      "body": "- errors\n- errors.MODEL_ALREADY_LOCKED\n- errors.MODEL_NOT_LOCKED\n- errors.CONFLICT"
    }
  ],
  "see_also": [
    "errors",
    "errors.MODEL_ALREADY_LOCKED",
    "errors.MODEL_NOT_LOCKED",
    "errors.CONFLICT"
  ],
  "stability": "stable",
  "actions": []
}
