Skip to content

fix(deps): update dependency @doist/todoist-sdk to v14 - #477

Merged
scottlovegrove merged 2 commits into
mainfrom
renovate/doist-todoist-sdk-14.x
Aug 18, 2026
Merged

fix(deps): update dependency @doist/todoist-sdk to v14#477
scottlovegrove merged 2 commits into
mainfrom
renovate/doist-todoist-sdk-14.x

Conversation

@renovate

@renovate renovate Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
@doist/todoist-sdk (source) 13.0.214.0.0 age confidence

Release Notes

Doist/todoist-sdk-typescript (@​doist/todoist-sdk)

v14.0.0

Compare Source

⚠ BREAKING CHANGES
  • drop workspace insight folder ID and health task recommendations (#​662)
Bug Fixes
  • drop workspace insight folder ID and health task recommendations (#​662) (a8351f2)

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Monday through Friday (* * * * 1-5)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Pull requests that update a dependency file label Aug 17, 2026
@renovate
renovate Bot force-pushed the renovate/doist-todoist-sdk-14.x branch from f979eb1 to 87ed3b9 Compare August 17, 2026 15:51

@doistbot doistbot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a straightforward Renovate dependency bump from @doist/todoist-sdk 13.0.2 to 14.0.0, but the breaking changes in v14 remove two fields the CLI still actively consumes.

Few things worth tightening:

  • src/commands/project/health.ts:40-44 still reads health.taskRecommendations, which v14 removes from getProjectHealth() — this will break type-check and build in CI. Remove that block and update the corresponding project health test mocks.
  • src/commands/workspace/workspace.test.ts still includes folderId in inline mock objects (lines 650, 681, 698) and asserts folderId: null in the --json test (line 746), but v14 drops folderId from the getWorkspaceInsights response — these mocks and assertions need updating to avoid excess-property type errors and failing tests.

Share FeedbackReview Logs

Comment thread package.json Outdated
"dependencies": {
"@doist/cli-core": "1.1.0",
"@doist/todoist-sdk": "13.0.2",
"@doist/todoist-sdk": "14.0.0",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 v14.0.0 removes taskRecommendations from getProjectHealth()'s return type (release notes: "drop ... health task recommendations"), but src/commands/project/health.ts:40-44 still reads health.taskRecommendations. npm run type-check and npm run build (both run in CI) will fail with TS2339. Remove the recommendations block from health.ts and update the project health tests that still mock taskRecommendations.

Comment thread package.json Outdated
"dependencies": {
"@doist/cli-core": "1.1.0",
"@doist/todoist-sdk": "13.0.2",
"@doist/todoist-sdk": "14.0.0",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 v14's breaking change "drop workspace insight folder ID" removes folderId from the getWorkspaceInsights response, but src/commands/workspace/workspace.test.ts:650,681,698 still include folderId in inline mockResolvedValue object literals (excess-property type error) and the --json test at line 746 still asserts folderId: null in the output, which the SDK no longer returns. Update these mocks/assertions.

@renovate
renovate Bot force-pushed the renovate/doist-todoist-sdk-14.x branch from 87ed3b9 to 9f945e2 Compare August 18, 2026 02:03
SDK 14 removes ProjectHealth.taskRecommendations, so the
Recommendations section of `td project health` cannot be populated
any more. Remove the block that printed it, and pin 14.0.1 rather
than 14.0.0 to pick up the fix for addComment sending uidsToNotify
as a comma-joined string.
@scottlovegrove scottlovegrove self-assigned this Aug 18, 2026
@scottlovegrove

scottlovegrove commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Taken over to unblock this: pinned 14.0.1 instead of 14.0.0, and dropped the taskRecommendations block from td project health in bef5e10.

All four failing checks were the same three TS2339 errors — SDK 14.0.0 removed ProjectHealth.taskRecommendations, so the Recommendations section of td project health can no longer be populated and the code that printed it has gone. todoist-mcp made the same removal for the same reason in Doist/todoist-mcp#572.

14.0.1 rather than 14.0.0 because it carries Doist/todoist-sdk-typescript#664addComment was sending uidsToNotify as a comma-joined string, which the API rejects. That fix is what td comment add --notify will need in a follow-up.

@renovate

renovate Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

craigcarlyle added a commit that referenced this pull request Aug 18, 2026
`td filter view` printed tasks in whatever order the API returned. Todoist
doesn't sort server-side: every client applies the sorting saved on the view,
and falls back to a documented default hierarchy when the view has none, which
is what "Manual (default)" means in the app. The CLI read neither piece, so a
saved filter listed in an order no other Todoist client shows.

Reads the saved options with `api.getViewOptions()` and orders the results with
`sortTasks`, both from the SDK. What lives here is the part the SDK asks the
caller to supply: the vocabulary `--sort` speaks, the mapping from a saved view
to that vocabulary, the sidebar layout it wants as a lookup, and the guess at
whether a filter query is date-driven, which picks between the priority-first
and date-first hierarchies.

Adds `--sort default|priority|date|deadline|date-added|name|project|assignee|
workspace|none` and `--sort-order asc|desc`, resolved flag first, then saved
view, then Todoist default. `--sort none` returns the raw API order. Each
section of a comma-separated filter sorts on its own, and `--json` / `--ndjson`
come back in the same order as the pretty output.

BLOCKED: needs the SDK release carrying Doist/todoist-sdk-typescript#665 and
#666, plus the v14 bump in #477. `package.json` still pins 13.0.2, so this
branch does not build until both land and the pin moves.

Closes #473

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@scottlovegrove
scottlovegrove merged commit 6501b43 into main Aug 18, 2026
6 checks passed
@scottlovegrove
scottlovegrove deleted the renovate/doist-todoist-sdk-14.x branch August 18, 2026 16:28
scottlovegrove added a commit that referenced this pull request Aug 18, 2026
Brings `td comment add` to parity with the MCP, which shipped this in
Doist/todoist-mcp#580 for Doist/todoist-mcp#509.

**Stacked on #477** — based on that branch for SDK 14.0.1, which carries
the `uidsToNotify` serialisation fix. Retarget to `main` once #477
merges.

## The problem

Comments posted with `td` notify nobody. `comment add` never sent
`uidsToNotify`, so a teammate named in a comment found out only if they
happened to open the task.

That also breaks the *next* comment, which is the part people notice and
can't reproduce. Todoist's clients pick the recipients themselves and
send them with each comment; the API notifies exactly who it is handed
and derives nobody on its own. On a first comment the clients notify the
assignee, the assigner and the creator; on a reply they notify the
previous comment's participants, so threads keep flowing without
everyone being re-tagged. A comment posted with an empty list therefore
silences the comment that follows it — including one a human later
writes in the app.

## What this does

`comment add` gains `--notify`, accepting names, emails, `id:xxx` or
`"me"`, comma-separated in the same style as `--labels`. `--no-notify`
posts in silence, matching the existing `--no-labels` negation.

Omitting `--notify` mirrors the clients: assignee, assigner and creator
on a task's first comment, or the previous comment's participants on a
reply, always excluding the author. The rules live in
`src/lib/comment-recipients.ts`, ported from the MCP's equivalent.

Two things worth calling out in review:

- **Naming yourself is honoured**, not filtered out. Self-exclusion is
only right when the recipients were *inferred* rather than asked for. I
had this filtering unconditionally at first and caught it in live
testing — `--notify me` silently did nothing.
- **The thread walk keeps only the newest comment** rather than using
`paginate()`, which accumulates every result. Comments come back
oldest-first with no reverse option, so reaching the last page is
unavoidable; holding the whole history is not. Review flagged exactly
this on the MCP version.

`resolveNotifyIds` is pure over an already-fetched collaborator list, so
the `--notify` path fetches collaborators once and reuses them to render
the names back — my own tests caught a double fetch here.

`@mentions` in the comment text are deliberately **not** parsed; the
user names people with `--notify`. `SKILL_CONTENT` documents this so
agents don't assume the text alone notifies.

Notification on *edit* is out of scope — `UpdateCommentArgs` is `{
content }` only.

## Surfacing

Who was notified is now visible in three places: the confirmation line
after adding, a `Notified:` line in `comment view` (resolved only when
there are recipients, so the common case costs no extra request), and
`postedUid` / `uidsToNotify` in plain `--json` rather than only under
`--full`.

## Verification

`npm run type-check`, `npm run check`, `npm run build`, `npm run
check:skill-sync` and all 1815 tests pass (suite run three times to rule
out flakiness).

Live against the real API on a throwaway task in a shared project, since
deleted:

| case | result |
| --- | --- |
| `--dry-run` with `--notify` | previews the raw string unresolved, no
API call |
| defaults, first comment on a solo task | no recipients |
| `--notify "Ada Lovelace"` | `Notified: Ada L.` |
| `--notify "me,ada@example.com"` | deduped to one |
| `--notify Ghost,Phantom` | one `ASSIGNEE_NOT_FOUND` naming both |
| reply, defaults | previous comment's participants, author excluded |
| `--no-notify` | silent, no recipient field sent |
| `comment view` / `--json` | recipients shown |

The paths involving a **second person** — a reply inheriting someone
else's participants, and a first comment on a task assigned to someone
else — are covered by unit tests rather than live calls, since verifying
them for real means sending test notifications to an actual colleague.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@doist-release-bot

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 3.2.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

craigcarlyle added a commit that referenced this pull request Aug 18, 2026
`td filter view` printed tasks in whatever order the API returned. Todoist
doesn't sort server-side: every client applies the sorting saved on the view,
and falls back to a documented default hierarchy when the view has none, which
is what "Manual (default)" means in the app. The CLI read neither piece, so a
saved filter listed in an order no other Todoist client shows.

Reads the saved options with `api.getViewOptions()` and orders the results with
`sortTasks`, both from the SDK. What lives here is the part the SDK asks the
caller to supply: the vocabulary `--sort` speaks, the mapping from a saved view
to that vocabulary, the sidebar layout it wants as a lookup, and the guess at
whether a filter query is date-driven, which picks between the priority-first
and date-first hierarchies.

Adds `--sort default|priority|date|deadline|date-added|name|project|assignee|
workspace|none` and `--sort-order asc|desc`, resolved flag first, then saved
view, then Todoist default. `--sort none` returns the raw API order. Each
section of a comma-separated filter sorts on its own, and `--json` / `--ndjson`
come back in the same order as the pretty output.

BLOCKED: needs the SDK release carrying Doist/todoist-sdk-typescript#665 and
#666, plus the v14 bump in #477. `package.json` still pins 13.0.2, so this
branch does not build until both land and the pin moves.

Closes #473

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants