From 1b0034e1ba5714aefcee56925df9bcc081f430c3 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 27 Oct 2026 03:58:19 +0100 Subject: [PATCH] Handle saved-setting apply errors and document committed CLI interaction results --- tools/chatcli_commands.txt | 3 +++ tools/chatgui-android/headless/headless_control.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/tools/chatcli_commands.txt b/tools/chatcli_commands.txt index cd49a007..66d2e5ff 100644 --- a/tools/chatcli_commands.txt +++ b/tools/chatcli_commands.txt @@ -12,6 +12,9 @@ TCP JSON-RPC клиент для управления чатом uTun без GUI -------- JSON line: запрос {"id":N,"cmd":"...","params"} → ответ {"id":N,"ok":true,"data":...} При подписке (subscribe) сервер шлёт асинхронные события: {"event":"...",...} +Успешные poll/vote/react обычно возвращают снимок. Если изменение уже сохранено, +но чтение снимка отказало,data содержит ch,message_id,committed:true,snapshot_pending:true. +В этом случае повторяют только feedback :повтор poll/react меняет состояние ещё раз. Переменные окружения -------------------- diff --git a/tools/chatgui-android/headless/headless_control.c b/tools/chatgui-android/headless/headless_control.c index ea06679a..3e75fd12 100644 --- a/tools/chatgui-android/headless/headless_control.c +++ b/tools/chatgui-android/headless/headless_control.c @@ -343,6 +343,10 @@ static int handle_chat_setting(int fd, int id, const char* json) { int rc = chat_setting_set(inst, name, value); if (rc == -1) { send_response(fd, id, NULL, "unknown setting"); return 0; } if (rc == -2) { send_response(fd, id, NULL, "invalid value"); return 0; } + if (rc < 0) { + DEBUG_ERROR(DEBUG_CATEGORY_CONTROL, "headless setting saved but runtime apply failed name=%s rc=%d", name, rc); + send_response(fd, id, NULL, "setting saved but runtime apply failed; retry setting"); return 0; + } printf("control: chat_setting %s=%s\n", name, value); send_response(fd, id, "{\"set\":true}", NULL); return 0;