Write the owner's ruling that the test ban is about motive, and teach the hook to name untracked files the pathspec commit form would drop

This commit is contained in:
heaven 2026-08-31 22:38:55 +03:00
parent 56a1cdc1ab
commit 94381bb007
2 changed files with 26 additions and 1 deletions

View file

@ -69,7 +69,7 @@ Go-бэкенд издательского художественного пер
- Дисциплина: не верь заголовкам — грунтуй выводы `file:line`/цитатой; спорное верифицируй адверсариально (author≠reviewer); эмпирика на текстах, знакомых моделям по претрейну (классика, известные переводы), — предварительная: вес имеет только замер на целевом жанре.
- **Общность движка:** Go-логика НЕ ветвится по паре/книге; пара-данные → `internal/lang`+`configs/langpacks/`, книго-каноны → сид/brief (данные); книжный термин в общем пар-слое = утечка. Тест-данные пары легитимны. Норматив (только больные места): `docs/architecture/12-go-style-notes.md`. Ревью-вопрос по умолчанию: «заработает ли на паре, которой в репо ещё НЕТ, без правки Go?»
- **При компакции/сжатии контекста ВСЕГДА сохранять:** список изменённых файлов · незакрытые находки ревью и их диспозиции · обязательства и открытые вопросы сессии · команды тестов (D39.121).
- **Тесты и гейты не подгонять под зелень:** править или удалять тест/голден/гейт, чтобы он прошёл, — НЕДОПУСТИМО; несогласие с тестом — вопрос оркестратору пингом, не правка (D39.121).
- **Тесты и гейты не подгонять под зелень:** править или удалять тест/голден/гейт, чтобы он прошёл, — НЕДОПУСТИМО; несогласие с тестом — вопрос оркестратору пингом, не правка (D39.121).**Запрет — про МОТИВ, и различие несущее (решение владельца 31.08):** правка *чтобы прошло* — запрещена; правка, вызванная ЗАКАЗАННОЙ сменой поведения, — обычное обслуживание, и **держать протухший тест НЕ НУЖНО: техдолг правим, а не консервируем**. Цена смешения уже уплачена — сессия сознательно оставила внутри теста ратифицированно-дефектный механизм, потому что чинить его ей было нельзя. Условие одно: такая правка ОБЪЯВЛЯЕТСЯ в отчёте — что изменилось в поведении, какой тест это описывал и куда уехала гарантия.
- **Мандат самопроверки в промтах сессий (обязателен, решение владельца):** промты полигон-сессий — и вообще любых пишущих код / запросы к моделям — ДОЛЖНЫ явно требовать ревью ИСПОЛНЕНИЕМ: своего кода + сформированных запросов к моделям + полученных результатов. Сессии регулярно ошибаются и багуют, и это искажает результат; **самоотчёт «проверено» без исполнения регулярно оказывается ложным и стоит денег**. Бэкенд-промты — явный бэкенд-ревью после кода (обычно отрабатывает по опыту, но требовать явно). Пост-хок адверсариальная верификация оркестратора при лендинге — второй рубеж, НЕ замена самопроверки.
⚠ **Исполнения мало: промт заказывает адверсариальный проход сессии по СВОЕЙ готовой работе; глубину и веер сессия выбирает под предмет, промт даёт направление — что в этом паке уязвимо.**
**Fable 5** — обычно хватает одного-двух агентов, но это РЕКОМЕНДАЦИЯ, не потолок: веер под предмет выбирает сессия. Модель задавай агенту ЯВНО и знай, сколько их у тебя работает.

View file

@ -96,6 +96,31 @@ if command -v python3 >/dev/null 2>&1 && [ -f docs/scripts/counts.py ]; then
fi
fi
# Untracked-под-коммитом: pathspec-форма коммита МОЛЧА роняет неотслеживаемые файлы.
# `git commit -- <пути>` обходит индекс и берёт рабочее дерево только для ОТСЛЕЖИВАЕМЫХ путей,
# поэтому новый файл, даже застейдженный, в коммит не попадает. Ровно так 31.08 уехал коммит, чей
# `migrations.sha256` уже ссылался на три миграции, оставшиеся снаружи; на свежем клоне схема
# оказалась бы короче на три шага, а симптом — «почему схема не та» у следующего человека.
# ⚠ Шум низок ПО ПОСТРОЕНИЮ: gitignored файлы (books/, .env, песочницы) в `--porcelain` не видны,
# поэтому сюда попадает только по-настоящему новое и неигнорируемое — то есть ровно тот случай,
# ради которого предупреждение и стоит.
untracked=$(git status --porcelain --untracked-files=normal | sed -n 's/^?? //p')
if [ -n "$untracked" ]; then
dirs=$(printf '%s\n' "$staged" | sed 's#/[^/]*$##' | sort -u)
hits=''
for d in $dirs; do
h=$(printf '%s\n' "$untracked" | grep -E "^${d}/[^/]*$" || true)
[ -n "$h" ] && hits="${hits}${h}
"
done
if [ -n "$hits" ]; then
echo "pre-commit ⚠ неотслеживаемые файлы в каталогах ЭТОГО коммита — pathspec-форма их РОНЯЕТ:" >&2
printf '%s' "$hits" | sed 's/^/ ?? /' >&2
echo ' Нужны в коммите? git add -- <путь>, затем проверь состав: git show --name-only' >&2
warn=1
fi
fi
if [ "$warn" -eq 1 ]; then
echo "pre-commit: это ПРЕДУПРЕЖДЕНИЕ — коммит не остановлен (обход: --no-verify)." >&2
echo " Считаешь, что хук неправ или мешает? Напиши ВЛАДЕЛЬЦУ — не обходи молча и не подпирай хаком." >&2