# API and Compatibility Stability

[繁體中文](STABILITY-zh.md)

This policy applies to the IMPE 1.x series.

## Public API

The public API consists of the documented canonical `impe*` package and class
entries and the commands, keys, ids, and registration interfaces documented in
the manuals and `docs/` references. IMPE 1.x should not remove these interfaces
or change their established meaning incompatibly without a deprecation path.

## Deprecated API

An interface is deprecated only when the documentation or runtime explicitly
marks it as such. The replacement and migration path must be documented, and
the old form should remain available for an appropriate compatibility period.
Removal normally waits for a major release unless a compelling technical reason
is recorded.

## Internal API

Undocumented implementation commands, data structures, and module internals
have no compatibility guarantee. A file living under `core/` or `modules/`
does not by itself make every command in that file public.

## Legacy `next*` Entries

`next*` is a supported compatibility boundary for existing documents, not the
canonical API and not automatically a deprecated API. These wrappers are:

- retained in the repository and in full/core releases;
- exercised by compatibility regressions;
- excluded from the CTAN `impe-framework` distribution; and
- excluded from new manuals, templates, examples, and ordinary maintained
  sources. Dedicated compatibility regression fixtures, such as
  `tests/legacy-entry.tex`, are the explicit test exception.

New documents use the canonical `impe*` entries. Any future change to the
support status of `next*` must be stated explicitly rather than inferred from
its legacy name.
