Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 34 of 127 Next →
February 25, 2026
patch Notes

Fix GroupBlock children alignment: pull left past handle gutter

Details

Children ItemsControl gets Margin="-38,0,0,0" to compensate for the parent

BlockWrapper's handle gutter (focus accent 4px + handles 28px + 6px gap).

This shifts the group's content flush left to align with the page title.

patch Notes

Fix GroupBlock alignment: lightweight organizer instead of visual container

Details

Replace bordered box with padding (which pushed children ~50px right of page

title) with a thin left accent line and zero padding. Children now render at

full width — their BlockWrapper handles provide natural alignment identical

to top-level blocks. Header made compact (smaller chevron, caption-sized label).

The group block is an organizational tool, not a layout container.

minor Notes

Notes block editor overhaul: GroupBlock, multi-select, drag-to-split, list sub-blocks

Notes 1.62.3 → 1.63.0 | 221c748a
Details

Phase 1 - Fix UTI drag error: Replace bare "PageBlock" drag format key with

reverse-DNS "com.privstack.pageblock" constant to fix macOS UTI validation error.

Phase 2 - Fix child block alignment: Remove 24px left indent from ChildBlocksHost

so nested block text aligns with parent title text.

Phase 3 - GroupBlock: New container block type for organizing related blocks.

Includes GroupBlock model with label/collapse/children, serialization support,

GroupBlockEditor control with collapse toggle and add-block button, picker entry.

Phase 4 - Multi-select: Shift+Click range select, Cmd+Click toggle select.

MultiBlockSelection model tracks selected indices with anchor. Context menu

shows Group Selected / Delete Selected / Move Up / Move Down when multi-selected.

Phase 5 - Drag-to-split columns: Center-zone drop creates ColumnLayoutBlock

with both blocks side-by-side (50/50). Tables/TOC refuse split and fall back

to reorder. BlockTemplateFactory extracts shared block DataTemplates used by

ColumnLayoutEditor, GroupBlockEditor (replaces limited Paragraph/Heading-only

inline templates with full block type support).

Phase 6 - List sub-blocks: BulletListEditor, NumberedListEditor, TaskListEditor

now render PageListItem.ChildBlocks via BlockTemplateFactory. BlockTreeHelper

CollectBlockText extended to traverse list item ChildBlocks for word count.

Version: 1.62.3 → 1.63.0

patch CalendarRss

Add HTTP integration tests for ICS fetch and RSS fetch services

Details

Refactored IcsFetchService and RssParserService to accept HttpClient

via internal constructor (with InternalsVisibleTo for test projects),

enabling mock HTTP transport in tests.

IcsFetchServiceTests (8 tests): ETag/If-None-Match headers, 304 Not

Modified returns null, multi-event parsing, error handling.

RssFetchServiceTests (11 tests): RSS and Atom feed parsing, article

URL/read/star extraction, refresh deduplication by URL, custom title

preservation, network error handling.

patch Tasks

Add integration tests for GitHubIssueSyncService (28 tests)

Details

Extract IGitHubIssueApiClient interface from the sealed GitHubIssueApiClient

to enable mocking the HTTP layer in tests. The sync service constructor now

accepts the interface instead of the concrete class.

Tests cover the full sync orchestration:

  • Source validation and access token retrieval
  • Pull sync: new issues create tasks, remote-newer updates existing tasks
  • Push sync: local-newer pushes to GitHub (bidirectional only), skips for pull-only
  • Conflict resolution: same-timestamp skips, last-write-wins by updated_at
  • Orphan handling: full sync marks missing open tasks as done, incremental skips
  • Comment sync with deduplication by GitHubCommentId
  • Timeline event sync with untracked event filtering
  • Filter resolution (assignee "me" → username, labels joined with comma)
  • Source status updates on success and error
  • Cancellation token propagation
  • Progress reporting
  • Tasks from other sources are not affected by sync
  • PushTaskAsync: bidirectional push, pull-only skip, non-GitHub task skip,

missing task/source ref handling

← Prev Page 34 of 127 Next →

Get notified about new releases