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.
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:39:30Z"}
234
element.update
%{"data" => %{"done" => true, "release_id" => "981fb916-2577-4aa3-8f86-fe0c31198898"}, "element_type" => "task_list", "id" => "3cbb9a06-162c-4bcd-8e16-025fe639df2b", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-28T14:17:12Z", "position" => 0, "title" => "Feature: Download page (part of the admin service) that requires a unique invite code. Code generated by admin (\"create download link\"). If provided code is invalid, it shows a generic \"in closed beta\" message. When valid, the page shows all the download options (i.e. right now that's Windows desktop app and Android mobile app)", "type" => "element.update", "updated_at" => "2026-08-30T19:39:30Z"}
233
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:39:30Z"}
%{"archived" => false, "blocks" => nil, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:15:43Z"}
228
element.update
%{"body" => nil, "data" => %{"done" => false, "task_type_id" => "83776309-6f31-52b1-89ab-fce3a072eef9"}, "element_type" => "task_list", "id" => "14bb975c-5732-4788-b7a4-f5470793b040", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22: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.update", "updated_at" => "2026-08-30T19:15:43Z"}
227
idea.update
%{"archived" => false, "blocks" => nil, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:15:39Z"}
%{"archived" => false, "blocks" => nil, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:15:35Z"}
224
element.update
%{"body" => nil, "data" => %{"done" => false, "task_type_id" => "818ca193-82c3-5d3d-8976-2b0b8359226f"}, "element_type" => "task_list", "id" => "2add5097-3884-41b6-b080-91fc6139ca8d", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-29T18:58:59Z", "position" => 0, "title" => "Maybe - seems like CPU spikes a lot on the API server during an initial sync, even if there isn't a ton of data to transfer. Needs investigation", "type" => "element.update", "updated_at" => "2026-08-30T19:15:35Z"}
223
idea.update
%{"archived" => false, "blocks" => nil, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:15:26Z"}
%{"archived" => false, "blocks" => nil, "category" => "App", "id" => "934e2cad-77be-4ee0-bec0-b9a0e23d2b85", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-27T14:51:38Z", "name" => "LinkedIn Star", "pitch" => "Tool to help write popular LinkedIn posts. Stay focused on topics, write with the right tone, and analyze past posts to learn what works", "type" => "idea.update", "updated_at" => "2026-08-30T19:12:27Z"}
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:13:16Z"}
218
element.update
%{"data" => %{"done" => true}, "element_type" => "task_list", "id" => "f4834656-b6eb-4f83-8760-84bae6f4f924", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-28T12:59:02Z", "position" => 0, "title" => "Feature: Idea types - different types have different blocks (e.g. a house project doesn't need the linked repo block). Start with types \"software\" which has all the existing blocks (hardcoded for all users). Provide a way for users to define their own idea types and select which blocks are included. But any idea should also be customizable to add/remove blocks (e.g. a software project defaults to having linked repos but the user could create a new software idea and then remove that block for that idea); the normally associated blocks with an idea type are just what a new idea of that type starts with, they aren't mandatory.", "type" => "element.update", "updated_at" => "2026-08-30T19:13:15Z"}
217
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "idea_type_id" => "29ddb6d5-aa74-5ebb-8bf1-ee684556a9ca", "inserted_at" => "2026-08-25T23:21:27Z", "name" => "I have an idea", "pitch" => "Track all ideas through all stages of completion", "type" => "idea.update", "updated_at" => "2026-08-30T19:13:08Z"}