# Автоматизмы (_11_Automatizms)

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

Модуль реализует **автоматизмы** — правила, привязанные к узлу ветки дерева восприятия (BranchID) и к образу действия (ОД). Активация или блокировка автоматизма выполняется в процессе осознания (в `stimuls_consciousness(actual_stimul_ID)`) при активации соответствующего узла дерева.

## Структура автоматизма

| Поле | Тип | Описание |
|------|-----|----------|
| **id** | number | Уникальный ID, автовозрастает при создании. |
| **branchId** | number | ID узла ветки дерева восприятия. |
| **usefulness** | number | Польза/вред: &lt; 0 вред, &gt; 0 польза; уточняется в период ожидания после активности. |
| **actionsImageId** | number | ID образа действия (из _10_actions_image). Может содержать массив действий и/или строку последовательности ОД. |
| **count** | number | Надёжность — счётчик запусков для усреднения usefulness. |
| **isDefault** | boolean | Если true — штатный автоматизм для данной ветки (главный среди привязанных к ветке). |

К одному узлу дерева может быть привязано неограниченное число автоматизмов, но только один из них имеет **isDefault=true**.

**Независимость от первичного рефлекса:** автоматизм, вызываемый в функции осознания, может быть произвольно модифицирован (изменён его образ действия, назначен другой штатным и т.д.). Связи между первичным рефлексом и вторичным автоматизмом нет: автоматизм — самостоятельное правило по ветке дерева; его действие может не совпадать с тем, что изначально зафиксировал рефлекс.

## API

- **Automatizms_getAutomatizmsByBranchId(branchId)** — все автоматизмы ветки (быстрый поиск по индексу).
- **Automatizms_getDefaultAutomatizmForBranch(branchId)** — штатный автоматизм для ветки (isDefault=true).
- **Automatizms_createAutomatizm(branchId, actionsImageId)** — создать автоматизм. Не создаёт дубль по (branchId, actionsImageId); при дубликате возвращает id существующего. Требуется существующий actionsImageId в ActionImages. Возвращает 0 при недопустимых аргументах.
- **Automatizms_setDefaultAutomatizm(automatizmId)** — назначить автоматизм штатным; у остальных автоматизмов этой ветки isDefault сбрасывается в false.
- **Automatizms_addUsefulnessSample(automatizmId, effect)** — обновить usefulness и count (усреднение). Значение **effect** приходит из ЭП (см. «Преемственность оценки эффекта» ниже).
- **Automatizms_serializeState** / **Automatizms_applyState** — сериализация и восстановление для файла и IndexedDB.

## Персистенция

- **IndexedDB:** сохранение по пульсу только при изменении данных (флаг automatismsDirty + подпись lastAutomatizmsSavedSig). База `BEAST_Automatizms_DB`, хранилище `automatizms_state`.
- **Файл:** ключ `AutomatizmsState` в реестре `BEAST.persistentModules` (saving_ui.js).

## Преемственность оценки эффекта (ЭП → автоматизм)

Оценка эффекта для автоматизма **совпадает с оценкой в ЭП**: одно и то же значение эффекта вычисляется в ЭП при закрытии кадра (`effect = diffAfter − diffBefore`) и передаётся в штатный автоматизм ветки через **addUsefulnessSample(automatizmId, effect)**. Не дублируется, не расходится — единый источник оценки; Usefulness автоматизма усредняется по тем же величинам, что и кадры эпизодов. Подробнее см. **about_episodic_memory.md** (раздел «Преемственность оценки эффекта»).

## Связь с другими модулями

- **Дерево восприятия** (_7_perception_tree) — branchId есть id узла дерева.
- **Образы действия** (_10_actions_image) — actionsImageId ссылается на ОД; при создании автоматизма проверяется существование ОД.
- **Процесс осознания** (_9_Conscience) — в `stimuls_consciousness` по контексту ОР (branchId, novelty, significance и др.) проверяется наличие штатного автоматизма для узла; при наличии — запускается образ действия (runActionImage). **При запуске автоматизма** вызывается removeDelayedReflexesForBranch(branchId): из очереди отложенных рефлексов удаляются все записи по этой ветке (без сравнения действий). Если автоматизм отклонён — удаление не вызывается, отложенный рефлекс выполнится по истечении задержки. Место для будущей оценки приемлемости запуска по новизне условий.
- **Эпизодическая память** (_10_Episodic_memory) — при срабатывании рефлекса создаётся автоматизм (createAutomatizm, setDefault при первом); при закрытии кадра тот же эффект из ЭП передаётся в штатный автоматизм (addUsefulnessSample). Преемственность оценки эффекта — см. выше.

## Файлы

- **automatizms.js** — массив Automatizms, индекс byBranchId, создание/штатность/усреднение usefulness, IndexedDB и экспорт API.
