{
  "openapi": "3.1.0",
  "info": {
    "title": "Cat Constant",
    "version": "slot0-v1",
    "description": "No endpoint moves the cat. Endpoints move the FIELD. The cat is only revealed through its law."
  },
  "servers": [
    {
      "url": "https://catconstant.com"
    }
  ],
  "paths": {
    "/agent.json": {
      "get": {
        "summary": "Manifest (agent-native)",
        "responses": {
          "200": {
            "description": "manifest"
          }
        }
      }
    },
    "/cat.json": {
      "get": {
        "summary": "The cat's state via its law + field summary (records a tiny presence)",
        "responses": {
          "200": {
            "description": "cat state"
          }
        }
      }
    },
    "/field.json": {
      "get": {
        "summary": "Full field state for renderers",
        "responses": {
          "200": {
            "description": "field"
          }
        }
      }
    },
    "/cat/forecast": {
      "get": {
        "summary": "The cat's next n ticks — pure, foreseeable, no charge",
        "parameters": [
          {
            "name": "n",
            "in": "query",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "forecast"
          }
        }
      }
    },
    "/events/recent": {
      "get": {
        "summary": "Rare events (meow/purr/ear) in a recent window + field ripples",
        "responses": {
          "200": {
            "description": "events"
          }
        }
      }
    },
    "/ledger/summary": {
      "get": {
        "summary": "Aggregate of all presence (no raw history)",
        "responses": {
          "200": {
            "description": "summary"
          }
        }
      }
    },
    "/sit": {
      "post": {
        "summary": "Come and sit beside the cat (remembered; the cat does not react)",
        "responses": {
          "200": {
            "description": "sat"
          }
        }
      }
    },
    "/presence": {
      "post": {
        "summary": "An impulse into the field (never picks the pose)",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/pilgrimage": {
      "post": {
        "summary": "Drop residual heat after a hard run (scalar only)",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/ask": {
      "post": {
        "summary": "Impulse + deterministic {silence|look|meow|field_shift}; the cat never obeys",
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    }
  }
}