Unify Tasks views: List (with sub-modes) | Board
Details
Consolidate from 4 top-level views (List/Board/GTD/Calendar) to 2 main
views (List | Board). The List view now has sub-mode toggle tabs
(Flat/GTD/Calendar) that change the grouping in the left pane of a
split layout, with the detail panel always visible on the right.
ViewModel changes:
- Add ListSubMode property ("flat"/"gtd"/"calendar") with computed
booleans IsFlatSubMode, IsGtdSubMode, IsCalendarSubMode
- Redefine IsTimelineView/IsCalendarView as internal aliases that
combine IsListView with the appropriate sub-mode check
- Remove IsTasksSidebarCollapsed, SidebarWidth, sidebar persistence
- Add SetListSubModeCommand and OnListSubModeChanged handler
View restructure (~1000 lines deleted):
- Replace 4-button view toggle with 2 buttons (List | Board)
- Remove PluginSidebar entirely
- Replace full-screen detail panel with split layout: task list pane
(left) + resize handle + TaskDetailPanel (right)
- Move stats, New Task, Prioritize buttons into list pane header
- Add sub-mode toggle bar (Flat | GTD | Calendar) below header
- GTD and Calendar item templates moved into left pane, controlled
by sub-mode visibility
- Delete standalone GTD Timeline View and Calendar Timeline View
sections (their content is now in the split layout)
Code-behind:
- Remove sidebar wiring from constructor
- Update GetResizeTargetBorder: add "list-detail", remove "gtd-detail"
and "calendar-detail"
Version: 1.26.0 → 1.27.0
Wiki sync: auto-push on save + delete from GitHub
Details
- Add DeletePageFromRemoteAsync to WikiSyncService: deletes the file
from the local clone and commits/pushes the removal to GitHub
- Wire into DeletePagePermanentlyAsync: when permanently deleting a
wiki page, remove it from GitHub first (non-fatal on failure)
- Update confirmation dialog for wiki pages to mention GitHub removal
- Auto-push wiki pages on save: after SaveCurrentPageAsync succeeds,
fire-and-forget PushPageAsync in background (non-fatal on failure)
- Keep manual "Push to Wiki" button as fallback for failed auto-pushes
Remove "Create Note from Task" feature — violates SDK boundary
Details
Tasks plugin must not be aware of Notes. The TaskToNoteService was
sending SDK messages directly to privstack.notes with hardcoded page
structure knowledge, and the context menus exposed "Create Note" items
in both the list view and detail panel.
Removed:
- TaskToNoteService.cs (entire file)
- ConvertToNoteAsync / ConvertToNoteByItemAsync relay commands
- "Create Note" menu item from list view context menu (TasksView.axaml)
- AI context menu from detail panel (TaskDetailPanel.axaml.cs)
- TaskToNoteService field and multi-param SetAiService wiring
Preserved: all other AI features (description rewrite, title generation,
Q&A description builder) which operate within the Tasks plugin boundary.
Fix PATCH endpoint wiping unspecified fields on task/project update
Details
The HandleUpdateTaskAsync and HandleUpdateProjectAsync handlers were
passing the partial PATCH body directly as the SdkAction.Update payload.
Since the SDK treats Update as a full replacement, sending e.g.
{"status":"done"} would wipe title, description, and all other fields.
Added MergeWithExistingAsync helper that reads the current entity,
overlays the PATCH fields on top, and sends the merged result. This
gives proper partial-update (PATCH) semantics to both /tasks/{id} and
/projects/{id} endpoints.
Fix custom fields: delete, edit visibility, and detail panel display
Details
- Settings overlay: add delete button (x) to each custom field row
- Settings overlay: replace static List/Card badges with interactive
ToggleButtons that persist ShowInList/ShowInCard via UpdateAsync
- Detail panel: add Custom Fields section between Notes and Linked Items,
showing name-value pairs bound to SelectedTaskCustomFields
- ViewModel: parameterize DeleteFieldCommand to accept field directly,
add ToggleFieldVisibilityCommand with "list:{id}" / "card:{id}" format
Get notified about new releases