From 524b2e2808844ef816f3c3272612aa9ce187e869 Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 11 Sep 2026 15:23:17 +0300 Subject: [PATCH] Name what actually kills the heavy runs: a per-run cgroup ceiling, not the machine, and say why narrowing the run to fit is the one forbidden cure --- CLAUDE.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 23a26f0c..ef0a65b0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -64,6 +64,19 @@ Go-бэкенд издательского художественного пер ## Гардрейлы (жёсткие) - **Греп по ЖИВОМУ дереву — с исключением отработанного архива:** `--exclude-dir=prompts --exclude-dir=reports` (либо `grep -rn … docs/ --exclude-dir=prompts --exclude-dir=reports`). Замер 02.09: греп `feed_cap` даёт 4 живых файла и 8 архивных, `bank-stop` — 12 и 14, то есть истории в выдаче больше, чем настоящего. ⚠ **`archive/architecture/` НЕ исключать** — там тела закрытых эр журнала решений, и канон велит грепать «живой файл → слайсы». +- ⛔ **ТЯЖЁЛЫЙ ПРОГОН УБИВАЕТ НЕ НЕХВАТКА ПАМЯТИ НА МАШИНЕ, А ПОТОЛОК ЕГО СОБСТВЕННОГО CGROUP** (замерено + 11.09 после ЧЕТЫРЁХ убийств подряд у одной сессии). `dmesg` показывает **26** убийств, и все с + `constraint=CONSTRAINT_MEMCG`, каждое в СВОЁМ транзиентном юните + `tm.slice/tm-runs.slice/tm-test-<тег>-.service`. Сами слайсы при этом `memory.max = max` — лимита + на них НЕТ. ⇒ **гасить чужие процессы бесполезно: машина в этот момент имела 5.7 ГБ доступных.** + ⚠ И потолок НЕ у всех одинаковый: прогон, запущенный одной сессией, попадал в capped-юнит, а тот же + прогон из другой шёл в `/init.scope` с `memory.max = max` и доходил до конца. ⇒ **прежде чем объяснять + падение нагрузкой, спроси `cat /proc/self/cgroup` и `memory.max` этого cgroup** — и если потолок есть, + перенеси прогон, а не режь его. + ⛔ **И чего делать НЕЛЬЗЯ, даже когда убило четыре раза подряд: сужать мутационный прогон через `-run`, + чтобы влезть в память.** Подмножество `-run` не есть пакет: базовый прогон перестаёт быть базовым, и + вердикт «поймана» становится утверждением о другом предмете. **Лучше не измерить, чем измерить не то** — + формулировка зоны, выбравшей честную сторону при максимальном соблазне. - ⛔ **ДВА СВОЙСТВА ЭТОЙ СРЕДЫ, каждое даёт ТИХИЙ ЛОЖНЫЙ НОЛЬ** (замерено 11.09, поймано двумя ролями независимо). **(а) `grep` здесь — не GNU grep, а shell-обёртка над ugrep с `--ignore-files`: она чтит `.gitignore` и НЕ ВИДИТ каталог `books/`,** то есть всё платное сырьё проекта. Замер: `grep -rl '^terms:' .` → **13**