New Features
- 🔗 Heading links — link straight to a heading in another note, and clicking one scrolls you right to it.
- 🎨 Canvas links — link any shape to a note, task, or other vault item, and clicking a link on the canvas now actually opens it.
- 📌 Session restore — tabs, timelines, and viewers come back exactly where you left them instead of jumping to the top.
- 🏠 Home board sync — your Home board layout now travels with you across every device.
- 📄 Large file support — open and read big vault files directly, and find-in-file works inside them just like everywhere else.
- 📥 NotePlan import — bring your NotePlan 3 notes, tasks, and calendar entries into Memry.
- 🕓 Task activity log — open a task and scroll to Activity to see what changed, when, and whether another device replaced an edit.
- ⚡ Natural-language quick-add — type
@tomorroworevery mondaywhen adding a task and Memry turns it into a due date or repeat, with the rest suggested inline. - 🖼️ Image filing choices — filing an image into a note now lets you embed it or keep it as a linked file, and you can create the destination note right from the filing panel.
- 💬 Rich comments — format your comments with a selection toolbar.
- ✏️ Attachment renaming — rename an attachment's title in the Inbox and the filed file takes that name.
- 🗂️ Canvas organisation — browse canvases in a folder tree and rename, duplicate, or delete them.
Improvements
- 📎 One PDF experience — the slash commands, drag-and-drop, and the sidebar all produce the same PDF embed.
- 🚀 Faster everywhere — big speed-ups across the sidebar, graph, editor, canvas, viewers, agent chat, and sync, with much lower memory use over long sessions.
- 📂 Big vault handling — the sidebar note tree now pages past its old ten-thousand-item ceiling, and huge files stay off sync so they can't stall it.
- ⏰ Reminder polish — the reminder and date pickers scroll and stay in view, so their note field, list, and confirm button are always reachable.
- 🔔 Reminder notes — a note typed in the note or journal toolbar reaches the reminder again.
- 🎯 Sync clarity — a note that crosses the sync size limit now tells you which note it is, by name.
- 🧹 Settings tidy-up — retired toggles that no longer did anything.
Fixes
- 📖 Reading position — a note remembers where you were reading when you come back to it.
- 🔤 Heading sizes — headings four through six now render at their own size instead of looking like a top-level heading.
- ⌨️ Shortcuts — Ctrl/Cmd+B stays on Bold in the editor, custom rebinds from Settings actually apply, and the quick-capture fallback survives saving settings.
- 📁 Folder rename — renaming a folder works in vaults large enough to virtualise the sidebar.
- ➕ Second project — the Projects section in the sidebar has a "+" again, so you can add another project.
- 🗑️ Project delete — deleting from the project modal now asks first and closes the modal afterwards.
- 📤 Inbox filing sync — filing an item now syncs everything it produces to your other devices, instead of staying filed only where you filed it.
- 🎯 Dropped files — a dropped file lands in the folder you dropped it on, not one level deeper each time.
- 📝 Frontmatter — simply opening a note no longer rewrites its frontmatter.
- 🔗 Wiki links — links keep their formatting, survive export, and clicking one only affects the pane it lives in.
- 🔄 Sync reliability — large updates, offline edits, and reconnects no longer drop notes, and a linked device follows the right vault.
- 💾 Editor recovery — an integrity check no longer leaves the editor dead; open notes reconnect after a sync reset.
- 📅 Calendar — week columns size correctly, "Today" rolls over at local midnight, Google reconnects revive a disconnected account, and no events get dropped when paging.
- 🔐 Sign-in recovery — a reinstall can finish after the setup token expires, and the recovery screen has a way out with a reachable re-auth button in every locale.
- 🪟 Windows updates — one busy file no longer makes an update impossible.
- 🔕 Notification hygiene — deleted and bulk-dismissed reminders clear their banners instead of lingering.
- 📑 Tabs — Open in New Tab, Cmd-click, and middle-click honour where they should open, open-to-the-side lands in the new pane, and a failed session save is surfaced instead of lost.
- ✅ Task badges — archived tasks no longer inflate project sidebar counts.
- 🖊️ List formatting — turn selected lines into a bulleted, numbered, or checklist.
- 🖱️ Text selection — a marquee drag only starts outside selectable text, so you can select text normally again.
- 🔍 Image viewer — zoom snaps back onto exactly 100% instead of drifting.
- 🎙️ Voice memos — the microphone is released when recording fails, and a cancelled recording is never delivered.
- 🤖 AI agent — stopping a turn takes effect immediately, tool approvals time out instead of hanging forever, and tool activity survives reloading a conversation.
- 🌍 Translations — the snooze-due notification and toast now appear in your language.
- 📊 Search index — saving a note no longer piles up duplicate search entries.
- 🧠 Embeddings — a failed model load retries with backoff instead of giving up for the rest of the session.
- ↩️ Undo — expired entries are pruned so undo can't replay a stale action.
Changelog
Full Changelog: v2026-08-11...v2026-08-17
#1366 refactor(tasks): remove the dead getArchivedTasks helper and its barrel entry @h4yfans
#1278 docs(vault): note the batch-stable notes folder in the embed config read @h4yfans
#1261 docs(vault): correct the stale getConfig reason on the batched embed read @h4yfans
#1558 feat(notes): heading links — resolve them, scroll to them, and write them @h4yfans
#1560 feat(canvas): link a shape to any vault item, and make link clicks work at all @h4yfans
#1552 feat(tabs): the timeline and viewer surfaces come back where you left them @h4yfans
#1551 feat(tabs): a tab comes back to what you left it on, not to the top @h4yfans
#1484 feat(home): sync boards across devices (#1380) @h4yfans
#1482 feat(notes): find inside a large file the way find works everywhere else @h4yfans
#1480 feat(notes): read a large vault file instead of only explaining it @h4yfans
#1372 feat(import): add a NotePlan 3 importer @h4yfans
#1385 feat(tasks): per-task activity log (#122) @h4yfans
#1387 feat(tasks): natural-language dates and repeats in quick-add (#129) @h4yfans
#1386 feat(inbox): choose how an image lands in a note — embed or wiki link (#807) @h4yfans
#1384 feat(comments): rich-text formatting with a selection toolbar @h4yfans
#1383 feat(inbox): rename an attachment's title, and name the filed file after it (#808) @h4yfans
#1156 feat(canvas): folder tree, rename, duplicate and delete for canvases @h4yfans
#1554 fix(tasks): close the project modal on delete and confirm first @h4yfans
#1550 fix(editor): render heading levels 4-6 at their own size @h4yfans
#1549 fix(tabs): a note remembers where you were reading when you come back to it @h4yfans
#1548 fix(shortcuts): keep Ctrl/Cmd+B on Bold in the editor and make settings rebinds apply @h4yfans
#1529 fix(notes): rename a folder in a vault big enough to virtualize the sidebar @h4yfans
#1522 fix(sidebar): give the Projects section a "+" so a second project is reachable @h4yfans
#1537 fix(canvas): re-key the note-edit lock on the fragment, not the sync session @h4yfans
#1540 fix(sync): a pending-note drain stops when the runtime that started it does @h4yfans
#1534 fix(sync): a local-only note's body no longer reaches the server via the CRDT path @h4yfans
#1531 fix(sync): the pending-CRDT-note store survives a torn write instead of failing open @h4yfans
#1533 fix(sync): a snapshot push routes off the pruning endpoint for any note with unmerged server state @h4yfans
#1538 Fix a red main: the reminder telemetry test looks for a label i18n replaced @h4yfans
#1526 fix(snooze): cap the custom snooze dialog so its confirm button stays reachable @h4yfans
#1515 fix(crdt): the store follows the vault uuid a linked device adopts @h4yfans
#1513 fix(crdt): defer a concurrent pending-note drain instead of dropping it @h4yfans
#1506 fix(crdt): stop another vault's journal attaching when the legacy store is inherited @h4yfans
#1502 fix(sync): an integrity teardown reopens the CRDT store instead of leaving the editor dead @h4yfans
#1505 docs(canvas): say what the note-card edit lock actually guards now @h4yfans
#1510 fix(sync): route a note's push away from the pruning endpoint when its merge skipped an unverifiable payload @h4yfans
#1485 fix(inbox): sync everything a filed inbox item produces @h4yfans
#1486 fix(notes): a dropped file lands where it was dropped, not one folder deeper each time @h4yfans
#1472 fix(notes): opening a note leaves its frontmatter alone @h4yfans
#1477 fix(editor): a spec must be registered under its own node type @h4yfans
#1476 fix(sync): keep large-file class off sync, on both sides @h4yfans
#1474 fix(ingest): oversized markdown must never become a CRDT note @h4yfans
#1473 fix(sync): a note that crosses the sync ceiling says so, by name (#1465) @h4yfans
#1469 fix(sync): stamp the orphan tombstone so the server accepts it @h4yfans
#1467 fix(crdt): pace the vault-wide CRDT sweep and pay its failures @h4yfans
#1466 fix(sync): key the CRDT rate limits per device and size the pull budget for a sweep @h4yfans
#1457 fix(editor): a wiki link keeps its formatting, when the formatting is the link @h4yfans
#1456 fix(crdt): rebind open editors after a provider reset @h4yfans
#1453 test(notes): opening a note is a fixed point — for unmarked links @h4yfans
#1451 fix(editor): start a marquee only outside selectable text @h4yfans
#1449 fix(sync): stop the batch CRDT pull from outgrowing the doc cache @h4yfans
#1438 fix(crdt): teach the main-process schema the custom block types @h4yfans
#1437 fix(crdt): build the main-process schema from the shared factory — restores wiki links @h4yfans
#1436 fix(crdt): stop the export path destroying nodes, and share one BlockNote schema @h4yfans
#1389 fix(calendar): week column width and marquee edge auto-scroll (#972) @h4yfans
#1382 fix(auth): let a reinstall finish after the setup token's five minutes @h4yfans
#1381 fix(inbox): hide the convert-type selector for items that can only become a note @h4yfans
#1226 fix(home): persist widget layout at every window width @h4yfans
#1375 fix(settings): retire the two dead journal sidebar visibility toggles @h4yfans
#1376 fix(sync): make the recovery re-auth button reachable in every locale @h4yfans
#1377 fix(notes): stop the notes-folder setting from making that folder unbrowsable @h4yfans
#1166 fix(inbox): enqueue a sync push when an item is filed @h4yfans
#1378 fix(embeddings): back off model-load retries instead of latching on first failure @h4yfans
#1369 fix(i18n): catch interpolated template literals in the toast lint gate @h4yfans
#1354 fix(tooling): implement the docs-gate escape hatch and restore the pre-push docs check @h4yfans
#1360 fix(tabs): surface quit-time tab-state save failures instead of swallowing them @h4yfans
#1222 fix(updater): stop one busy file from making a Windows update impossible @h4yfans
#1373 fix(desktop): unbreak the two test files that predate the test typecheck gate @h4yfans
#1362 fix(crdt): keep compaction-window local edits counted as unpushed snapshot bytes @h4yfans
#1370 fix(tooling): serialise the Electron binary install and swap it in atomically @h4yfans
#1364 fix(build): audit the sync host the build stages in the cert-pin gate @h4yfans
#1347 fix(tabs): honour inNewTab and inBackground for sidebar Open in New Tab, Cmd-click and middle-click @h4yfans
#1365 fix(agent): hide tombstoned conversations from ConversationStore.getById @h4yfans
#1357 fix(notes): surface and page past the sidebar note-tree 10k ceiling @h4yfans
#1353 fix(sync): serialize SyncWorkerBridge start/stop so a raced start does not lose the worker @h4yfans
#1349 fix(agent): honour a stop pressed before the backend returns its run handle @h4yfans
#1350 fix(sync): emit terminal transfer phases so a dead attachment transfer clears its overlay @h4yfans
#1346 fix(crdt): persist, broadcast and write back the remote updates a successful compaction buffered @h4yfans
#1352 fix(notifications): emit a dismissed event for every bulk-dismissed reminder @h4yfans
#1344 fix(tasks): stop counting archived tasks in project sidebar badges @h4yfans
#1345 fix(settings): drop the dead AI Connections journal toggle and its docs claims @h4yfans
#1314 fix(agent-chat): time out pending tool approvals instead of holding them for the app's lifetime @h4yfans
#1310 fix(inbox): translate the snooze-due notification and toast @h4yfans
#1306 fix(viewers): snap float-drifted image zoom back onto exactly 100% @h4yfans
#1309 fix(sync): resolve certificate pins once, for the connecting host @h4yfans
#1300 fix(tabs): open to the side into the pane the split creates @h4yfans
#1302 fix(crdt): stop compaction from writing into a doc entry close() already retired @h4yfans
#1304 fix(tabs): gate tab-strip scrolling on prefers-reduced-motion @h4yfans
#1297 fix(tabs): surface tab-state save failures instead of losing the session silently @h4yfans
#1294 fix(notifications): clear the delivered banner when a reminder is deleted or bulk-dismissed @h4yfans
#1301 fix(undo): prune expired entries inside popUndoEntry so undo() cannot replay a stale action @h4yfans
#1295 fix(crdt): resolve the write-back doc by note id at fire time @h4yfans
#1275 fix(editor): scope the editor link-click handler to its own pane @h4yfans
#1274 fix(undo): subscribe useUndoTracker to the stack and keep reads out of render @h4yfans
#1272 fix(notifications): release reminder notification closures and de-duplicate snooze banners @h4yfans
#1271 fix(onboarding): tear the first-run tour down when the hook unmounts @h4yfans
#1267 perf(sync): trim the offline task clock log to a debug line @h4yfans
#1256 fix(tooling): stop the secret scanner reading fts5 tokenize= as a credential @h4yfans
#1255 fix(agent-chat): persist settled tool activity rows so reloaded transcripts keep them @h4yfans
#1257 fix(projections): abort every outstanding reconcile pass at stop() @h4yfans
#1258 fix(sync): never drop a CRDT update that overflows one request @h4yfans
#1259 fix(telemetry): keep scraped page metadata out of dimensions and diagnostics @h4yfans
#1260 fix(sync): dispose the attachment upload queue on sync-runtime teardown @h4yfans
#1234 fix(calendar): roll 'Today' and calendar ranges over at local midnight @h4yfans
#1229 fix(inbox): close the playback-waveform AudioContext on every decode exit path @h4yfans
#1227 fix(voice): close the AudioContext when recorder waveform setup throws @h4yfans
#1231 fix(ai-inline): abort, stop at quit, and cap the inline chat server @h4yfans
#1217 fix(sync): reset per-note write-back and CRDT maps on vault teardown @h4yfans
#1250 fix(shortcuts): keep the quick-capture fallback shortcut across settings saves @h4yfans
#1243 fix(projections): abort the embedding backfill on stop and drain deferred notes after a reindex @h4yfans
#1246 fix(crdt): attribute a handshake-opened Y.Doc to the sender window @h4yfans
#1221 fix(calendar): let a Google reconnect revive the account source disconnect tombstoned @h4yfans
#1223 fix(sync): seed a clock on imported Google Calendar events so pushes stop failing @h4yfans
#1224 fix(editor): turn selected lines into a bulleted, numbered or check list @h4yfans
#1219 fix(calendar): page through Google events.list so no events are dropped @h4yfans
#1228 fix(auth): give the recovery screen a way out and stop calling expired setup tokens invalid @h4yfans
#1148 fix(projections): restart the projection runtime when startProjectionRuntime gets new projectors @h4yfans
#1164 fix(agent): stop the vault MCP server when the agent runtime fails to start @h4yfans
#1185 fix(agent): stop the turn subprocess when the gap before the turn loop throws @h4yfans
#1186 fix(agent): escalate SIGTERM to SIGKILL and reap CLI children before shutdown resolves @h4yfans
#1171 fix(agent): settle CLI turns when the child process fails to spawn @h4yfans
#1182 fix(agent-mcp): keep a lifetime 'error' listener on the MCP server @h4yfans
#1179 fix(agent): kill an abandoned turn child before cleanup untracks it @h4yfans
#1172 fix(sync): back off between NetworkError retries when the machine is online @h4yfans
#1181 fix(sync): detach the token-refresh callback when the sync runtime stops @h4yfans
#1176 fix(agent): drain stderr for title and summary turns @h4yfans
#1155 fix(agent): bound the wait for an in-flight agent start during vault teardown @h4yfans
#1153 fix(sync): throttle the reconnect CRDT sweep to editor-less cached docs @h4yfans
#1178 fix(voice): reap the Whisper utility process when its start times out @h4yfans
#1167 fix(sync): back off exponentially between UploadQueue network retries @h4yfans
#1162 fix(sync): release active upload/download tracking on failed transfers @h4yfans
#1150 fix(shutdown): scope the window flush handshake per window and request @h4yfans
#1147 fix(database): close the previous connection before re-initializing @h4yfans
#1146 fix(export): destroy the hidden PDF window when rendering fails @h4yfans
#1208 fix(editor): stop StrictMode's double effect from destroying every editor @h4yfans
#1127 fix(agent-chat): scope tool result updates to the owning conversation @h4yfans
#1131 fix(voice): release the microphone when the recorder fails to start @h4yfans
#1129 fix(agent): cache the local provider capability probe instead of re-running it every turn @h4yfans
#1140 fix(editor): destroy BlockNote editors on unmount; stop remounting the note and journal editors per external update @h4yfans
#1138 fix(viewers): load the PDF once and window the thumbnail rail @h4yfans
#1137 fix(tabs): scope useTabActions to a stable actions context @h4yfans
#1136 fix(graph): end node drags that never deliver a mouseup @h4yfans
#1135 fix(capture-bar): stop rebinding the q listener per keystroke and pick one owner in split view @h4yfans
#1134 fix(hooks): keep the useAllTags tag-event subscription stable across renders @h4yfans
#1130 fix(voice): stop delivering a cancelled recording @h4yfans
#1125 fix(agent-chat): evict agent conversation transcripts beyond an LRU cap @h4yfans
#1123 fix(agent): destroy in-flight MCP connections when the server stops @h4yfans
#1121 fix(agent): settle pending tool approvals as denied when a turn is cancelled @h4yfans
#1119 fix(main): route all window fan-outs through guarded broadcastToAllWindows + lint guard @h4yfans
#1122 fix(crdt): release a window's Y.Docs when the window is destroyed @h4yfans
#1120 fix(sync): throttle the vault-wide CRDT sweep at the end of full sync @h4yfans
#1116 fix(sync): debounce CRDT snapshot pushes instead of one per update batch @h4yfans
#1118 fix(sync): merge buffered CRDT updates and persist them across shutdown @h4yfans
#1114 fix(search): incremental abortable FTS reconcile + stop duplicate FTS rows on every save @h4yfans
#1112 fix(projections): route events by handles() and bound each lane queue @h4yfans
#1109 fix(sync): stop retaining full note markdown in writeback debugState @h4yfans
#1110 fix(calendar): latch Google sync runner start so concurrent callers cannot orphan an interval @h4yfans
#1536 Reminder note typed in the note and journal toolbars reaches the reminder again @h4yfans
#1530 docs(crdt): the crdt_pull budget is 600/60s per device, not 300 shared @h4yfans
#1535 Reminder picker: scroll the presets panel so its note field and reminder list stay reachable @h4yfans
#1539 Cap the date picker popover so its trailing time row stays reachable @h4yfans
#1525 Telemetry for the reminder path: reminder_created and reminder_deleted @h4yfans
#1523 Reminder picker: pin the confirm button so the custom date & time panel can't clip it @h4yfans
#1500 One path to a PDF embed: /pdf, /file, drag and sidebar all produce the same block @h4yfans
#1481 test(notes): cover the large-file paths codecov found bare @h4yfans
#1479 perf(ingest): a sidebar row from stat alone, metadata on idle @h4yfans
#1478 perf(notes): calibrate the note-class thresholds against a parse budget (#1463) @h4yfans
#1470 test(ingest): typecheck the vault watcher and CRDT provider suites @h4yfans
#1452 test(editor): gate renderer↔main schema parity the way ipc:check gates IPC @h4yfans
#1447 refactor(editor): one home for the marquee start decision @h4yfans
#1448 test(editor): start marquee e2e drags from the gray margin @h4yfans
#1374 ci(desktop): cache the verified Electron release zip so E2E shards stop re-downloading it @h4yfans
#1368 refactor(tabs): delete the unreachable TabBar, TabBarWithOverflow, and animation variants @h4yfans
#1359 perf(undo): wake on the exact entry expiry instead of a 1 Hz sweep @h4yfans
#1371 build(desktop): typecheck the desktop test suites @h4yfans
#1363 refactor(journal): remove five production-dead journal-utils date/opacity helpers @h4yfans
#1367 perf(tabs): make the tab-state save dedupe short-circuit, and delete the unreachable IndexedDB adapter @h4yfans
#1355 perf(crdt): bound the CRDT update queue across notes, not just per note @h4yfans
#1361 perf(notes): narrow the note_cache SQL projection for the sidebar tree shape @h4yfans
#1358 perf(tasks): drop sync bookkeeping from the app-root tasks:list payload @h4yfans
#1316 perf(notes): give the sidebar tree a lighter notes:list row shape @h4yfans
#1315 perf(sync): cap the main-process corrupt-item, quarantine and worker-bridge maps @h4yfans
#1313 perf(sync): prune completed transfer progress and stale conflicts from renderer state @h4yfans
#1299 perf(telemetry): enforce a hard key cap on the throttle map with per-entry windows @h4yfans
#1312 perf(editor): bound the renderer link-preview cache with a 200-entry LRU @h4yfans
#1311 test(sync): give the shared engine WebSocket mock a real connectionGeneration @h4yfans
#1296 perf(sync): ignore a worker thread the bridge has already walked away from @h4yfans
#1305 perf(sync): cache the vault uuid per data-db handle so every call site reads it once @h4yfans
#1303 chore(hooks): delete dead useAIConnections hook and its mock service @h4yfans
#1298 chore(hooks): delete unused use-journal-scroll hook @h4yfans
#1308 refactor(agent): delete the dead AgentRuntime.inFlight registry and the no-op backend cancel() surface @h4yfans
#1276 perf(viewers): keep the audio player shell out of the timeupdate render path @h4yfans
#1277 perf(tabs): scroll the active tab into view once per activation, not three times @h4yfans
#1273 perf(hint-mode): bind the capture keydown listener once per mount @h4yfans
#1270 perf(ipc): cap the flush handshake at one ipcMain listener and free window-rpc on teardown @h4yfans
#1269 perf(sync): reuse the pinned https.Agent and cache the vault identity @h4yfans
#1266 perf(hooks): cancel renderer timers and rAF handles on unmount @h4yfans
#1265 perf(sync): back off idle wakeup sources in the network monitor and pull tick @h4yfans
#1264 perf(ipc): cap and sweep the IPC error-throttle map @h4yfans
#1263 perf(main): release the launch-timeline vault-status listener when auto-open settles @h4yfans
#1262 perf(sync): drop the stale exit listener when worker shutdown times out @h4yfans
#1268 perf(crdt): destroy the superseded Y.Doc when a note is reopened mid-close @h4yfans
#1254 test(crypto): make the corrupted-checksum recovery-phrase case deterministic @h4yfans
#1249 perf(editor): throttle file drag-over measuring to one frame @h4yfans
#1248 perf(telemetry): make the log-ship ring buffer O(1) per line @h4yfans
#1247 perf(crdt): route renderer CRDT updates per note instead of one global fan-out @h4yfans
#1245 perf(agent-chat): splice upserted messages instead of re-sorting the transcript @h4yfans
#1242 perf(image): bound in-flight image processing requests and queue the rest @h4yfans
#1244 perf(graph): walk the local graph outwards instead of building the whole vault @h4yfans
#1241 perf(vault): cache the parsed vault config instead of re-reading config.json per call @h4yfans
#1240 perf(projections): lane-scoped flush and a bounded, abortable stop drain @h4yfans
#1239 perf(viewers): pan the image viewer without a React render per mousemove @h4yfans
#1238 perf(agent-chat): debounce the mention picker's search and calendar queries @h4yfans
#1237 perf(sync): lower the sync emitter listener ceilings from 50 to 10 @h4yfans
#1236 perf(hooks): bind shortcut keydown listeners once instead of per state change @h4yfans
#1235 perf(canvas): gate the scene serialize on a cheap fingerprint @h4yfans
#1233 perf(snooze): share one minute tick across all snooze countdowns @h4yfans
#1232 perf(voice): stop double-buffering and retaining the decode when preparing a voice memo @h4yfans
#1230 perf(voice): sample the recorder waveform only on committed frames @h4yfans
#1220 perf(agent): stream assistant deltas only to the windows showing the conversation @h4yfans
#1210 perf(agent): list and decrypt conversation history once per turn @h4yfans
#1213 perf(settings): make the settings:changed echo cost zero re-renders @h4yfans
#1211 perf(sync): stop materializing every synced row during the manifest check @h4yfans
#1214 perf(sync): stop scanning the queue per enqueue and SQLite per pause check @h4yfans
#1209 perf(window): debounce window-bounds persistence at 1.5s and drop no-op writes @h4yfans
#1218 perf(main): consolidate the three 60s pollers onto one shared minute tick @h4yfans
#1212 perf(sync): throttle attachment progress and key it per transfer @h4yfans
#1168 perf(graph): publish physics positions without a graphology event per node @h4yfans
#1157 perf(graph): scope the per-frame physics repaint to movement only @h4yfans
#1183 perf(updater): one shared updater subscription with slice selectors @h4yfans
#1177 perf(sync): pace CRDT write-back by what the last pass cost @h4yfans
#1169 perf(tasks): derive workspace badge counts in a single pass @h4yfans
#1163 perf(graph): reuse the physics neighbour grid instead of rebuilding it every tick @h4yfans
#1184 perf(canvas): coalesce card-overlay recompute and stop measuring the clip per commit @h4yfans
#1180 perf(editor): debounce find-in-page query so a typed burst costs one DOM walk @h4yfans
#1175 perf(graph): reuse one Sigma instance in the local graph panel @h4yfans
#1174 perf(tabs): serialize the tab tree once per debounce window @h4yfans
#1173 perf(editor): stop measuring every block on each marquee frame @h4yfans
#1170 perf(editor): scope active-heading lookups to the pane and cache resolved nodes @h4yfans
#1165 perf(editor): stop hover dismiss from re-rendering the editor on every scroll @h4yfans
#1158 perf(folder-view): coalesce note-update folder-view cache invalidation @h4yfans
#1154 perf(editor): scope the date-pill MutationObserver to the DOM that changed @h4yfans
#1152 perf(vault): resolve a note's embeds against one config read and one index scan @h4yfans
#1149 perf(calendar): give window-focus Google sync a 2-minute cooldown @h4yfans
#1132 perf(agent-mcp): reuse the MCP server across stateless HTTP requests @h4yfans
#1133 perf(agent-chat): derive the streaming flag in the reducer instead of rescanning transcripts @h4yfans
#1126 perf(agent-chat): coalesce streamed deltas and scope message re-renders @h4yfans
#1128 perf(agent): detect CLI binaries asynchronously with a shared probe cache @h4yfans
#1139 perf(graph): patch the live graph in place instead of rebuilding sigma on every save @h4yfans
#1124 perf(crdt): send Yjs updates as Uint8Array across IPC instead of number[] @h4yfans
#1117 perf(secrets): latch the completed keytar migration per secret @h4yfans
#1115 perf(projections): stream reconcileMissingFiles off the main thread @h4yfans
#1111 perf(projections): throttle inbox stats rebuilds instead of one per event @h4yfans
#1113 perf(telemetry): journal queue enqueues instead of rewriting the mirror @h4yfans
#1509 design(crdt): why a large vault waits ten minutes after sign-in @h4yfans
#1501 docs(sync): list every CRDT route in the sync-protocol endpoint table @h4yfans
#1351 docs(sync): describe the conflict flow that actually ships on the Conflict & Health page @h4yfans
#1317 refactor(crdt): split the CRDT store bootstrap out of crdt-provider and drop its max-lines override @h4yfans
#1307 docs(shortcuts): describe hint mode's letter badges instead of numeric ones @h4yfans
#1553 chore(lint): add anti-slop oxlint plugin as an opt-in check @h4yfans
#1356 chore(deps): land bot dependency bumps in one consolidated lockfile @h4yfans