# ADR-079: ADR numbering = max(existing)+1, not count+1

## Статус
Accepted (2026-07-31, PR#182)

## Контекст
`scaffold-handoff.sh` вычислял номер следующего ADR как `ls docs/decisions | grep -E '^[0-9]{3}-' | wc -l + 1`. Это привело к коллизии: PR#174 и PR#175 оба создали `ADR-073` (два файла `073-pr-174-*.md` и `073-pr-175-*.md`), так как оба запуска посчитали одинаковое количество файлов. Алгоритм `count+1` неустойчив к гонкам, ручному добавлению ADR и «дырам» в нумерации (удалённые файлы оставляют пропуски, счётчик отстаёт от max).

## Решение
Заменить `count+1` на `max(existing)+1`: `ls | grep -E '^[0-9]{3}-' | cut -c1-3 | sort -n | tail -n1` берёт максимальный существующий номер, +1 даёт следующий. Дополнительно:
- `10#${MAX_N:-0}` — base-10 forcing (номера вида `078` невалидны в bash octal arithmetic).
- `|| true` на grep pipeline — нейтрализует exit 1 при пустой директории (`set -euo pipefail`).
- Guard loop — если вычисленный `NN` уже занят (residual race: файл создан между max-read и write), инкремент до свободного слота.

## Альтернативы
- Atomic file lock (`flock`) — отвергнут: избыточно для git-репозитория, где commits серийные; guard loop покрывает residual window.
- Проверка только существования файла перед записью (без max+1) — отвергнута: не решает «дыры» в нумерации и не дает детерминированный следующий номер.
- Переименование существующих ADR-073 — вне scope (ломает ссылки в memory/handoff/AGENTS.md, issue #176 явно исключает).