--- 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-слой» не применим.