Один раз вычисляется effect при closeLastFrame; то же число попадает и в кадр ЭП, и в обновление Usefulness автоматизма — без второго расчёта и расхождений.
effect = clamp(Δdiff)
addUsefulnessSample(id, effect)
Если на кадре задан feedbackAutomatizmId (ожидание после автоматизма), образец уходит в него; иначе — в Automatizms_getDefaultAutomatizmForBranch(perceptionNodeId).
EpisodicMemory_setLastFrameActionFromActionId регистрирует ОД в кадре и вызывает Automatizms_createAutomatizm(branchId, actionsImageId). Запись уникальна по паре (ветка, ОД). Первый автоматизм на ветке назначается штатным (setDefaultAutomatizm).
startAction → в кадр записывается реакция (ОД) → создаётся автоматизм с нулевым usefulness и count = 0 до первого закрытия.effect, что в ЭП, усредняется в usefulness — это и есть «первая» численная оценка полезности для связки ветка + действие.