Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 2 of 53 Next →
February 28, 2026
minor Snippets

Full-featured GitHub Gists integration for Snippets plugin (v1.9.0)

Snippets 1.8.0 → 1.9.0 | 10faac40
Details

Adds bidirectional gist sync and full gist management capabilities:

Models:

  • GistSource: add sync_direction, remote_updated_at, html_url, is_starred, is_own
  • Snippet: add gist_content_hash for dirty detection via SHA256

GitHubGistApiClient:

  • Add CreateGistAsync, UpdateGistAsync, DeleteGistAsync for write operations
  • Add StarGistAsync, UnstarGistAsync, IsGistStarredAsync for star management
  • Add html_url field to GitHubGist DTO

GistSyncService:

  • Refactor SyncAsync to branch on sync_direction (pull_only vs bidirectional)
  • Bidirectional: compare content hashes (local dirty) and timestamps (remote dirty),

push local changes, pull remote changes, remote wins on conflict

  • Add PublishSnippetAsGistAsync: create gist, link snippet, set up collection
  • Add PushSnippetAsync: push local edits to GitHub
  • Add DeleteGistAsync: delete from GitHub, unlink snippets
  • Add RenameGistAsync: update gist description on GitHub
  • Add ToggleStarAsync: star/unstar with local state persistence

GistSourcesViewModel (overlay):

  • Add ToggleStar, StartRename/ConfirmRename/CancelRename, DeleteGistFromGitHub
  • Add OpenInBrowser, CopyEmbedCode, ToggleSyncDirection commands
  • GistSourceEntry: add IsStarred, IsOwn, SyncDirection, IsRenaming, EditName, HtmlUrl
  • Ownership gating: rename/delete only available for owned gists
  • Populate new fields in LoadSourcesAsync and AddSelectedGistAsync

SnippetsViewModel (detail panel):

  • Add SelectedSnippetGistSource, IsGistLinked computed property
  • Add publish dialog state: IsPublishingGist, PublishGistDescription, PublishGistIsPublic
  • Add ShowPublishGistDialog, CancelPublishGist, ConfirmPublishGistAsync commands
  • Add PushToGistAsync, CopyGistEmbedCodeAsync, OpenGistInBrowser commands

GistSourcesOverlay.axaml:

  • Replace remove button with three-dot MenuFlyout (Open, Embed, Rename, Delete, Remove)
  • Add star toggle button on source cards
  • Add sync direction toggle (pull_only ↔ bidirectional) as clickable label
  • Add inline rename with TextBox swap + confirm/cancel buttons

SnippetsView.axaml:

  • Add "gist" text badge next to language badge for gist-linked snippets
  • Add Push, Embed, Open in Browser icon buttons for gist-linked snippets
  • Add Publish button with GitHub icon for unlinked snippets
  • Add inline publish panel with description, public/secret toggle, publish/cancel

SnippetsPlugin.cs:

  • Add sync_direction indexed field to gist_source schema
  • Bump version 1.8.0 → 1.9.0 (csproj + Metadata)
  • Update DetailedDescription to mention bidirectional gist sync
minor Snippets

Add GitHub Gists integration to Snippets plugin (v1.8.0)

Snippets 1.7.6 → 1.8.0 | 7f911b1d
Details

Pull-only sync from GitHub Gists into local snippets. Each gist file

becomes a snippet, auto-grouped into a collection named after the gist

description. Follows the Notes plugin's Wiki Sources pattern.

New files:

  • GistSource model with sync status tracking
  • GitHubGistApiClient (paginated list + single-gist fetch)
  • GistSourceService (SDK CRUD wrapper for gist_source entities)
  • GistSyncService (orchestrates pull sync with file diffing)
  • GistSourcesViewModel (overlay state machine with add/sync/remove)
  • GistSourcesOverlay (modal UI using shared adaptive:ModalOverlay)

Modified files:

  • Snippet: added gist_source_id and gist_filename tracking fields
  • SnippetsPlugin: IConnectionConsumer (gist scope), gist_source entity

schema, service wiring, WipeTargets

  • SnippetsViewModel: lazy GistSourcesViewModel, OpenGistSources command
  • SnippetsView: gear icon with MenuFlyout, overlay embedding
  • csproj: version bump 1.7.6 → 1.8.0
minor Tasks

GitHub Projects v2 full sync: create tasks from project items

Tasks 1.28.0 → 1.29.0 | e047b4e8
Details

GitHub Project sync previously only linked already-synced tasks to a

PrivStack project. Adding a project without also adding each repo as an

issue source resulted in zero tasks. This makes GitHub Projects a

self-contained sync source.

Changes:

  • Expand GraphQL content fragment to fetch full issue data (body, state,

author, assignees, labels, comments, timestamps) from project items

  • Add project status → PrivStack status mapping with fuzzy column name

matching (Todo/In Progress/Done/Review/Blocked/etc.)

  • Add MapProjectItemToNewTask and UpdateTaskFromProjectItem factories

that create/update tasks directly from project items, with project

column status taking priority over issue state

  • Rewrite GitHubProjectSyncService.SyncAsync to create missing tasks,

update existing tasks when remote is newer or column changed, and

link tasks to the PrivStack project

  • Fix issue sync dedup: broaden task lookup to all github_issue tasks

by source_ref (not just tasks from the current source), preventing

duplicates when both project and issue sources cover the same repo

  • Add push ownership guard: only push changes to GitHub if the source

that created the task owns it

  • Fix orphan detection to only mark tasks owned by the current source

Version bump: Tasks 1.28.0 → 1.29.0

February 27, 2026
minor Tasks

Add View Settings tab with item density modes to Tasks plugin

Tasks 1.27.0 → 1.28.0 | 8dcf1085
Details

Move Flat/GTD/Calendar grouping selector from inline sub-mode toggle

into a new "View" tab in Tasks Settings. Add "List Item Density" setting

with Full/Balanced/Compact modes that control item card visual density:

  • Full: status color bar, priority label, timer button, tags
  • Balanced (default): priority dot, title, metadata, tags
  • Compact: priority dot, title, metadata only

Remove drag handle from all densities (press-and-hold drag still works).

Both ListSubMode and ListItemDensity persist across restarts via

IPluginSettings. StatusMessage moved into the header row to reclaim

vertical space formerly used by the sub-mode toggle row.

minor Tasks

Unify Tasks views: List (with sub-modes) | Board

Tasks 1.26.0 → 1.27.0 | 22e2e7dc
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

← Prev Page 2 of 53 Next →

Get notified about new releases