Skip to content

fix: preserve original timestamps on workflow revisions#6186

Open
DragonBot00 wants to merge 1 commit intokeephq:mainfrom
DragonBot00:fix/workflow-revision-timestamps
Open

fix: preserve original timestamps on workflow revisions#6186
DragonBot00 wants to merge 1 commit intokeephq:mainfrom
DragonBot00:fix/workflow-revision-timestamps

Conversation

@DragonBot00
Copy link
Copy Markdown

Summary

Fixes #5328

Problem

In the workflow Versions panel, every revision was displaying the same timestamp — the time of the most-recent save. Older revisions had their updated_at timestamp silently overwritten each time a new revision was created.

Root Cause

WorkflowVersion.updated_at was defined with onupdate=func.now() in the SQLAlchemy model:

updated_at: datetime = Field(
    sa_column=Column(
        DateTime(timezone=True),
        name="updated_at",
        onupdate=func.now(),   # <-- the culprit
        server_default=func.now(),
        nullable=False,
    )
)

When saving a new revision, the code first runs:

session.exec(
    update(WorkflowVersion)
    .where(col(WorkflowVersion.workflow_id) == existing_workflow.id)
    .values(is_current=False)
)

This UPDATE statement touched every existing revision row, causing the database to fire the ON UPDATE CURRENT_TIMESTAMP trigger on each one. As a result, all prior revisions got their updated_at overwritten to the current time — making every revision appear to have been created at the same moment.

Fix

  1. Model (keep/api/models/db/workflow.py): Removed onupdate=func.now() from WorkflowVersion.updated_at. The column still gets a server_default so it is populated on INSERT, but subsequent UPDATEs no longer mutate the timestamp.

  2. Migration (2025-07-01-00-00_fix_workflowversion_updated_at.py): Alters the column definition in-place (using batch_alter_table for SQLite compatibility) to drop the ON UPDATE behaviour while keeping existing data intact.

Testing

  • Create a workflow and save it (revision 1).
  • Wait a few seconds, then save again (revision 2).
  • Open the Versions panel — revision 1 should still show its original timestamp, not the time of the revision-2 save.

Checklist

  • Bug fix (non-breaking change)
  • Includes a database migration
  • Existing revision timestamps are preserved (migration does not touch data, only column metadata)

@DragonBot00
Copy link
Copy Markdown
Author

I have read the CLA Document and I hereby sign the CLA

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 1, 2026

@DragonBot00 is attempting to deploy a commit to the KeepHQ Team on Vercel.

A member of the Team first needs to authorize it.

@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. Bug Something isn't working labels Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug Something isn't working size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[🐛 Bug]: Workflow revision history shows newest timestamp for all revisions

1 participant