From 9de304432f8633b5a3d24102748f368555845ab1 Mon Sep 17 00:00:00 2001 From: Sivert <316918682+grytchat@users.noreply.github.com> Date: Wed, 28 Oct 2026 12:59:46 +0100 Subject: [PATCH] fix: thread:history carries answer_message_id too #348 added the answer to every summary built by toThreadSummary, but thread:fetch builds its thread object by hand, so opening a solved topic didn't show which reply answered it. Found checking the phone against it. Part of GRYT-1963. Co-Authored-By: Claude Opus 5.5 --- src/socket/handlers/chat.ts | 1 + src/socket/handlers/threadStatus.test.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/socket/handlers/chat.ts b/src/socket/handlers/chat.ts index c012e7a..de43cbb 100644 --- a/src/socket/handlers/chat.ts +++ b/src/socket/handlers/chat.ts @@ -1281,6 +1281,7 @@ export function registerChatHandlers(ctx: HandlerContext): EventHandlerMap { status: thread.status, reply_count: thread.reply_count, locked: thread.locked, + answer_message_id: thread.answer_message_id, created_at: thread.created_at.toISOString(), last_message_at: thread.last_message_at.toISOString(), }, diff --git a/src/socket/handlers/threadStatus.test.ts b/src/socket/handlers/threadStatus.test.ts index 62600ce..9ef3efb 100644 --- a/src/socket/handlers/threadStatus.test.ts +++ b/src/socket/handlers/threadStatus.test.ts @@ -117,6 +117,10 @@ describe("marking which reply answered it", () => { assert.equal(upd.answer_message_id, reply.message_id); assert.equal((await getThread(threadId))?.answer_message_id, reply.message_id); + await alice.handlers["thread:fetch"]({ conversationId: FORUM, threadId }); + const fetched = alice.received("thread:history").at(-1) as { thread: { answer_message_id: string | null } }; + assert.equal(fetched.thread.answer_message_id, reply.message_id, "opening the topic has to show the answer too"); + await alice.handlers["thread:status:set"]({ conversationId: FORUM, threadId, status: "open", accessToken: alice.accessToken }); assert.equal((await getThread(threadId))?.answer_message_id, null); });