Scans all CRDT log rows for this user. Rows whose operation payload matches an earlier
row (same normalized JSON) are removed; the lowest data_version for each payload is kept. This cannot be undone. Removing tail rows can lower server
latest_version
after the next client sync.
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "302e86ac-ff52-48cb-aee5-5c9e55d3eeef", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T08:45:49Z", "position" => 0, "title" => "feature: export all not-done tasks to a simple, ordered list to make it easier to feed to an LLM", "type" => "element.create", "updated_at" => "2026-08-27T08:45:49Z"}
54
element.create
%{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"This already exists in an earlier form as Photo Gallery. That was intended to be a very efficient, prerendered site and didnt focus much on the creation side. This made it hard to use and so I lost interest. This updated version should achieve both prerendering for easy viewing as well as good UX for adding content. It also needs to improve upon the video delivery side because the old version was really laggy.\"}]}]}", "data" => "{}", "element_type" => "concept", "id" => "165e0e5e-e13b-4b06-bf4a-1ab248ded797", "idea_id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-08-27T08:44:36Z", "position" => 0, "type" => "element.create", "updated_at" => "2026-08-27T08:44:36Z"}
53
idea.create
%{"archived" => false, "category" => "Site", "id" => "81f45569-1628-48f4-97a2-2d461e37b8fc", "inserted_at" => "2026-08-27T08:41:14Z", "name" => "Gallery", "pitch" => "Share photos and videos along with captions and other metadata", "type" => "idea.create", "updated_at" => "2026-08-27T08:41:14Z"}
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "9ec5dddb-16d0-48f7-8f83-14377447562a", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22:15Z", "position" => 0, "title" => "Bug: Sync is broken due to an invalid field type varchar(255) instead of text, accessed when running CrdtApply.apply_element_upsert", "type" => "element.update", "updated_at" => "2026-08-27T00:23:14Z"}
50
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "14bb975c-5732-4788-b7a4-f5470793b040", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T12:44:15Z", "position" => 0, "title" => "When the server restores, it should communicate that to the clients in the next update. in that case, the client should try to rectify its events with the server without deleting events that happened later in time than the restored server data (i.e. it shouldn't ever lose data the client has even if the server rolls back)", "type" => "element.create", "updated_at" => "2026-08-26T12:44:15Z"}
49
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "3b94a659-478b-4791-b660-47fec743bf12", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T12:42:30Z", "position" => 0, "title" => "Mobile doesn't have a way to backup/restore it's sequence of events", "type" => "element.create", "updated_at" => "2026-08-26T12:42:30Z"}
48
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "9ec5dddb-16d0-48f7-8f83-14377447562a", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T12:40:01Z", "position" => 0, "title" => "Bug: Sync is broken due to an invalid field type varchar(255) instead of text, accessed when running CrdtApply.apply_element_upsert", "type" => "element.create", "updated_at" => "2026-08-26T12:40:01Z"}
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "ecdd2b28-fef5-41f6-b012-4fada0717838", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T11:04:46Z", "position" => 0, "title" => "Several fields for an idea don't show when viewing it on the admin console.", "type" => "element.create", "updated_at" => "2026-08-26T11:04:46Z"}
45
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "33edc2ee-1d59-4c8f-b187-9c5a1e50ed49", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T11:04:20Z", "position" => 0, "title" => "Bug: Releases not showing in the UI. They say they are saving but they don't show", "type" => "element.create", "updated_at" => "2026-08-26T11:04:20Z"}
%{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"All the basically functionality and release builds for each component. Still single user. \"}]}]}", "data" => "{}", "element_type" => "release", "id" => "c7436b58-7978-4418-a0e2-354028273d51", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T11:02:21Z", "position" => 0, "title" => "1.0 - Core features", "type" => "element.create", "updated_at" => "2026-08-26T11:02:21Z"}
42
element.create
%{"body" => "{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"content\":[{\"type\":\"text\",\"text\":\"Core functionality with real production builds of all components. Still single user only. \"}]}]}", "data" => "{}", "element_type" => "release", "id" => "8308251c-d55c-4442-8ae8-1df774d692cd", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T11:01:22Z", "position" => 0, "title" => "1.0 -", "type" => "element.create", "updated_at" => "2026-08-26T11:01:22Z"}
41
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "5d5dcaa5-4ec9-420d-a1a5-196213c8dbf3", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T11:00:17Z", "position" => 0, "title" => "UX: Clicking on a task that is longer than the visible space (if it's truncated) should first expand it so it's all visible. Only when it's full visible should it switch to edit mode on click.", "type" => "element.create", "updated_at" => "2026-08-26T11:00:17Z"}
40
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "6728b68f-8eea-4dc7-8390-c41f22b053eb", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T10:58:52Z", "position" => 0, "title" => "UX: Tasks being limited to a single text input sucks. It should expand to a larger text area if they type enough", "type" => "element.create", "updated_at" => "2026-08-26T10:58:52Z"}
39
element.update
%{"data" => "{\"done\":false}", "element_type" => "task_list", "id" => "40383746-c57e-46d5-ab08-932466378f06", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T10:57:04Z", "position" => 0, "title" => "Bug: The virtual keyboard covers the bottom content on the screen (whichever screen the user is on) making it impossible to access/see some things. Also, it pushes up the content a bit, so the user also can't scroll to the top of the view (if it's tall enough to go off the screen)", "type" => "element.update", "updated_at" => "2026-08-26T10:58:11Z"}
38
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "7ec9f857-d534-4664-8986-a5f4ba540a47", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T10:57:28Z", "position" => 0, "title" => "Bug: Can't add new tasks on the task list page", "type" => "element.create", "updated_at" => "2026-08-26T10:57:28Z"}
37
element.create
%{"data" => %{"done" => false}, "element_type" => "task_list", "id" => "40383746-c57e-46d5-ab08-932466378f06", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T10:56:56Z", "position" => 0, "title" => "Bug: The virtual keyboard covers the bottom content on the screen (whichever screen the user is on) making it impossible to access/see some things.", "type" => "element.create", "updated_at" => "2026-08-26T10:56:56Z"}