[PR #32136] Fix/prevent updated at refresh #33569

Closed
opened 2026-02-21 20:53:31 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/32136

State: closed
Merged: No


close https://github.com/langgenius/dify/issues/32125

Important

  1. Make sure you have read our https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md
  2. Ensure there is an associated issue and you have been assigned to it
  3. Use the correct syntax to link this PR: Fixes #<issue number>.

Summary

What does this PR do?

This PR fixes an issue where viewing a conversation log (in both Chat and Completion apps) would incorrectly update its updated_at timestamp. This caused:

  1. Old conversations to unexpectedly jump to the top of the list in Chat Apps.
  2. Misleading "Updated" timestamps in Completion App logs.

Why are we doing this?

"Reading a book shouldn't change its publication date."
Viewing a log is a read-only action from the user's perspective. The updated_at timestamp should faithfully reflect the last time the content (messages, inputs) or status (pinned, starred) actually changed, not when it was merely observed by an admin.

How was it fixed?

  • Refactor: Moved the "mark as read" logic from the controller to a dedicated ConversationService.mark_as_read method.
  • Mechanism: Used an explicit column override in the SQLAlchemy update statement:
    values(
        read_at=naive_utc_now(),
        # Explicitly set updated_at to its current value to bypass
        # the ORM's onupdate=func.current_timestamp() trigger.
        updated_at=Conversation.updated_at
    )
    

Screenshots

Before After
... ...

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran make lint and make type-check (backend) and cd web && npx lint-staged (frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/32136 **State:** closed **Merged:** No --- close https://github.com/langgenius/dify/issues/32125 > [!IMPORTANT] > > 1. Make sure you have read our `https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md` > 1. Ensure there is an associated issue and you have been assigned to it > 1. Use the correct syntax to link this PR: `Fixes #<issue number>`. ## Summary ### What does this PR do? This PR fixes an issue where viewing a conversation log (in both Chat and Completion apps) would incorrectly update its `updated_at` timestamp. This caused: 1. Old conversations to unexpectedly jump to the top of the list in Chat Apps. 2. Misleading "Updated" timestamps in Completion App logs. ### Why are we doing this? **"Reading a book shouldn't change its publication date."** Viewing a log is a read-only action from the user's perspective. The `updated_at` timestamp should faithfully reflect the last time the **content** (messages, inputs) or **status** (pinned, starred) actually changed, not when it was merely observed by an admin. ### How was it fixed? - **Refactor**: Moved the "mark as read" logic from the controller to a dedicated `ConversationService.mark_as_read` method. - **Mechanism**: Used an **explicit column override** in the SQLAlchemy update statement: ```python values( read_at=naive_utc_now(), # Explicitly set updated_at to its current value to bypass # the ORM's onupdate=func.current_timestamp() trigger. updated_at=Conversation.updated_at ) ## Screenshots | Before | After | |--------|-------| | ... | ... | ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `make lint` and `make type-check` (backend) and `cd web && npx lint-staged` (frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:53:31 -05:00
yindo closed this issue 2026-02-21 20:53:31 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#33569