> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kernite.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Compatibility

> Stable contract expectations and vector-driven conformance.

Kernite follows semantic versioning and a compatibility policy for execute response fields.

Stable v1 execute surface:

* `ctx_id`, `message`, `data`
* `data.decision`, `data.reason_codes`, `data.reasons`
* `data.policy_selection_reason_code`, `data.policy`, `data.trace_hash`
* `data.idempotency_key`

## Contract Invariants (v1)

* Required response fields: `ctx_id`, `message`, `data`, `data.decision`, `data.reason_codes`, `data.reasons`, `data.policy_selection_reason_code`, `data.policy`, `data.trace_hash`, `data.idempotency_key`.
* `data.decision` enum values are only `approved` or `denied`.
* `message` is human-readable (best-effort). Integrations should branch on `data.*` fields, not message text.
* `data.reason_codes` and `data.reasons` may be empty arrays when `data.decision` is `approved`.
* When `data.decision` is `denied`, at least one `data.reason_codes` entry is present.
* `data.trace_hash` is stable across v1.x for the same canonicalized input and policy context.
* Canonicalization rule: Kernite deterministically canonicalizes all hash-participating arrays (for example sorted `reason_codes` and canonical policy-match entries used for hashing). Order-only differences in `selected_policies` and `rules` must not change `data.trace_hash`.

## Conformance Sources

* Execute vectors: `/conformance/execute-vectors`
* Reason code semantics: `/conformance/reason-codes`
