{
  "service": "journal",
  "contract": "2026-09-12",
  "doc": "Generated from journal.Operations. Structural drift tests link prose, table, schemas, descriptions and routes; semantic conformance checks behavior. The prose contract governs semantics.",
  "surface": "SURFACE.md",
  "bindings": {
    "http": "HTTP.md"
  },
  "limits": {
    "max_position": 9007199254740991,
    "max_key_bytes": 255,
    "max_fact_bytes": 1048576,
    "max_append_facts": 128,
    "max_append_bytes": 4194304,
    "max_body_bytes": 8388608,
    "max_page_entries": 128,
    "default_page_entries": 64,
    "max_page_bytes": 4194304,
    "max_inspect_candidates": 4096,
    "max_inspect_bytes": 16777216,
    "max_snapshot_spaces": 4096,
    "max_snapshot_bytes": 4194304,
    "max_cursor_bytes": 4096,
    "max_value_depth": 256,
    "max_tuple_arity": 65536,
    "max_atom_bytes": 1048576
  },
  "profiles": {
    "facts": "ulab-journal-facts-v1",
    "codec": "ontos-codec-v1",
    "compound": "ontos/compound",
    "data": "ontos/data",
    "data_json": "ontos-data-json/1",
    "equality": "ontos-core structural identity",
    "creation_predicate": "ulab.journal.child_created.v1"
  },
  "operations": [
    {
      "name": "create",
      "kind": "mutation",
      "doc": "create a child space and its empty journal under an existing parent, recording the creation in the parent's journal",
      "params": [],
      "request": "CreateRequest",
      "response": "CreateResult",
      "errors": [
        "invalid",
        "not_found",
        "exists",
        "conflict",
        "idempotency_mismatch",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/create"
      }
    },
    {
      "name": "resolve",
      "kind": "read",
      "doc": "resolve a path to its current occupant, or an exact space identity to its path",
      "params": [],
      "request": "ResolveRequest",
      "response": "ResolveResult",
      "errors": [
        "invalid",
        "not_found",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/resolve"
      }
    },
    {
      "name": "children",
      "kind": "read",
      "doc": "enumerate a space's immediate children at a fixed cutoff, in creation order",
      "params": [],
      "request": "ChildrenRequest",
      "response": "ChildrenResult",
      "errors": [
        "invalid",
        "not_found",
        "limit_exceeded",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/children"
      }
    },
    {
      "name": "head",
      "kind": "read",
      "doc": "read a space's committed cutoff",
      "params": [],
      "request": "HeadRequest",
      "response": "HeadResult",
      "errors": [
        "invalid",
        "not_found",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/head"
      }
    },
    {
      "name": "append",
      "kind": "mutation",
      "doc": "append an atomic batch of facts, optionally requiring the current cutoff",
      "params": [],
      "request": "AppendRequest",
      "response": "AppendResult",
      "errors": [
        "invalid",
        "not_found",
        "conflict",
        "idempotency_mismatch",
        "limit_exceeded",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/append"
      }
    },
    {
      "name": "read",
      "kind": "read",
      "doc": "read a fixed prefix of one journal, optionally filtered, one page at a time",
      "params": [],
      "request": "ReadRequest",
      "response": "ReadResult",
      "errors": [
        "invalid",
        "not_found",
        "limit_exceeded",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/read"
      }
    },
    {
      "name": "query",
      "kind": "read",
      "doc": "read a space and its descendants over an explicit snapshot manifest",
      "params": [],
      "request": "QueryRequest",
      "response": "QueryResult",
      "errors": [
        "invalid",
        "not_found",
        "limit_exceeded",
        "unavailable",
        "internal"
      ],
      "http": {
        "method": "POST",
        "path": "/v1/query"
      }
    },
    {
      "name": "livez",
      "kind": "operational",
      "doc": "the process is up and can answer; empty checks and never 503",
      "params": [],
      "response": "Health",
      "errors": [
        "invalid"
      ],
      "http": {
        "method": "GET",
        "path": "/livez"
      }
    },
    {
      "name": "health",
      "kind": "operational",
      "doc": "whether the engine can serve the contract",
      "params": [],
      "response": "Health",
      "errors": [
        "invalid"
      ],
      "http": {
        "method": "GET",
        "path": "/healthz"
      }
    },
    {
      "name": "describe",
      "kind": "operational",
      "doc": "service identity, root, contract, build, binding, operations, refusals, limits, profiles and files",
      "params": [],
      "response": "Describe",
      "errors": [
        "invalid"
      ],
      "http": {
        "method": "GET",
        "path": "/describe"
      }
    },
    {
      "name": "describe_file",
      "kind": "operational",
      "doc": "one embedded contract file, verbatim",
      "params": [
        {
          "name": "file",
          "kind": "string",
          "required": true,
          "repeated": false,
          "doc": "an exact file name listed by describe"
        }
      ],
      "errors": [
        "invalid",
        "not_found"
      ],
      "http": {
        "method": "GET",
        "path": "/describe/{file...}"
      }
    }
  ]
}
