# Условные рефлексы — синонимы стимулов (_5_2_synonyms_reflexes)

## Назначение

Модуль реализует **условные (синонимические) рефлексы**: после нескольких сочетаний «совокупный образ стимулов + безусловная реакция» в одном контексте тот же образ в том же контексте начинает запускать то же действие без безусловного раздражителя. Ключом служит FinalImageId (совокупность активных стимулов), а не отдельная кнопка.

## Условия формирования

- Условный рефлекс **не формируется** по стимулу, который сам запустил безусловную реакцию (предотвращение самоссылки).
- Совокупный образ для ключа строится по **набору активных стимулов**, кроме того, что непосредственно запустил рефлекс.
- Учитывается **контекст**: строка из базового состояния (BadNormWell) и активных базовых контекстов (EmotionId). Рефлекс срабатывает только в подходящем контексте.
- После **REFLEX_READY_THRESHOLD** (3) подтверждённых сочетаний рефлекс считается зрелым (isReady) и может срабатывать по одному условному стимулу.

## Структура рефлекса

- `id`, `context` (строка контекста), `finalImageId`, `actionId`, `birthTime`, `lastActivation`, `tryCount`, `isReady`. Сохраняются в IndexedDB и в файл при «Сохранить».

## Файлы

- **synonyms_reflexes.js** — массив SynonymReflexes, формирование и усиление (onGeneticActionFired), попытка запуска (tryRunSynonymReflexes), проверка блокировки ОР при запуске (через genetic_reflexes_engine), сохранение/загрузка, кнопка «Ух» (сброс всех условных рефлексов).

Запуск действия из условного рефлекса идёт через **runGeneticActionFromSynonymReflex** в genetic_reflexes_engine; при блокировке ОР рефлекс откладывается с флагом noConditionalReflex, чтобы не запускать повторное обучение по этому же стимулу.
