Skip to content

chore: sync upstream main into PR #2218 branch - #1

Closed
Pedrohgv wants to merge 28 commits into
fix/hide-linked-calendar-eventsfrom
chatgpt/sync-upstream-2218
Closed

Pedrohgv wants to merge 28 commits into
fix/hide-linked-calendar-eventsfrom
chatgpt/sync-upstream-2218

Conversation

@Pedrohgv

@Pedrohgv Pedrohgv commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Temporary sync PR to merge callumalpass/tasknotes@fe11e8f into fix/hide-linked-calendar-events and resolve stale conflicts for upstream PR callumalpass#2218.

callumalpass and others added 28 commits August 21, 2026 23:51
* Clear contexts and blockedBy on empty-array updates

The frontmatter deletion pass in removeUnsetMappedFields only removed
the contexts and blockedBy keys when the update held a literal
undefined, which JSON cannot express. HTTP clients sending
PUT {"contexts": []} or {"blockedBy": []} therefore got a 200 with
the previous value silently left in place. Use the same hasOwnProperty
plus empty-array deletion pattern that projects and reminders already
use.

* docs: credit PR contribution

---------

Co-authored-by: callumalpass <callumalpass@gmail.com>
registerBasesTaskList retried registration five times with 200ms sleeps
when the Bases plugin had not finished loading, and onload awaited the
whole thing. On mobile, where plugin load ordering is less predictable,
that could stall plugin startup for a full second.

registerBasesIntegration already owns retrying: it schedules a timer
that re-attempts until the views are actually registered, checks the
Bases plugin is enabled before each try, and is torn down on unload.
So drop the inner loop entirely and make registerBasesTaskList a single
attempt that reports its result, leaving one retry mechanism instead of
two. onload no longer awaits it either.
Avoid blocking plugin startup while Bases registration retries asynchronously.\n\nThanks to @tgrosinger for the contribution.
# Conflicts:
#	docs/releases/unreleased.md
Show the configured Google or Microsoft calendar name on event cards.\n\nThanks to @martin-forge for the contribution.
Normalize Google Calendar HTML descriptions to safe readable plain text.\n\nThanks to @martin-forge for the contribution.
…lumalpass#2191)

Prevent moved recurring occurrences from rescheduling their replaced original date.\n\nThanks to @martin-forge for the contribution.
Keep occurrence-template filename suffixes visible while preserving collision and sanitization safeguards.\n\nThanks to @raphaelfaouakhiri for the contribution.
…allumalpass#2236)

Reconcile externally added eligible tasks on startup without changing first-run baselining or duplicating linked events.\n\nThanks to @raphaelfaouakhiri for the contribution.
Record recurring skips against the acted-on occurrence rather than a view-wide date.\n\nThanks to @renatomen for the contribution.
# Conflicts:
#	docs/releases/unreleased.md
The desktop settings toolbar used justify-content with a fixed gap and
the tab nav used overflow-x: auto with nowrap, so on constrained settings
pane widths the final tab (Integrations, which hosts the Google Calendar
OAuth connection) was clipped out of view entirely.

Let the toolbar and tab nav wrap instead of scroll, pin the documentation
link to the end via margin-inline-start: auto, and allow the nav to grow
to a second line. Verified in the live test vault at a 520px settings
width: all six tabs fully visible with no horizontal scrolling.

Thanks to @nextstitch and @YongcaiHuang for reporting and confirming.
callumalpass#2255: Obsidian's virtualised reading view deletes direct children of
.markdown-preview-sizer on every render pass, so the injected task card
was removed per frame while scrolling and ReadingModeWidgetObserver
re-injected it the next frame, producing continuous DOM churn that made
notes visibly jump. The observer now defers re-injection until scrolling
has settled (200ms quiet period, polled per frame), so the widget is
restored once instead of fighting the virtualiser. Also dispose the
injection scheduler on cleanup.

callumalpass#2256: applyDefaultKanbanSwimLaneOrder fell back to alphabetical order
for non-priority/status properties since swimlane ordering was added,
discarding the encounter order that carried the Bases view sort. The
default now preserves encounter order, so a formula/property sort like
daysUntilDue floats the swimlane holding the top-sorted task to the top
of the board again. Explicit swimLaneOrder JSON and priority/status
defaults are unchanged.

Live smoke in the test vault: two full scroll sessions of a 118-section
task note produced 4 widget DOM events total (previously a continuous
per-frame cycle) with the card restored after settling; a Kanban base
sorting by formula.daysUntilDue with note.projects swimlanes ordered
rows by due date. Thanks to @logicelf and @tsweezy for the reports.
Add context-menu completion date choices, optional submenu grouping, and confirmed recurring-instance reactivation on reschedule. Preserve recurring history on time-only edits and use recurrence instance identity in calendar menus.

Thanks to @renatomen for the contribution.
@Pedrohgv
Pedrohgv force-pushed the fix/hide-linked-calendar-events branch from 7ebacc5 to 7b81d96 Compare September 1, 2026 09:33
@Pedrohgv Pedrohgv closed this Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants