self-learning — чтобы опыт не умирал вместе с контекстом
Веса заморожены. Всё, что система «помнит», — это текст, который снова попадёт в контекст, либо код, который исполнится помимо контекста. Отсюда закон, из которого следует остальное:
Урок выучен не тогда, когда он записан, а тогда, когда у него есть машинный триггер, предъявляющий его в момент риска.
Проверено фактом на своей же истории: правило §33 лежало в глобальном CLAUDE.md — рецидив
через три дня (GEANT4:W-022); мера высшей ступени по Цензор:W-026 была мутационно
проверена — рецидив через сутки в соседнем скрипте (Цензор:W-030). Запись не защищает.
Защищает привод.
Слои памяти — куда класть урок
| Слой | Носитель | Когда всплывает | Цена |
|---|---|---|---|
| L0 | хук / гейт / скрипт-проверка | принудительно, всегда | ~0 токенов |
| L1 | CLAUDE.md, frontmatter скилла | каждая сессия | самый дорогой актив (×все сессии ×все контуры) |
| L2 | тело SKILL.md, references | если сработал триггер | платится при чтении |
| L3 | SESSION-STATE, TODO | старт сессии | дёшево |
| L4 | журналы W/P, DECISIONS | только явным поиском | ~0, но и защиты ~0 |
Обучение = движение уроков ВВЕРХ; §28-бюджет давит ВНИЗ. Равновесие — заменой: правило, поглощённое хуком, ужимается до указателя. Порог L1: урок нужен более чем в ~30% сессий, иначе L2 или L0.
Двухосевая лестница мер (главное отличие от incident-log)
Лестница §32 знает только СИЛУ меры. Этого мало — доказано Цензор:W-026→W-030:
| Узкая область (один скрипт/файл) | Область класса (все проявления) | |
|---|---|---|
| Слабая сила (запись/правило) | заметка в журнале | правило класса в доктрине |
| Сильная сила (хук/устранение) | патч одного скрипта ← здесь провалилось | гейт класса по сигнатуре |
При рецидиве первый вопрос — не «поднять ступень?», а «провалилась СИЛА или ОХВАТ?» Если мера была высшей, но узкой — поднимать некуда, нужно расширять охват.
Петля — шесть шагов, у каждого свой привод
| Шаг | Что | Привод (не дисциплина) |
|---|---|---|
| CAPTURE | секция LESSONS: (0–3 пункта, «ожидал X → оказалось Y → обход Z») в отчёте субагента |
хук lessons_gate.py блокирует Agent-вызов без неё (порог 600 симв.) |
| BUFFER | дамп LESSONS в <контур>\audit\lessons-inbox.md первым действием при приёме отчёта |
файл переживает сжатие контекста |
| TRIAGE | 4 корзины (ниже) | хук lessons_inbox_counter.py считает - [ ] и напоминает на каждом промпте |
| DISTILL | классовый урок → класс C-NNN в ~/.claude/references/error-classes.md |
новый инцидент обязан сослаться на C-NNN либо завести класс |
| DEPLOY | урок → в слой всплытия (обычно L0: сигнатура в реестр диспетчера) | хук-диспетчер инъецирует вопросом, не императивом |
| SPREAD | доктринальный урок → глобальный references/ + промпты владельцам зон (§12) |
harvest-скрипт с курсором + крон |
Четыре корзины триажа
мусор (норма, большинство — выбрасывать без сожаления) / локальный (в проект) /
классовый (в каталог C-NNN + журнал) / доктринальный (в глобальную доктрину +
разнос по контурам).
Жёсткое правило маршрутизации: факт о платформе, ОС или общем инструменте (Windows-кодировки,
Bash-транспорт, Ollama, git, хуки) не имеет права на корзину «локальный». Именно так умер
урок про Job Object — лежал в приватном DECISIONS.md одного контура, пока не был найден случайно.
Каталог классов C-NNN
~/.claude/references/error-classes.md. Класс определяется по причине, не по симптому:
«потерял данные» — последствие; «предположил семантику флага по имени» — класс.
Обязательные поля: формулировка · проявления (составной ключ контур:W-NNN — номера
уникальны только внутри контура!) · trigger-signature · вопрос-инъекция (≤120 симв.) ·
текущая мера с пометкой узкая/классовая · статус.
Сигнатуру не выдумывать. Нет машинно-проверяемого условия — писать «класс слабо защищён, ожидаем рецидив». Это честная ранняя диагностика, а не поражение.
Форма инъекции — вопрос, не императив
«Ты читал код этого флага — или вывел его смысл из имени?» работает лучше, чем «читай код флагов». Вопрос требует ответа в текущем рассуждении; императив требует лишь согласия три часа назад. Потолки: ≤2 строк и ≤2 уроков на вызов; триггер, срабатывающий чаще чем на 20% вызовов, — сужать.
Правило второго случая (против инфляции правил)
Первый инцидент класса → журнал + сигнатура, и всё. Текстовое правило или отдельный хук — со второго случая, ЛИБО сразу, если цена необратима (метрология, финансы, push, delete). Инфляция правил — режим отказа: чем больше always-on, тем хуже всплывает каждое.
Проверка меры
- Хук/гейт — мутационно: воспроизвести условие инцидента и показать, что мера сработала; повторять при каждой правке хука. Зелёный прогон не значит ничего, пока не показано, что он умеет краснеть (#SA-3).
- Текстовое правило — вопрос «где именно оно всплывёт?» задаёт не автор (§31.A: свой контекст заражён сделанным), а стерильный проход. Нет ответа — правило мертворождённое, переразмещать.
- Ре-верификация L0 периодически: хук может быть мёртв с установки, и молчание
неотличимо от работы (
Цензор:W-015).
Метрика — одна, вычислимая скриптом
Доля классов с рецидивом ПОСЛЕ принятой меры (цель → 0 для мер уровня хук+); MTBR по классам; latency «инцидент → общий слой». Считает скрипт по каталогу и составным ключам — не самопометка агента (метрика, наказывающая за рецидив, дестимулирует его признание).
НЕ метрика: число записей и правил. Это графомания, а не обучение.
Границы
incident-log— нормативный дом лестницы мер и полей записи инцидента. Здесь на неё только ссылка; дублировать формулировки нельзя (два дома одного правила = дрейф).session-handoff— состояние для продолжения работы, не уроки.- §31 IRON MODE — как не допустить (стерильные проверки, лестница делегирования).
incident-log— что делать, когда допустил. Здесь — как сделать, чтобы урок не пропал и не потребовался второй раз.
Anti-patterns
- ❌ Институциализировать петлю текстовым правилом без привода — умрёт молча (эмпирика:
«сводный анализ раз в 10 записей» из
incident-log— 0 исполнений за 30 записей). - ❌ Отвечать на рецидив повторной записью в журнал — рецидив означает, что ступень уже провалена.
- ❌ Считать «мусор» плохим результатом триажа — 90% мусора это норма, ценность в хвосте.
- ❌ Развёрнутые LESSONS — длинная форма порождает отписки.
- ❌ Грузить журналы в контекст «на всякий случай» — оплата ретривала до потребности.
- ❌ Полносвязная рассылка инцидентов всем контурам — канал умирает от спама за месяц.
- ❌ Хук на каждый урок — инфляция переезжает из CLAUDE.md в settings.json; нужен ОДИН диспетчер с реестром.
История
Создан 2026-08-21 по запросу оператора («продумай очень хорошо стратегию самообучения,
сделай самоаудит»). Стратегия прошла двойной стерильный аудит §31.A: независимый дизайнер
и адверсариальный скептик, не видевшие работы друг друга. Скептик вынес по первой версии
3 КРИТИЧНО + 8 СЕРЬЁЗНО («нежизнеспособна»): петля целиком держалась на текстовых правилах,
провал которых сама же и доказывала; метрика была невычислима; два опорных факта диагностики
не прошли проверку источником (ошибочная ссылка D-031 вместо D-037; мера W-026 названа
журнальной, тогда как она была высшей ступени, но узкой). Все находки учтены в v2.
Полные документы: <your-shared-drive-root>\Цензор\prompts\self-learning\
(STRATEGY-v2.md, AUDIT-1-sterile-designer.md, AUDIT-2-adversarial-skeptic.md).