# Осознанные автоматизмы и процесс осознания — стратегия реализации

Документ для подготовки следующего этапа: система осознанных автоматизмов и процесс осознания. Старая реализация была на языке ГО (OLD_CODE); в новой JS-реализации уже есть качественно более сильные адаптивные системы — важно не тащить в новую реализацию устаревшие паттерны, но сохранить понятийный каркас.

## 0. Назначение проекта и границы

Назначение: проект — не «работающее существо и его воспитание», а наиболее адекватный способ реализации теории индивидуальной адаптивности. Как теории формализуются математически, так и теория адаптивности лучше всего описывается программной реализацией — это аналог математики в физике, но более эффективный для описания схемотехники систем адаптивности.

Вне рамок новой реализации:

- Ввод слов и фраз оператором и вербальные деревья (распознавание фраз, слова, символы, тон и настроение сообщения). Их добавление сильно усложняет проект и его понимание; для формализации теории достаточно слоёв: гомеостаз, контексты, стимулы (кнопки), рефлексы, дерево условий восприятия (по активности стимулов), эпизодическая и семантическая память, осознание и автоматизмы.
- Дерево восприятия сохраняет 6 уровней структуры (BaseID, EmotionID, ActivityID, ToneMoodID, SimbolID, PhraseID) для совместимости с теорией и сопоставлением с OLD_CODE, но уровни 4–6 не заполняются вербальным вводом — остаются 0 или могут использоваться позже для иных невербальных измерений.

## 1. Где мы сейчас (JS)

Уже есть зацепки под осознание и автоматизмы:

Компонент | Назначение
--- | ---
ОР | Выбор наиболее актуального стимула, блокировка рефлекса на 2 пульса, вызов гиппокампа, stimuls_consciousness(actual_stimul_ID), сохранение ЭП.
Гиппокамп | `active_stimulsArr_ID`, `actual_stimul_ID` — удержание стимула, вызвавшего ОР.
_9_Conscience | stimuls_consciousness(actual_stimul_ID) — заглушка; вызывается из ОР при новом победителе и при ответном стимуле в период ожидания ЭП. Сюда естественно подвешивать «процесс осознания».
Дерево восприятия | 6 уровней, терминальный узел = условия; привязка рефлексов/автоматизмов к ветке уже заложена в описании.
ЭП | Кадр: условия (perceptionNodeId), стимул, действие, эффект, ответный стимул — готовый контекст для осмысления.
ОД | Образы действия; связь стимул → действие уже есть.
УР | Условные рефлексы по контексту (BadNormWell + эмоция) и FinalImageId.

То есть: канал в «кору» уже есть (вызов `stimuls_consciousness`), контекст можно собирать из дерева, ЭП и ОД. Не хватает: явной модели «осознанный автоматизм» и цикла «процесс осознания» (что именно обрабатывается в этом канале).

## 2. Рекомендация: опора на новый стек, старый код — только концепт

- Не переносить старый код из OLD_CODE в JS целиком. Язык, структуры данных и потоки там другие; уже реализованные вещи (пульс, ОР, ЭП по пульсам, дерево, СЗ, УР с глобальными ID и т.д.) в старой версии могут отсутствовать или работать иначе. Перенос «как было» рискован и создаст трение.
- Использовать OLD_CODE как справочник понятий и сценариев: что там называлось «осознанный автоматизм», что входило в «процесс осознания», в каком порядке что вызывалось. Термины и последовательность шагов можно выписать и спроецировать на текущую архитектуру.
- Собирать новую логику поверх уже сделанного: дерево восприятия (терминальный узел = условия), ЭП (кадр с условиями, стимулом, действием, эффектом, ответом), ОД, гиппокамп, ОР. Осознанные автоматизмы тогда — следующий слой над условными рефлексами и деревом (например, привязка к узлу дерева + учёт осознания). Процесс осознания — то, что выполняется внутри или вокруг `stimuls_consciousness` (что именно «проходит» по каналу внимания и как используется).

Если папка OLD_CODE доступна (рядом с проектом или отдельный репозиторий), полезно:

- выписать оттуда ключевые сущности (структуры автоматизма, шаги осознания);
- сопоставить их с текущими: perceptionNodeId, stimulusImageId, actionImageId, Episodes, FinalImage, дерево;
- зафиксировать расхождения и принять решения уже в рамках JS-архитектуры.

## 3. Возможная форма «осознанного автоматизма» в новом стеке

Без опоры на старый код можно задать черновой формат:

- Осознанный автоматизм — правило вида: при условиях C (ветка дерева восприятия, т.е. perceptionNodeId или путь) и образе стимула S (FinalImageId) выполнять образ действия A (ОД), с возможностью «прогона» через осознание (т.е. решение может быть подтверждено/скорректировано процессом осознания).
- Отличие от условного рефлекса: привязка к узлу дерева (условия развёрнуты по уровням), возможно участие эпизодического контекста (последние кадры ЭП) и явный шаг осознания перед/после действия.

Тогда:

- входы: текущий терминальный узел дерева, actual_stimul_ID (и при необходимости последние кадры ЭП);
- выходы: выбор/подтверждение действия (ОД), возможно обновление памяти (ЭП/СЗ) по результату осознания.

## 4. Возможная форма «процесса осознания»

- Процесс осознания — то, что происходит при вызове `stimuls_consciousness(actual_stimul_ID)` и, при необходимости, в ближайшие пульсы: что именно «осознаётся» и как это влияет на поведение и память.
- В текущем коде в `stimuls_consciousness` уже можно передавать не только `actual_stimul_ID`, но и пакет контекста: терминальный узел дерева, последний/текущий кадр ЭП (если есть), флаг «ответный стимул в период ожидания» и т.д. Тогда «процесс осознания» — это функция, которая принимает этот пакет и решает, что делать дальше (например, запуск осознанного автоматизма, обновление приоритетов, запись в память).

Следующий шаг реализации можно разбить на этапы, например:

1. Расширить вызов `stimuls_consciousness` контекстом (дерево, ЭП, ОР/ЭП-флаги).
2. Описать структуру данных «осознанный автоматизм» и место хранения (массив + персистенция, по аналогии с УР/ЭП).
3. Ввести цикл осознания: по контексту выбрать кандидатов-автоматизмов, при необходимости прогнать через «осознание» и выполнить выбранное действие (через существующие эффекторы/ОД).

## 5. Итог

- Старый код (OLD_CODE): использовать только как источник терминов и идей; не копировать реализацию.
- Новая реализация: строить осознанные автоматизмы и процесс осознания поверх текущего JS-стека (пульс, ОР, дерево, ЭП, ОД, СЗ, УР, гиппокамп, `stimuls_consciousness`).
- Следующий шаг: при наличии доступа к OLD_CODE — выписать оттуда понятия и потоки и сопоставить с этим документом; затем зафиксировать контракт `stimuls_consciousness` (входной контекст) и формат осознанного автоматизма и приступить к реализации по этапам выше.

## 6. Сопоставление с OLD_CODE (GO) — после загрузки старой реализации

Папка OLD_CODE содержит старую реализацию (GO + PULT). Ниже — выжимка понятий и потоков для переноса идей в JS, без копирования кода.

### 6.1 Дерево автоматизмов (GO)

- Файлы: `OLD_CODE/GO/brain/psychic/automatism_tree.go`, `automatizm_functions.go`, `automatism_tree_func.go`.
- Структура узла: 6 уровней — BaseID, EmotionID, ActivityID, ToneMoodID, SimbolID, PhraseID (формат записи совпадает с нашим деревом восприятия). В новой реализации уровни 4–6 (ToneMoodID, SimbolID, PhraseID) не используются — вербальный ввод и вербальные деревья в проект не входят (см. §0).
- Идея: К ветке дерева привязаны автоматизмы; при активации ветки выбирается «штатный» автоматизм (Usefulness, Belief). Отсутствие подходящей ветки/автоматизма вызывает ОР и осмысление. Автоматизм с успешностью == 1 блокирует рефлексы (уже «произвольность преодолена»).
- В JS: Дерево восприятия уже есть (`_7_perception_tree`), формат узла совместим; активная ветка определяется по уровням 1–3 (BaseID, EmotionID, ActivityID). Нет пока привязки «автоматизм к узлу» и выбора действия по узлу — это слой поверх дерева и УР.

### 6.2 Процесс осознания (GO)

- Файлы: `understanding.go`, `0_main_psychic.go`, `mental_automatizm_INFO_functions.go`, `dreaming.go`.
- Цепочка: По каждому стимулу — consciousnessElementary() (1–2 уровни осознания). Если остаётся проблема — consciousnessThinking(cID) в циклах мышления. Циклы типа cycleInfo, диспетчер dispetchConsciousnessThinking() по пульсу.
- consciousnessElementary():
  - Определяет «рвущийся» автоматизм по узлу дерева: `atmtzmActualTreeNodeID = getAutomatizmFromNodeID(detectedActiveLastNodID)`.
  - Игнорирующий автоматизм приравнивается к отсутствию реакции.
  - Проверки: опасность, соответствие теме/цели (isStimulToForce), прогноз эффекта, Правила (эпизодические). Решение: запустить штатный автоматизм, альтернативный, или заблокировать и передать в циклы мышления.
- consciousnessThinking(): циклы мышления (инфо-функции infoFunc*), доминанта проблемы, пассивное размышление/сновидения. Запуск ментальных и моторных автоматизмов из цикла.
- В JS: Аналог «элементарного» осознания — расширенный stimuls_consciousness(actual_stimul_ID): на вход — actual_stimul_ID + текущий терминальный узел дерева + последний кадр ЭП (и флаг «ответный стимул»). Внутри — выбор: есть ли автоматизм для узла; если да — подтвердить/запустить; если нет — передать в «цикл мышления» (который в JS пока можно заменить простой очередью задач или одним шагом эвристик по ЭП/Правилам).

### 6.3 Автоматизм в GO

- Структура: привязка к узлу дерева (TreeNodeID), образ действия (ActionsImageID), Usefulness, Belief (штатный/предположительный/заблокированный). Есть моторные и ментальные автоматизмы.
- В JS: Образ действия уже есть (ОД, action_image). «Осознанный автоматизм» в JS можно задать как: perceptionNodeId + (опционально stimulusImageId) → actionImageId, с полями вроде usefulness/belief и приоритетом относительно УР (автоматизм блокирует рефлекс при успешности).

### 6.4 Что брать из OLD_CODE только как идеи

- Последовательность: пульс → активация дерева → выбор автоматизма по узлу → consciousnessElementary → при необходимости consciousnessThinking.
- Понятия: штатный/игнорирующий/альтернативный автоматизм, период ожидания ответа после действия, «Правила» (эпизодические кадры) для прогноза эффекта и выбора альтернативы.
- Не переносить буквально: EvolushnStage, сон/сновидения, полный набор инфо-функций и циклов — реализовать по мере необходимости, опираясь на ЭП, дерево и ОД в JS.

### 6.5 Рекомендуемый порядок в JS

1. Расширить stimuls_consciousness: передавать контекст (terminalNodeId, lastEpisodeFrame, isResponseStimulus).
2. Ввести хранилище осознанных автоматизмов: привязка к perceptionNodeId (и опционально к stimulusImageId), actionImageId, флаги usefulness/belief.
3. В stimuls_consciousness по контексту: искать автоматизм по узлу; если найден и «штатный» — запустить действие (через ОД/эффекторы); если нет — оставить заглушку под будущий «цикл мышления» или простой выбор по Правилам (ЭП).
4. Связь с рефлексами: при наличии успешного автоматизма для узла не запускать условный/генетический рефлекс (по аналогии с GO: блокировка рефлекса автоматизмом).
5. При необходимости добавить по пульсу вызов «диспетчера мышления» (упрощённый аналог dispetchConsciousnessThinking), обрабатывающего очередь нерешённых ситуаций.

Детали старых структур (Automatizm, cycleInfo, infoFunc*) при необходимости можно уточнять по файлам в `OLD_CODE/GO/brain/psychic/`.