Deprecation policy

Read side by side

A stable removal or incompatible change requires a documented transition. Ordinary removals follow a deprecation interval and normally take effect in the next major release. A correctness or security defect that cannot safely remain requires an explicit compatibility decision and explanation.

A deprecated callable remains usable during the announced period, preserves its behavior or delegates transparently, and emits KomorebiDeprecationWarning. Its record identifies the first warning version, a replacement when available, the planned removal release and the reason.

from komorebi_math import deprecated


def replacement(value: int) -> int:
    return value + 1


@deprecated(since="1.1", replacement="replacement", remove_in="2.0")
def legacy(value: int) -> int:
    return replacement(value)

The decorator exposes __komorebi_deprecation__ for tooling. Spelling aliases may remain without warnings when they have unambiguous identical behavior. Preferred device names use CuPy; existing Cupy implementation spellings remain compatibility aliases.

Persistence versions have a separate obligation: supported older records must remain decodable or have an explicit migration. An API alias does not permit silent reinterpretation of stored data.

Before a removal, review the affected symbols, replacement, warning/removal versions, persistence and CLI surfaces, migration tests and API manifest differences. No existing stable symbol is scheduled for removal in 1.x.