---
pr: 182
title: fix(scripts): ADR numbering collision in scaffold-handoff.sh
---

## Что сделано
`scaffold-handoff.sh` вычислял next ADR как `ls | wc -l + 1`. Заменён на `max(existing) + 1` с guard loop для residual race и base-10 forcing (`10#`) для leading-zero номеров. Добавлены комментарии, объясняющие почему max+1, а не count+1.

## Почему
`count+1` не гарантирует уникальность: при параллельных pipeline или ручном добавлении ADR счётчик отстаёт → коллизия (два файла `073-pr-174-*.md` и `073-pr-175-*.md`). `max+1` race-resistant: каждый запуск читает текущий max. Guard loop покрывает residual race (файл создан между max-read и write).

## Pending
— (после merge: memory-syncer обновит ADR Index — добавит ADR-079, оставит ADR-073 collision note как есть)

## Watch out
- Существующие ADR-073 (оба) НЕ переименовывались — вне scope, ссылки в memory/handoff уже расставлены.
- `10#` обязателен: номера `078`/`079` с leading zero невалидны в bash octal arithmetic.
- `|| true` на grep обязателен: empty dir → grep exit 1 → `set -euo pipefail` убивает скрипт.
- Тестового слоя для scaffold нет — критерий «если есть test-слой» не применим.