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.
Version
Type
Inserted
Operation
116
asset.create
%{"agents_excerpt" => "# Repo-wide conventions\n\nThis repo holds multiple independently-buildable components (`service/`, `desktop/`, `android/`). See [service/AGENTS.md](service/AGENTS.md) for Phoenix/Elixir-specific guidelines.\n\n## Cross-cutting rules\n\n- **Mix always runs inside Docker.** There is no local Elixir/Erlang toolchain on the dev machine. Never run `mix` directly on the host — use `docker compose --profile tools run --rm mix <task>` from `service/`.\n- **Changelog discipline**: add an entry to `CHANGELOG.md` for every significant change, using the actual current date (YYYY-MM-DD) and the project/app version scheme described there.\n- **No shared-code package** between `service`, `desktop`, and `android`. Keep `PROJECT_DEFINITIONS.md` current — it is the mechanism that keeps the three independently-implemented clients consistent with each other.\n- **Commit messages**: concise, imperative mood, focused on why a change was made.\n", "agents_source_file" => "AGENTS.md", "git_default_branch" => "main", "git_remote_url" => "git@144.76.119.114:/home/git/ihaveanidea.git", "id" => "60b7deba-97a2-4667-829a-b1c6cfb6a17a", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T23:30:12Z", "label" => "Primary", "last_commit_at" => "2026-08-28 01:04:56 +0200", "last_commit_author" => "anonymous <anonymous@anonymo.us>", "last_commit_message" => "Fix 4 follow-up issues from testing", "last_commit_sha" => "5425abb6fc73ab00d65355fdf9489971261a44ad", "last_scanned_at" => "2026-08-27T23:30:12Z", "local_path" => "C:\\Users\\anonymous\\projects\\ihaveanidea", "readme_excerpt" => "# ihaveanidea\n\nTrack project ideas — software, physical-world, writing, anything — from a quick elevator pitch through implementation and \"release.\"\n\n## What It Does\n\n- **Ideas** are the top-level thing you track. Creating one only requires a **name** and a short **pitch** — the \"spark\" moment.\n- **Elements** are optional content you attach to an idea over time: a concept/spec writeup, a plan, a task list, release notes, freeform notes, attachments. There is **no enforced lifecycle** — elements can be added, edited, or skipped in any order. Presence of elements is the progress signal, not a status field.\n- **Category** is a free-form tag (e.g. `software`, `physical`, `writing`, `other`) — never a fixed enum.\n- **Assets**: the desktop app can link an idea to a local folder/git repo and extract metadata (repo name, remote, last commit, README/AGENTS excerpt). That metadata syncs to the account so it's visible read-only from the browser admin and Android, even though only desktop can see the filesystem.\n- **Local-first** desktop and Android apps sync with the service when connected, using the same CRDT-log approach as the reference project below.\n- **Single user** — this is a personal tool, not a multi-tenant product.\n\n## Key Decisions\n\n### Architecture\n\n| Decision | Choice |\n|----------|--------|\n| **Primary data store** | The service (Phoenix/Elixir) |\n| **Sync model** | CRDT-style whole-record last-write-wins upserts; operations stored for audit log |\n| **The service** | Single Phoenix codebase; API and admin run in separate Docker containers for independent scaling |\n| **Lifecycle model** | No status/stage FSM — ideas accumulate optional typed elements in any order |\n| **Build isolation** | Each component (service, Desktop, Android) builds independently — no shared-code package |\n\n### Technology Stack\n\nMirrors the sister project [panoptodo](../panoptodo), which this project's stack and repo conventions were deliberately modeled on.\n\n| Component | Stack |\n|---------", "repo_name" => "ihaveanidea", "source_device_app_id" => "desktop:38ded643-95fb-489f-969c-7871359f7c40", "type" => "asset.create", "updated_at" => "2026-08-27T23:30:12Z"}
115
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:29:13Z"}
114
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "8e85d31c-c5ab-4799-9fea-850bf541be87", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T06:51:54Z", "position" => 0, "title" => "UX: Adding items to plans or saving plans is hard on Android because the virtual keyboard covers them", "type" => "element.update", "updated_at" => "2026-08-27T23:29:13Z"}
113
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:29:02Z"}
112
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "33edc2ee-1d59-4c8f-b187-9c5a1e50ed49", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22:15Z", "position" => 0, "title" => "Bug: [Android] Releases not showing in the UI. They say they are saving but they don't show", "type" => "element.update", "updated_at" => "2026-08-27T23:29:01Z"}
111
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:29:00Z"}
110
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "7ec9f857-d534-4664-8986-a5f4ba540a47", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22:15Z", "position" => 0, "title" => "Bug: [Android] Can't add new tasks on the task list page", "type" => "element.update", "updated_at" => "2026-08-27T23:28:59Z"}
109
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:57Z"}
108
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "ecdd2b28-fef5-41f6-b012-4fada0717838", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-27T00:22:15Z", "position" => 0, "title" => "Several fields for an idea don't show when viewing it on the admin console. The entire Idea should be visible", "type" => "element.update", "updated_at" => "2026-08-27T23:28:56Z"}
107
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:50Z"}
106
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "17777ffa-0a5e-4121-bcb5-a25cf572fceb", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T10:45:14Z", "position" => 0, "title" => "[Desktop+Android] Trim whitespace from user input for all fields (tags, notes, etc)", "type" => "element.update", "updated_at" => "2026-08-27T23:28:50Z"}
105
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:46Z"}
104
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "9220e2f7-8ab2-4583-9270-79bb7771a92a", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T06:51:54Z", "position" => 0, "title" => "Bug: View time is never updated on Android? It always shows never viewed. Also, new Ideas don't get a viewed time in Desktop even though the user automatically is shown them when it is first created. The viewed time should be set at the same time.", "type" => "element.update", "updated_at" => "2026-08-27T23:28:45Z"}
103
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:42Z"}
102
element.update
%{"data" => "{\"done\":true}", "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: [Android] 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-27T23:28:42Z"}
101
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:40Z"}
100
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "c920f761-70c8-4038-a449-1f71789c2e7b", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T06:51:54Z", "position" => 0, "title" => "Bug: [Desktop+Android] Shouldn't be able to go \"back\" while editing something like notes or a plan without a confirmation modal", "type" => "element.update", "updated_at" => "2026-08-27T23:28:40Z"}
99
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:37Z"}
98
element.update
%{"data" => "{\"done\":true}", "element_type" => "task_list", "id" => "6f8572a8-6f59-4fd9-8e06-ba3fdfaa2714", "idea_id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "inserted_at" => "2026-08-26T01:02:23Z", "position" => 0, "title" => "Bug: Adding new tasks doesn't change the last edited time? Doesn't seem to. Not sure if this is only Android or if it is true on Desktop too.", "type" => "element.update", "updated_at" => "2026-08-27T23:28:37Z"}
97
idea.update
%{"archived" => false, "category" => "app", "id" => "2d97d724-fd45-4168-8c36-f8db6c05cbd0", "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-27T23:28:32Z"}