Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
f3a2f31
Add date filtering option for Todoist project syncs
felciano Jan 18, 2026
b2b070d
Add command-line date filter arguments to sync project
felciano Jan 18, 2026
ed1062d
Add separate commands for date filter options
felciano Jan 18, 2026
256f53e
Auto-create headings if they don't exist
felciano Jan 18, 2026
a5daa47
Fix async issue and add client-side date filtering
felciano Jan 18, 2026
10cb3b3
Fix heading creation - append task directly after new heading
felciano Jan 18, 2026
6b5f4a3
Use Editor methods for the currently open note
felciano Jan 18, 2026
bc66067
Add todoist_filter frontmatter for per-note date filtering
felciano Jan 18, 2026
040d601
Add '3 days' filter option
felciano Jan 18, 2026
ca2a906
Add multi-project sync support to Todoist plugin
felciano Jan 18, 2026
6da1a94
Add Todoist auto-sync design options documentation
felciano Jan 19, 2026
e46a8e6
Merge todoist-date-filter
felciano Jan 19, 2026
dad01dc
Merge multi-project support into todoist-integration-testing
felciano Jan 19, 2026
6fee4e1
Add project name lookup support to Todoist plugin
felciano Jan 20, 2026
3c9dd7c
Add inline project name arguments to syncProject command
felciano Jan 20, 2026
51a363c
Support array syntax for project names in syncProject
felciano Jan 20, 2026
d622724
Update docs: all examples show multiple projects with filter
felciano Jan 20, 2026
c11f405
Add argument definitions for syncProject command
felciano Jan 20, 2026
efd9d54
Add /todoist sync project by name command with interactive prompts
felciano Jan 20, 2026
8029ad4
Add prefix settings for project titles and section headings
felciano Jan 20, 2026
9d22549
Fix Todoist sync commands: API endpoints, pagination, and deduplication
felciano Jan 22, 2026
f29a8b4
Add /todoist convert to todoist task command
felciano Jan 25, 2026
a8b7801
Add /todoist sync status only command
felciano Jan 25, 2026
00987ca
Add comprehensive test suite for Todoist NotePlan Sync plugin
felciano Jan 25, 2026
d79095d
Add feature branch documentation
felciano Jan 25, 2026
075acbf
Fix extractTodoistTaskId to handle alphanumeric task IDs
felciano Jan 26, 2026
001b1ef
Fix: Use 'checked' instead of 'is_completed' for task status
felciano Jan 26, 2026
965c548
Add update-todoist-live.sh script for easy plugin deployment
felciano Jan 26, 2026
cc7afb7
Add sync status all command for global status sync
felciano Jan 27, 2026
9076a80
Add NEW-FEATURES.md documenting all enhancements
felciano Jan 28, 2026
334b38e
Enhance NEW-FEATURES.md with scope and use cases
felciano Jan 28, 2026
cd0ee0a
Merge upstream/main to integrate v0.4.1 fix
felciano Jan 29, 2026
21acac6
Add filterTasksByDate tests and improve date filter debugging
felciano Jan 29, 2026
774afe9
Add pagination support for Todoist API endpoints
felciano Feb 3, 2026
33431dd
Merge upstream/main to sync with latest changes
felciano Feb 3, 2026
e6d37f6
Fix test function name and mock field alignment
felciano Feb 3, 2026
80e089a
Move plugin files from repo root to plugin directory
felciano Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ Documentation-Helpers
**/react.*.dev.js
**/react.*.min.js
.windsurfrules
CLAUDE.md
CLAUDE.md
.claude/
**/.claude/
249 changes: 249 additions & 0 deletions dbludeau.TodoistNoteplanSync/NEW-FEATURES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
# Todoist NotePlan Sync - New Features & Improvements

This document summarizes all new features and improvements made to the Todoist NotePlan Sync plugin, relative to the upstream main branch. Each feature is a candidate for a pull request.

---

## New Commands

### 1. Date-Filtered Project Sync Commands
**Branch:** `feature/todoist-date-filter`

Four new commands to sync project tasks with specific date filters:

| Command | Alias | Scope | Description |
|---------|-------|-------|-------------|
| `/todoist sync project today` | `tospt` | Current note | Sync only tasks due today |
| `/todoist sync project overdue` | `tospo` | Current note | Sync only overdue tasks |
| `/todoist sync project current` | `tospc` | Current note | Sync overdue + today tasks |
| `/todoist sync project by name` | `tospn` | Current note | Interactive prompts for project names and filter |

**Use cases:**
- *"Show me just what's due today for this project"* → `tospt`
- *"What have I let slip? Show me overdue items"* → `tospo`
- *"What needs attention right now (overdue + today)?"* → `tospc`
- *"I want to pick which projects and date range to sync"* → `tospn`

### 2. "By Project" Commands for Current Note
**Branch:** `feature/todoist-date-filter`

Four new commands that sync tasks to the current note, organized by project headings:

| Command | Alias | Scope | Description |
|---------|-------|-------|-------------|
| `/todoist sync today by project` | `tostbp` | Current note | Today's tasks, grouped by project |
| `/todoist sync overdue by project` | `tosobp` | Current note | Overdue tasks, grouped by project |
| `/todoist sync current by project` | `toscbp` | Current note | Today + overdue, grouped by project |
| `/todoist sync week by project` | `toswbp` | Current note | Next 7 days, grouped by project |

**Use cases:**
- *"What do I need to work on today, across all projects?"* → `tostbp`
- *"Show me everything overdue, organized by project so I can prioritize"* → `tosobp`
- *"Give me a unified view of what needs attention now"* → `toscbp`
- *"What's my week look like across all projects?"* → `toswbp`

### 3. Convert to Todoist Task
**Branch:** `feature/convert-to-todoist-task`

| Command | Alias | Scope | Description |
|---------|-------|-------|-------------|
| `/todoist convert to todoist task` | `cttt`, `toct` | Selected text | Convert selected NotePlan tasks to Todoist Inbox tasks |

**Use case:** *"I created tasks in NotePlan but now want to track them in Todoist too"*

- Converts one or multiple selected tasks
- Creates tasks in Todoist Inbox with link back
- Replaces original task with Todoist-linked version
- Preserves subtasks (converts parent only)
- Parses NotePlan priority (`!!!`, `!!`, `!`) and due dates (`>YYYY-MM-DD`)

### 4. Status Sync Commands
**Branch:** `feature/sync-status-only`

| Command | Alias | Scope | Description |
|---------|-------|-------|-------------|
| `/todoist sync status` | `toss` | Current note | Sync completion status for current note only |
| `/todoist sync status all` | `tossa` | All linked notes | Sync completion status across all linked notes |

**Use cases:**
- *"I completed tasks in NotePlan, push that to Todoist"* → `toss`
- *"I completed tasks in Todoist, pull that into NotePlan"* → `toss`
- *"Sync completion status everywhere without re-syncing all tasks"* → `tossa`

Features:
- Bidirectional sync: NotePlan done → closes in Todoist; Todoist done → marks done in NotePlan
- No add/remove of tasks - only syncs completion state
- Reports summary: "Synced X task(s): N closed in Todoist, M marked done in NotePlan"

---

## New Settings

### Project Sync Settings
**Branch:** `feature/todoist-date-filter`, `feature/todoist-prefix-settings`

| Setting | Options | Default | Description |
|---------|---------|---------|-------------|
| `projectDateFilter` | all, today, overdue \| today, 3 days, 7 days | overdue \| today | Default date filter for project syncs |
| `projectSeparator` | ## / ### / #### Project Name, Horizontal Rule, No Separator | ### Project Name | How to separate multiple projects |
| `projectPrefix` | Nothing, Blank Line, Horizontal Rule, Blank Line + Horizontal Rule | Blank Line | What to insert before project titles |
| `sectionFormat` | ### / #### / ##### Section, **Section** | #### Section | Format for Todoist section headings |
| `sectionPrefix` | Nothing, Blank Line, Horizontal Rule, Blank Line + Horizontal Rule | Blank Line | What to insert before section headings |

**Use cases:**
- *"I only want to see actionable tasks, not the whole backlog"* → Set `projectDateFilter` to `overdue | today`
- *"I want cleaner visual separation between projects"* → Adjust `projectSeparator` and `projectPrefix`
- *"Todoist sections should be smaller headings than projects"* → Set `sectionFormat` to `#### Section`

---

## New Frontmatter Options

### Multi-Project Support
**Branch:** `feature/todoist-multi-project`

**Use case:** *"I have a NotePlan note for 'Q1 Goals' that pulls from multiple Todoist projects"*

Link multiple Todoist projects to a single NotePlan note:

```yaml
---
todoist_ids: ["2349578229", "2349578230"]
---
```

Or using project names:

```yaml
---
todoist_project_names: ["Work", "Personal"]
---
```

### Per-Note Date Filter Override
**Branch:** `feature/todoist-date-filter`

**Use case:** *"Most notes should show current tasks, but my 'Weekly Review' note needs to show 7 days"*

Override the global date filter for a specific note:

```yaml
---
todoist_id: 2349578229
todoist_filter: 7 days
---
```

Valid values: `all`, `today`, `overdue`, `overdue | today`, `3 days`, `7 days`

### Project Name Lookup
**Branch:** `feature/todoist-project-name-lookup`

**Use case:** *"I don't want to look up project IDs - just let me use the project name"*

Reference projects by name instead of ID:

```yaml
---
todoist_project_name: Work
---
```

Or multiple:

```yaml
---
todoist_project_names: ["Work", "Personal"]
---
```

---

## Enhanced Existing Commands

### `/todoist sync project` Enhancements
**Branch:** `feature/todoist-date-filter`, `feature/todoist-project-name-lookup`

The existing `syncProject` command now supports:

1. **Command-line arguments:**
```
/todoist sync project "Work, Personal" "7 days"
```

2. **Project names** (not just IDs) via frontmatter or arguments

3. **Date filter argument** as second parameter

---

## Bug Fixes

### API Compatibility Fixes
**Branch:** `feature/todoist-api-fixes`

- **Correct API endpoint:** Updated from deprecated endpoints to `https://api.todoist.com/api/v1`
- **Pagination support:** Properly handles cursor-based pagination for large task lists
- **Deduplication:** Prevents duplicate tasks when syncing

### Task ID Format Fix
**Branch:** `feature/sync-status-only`

- **Alphanumeric task IDs:** Todoist now uses alphanumeric IDs (e.g., `6X4P4Mp38MWX3MW4`). Updated regex from `(\d+)` to `([a-zA-Z0-9]+)`

### Completion Status Field Fix
**Branch:** `feature/sync-status-only`

- **Correct field name:** API returns `checked: true` not `is_completed: true`. Fixed in all 3 places checking completion status.

### Timezone Fix
**Branch:** `feature/todoist-date-filter`

- **Local timezone parsing:** Date filtering now correctly uses local timezone instead of UTC

### Heading Creation Fix
**Branch:** `feature/todoist-date-filter`

- **Auto-create headings:** If a target heading doesn't exist, it's now created automatically
- **Correct task placement:** Tasks are appended directly after the heading, not at end of note

---

## Testing

### Comprehensive Test Suite
**Branch:** `feature/introduce-comprehensive-testing`

- 121 passing tests covering:
- Pure function unit tests (parsing, filtering, task ID extraction)
- API mock tests (fetch, close, create tasks)
- Integration tests with NotePlan mocks

---

## Command Scope Reference

| Scope | Description | Commands |
|-------|-------------|----------|
| **Current note** | Operates on the note open in the editor | `tospt`, `tospo`, `tospc`, `tospn`, `tostbp`, `tosobp`, `toscbp`, `toswbp`, `toss` |
| **Selected text** | Operates on selected paragraphs | `toct` (convert to todoist task) |
| **All linked notes** | Searches all notes with Todoist frontmatter | `tossa` (sync status all) |
| **Today's daily note** | Writes to today's date note | `tost` (existing command) |
| **Todoist folder** | Creates/updates notes in dedicated folder | `tose` (existing command) |

---

## Summary by PR Candidate

| Feature Area | Branch | New Commands | New Settings | Scope | Complexity |
|--------------|--------|--------------|--------------|-------|------------|
| Date Filtering | `feature/todoist-date-filter` | 8 | 1 | Current note | Medium |
| Multi-Project | `feature/todoist-multi-project` | 0 | 2 | Current note | Medium |
| Project Names | `feature/todoist-project-name-lookup` | 0 | 0 | Current note | Low |
| Prefix Settings | `feature/todoist-prefix-settings` | 0 | 2 | Current note | Low |
| Convert Task | `feature/convert-to-todoist-task` | 1 | 0 | Selected text | Medium |
| Status Sync | `feature/sync-status-only` | 2 | 0 | Current note + All notes | Medium |
| API Fixes | `feature/todoist-api-fixes` | 0 | 0 | N/A | Low |
| Test Suite | `feature/introduce-comprehensive-testing` | 0 | 0 | N/A | Low |

**Integration Branch:** `todoist-integration-testing` contains all features merged together for testing.
Loading