1.0.9
Fixed (#369, ocr review — прогон инструмента)
- Адресация прогона
ocr review(Open Code Review) по диапазону v1.0.6→v1.0.8: (1) HIGH — клиентскийtool_batch_endпри битом JSON в существующей записи с тем жеmessage_idпроваливался вappendMessageи создавал вторую запись с тем же server id (сломан инвариант «один id — одна строка»); теперь warn + сохранение существующей записи; добавлен также guard на title-mismatch при том же id; (2) HIGH —turn_endпослеask_userуходил без токенов: ask_user-ветка actor’а не переносила_tokens_used/_tokens_maxв мету (как прочие терминальные ветки) — добавлено; (3)channelInteractiveзаменён на каноническийchannels.WSChannelName(дублирования имени канала больше нет); (4) сборка эхаmessage_persistedвынесена в единыйassistantPersistedEchoMessage(role-строка в одном месте, 4 сайта); (5) warn при успехе персистаtool_iterationбез строки и при провале публикации эха вOnAssistantPersisted(паритет #351 «события не исчезают молча»); (6)isServerMessage-фильтр в findIndex tool-батча (паритет с assistant-веткой); (7) уточнён комментарий о жизненном циклеpendingAskвturn_end. Отклонены с обоснованием: «форма ask_user зависает» (форма обязана жить до явного действия пользователя — паритет с поведением до B3), content-матч первой записи (порядок эхо = порядок строк),user_id: 0(предсуществующее, аватары эти строки не рендерят), утечкаRoleв чужие события (риск nil), сужение int на 32-бит (таргеты сборки 64-бит). Повторный прогонocr reviewпо правкам — 0 замечаний. Тесты: дубликат server id при битом content, title-mismatch.