Skip to content

basecamp todos update <todo_id> --title "new title" wipes the existing description #458

@aleix-cd

Description

@aleix-cd

Title-only update silently wipes description

Running basecamp todos update <id> --title "..." clears the todo's existing description, even though --description was never passed.

Why it matters: This is data loss with no warning. The CLI returns {"ok": true, "summary": "Updated todo #..."} and exits 0 while the entire description disappears on Basecamp's side (reproduced with a ~2 KB body). Recovery via the CLI is also broken (see below), so users have to restore manually from a backup in the web UI.

Steps to reproduce:

  1. Find a todo with a non-empty description:
    basecamp todos show <id> --json --quiet | jq -r '.description'
  2. Update only the title:
    basecamp todos update <id> --title "New title"
  3. Re-fetch:
    basecamp todos show <id> --json --quiet | jq -r '.description' → empty string.

Expected: title changes, description preserved.

Actual: title changes, description is now "". The web UI confirms the body is gone. The update response payload itself shows "description": "", which suggests the CLI sends an empty description on every PATCH instead of omitting fields not passed on the command line.

Recovery is also broken in 0.7.2:

basecamp todos update <id> --description "anything" returns {"ok": true, "summary": "Updated todo #<id>"} with exit 0, but updated_at does not advance and description stays empty in show. Reproduced with both a ~2 KB multi-line markdown blob and a one-line value. The PATCH never lands.

Environment: basecamp 0.7.2, macOS (darwin 24.3.0).

Related: #420 (cards update --body silently discards HTML content) — same shape: unspecified fields sent as empty rather than omitted from the PATCH.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions