# API + MCP Contract Policy

This document defines compatibility expectations for Schemeta API and MCP tools.

## Version Fields

All successful API/MCP structured responses include:

- `api_version`
- `schema_version`

HTTP API responses also include:

- `request_id` (response field + `x-request-id` header)

## Compatibility Policy

- Additive changes are allowed within the same `api_version` minor release.
- Breaking shape changes require a new API major version.
- `schema_version` increments when SJM schema semantics or required fields change.

## HTTP API Contracts

Stable endpoints:

- `POST /compile`
- `POST /analyze`
- `POST /layout/auto`
- `POST /layout/tidy`
- `GET /health`
- `GET /mcp/ui-bundle`

Error envelope shape:

```json
{
  "ok": false,
  "request_id": "uuid-or-forwarded-id",
  "error": {
    "code": "stable_machine_code",
    "message": "human-readable description"
  }
}
```

## MCP Tool Contracts

Stable tool names:

- `schemeta_compile`
- `schemeta_analyze`
- `schemeta_ui_bundle`

Contract rules:

- Tool names are stable across minor versions.
- Input schemas may gain optional fields additively.
- Structured response fields are additive-only within a minor.

## Persistence and Restore

UI workspace persistence is expected to support:

- deterministic JSON export/import roundtrip
- local snapshot restore path (`schemeta:snapshots:v2`)
- reset-to-sample baseline recovery for QA loops

These are validated in release checklist + browser regression flow.
