# Чистый helper clamp-number

## Цель {#D0}

Добавить маленькую чистую функцию-ограничитель числа в заданный диапазон, чтобы
переиспользовать её вместо повторяющихся `Math.min(Math.max(...))` в коде.

## Контракт {#D1}

`clamp(n, lo, hi)` возвращает `n`, если `lo ≤ n ≤ hi`; `lo`, если `n < lo`; `hi`,
если `n > hi`. Чистая функция: без сайд-эффектов, без I/O, детерминирована.

## Крайние случаи {#D2}

- `lo > hi` — невалидный диапазон → бросить `TypeError`.
- `n` не число (`NaN` / строка / `undefined`) → бросить `TypeError`.
- `lo === hi` → всегда возвращается `lo`.

## Конвенция заголовка {#D3}

Файл начинается строкой-комментарием с путём модуля и однострочным назначением,
как в остальных модулях каталога `tools/`.

## Критерий готовности {#D4}

Функция покрыта примерами: внутри диапазона, ниже нижней границы, выше верхней,
ровно на обеих границах; оба невалидных входа (`lo > hi`, не-число) бросают
`TypeError`.

```verified-context-json
[{"id":"D1","kind":"EXTRACTED","ref":"tools/router-config.mjs","anchor":"export const REVIEWER_MODEL"}]
```
