···1616## 2026-02-19
17171818Desktop - Themes
1919-- [x] feat(themes): implement themes-as-extensions Phase 1+2 — unified lifecycle and cmd palette switching (213b)
2020- - Themes are CSS-only extensions served via peek://theme/ protocol
2121- - Switch themes from command palette, auto-discovers installed theme extensions
2222- - Includes default "Peek" theme with bundled fonts
2323-- [x] feat(theme): add 七十二候 micro-seasons theme with traditional Japanese colors (d031)
2424- - Colors change automatically every ~5 days based on Japan's 72 micro-seasons calendar
2525- - Uses 伝統色 (traditional Japanese colors) with automatic dark mode derivation via color-mix()
2626-- [x] fix(themes): copy fonts to theme-peek extension and fix font URLs (da4b)
2727-- [x] fix(editor): improve syntax highlighting readability in dark mode (de99)
1919+- [x] Switchable themes from command palette — themes are now installable CSS extensions ([213b](https://tangled.org/burrito.space/peek/commit/213b4794a5f6dac0f29da22b9317c41fd23563d9))
2020+- [x] Add 七十二候 micro-seasons theme — colors change automatically every ~5 days based on Japan's 72 seasons calendar ([d031](https://tangled.org/burrito.space/peek/commit/d031c4f42b804bbe2442c1169069264c6ecfa326))
2121+- [x] Fix theme font loading and URLs ([da4b](https://tangled.org/burrito.space/peek/commit/da4b78bf3077013c31ba650f02dba8a0b393eff9))
2222+- [x] Improve syntax highlighting readability in dark mode ([de99](https://tangled.org/burrito.space/peek/commit/de993e4710b2c02369c0a0ef378c908f6e11f583))
28232924Desktop - Groups
3030-- [x] feat(groups): add workspace persistence — save and restore window layouts per group (1a25)
3131-- [x] feat(groups): add quick wins — close, search scope, switch, pin (b8a6)
3232- - Close all windows in group, scope search to group, switch between groups, pin windows
3333-- [x] test(groups): add unit tests for groups quick wins (805d)
2525+- [x] Save and restore window layouts per group ([1a25](https://tangled.org/burrito.space/peek/commit/1a25f1d8742a52ec3e849f99b9465cafc61f3089))
2626+- [x] Close all windows in group, scope search to group, switch between groups, pin windows ([b8a6](https://tangled.org/burrito.space/peek/commit/b8a6befeb2eff51b5638aa4b790b77a74c4ddf52))
2727+- [x] Add unit tests for group quick wins ([805d](https://tangled.org/burrito.space/peek/commit/805d0993e4c4edc294b57bd463bcfef71d9f0266))
34283529Desktop - Widget System
3636-- [x] feat(sheets): add widget sheet extension with freeform layout (9644)
3737-- [x] feat(hud): migrate HUD to widget sheet system with individual widget pages (4ec6)
3838-- [x] feat(extensions): add widget demo extension (7aeb)
3939-- [x] feat(grid): add freeform layout mode with drag/resize editing (6f05)
4040- - New "freeform" viewMode for peek-grid — drag to move, edge-drag to resize, snap-to-grid
3030+- [x] Add widget sheet extension with freeform layout ([9644](https://tangled.org/burrito.space/peek/commit/96449d04269ac0a14740bad03067ddf2e784b6e3))
3131+- [x] Migrate HUD to widget sheet system with individual widget pages ([4ec6](https://tangled.org/burrito.space/peek/commit/4ec60504040874495d9439636db38513188aad46))
3232+- [x] Add widget demo extension ([7aeb](https://tangled.org/burrito.space/peek/commit/7aeb1baa90812f18a26699035eab6487294c78fd))
3333+- [x] Add freeform layout mode with drag-to-move, edge-drag-to-resize, and snap-to-grid ([6f05](https://tangled.org/burrito.space/peek/commit/6f05c81f835653363d7f5df6ede6f48878495031))
41344235Desktop - Editor
4343-- [x] feat(editor): add vim :set wrap/nowrap, :set number/nonumber, and :q command (4750)
4444-- [x] feat(editor): persist vim :set settings (wrap, lineNumbers) across sessions (ab30)
4545-- [x] fix(editor): support multiple simultaneous editor instances (a3be)
3636+- [x] Add vim :set wrap/nowrap, :set number/nonumber, and :q command ([4750](https://tangled.org/burrito.space/peek/commit/4750ab83412366fa303bd4756fab3c393aebaaf8))
3737+- [x] Persist vim :set settings across sessions ([ab30](https://tangled.org/burrito.space/peek/commit/ab30313bf529b5065a06a1e55517c2a1c7edff35))
3838+- [x] Support multiple simultaneous editor instances ([a3be](https://tangled.org/burrito.space/peek/commit/a3beea130920c0f4da96ee99d4021ab673a576b9))
46394740Desktop - Page View
4848-- [x] feat(page): show loading indicator for in-page webview navigations (538f)
4949-- [x] fix(page): rewrite loading indicator — separate lifecycle from visual effect (847d)
5050-- [x] fix(page): ensure page loading glow clears when page finishes loading (1630)
4141+- [x] Show loading indicator for in-page navigations ([538f](https://tangled.org/burrito.space/peek/commit/538f3769aa6cba57af1c12cb57cb14437527a4db))
4242+- [x] Rewrite loading indicator for reliability ([847d](https://tangled.org/burrito.space/peek/commit/847dd119d0b540cd96f9fa1d9a6bdbd0c6fb2a95))
4343+- [x] Ensure loading glow clears when page finishes loading ([1630](https://tangled.org/burrito.space/peek/commit/16304f58514b40a14cf040e31826699e83dc93a6))
51445245Desktop - Entity Recognition
5353-- [x] feat(entities): add Phase 1 entity validation framework (64f7)
5454-- [x] test(entities): add unit tests for name-validator module (d81c)
4646+- [x] Add entity validation framework ([64f7](https://tangled.org/burrito.space/peek/commit/64f7a7a470aa06fd7576607113b04cfa9adfbb1c))
4747+- [x] Add unit tests for name-validator module ([d81c](https://tangled.org/burrito.space/peek/commit/d81c07d73229f5920d1f253b220e2d4fa35d9578))
55485649Desktop - Tauri
5757-- [x] feat(tauri): add system tray with click-to-show (c469)
5858-- [x] feat(tauri): add net-fetch proxy and file dialog commands (83f5)
5050+- [x] Add system tray with click-to-show ([c469](https://tangled.org/burrito.space/peek/commit/c469d9da5ea67e513eb0467bda8550f3f10e1c1c))
5151+- [x] Add net-fetch proxy and file dialog commands ([83f5](https://tangled.org/burrito.space/peek/commit/83f5a1d261ff53a8d91407131c60218ba2eb2971))
59526053Desktop - Refactoring
6161-- [x] refactor: extract shared modules to app/lib — pubsub, izui, frecency, shortcuts, session (da44, 9ff2, 10f0, e267, 7ed8)
6262- - Platform-agnostic implementations shared between Electron and Tauri backends
5454+- [x] Extract shared modules to app/lib for platform-agnostic use between Electron and Tauri ([da44](https://tangled.org/burrito.space/peek/commit/da44fd3dd4ea7db548b9894687e8cefa18efbe64), [9ff2](https://tangled.org/burrito.space/peek/commit/9ff26e737bf254facffdcc47ec708ec5ef88db23), [10f0](https://tangled.org/burrito.space/peek/commit/10f0bfc0855ac5934ec1f6c7f6843fc5efd0025e), [e267](https://tangled.org/burrito.space/peek/commit/e267e2661139e7ebad0e91ac7e458af05a3502ba), [7ed8](https://tangled.org/burrito.space/peek/commit/7ed8b22556f1e2fbbe26c3cc833956f7cc29a270))
63556456Desktop - Fixes
6565-- [x] fix(drag): use !important CSS classes for hold/drag cursor feedback (6e86)
6666-- [x] fix(sync): make sync now fire-and-forget + add 15s timeout (96ed, 73f9)
6767-- [x] fix: handle macOS open command with local file paths (1ae8)
6868-- [x] fix: prevent opening app directory as file:// URL on startup (e12b)
6969-- [x] fix(ext): use Promise.allSettled for extension loading so one failure doesn't block all commands (d031)
5757+- [x] Fix hold/drag cursor feedback CSS ([6e86](https://tangled.org/burrito.space/peek/commit/6e862be638d70eac3fa1163c6c1dd7e14b11b8f5))
5858+- [x] Make sync fire-and-forget with 15s timeout ([96ed](https://tangled.org/burrito.space/peek/commit/96edd06a18c374926e515b703d6193116fe2c19d), [73f9](https://tangled.org/burrito.space/peek/commit/73f9896fd1aa5c6b0b683cafa9d58ec12528be6c))
5959+- [x] Handle macOS open command with local file paths ([1ae8](https://tangled.org/burrito.space/peek/commit/1ae8101e0554cf9d2e17db11ee94b9aabc58e8c7))
6060+- [x] Prevent opening app directory as file:// URL on startup ([e12b](https://tangled.org/burrito.space/peek/commit/e12bef73e27699ed8cc7b53da178fc2a247b198b))
6161+- [x] Use Promise.allSettled for extension loading so one failure doesn't block all commands ([d031](https://tangled.org/burrito.space/peek/commit/d031c4f42b804bbe2442c1169069264c6ecfa326))
70627163Testing
7272-- [x] fix(tests): resolve pre-existing unit test failures across 4 test suites (a961)
6464+- [x] Resolve pre-existing unit test failures across 4 test suites ([a961](https://tangled.org/burrito.space/peek/commit/a9610b631d66db1a190ab49332cc06667fad3ef9))
73657466## 2026-02-16
75677668Desktop - Command Palette
7777-- [x] feat(cmd): generic command chaining with pipe system (597)
7878-- [x] feat(cmd): replace embedded chain editor with popup window system (572)
7979-- [x] feat(cmd): add parameter suggestions to command palette (693)
8080-- [x] feat(cmd): add noun registration API for declarative command generation (191)
8181-- [x] fix(cmd): remove download cmd, fix save filename, fix dialog parent, unify hashtag extraction (5b95)
8282-- [x] fix(cmd): preserve noun routing metadata in command registry pipeline (39a4)
6969+- [x] Generic command chaining with pipe system ([5975](https://tangled.org/burrito.space/peek/commit/5975f593ff109df82daf56b47233cf6910db89d3))
7070+- [x] Replace embedded chain editor with popup window system ([5729](https://tangled.org/burrito.space/peek/commit/5729822b4748acc4bf98c9563d4f7c2a17ae2435))
7171+- [x] Add parameter suggestions to command palette ([693d](https://tangled.org/burrito.space/peek/commit/693de4ad13de5edf49643088a724d2788936aca6))
7272+- [x] Add noun registration API for declarative command generation ([191f](https://tangled.org/burrito.space/peek/commit/191fb02212c460355702d619f264fa5801edb6b3))
7373+- [x] Remove download cmd, fix save filename, fix dialog parent, unify hashtag extraction ([5b95](https://tangled.org/burrito.space/peek/commit/5b95d1af28ec91787778989f5d0f4d8b34435769))
7474+- [x] Preserve noun routing metadata in command registry pipeline ([39a4](https://tangled.org/burrito.space/peek/commit/39a45314a629b9083163e03a2e59162836266e31))
83758476Desktop - Entity Recognition
8585-- [x] feat(entities): add observation frequency ranking — Phase 1 (803)
8686-- [x] feat(entities): add thumbs up/down feedback for entity quality scoring (c0e)
7777+- [x] Add observation frequency ranking for entities ([8031](https://tangled.org/burrito.space/peek/commit/80313a9eb1da5e586e5d5d50823c0f88a23f57b9))
7878+- [x] Add thumbs up/down feedback for entity quality scoring ([c0e5](https://tangled.org/burrito.space/peek/commit/c0e5afab57ec4749b29ab35c5ab526b24912720b))
87798880Desktop - Tags
8989-- [x] feat(tags): add rename and delete tag operations (ac2)
9090-- [x] fix(tags): add protocol 404 logging, handle all item types, fix filter counts (403e)
8181+- [x] Add rename and delete tag operations ([ac2a](https://tangled.org/burrito.space/peek/commit/ac2a86fb419412483cbaa784108526e15067642e))
8282+- [x] Fix protocol 404 logging, handle all item types, fix filter counts ([403e](https://tangled.org/burrito.space/peek/commit/403ea5b151149ef10cd2a22b61838cf7fa3b02a8))
91839284Desktop - Display Switching
9393-- [x] refactor(display-watcher): replace 3-phase algorithm with safety-net-only approach (afa)
9494- - Gutted 881-line 3-phase algorithm, replaced with 304-line single-pass safety net
9595- - Lets macOS handle display migration natively, only rescues genuinely orphaned windows
8585+- [x] Simplify display-watcher to safety-net-only approach — let macOS handle display migration natively, only rescue orphaned windows ([afae](https://tangled.org/burrito.space/peek/commit/afae1e4af08491ae69b6feb6dab9c6f1fa7cae10))
96869787Desktop - Page View & Dragging
9898-- [x] fix(page): filter Cmd+L/R/[/] pubsub by windowId so only active page window responds (657)
9999-- [x] fix(page): fully end drag on webview mouseup to prevent overlay blocking clicks (a7b)
100100-- [x] fix(page): handle webview mousemove during active drag for window movement (ac37)
101101-- [x] fix(drag): remove data-no-drag from extension window bodies to restore hold-to-drag (63c1)
8888+- [x] Fix keyboard shortcuts responding in wrong page window ([6573](https://tangled.org/burrito.space/peek/commit/65735c4d27ac2411d62d9c32c4b6c4494e28e0ba))
8989+- [x] Fix drag ending on webview mouseup to prevent overlay blocking clicks ([a7b8](https://tangled.org/burrito.space/peek/commit/a7b8948d19f2fec4c239bf51217421dda79d4b80))
9090+- [x] Fix webview mousemove during active drag for window movement ([ac37](https://tangled.org/burrito.space/peek/commit/ac37674d8b52be9359f4aa1706d86dca11c8ec72))
9191+- [x] Restore hold-to-drag in extension windows ([63c1](https://tangled.org/burrito.space/peek/commit/63c17b27bd19b3c8f9a288ba491271054a31b450))
1029210393Desktop - Auth & URLs
104104-- [x] feat(auth): OAuth popup bridge and flow improvements (c93)
105105-- [x] fix(url): wait for frontend ready and session restore before processing external URLs (e7ab)
9494+- [x] Improve OAuth popup bridge and flow ([c93a](https://tangled.org/burrito.space/peek/commit/c93a46dc3ed7ce977e1227f8e3f8ce02152e4695))
9595+- [x] Wait for frontend ready and session restore before processing external URLs ([e7ab](https://tangled.org/burrito.space/peek/commit/e7ab8092a3cdde2dd2ba99de18b7fd1babc4a3c2))
1069610797Testing
108108-- [x] test(cmd): add completer unit tests; fix tag # prefix stripping (610)
109109-- [x] test(cmd): add integration tests for command execution through pubsub (e11)
110110-- [x] test(cmd): add command chaining pipe system tests (566c)
111111-- [x] test(oauth): add OAuth bridge unit tests (77b)
112112-- [x] fix(test): fix 4 stale test expectations in desktop smoke tests (4d9)
9898+- [x] Add completer unit tests; fix tag # prefix stripping ([6102](https://tangled.org/burrito.space/peek/commit/61020b937d52bd87cfad5425f77167e65421c3c1))
9999+- [x] Add integration tests for command execution through pubsub ([e11d](https://tangled.org/burrito.space/peek/commit/e11daddb41f2c53cbba0ecbae40b0e71e1ec4cb0))
100100+- [x] Add command chaining pipe system tests ([566c](https://tangled.org/burrito.space/peek/commit/566c9ec7028c8197426369b93f148090aa2e7087))
101101+- [x] Add OAuth bridge unit tests ([77b0](https://tangled.org/burrito.space/peek/commit/77b0f1972afb51f6e0c271bf8abaff09e80a8020))
102102+- [x] Fix 4 stale test expectations in desktop smoke tests ([4d96](https://tangled.org/burrito.space/peek/commit/4d9683f93f590c58fc823024fddcc65f38b29183))
113103114104## 2026-02-13
115105116106Desktop - Session Restore
117117-- [x] feat(session): implement full session save/restore system (Phases 1-4) (0e8afccd, f270c56d, d0150877, d2fb834a)
118118- - Phase 1: Snapshot all windows on quit (position, size, URL, mode)
119119- - Phase 2: Restore windows on startup with confirmation dialog
120120- - Phase 3: Autosave timer and manual session commands
121121- - Phase 4: Crash recovery dialog and error handling
122122-- [x] fix(session): save settings windows, strip stale params on restore, fix display-watcher race conditions (d12bd2b9)
123123-- [x] fix(session): suppress display-watcher during session restore to preserve window positions (c32b73df)
124124-- [x] fix(session): handle SIGINT/SIGTERM as clean shutdowns to prevent false crash dialog (f56f5624, 8ab6d36d, 16a2d4bc)
125125-- [x] fix(session): synchronous SIGINT save and correct canvas page bounds (2df8a733)
126126-- [x] fix(session): open startup feature when restore is declined or fails (0f280143)
107107+- [x] Full session save/restore — snapshot windows on quit, restore on startup with confirmation, autosave timer, crash recovery dialog ([0e8a](https://tangled.org/burrito.space/peek/commit/0e8afccdff0075b9151b3dbd40609f53f16a8521), [f270](https://tangled.org/burrito.space/peek/commit/f270c56db43c1799a0a6c8dd801a00a2419124e3), [d015](https://tangled.org/burrito.space/peek/commit/d0150877ced2ff5e02d7414b3c6c08cd404e0f17), [d2fb](https://tangled.org/burrito.space/peek/commit/d2fb834abcd81e1a7d23898b4875f996f8899c52))
108108+- [x] Save settings windows, strip stale params on restore, fix display-watcher race conditions ([d12b](https://tangled.org/burrito.space/peek/commit/d12bd2b93d553c124f508fe37bbd6f7d325f4362))
109109+- [x] Suppress display-watcher during session restore to preserve window positions ([c32b](https://tangled.org/burrito.space/peek/commit/c32b73dfaf9ef4f497623452d7f919be28194392))
110110+- [x] Treat SIGINT/SIGTERM as clean shutdowns to prevent false crash dialog ([f56f](https://tangled.org/burrito.space/peek/commit/f56f5624550c93ef1e93f60392496a70b6dc393f), [8ab6](https://tangled.org/burrito.space/peek/commit/8ab6d36de9d593b894ef92893dc59b6af751ba3b), [16a2](https://tangled.org/burrito.space/peek/commit/16a2d4bcabce898ceb850ae3258965c384d71b89))
111111+- [x] Fix synchronous SIGINT save and correct canvas page bounds ([2df8](https://tangled.org/burrito.space/peek/commit/2df8a7339298b2b3c30f81168eef6b0bfabf4299))
112112+- [x] Open startup feature when restore is declined or fails ([0f28](https://tangled.org/burrito.space/peek/commit/0f280143d148e3bf25cd870b39cfaef528939d0a))
127113128114Desktop - Display Switching
129129-- [x] feat(display): reposition windows when displays change (d732fa79)
130130- - Pre-debounce bounds capture preserves window positions before OS moves them
131131- - Group-based distance scaling for proportional repositioning
132132-- [x] fix(display-watcher): add home display tracking to restore windows after display reconnect (60b0798d)
133133-- [x] fix(display): use group-based distance scaling for window repositioning (11166190)
115115+- [x] Reposition windows when displays change — preserves positions before OS moves them ([d732](https://tangled.org/burrito.space/peek/commit/d732fa7912f47f70d32fde3b932f5842705fcc38))
116116+- [x] Track home display to restore windows after display reconnect ([60b0](https://tangled.org/burrito.space/peek/commit/60b0798db24bc9b6b571a30106a1392b453eae1f))
117117+- [x] Use group-based distance scaling for window repositioning ([1116](https://tangled.org/burrito.space/peek/commit/11166190d9066226b760225731477215c690a1c7))
134118135119Desktop - Entity Recognition
136136-- [x] feat(entities): show source pages in entity list and add detail pane with full metadata (12feb902)
137137-- [x] fix(entities): improve detection coverage and reduce price noise (82b70037)
138138-- [x] fix(entities): migrate out standalone price entities lacking product context (383202ae)
139139-- [x] fix(entities): require context for date entities, migrate out standalone dates (6ada27ba)
120120+- [x] Show source pages in entity list and add detail pane with full metadata ([12fe](https://tangled.org/burrito.space/peek/commit/12feb9024640dc6a132b2080ae85012307407c78))
121121+- [x] Improve detection coverage and reduce price noise ([82b7](https://tangled.org/burrito.space/peek/commit/82b700377bbc902113c276d7eb50a5df59812d92))
122122+- [x] Remove standalone price entities lacking product context ([3832](https://tangled.org/burrito.space/peek/commit/383202ae65eb33aebafb52b01d4dd46579a6060b))
123123+- [x] Require context for date entities, remove standalone dates ([6ada](https://tangled.org/burrito.space/peek/commit/6ada27ba19445ed4dc1c076961336ace34b0c83e))
140124141125Desktop - Command Palette
142142-- [x] feat(cmd): add command chaining flow for list notes, markdown, download, save as note (04ef4c8a)
143143-- [x] feat(cmd): add "open file" command with chaining + fix note inline tag extraction (0717e87b)
144144-- [x] fix(cmd): remove web search fallback on Enter — require explicit command match (49c6e5ec)
145145-- [x] fix(cmd,perf): sort history by frecency, use targeted queries for URL lookups (0873e5ee)
146146-- [x] fix(cmd): restore web page URLs in frecency suggestions (65baa072)
147147-- [x] fix(cmd): ESC clears text first, Shift-Tab cycles backward, fix frecency tracking (8f6b41a8)
148148-- [x] fix(cmd): register IZUI escape handler so ESC clears text before closing (80592eb0)
149149-- [x] fix(cmd): remove prefix feedback that caused adaptive sort cross-contamination (5ceb0517)
150150-- [x] fix(cmd): add deterministic tiebreaker to command palette sort for consistent autocomplete (566b63a8)
126126+- [x] Add command chaining flow for list notes, markdown, download, save as note ([04ef](https://tangled.org/burrito.space/peek/commit/04ef4c8aaf106cb8ef8c5110abbda841b940f1b7))
127127+- [x] Add "open file" command with chaining and fix note inline tag extraction ([0717](https://tangled.org/burrito.space/peek/commit/0717e87b6898b822075effa65d75beb4c9043120))
128128+- [x] Require explicit command match on Enter — remove web search fallback ([49c6](https://tangled.org/burrito.space/peek/commit/49c6e5ec4027e472af606462fcaeef8044cfdc77))
129129+- [x] Sort history by frecency, use targeted queries for URL lookups ([0873](https://tangled.org/burrito.space/peek/commit/0873e5ee688ec0a53440382fd88ccd681323a0f8))
130130+- [x] Restore web page URLs in frecency suggestions ([65ba](https://tangled.org/burrito.space/peek/commit/65baa072eef50d9b1ef7c69ad4e03e33116af346))
131131+- [x] ESC clears text first, Shift-Tab cycles backward, fix frecency tracking ([8f6b](https://tangled.org/burrito.space/peek/commit/8f6b41a8db9dc7ca85a1a696f3af4cca74915ac7))
132132+- [x] Register IZUI escape handler so ESC clears text before closing ([8059](https://tangled.org/burrito.space/peek/commit/80592eb03a143100ddaaa3a4f32db2d95eabc3cc))
133133+- [x] Remove prefix feedback that caused adaptive sort cross-contamination ([5ceb](https://tangled.org/burrito.space/peek/commit/5ceb05172fdfaf0c779ac6f23547a6e56567e123))
134134+- [x] Add deterministic tiebreaker to sort for consistent autocomplete ([566b](https://tangled.org/burrito.space/peek/commit/566b63a8df0b21056b8157670216a668602e1855))
151135152136Desktop - Page View & Navigation
153153-- [x] feat(page): replace fullscreen transparent window with minimal page host (c543e38b)
154154-- [x] fix(page): eliminate navbar show/hide webview jump (43c9353e, 982f6a10, 083fbdf9, bd0449db)
155155-- [x] fix(page): restore webview drag with mousedown/mouseup bridge from guest page (63cd1414)
156156-- [x] fix(page): remove broken click-through code that activated unrelated windows (10f29146)
137137+- [x] Replace fullscreen transparent window with minimal page host ([c543](https://tangled.org/burrito.space/peek/commit/c543e38bf36d79a2c448e3e860157a4a34da388c))
138138+- [x] Eliminate navbar show/hide webview jump ([43c9](https://tangled.org/burrito.space/peek/commit/43c9353ec1523cd67d3c848ec5536561ad1e797b), [982f](https://tangled.org/burrito.space/peek/commit/982f6a10ac4ed9b7ab383e09b4889aa8224d8262), [083f](https://tangled.org/burrito.space/peek/commit/083fbdf90c90c9b717c259887ae4c22adebae84e), [bd04](https://tangled.org/burrito.space/peek/commit/bd0449db6277a60577ccbc0e6a37afb58adb433c))
139139+- [x] Restore webview drag with mousedown/mouseup bridge from guest page ([63cd](https://tangled.org/burrito.space/peek/commit/63cd141464c98f54e17ad475248208c356957c8a))
140140+- [x] Remove broken click-through code that activated unrelated windows ([10f2](https://tangled.org/burrito.space/peek/commit/10f29146d98c2cf25b8c63de56de3cfc85b712a9))
157141158142Desktop - Window Dragging
159159-- [x] fix(drag): rewrite window drag system v3 — unified, faster, works everywhere (5a7c7899, fa58f66b, 1f815b61)
143143+- [x] Rewrite window drag system — unified, faster, works everywhere ([5a7c](https://tangled.org/burrito.space/peek/commit/5a7c7899116f7501f40ca99cbe1b6ed8c93031f3), [fa58](https://tangled.org/burrito.space/peek/commit/fa58f66b384faf13746f8aa3e2bca266fdde3530), [1f81](https://tangled.org/burrito.space/peek/commit/1f815b618a836270b1b444cf9cbfc13c6373a884))
160144161145Desktop - HUD & Groups
162162-- [x] fix(hud): hide on app blur using did-resign-active (be05026c)
163163-- [x] fix(groups): fix group creation via inline form (141829f7)
164164-- [x] fix(tags): restore reactivity on sync and data changes (60eb36df)
165165-- [x] fix(tags/groups/cmd): fix item icons, group creation form, and tagset detection (5b0ca938)
146146+- [x] Hide HUD on app blur ([be05](https://tangled.org/burrito.space/peek/commit/be05026c3fe8bf9d28c28c05490fc16c3a75a204))
147147+- [x] Fix group creation via inline form ([1418](https://tangled.org/burrito.space/peek/commit/141829f79561a67556fb231fe89197de795cde09))
148148+- [x] Restore tags reactivity on sync and data changes ([60eb](https://tangled.org/burrito.space/peek/commit/60eb36df2fc0febad130ac8ce104ce756649cc91))
149149+- [x] Fix item icons, group creation form, and tagset detection ([5b0c](https://tangled.org/burrito.space/peek/commit/5b0ca9380c3217a63a66853858ab24dccb5d088f))
166150167151Desktop - Dark Mode & Settings
168168-- [x] fix(darkmode): respect OS color scheme in system mode (6813ea5f)
169169-- [x] fix(websearch): fix suggestions, default engine setting, and settings UI (bcaeb205)
170170-- [x] feat(websearch): add Kagi as built-in search engine (e7d05c94)
171171-- [x] fix(settings): add descriptions and human-readable labels to core settings (0bfe87b9)
172172-- [x] fix(settings): quit shortcut default reset, editor portrait, datastore table fix (f6a16ad4)
152152+- [x] Respect OS color scheme in system dark mode ([6813](https://tangled.org/burrito.space/peek/commit/6813ea5f2e3fb51f11942470c1b706976e985afd))
153153+- [x] Fix web search suggestions, default engine setting, and settings UI ([bcae](https://tangled.org/burrito.space/peek/commit/bcaeb2051189ac03e9c06279cfe87a49c33a730c))
154154+- [x] Add Kagi as built-in search engine ([e7d0](https://tangled.org/burrito.space/peek/commit/e7d05c943f84b04b521fdce849312e5f05574a78))
155155+- [x] Add descriptions and human-readable labels to core settings ([0bfe](https://tangled.org/burrito.space/peek/commit/0bfe87b9e109ded26ea92c90a0adc9629f29bf3a))
156156+- [x] Fix quit shortcut default reset, editor portrait, datastore table ([f6a1](https://tangled.org/burrito.space/peek/commit/f6a16ad4a2d060b01ac213b6154bc02aee4f371b))
173157174158Desktop - Fixes
175175-- [x] fix(mode,window): fix mode leak into global scope and bring existing windows to front (9b783b6b)
176176-- [x] fix(shortcuts): silence spurious warnings when unregistering global shortcuts during shutdown (7941b5f6)
177177-- [x] fix(cmd): ensure command registration after extensions loaded (3f9df015)
178178-- [x] refactor(cmd): remove cmd:ready/query boilerplate, register commands directly (f7306de6)
179179-- [x] feat(components): add sorting and view modes to card grid toolbar (83a85332)
180180-- [x] fix(rss): use tangled.org URLs, fix localsearch manifest loading (06afcb89)
159159+- [x] Fix mode leak into global scope and bring existing windows to front ([9b78](https://tangled.org/burrito.space/peek/commit/9b783b6b8e544458af64e6129a190fe6b218d436))
160160+- [x] Silence spurious warnings when unregistering global shortcuts during shutdown ([7941](https://tangled.org/burrito.space/peek/commit/7941b5f670a2e4c764736ab9baff94c287a643b6))
161161+- [x] Ensure command registration after extensions loaded ([3f9d](https://tangled.org/burrito.space/peek/commit/3f9df0153f85a43f3ed392d5bd07357b801dfa33))
162162+- [x] Simplify command registration — remove boilerplate ([f730](https://tangled.org/burrito.space/peek/commit/f7306de6a6086d45fe56ce76bb5e27612ab593c1))
163163+- [x] Add sorting and view modes to card grid toolbar ([83a8](https://tangled.org/burrito.space/peek/commit/83a8533205ca3eaf796046a61b627b925dae997f))
164164+- [x] Use tangled.org URLs for RSS, fix localsearch manifest loading ([06af](https://tangled.org/burrito.space/peek/commit/06afcb89112a6ff4dfa9e707f9aeeff057c489f2))
181165182166Testing
183183-- [x] test(session): add 67 real integration tests for session save/restore (49f094f7)
184184-- [x] test(display-watcher): add tests for pre-debounce capture, suppress timer cancellation, and isRemoval flag (fd56204f)
185185-- [x] test: add 94 new unit tests and fix 3 E2E test failures (2251f86f)
167167+- [x] Add 67 real integration tests for session save/restore ([49f0](https://tangled.org/burrito.space/peek/commit/49f094f7fa698dadd2745c802de1015dcc9f30a3))
168168+- [x] Add display-watcher tests for pre-debounce capture, suppress timer, and isRemoval flag ([fd56](https://tangled.org/burrito.space/peek/commit/fd56204f81d78dcbb6b586aaea0ef97441eecbd8))
169169+- [x] Add 94 new unit tests and fix 3 E2E test failures ([2251](https://tangled.org/burrito.space/peek/commit/2251f86f43643a9b308cac6fa46dbf593141cfb3))
186170187171## 2026-02-11
188172189173Desktop - New Extensions
190190-- [x] feat(websearch): implement web search extension with OpenSearch discovery and suggestions (bf488889)
191191- - Search from command palette with live suggestions from multiple engines
192192- - Auto-discovers OpenSearch endpoints on visited pages
193193- - Widget notification in page view when OpenSearch engine found
194194-- [x] feat(search): implement unified search extension (4b95973d)
195195-- [x] feat(pagestream): implement vertical history stream extension (35f9afcc)
174174+- [x] Web search extension — search from command palette with live suggestions, auto-discovers OpenSearch endpoints on visited pages ([bf48](https://tangled.org/burrito.space/peek/commit/bf488889b77d22dd6b17d3613597379ba2b15737))
175175+- [x] Unified search extension ([4b95](https://tangled.org/burrito.space/peek/commit/4b95973d39a9ab252cce55b8402fbed674d742c4))
176176+- [x] Vertical history stream extension ([35f9](https://tangled.org/burrito.space/peek/commit/35f9afccca7020cee7762bb603ee68709949dcea))
196177197178Desktop - History Unification
198198-- [x] refactor(history): unify address/visit system into items table (6 phases) (475e97fe..6f90f258)
199199- - Phase 1-2: Remove dual-write, redirect renderer address APIs to items
200200- - Phase 3-4: IPC compatibility layer, update tests and URL normalization
201201- - Phase 5-6: Update Tauri backend, remove legacy address/visit code and types
179179+- [x] Unify address/visit system into items table — remove dual-write, redirect APIs, update Tauri backend, remove legacy code ([475e](https://tangled.org/burrito.space/peek/commit/475e97feb695d45e1253e03cd05e1b8a2d1982d7)..[6f90](https://tangled.org/burrito.space/peek/commit/6f90f258e36b729608a49b178db50894478f628f))
202180203181Desktop - Dark Mode
204204-- [x] feat(darkmode): implement 3-tier dark mode system for web pages (ef242dde)
205205- - Tier 1 (System): Sets prefers-color-scheme: dark for all webviews
206206- - Tier 2 (Force): Chromium WebContentsForceDark with CIELAB inversion
207207- - Settings UI with Off/System/Force selector
182182+- [x] 3-tier dark mode for web pages — System (prefers-color-scheme), Force (Chromium CIELAB inversion), with settings UI ([ef24](https://tangled.org/burrito.space/peek/commit/ef242dde9d5829fdb5342d1ba7781bc0e9767485))
208183209184Desktop - Page View & Navigation
210210-- [x] feat(page): add browser navigation hotkeys and editable URL bar (52a99ec7)
211211- - Cmd+R reload, Cmd+[/] back/forward, Cmd+L to edit URL
212212-- [x] feat(page): add widget system with OpenSearch discovery notification (ce5ae4bb)
213213-- [x] fix(page): improve drag-from-anywhere with long-press detection and all-corner resize (d135cfa6)
214214-- [x] fix(page): apply background detection to non-canvas web pages (e1ac7b6f)
215215-- [x] fix(nav): restore full-width navbar — remove floating bubble design (7769f1e1)
216216-- [x] fix(titles): fix Loading... title bug, add page content extraction and URL metadata enrichment (61ca6f00)
217217- - Filter "Loading..." from stored titles across all code paths
218218- - Add extract-page-content IPC handler for live page HTML extraction
219219- - URL item metadata enrichment with OG tags, description, favicon
185185+- [x] Browser navigation hotkeys and editable URL bar — Cmd+R reload, Cmd+[/] back/forward, Cmd+L to edit URL ([52a9](https://tangled.org/burrito.space/peek/commit/52a99ec7c345ba5bd9cfc37036848d29ca0294ae))
186186+- [x] Widget system with OpenSearch discovery notification ([ce5a](https://tangled.org/burrito.space/peek/commit/ce5ae4bb7d118320c02ae80a00af9793a5749bcf))
187187+- [x] Improve drag-from-anywhere with long-press detection and all-corner resize ([d135](https://tangled.org/burrito.space/peek/commit/d135cfa61cc3563cb597987ebf7b55eea5e3d03c))
188188+- [x] Apply background detection to non-canvas web pages ([e1ac](https://tangled.org/burrito.space/peek/commit/e1ac7b6f8920944019cbca21aaf1188b25592bd2))
189189+- [x] Restore full-width navbar — remove floating bubble design ([7769](https://tangled.org/burrito.space/peek/commit/7769f1e19c6f74cb5fd18493c42bbaecc8a59644))
190190+- [x] Fix Loading... title bug, add page content extraction and URL metadata enrichment ([61ca](https://tangled.org/burrito.space/peek/commit/61ca6f009ba9ad357e09f310770fa5cdf2940b9c))
220191221192Desktop - Tags & Editor
222222-- [x] feat(tags): embed editor in detail pane for inline note editing (a575013e)
223223- - Replace modal with inline detail view, ESC navigation between list and detail
224224- - Vim status/command bar overlaid on editor, respects vim mode preference
225225-- [x] feat(tags): add content search with tag combo filtering, pin selected tags in sidebar (d005d3dd)
226226-- [x] fix(editor,tags): fix note command blank editor, tags reactivity, and editor height (cb4d5e10)
227227- - New notes create datastore items immediately for autosave
228228- - Tags UI subscribes to item:updated events for live reactivity
229229-- [x] fix(editor): forward ESC to vim in insert/visual mode before IZUI handles it (7b866e87)
230230-- [x] fix(tags): editor layout, vim status bar positioning, and focus ring cleanup (08483e4e, 3100ec71, 3a072f24)
193193+- [x] Embed editor in detail pane for inline note editing with vim status bar ([a575](https://tangled.org/burrito.space/peek/commit/a575013e7000b50db91235fa09b67104ea5293d2))
194194+- [x] Content search with tag combo filtering, pin selected tags in sidebar ([d005](https://tangled.org/burrito.space/peek/commit/d005d3dd966595778c482c2ce8f555ffb8550ca6))
195195+- [x] Fix note command blank editor, tags reactivity, and editor height ([cb4d](https://tangled.org/burrito.space/peek/commit/cb4d5e10b8d4a27c6529945e00efea2bed701fc0))
196196+- [x] Forward ESC to vim in insert/visual mode before IZUI handles it ([7b86](https://tangled.org/burrito.space/peek/commit/7b866e87a87e357bd1482e5d8e5775f9702c5d81))
197197+- [x] Fix editor layout, vim status bar positioning, and focus ring cleanup ([0848](https://tangled.org/burrito.space/peek/commit/08483e4ef820d8eece5fc28f7c113690ff002c82), [3100](https://tangled.org/burrito.space/peek/commit/3100ec71fc60978bc7cc89da1c1a5f8bf82f4e11), [3a07](https://tangled.org/burrito.space/peek/commit/3a072f24678bb375a193b04ea7fdb05b92d546be))
231198232199Desktop - Shortcuts & Commands
233233-- [x] feat(shortcuts): implement dual hotkey registration — local Cmd+ alongside global Opt+ (545e95b4)
234234- - Cmd+K (palette), Cmd+E (editor), Cmd+T (tags), Cmd+G (groups), Cmd+H (HUD)
235235- - Fix: Cmd+Q quit, Cmd+, settings (were incorrectly using Opt+)
236236-- [x] feat(api): implement commands.list() to query registered commands via pubsub (696c7859)
237237-- [x] fix(cmd): fix frecency/adaptive sorting in command palette (2f6da3fd)
238238- - Unified weighted ranking combining adaptive score and frecency
239239- - Cross-query adaptive feedback for substring matches
200200+- [x] Dual hotkey registration — local Cmd+ alongside global Opt+ for palette, editor, tags, groups, HUD ([545e](https://tangled.org/burrito.space/peek/commit/545e95b47d436171406bc01c3783ac7d1e5ca382))
201201+- [x] Query registered commands via pubsub ([696c](https://tangled.org/burrito.space/peek/commit/696c7859c3b10bb81a8ea741dbb65e595bbe3af3))
202202+- [x] Fix frecency/adaptive sorting in command palette ([2f6d](https://tangled.org/burrito.space/peek/commit/2f6da3fd76ba4780daf8e0626bd45e9a50b1dd5e))
240203241204Desktop - Settings & Extensions
242242-- [x] fix(settings): rework extensions settings — rename sections, unify layout, add options buttons (cb540409)
243243- - Rename: Features (Peek extensions) vs Extensions (bundled webextensions)
244244- - Options button for extensions with options pages
245245-- [x] fix(settings): dynamically list all builtin extensions in Features section (90fe93d0)
246246-- [x] feat(chrome-ext): generic settings/UI system for bundled Chrome extensions (edbf5169)
247247-- [x] feat(adblocker): migrate from @cliqz/adblocker-electron to @ghostery/adblocker-electron (93b44561)
205205+- [x] Rework extensions settings — separate Features vs Extensions sections, add options buttons ([cb54](https://tangled.org/burrito.space/peek/commit/cb54040945458d258ed48f9951820998ebdd6e75))
206206+- [x] Dynamically list all builtin extensions in Features section ([90fe](https://tangled.org/burrito.space/peek/commit/90fe93d0fea4d2286ab6099ffd097e40205e1fef))
207207+- [x] Generic settings/UI system for bundled Chrome extensions ([edbf](https://tangled.org/burrito.space/peek/commit/edbf5169a396539ed2d94df1b873690d168d7b7a))
208208+- [x] Migrate ad blocker from @cliqz to @ghostery ([93b4](https://tangled.org/burrito.space/peek/commit/93b445613d086b8f1d4caea934d5e466a0b975a6))
248209249210Desktop - Fixes
250250-- [x] fix(windows): HUD focus stealing, chrome ext options styling, duplicate group cards (47686da7)
251251-- [x] fix(groups): prevent duplicate windows/URLs, fix race conditions and title resolution (20cb9956)
252252-- [x] fix(hud): resolve extension disabled by settings key collision (671df42e)
253253-- [x] fix(context): resolve window ID from caller when null, set mode before loadURL (c1d77f28)
254254-- [x] fix(entities): align UI with groups/tags component and theme patterns (c5df43bc)
255255-- [x] fix(scripts): align UI with groups/tags component and theme patterns (50c639ff)
256256-- [x] fix(editor): use extension settings API for vim mode, audit localStorage usage (3962110b)
257257-- [x] fix(build): pin Node version to 24.11.1 to match Electron 40 (96c05941)
211211+- [x] Fix HUD focus stealing, chrome ext options styling, duplicate group cards ([4768](https://tangled.org/burrito.space/peek/commit/47686da71893feb30b286fbc5e45021e6f442e07))
212212+- [x] Prevent duplicate windows/URLs, fix race conditions and title resolution ([20cb](https://tangled.org/burrito.space/peek/commit/20cb9956145d94e57a902a1976e1bd56a1242d4b))
213213+- [x] Resolve extension disabled by settings key collision ([671d](https://tangled.org/burrito.space/peek/commit/671df42e33f9b08db4a058e98e8e4e6f7bdbddad))
214214+- [x] Resolve window ID from caller when null, set mode before loadURL ([c1d7](https://tangled.org/burrito.space/peek/commit/c1d77f286c8ba45015514d6a836bf4a13df7f66a))
215215+- [x] Align entity and script UIs with groups/tags component patterns ([c5df](https://tangled.org/burrito.space/peek/commit/c5df43bcf9d5f28dd1dbf129fe47612346c26b6f), [50c6](https://tangled.org/burrito.space/peek/commit/50c639ff3a591181e8bd6b10b8bfdd8f906406a3))
216216+- [x] Use extension settings API for vim mode, audit localStorage usage ([3962](https://tangled.org/burrito.space/peek/commit/3962110b5db93447fd6b95379281de6a0223a203))
217217+- [x] Pin Node version to 24.11.1 to match Electron 40 ([96c0](https://tangled.org/burrito.space/peek/commit/96c05941d16a0989f7407b00a63cda2994e52d24))
258218259219Testing
260260-- [x] test(history): add unified URL/history tests for unification refactor (d3ac05f7)
261261-- [x] test(entities): add comprehensive test data for entity recognition (d710d039)
220220+- [x] Add unified URL/history tests for unification refactor ([d3ac](https://tangled.org/burrito.space/peek/commit/d3ac05f7135ead6685d7c8ddb50ba378c2e700b9))
221221+- [x] Add comprehensive test data for entity recognition ([d710](https://tangled.org/burrito.space/peek/commit/d710d039355e4e355c0c3e26844753c8c6d4e245))
262222263223## 2026-02-09
264224265225Desktop - IZUI Role-Based Redesign
266266-- [x] feat(izui): systemic ESC handling, peek-component migrations, HUD test fixes (21d59cc0)
267267- - Migrated peek-card, peek-grid, peek-list to shared peek-components
268268- - Unified ESC key handling across all window types
269269- - Fixed HUD test infrastructure
270270-- [x] feat(izui): implement role-based window policy (Phase 1-2) (3fbcade9)
271271- - Replaced session-based transient/active detection with deterministic role system
272272- - Five roles: root, child-content, child-tool, hud, transient
273273- - Role assigned at window creation, governs ESC behavior and lifecycle
274274-- [x] feat(izui): complete role-based migration (Phase 3-6) (8528f053)
275275- - Migrated all window creation sites to use role-based policy
276276- - Removed legacy IzuiStateCoordinator session tracking
277277- - ESC behavior fully determined by window role
278278-- [x] fix(izui): promote content to child-content when opened from parent window (92d359c5)
279279-- [x] fix(izui): promote transient session on app focus, fix startup role (055b77ed)
226226+- [x] Unified ESC handling, migrate components to shared peek-components, fix HUD tests ([21d5](https://tangled.org/burrito.space/peek/commit/21d59cc00e8516382e0425f2442019ff915936e5))
227227+- [x] Role-based window policy — five deterministic roles (root, child-content, child-tool, hud, transient) govern ESC behavior and lifecycle ([3fbc](https://tangled.org/burrito.space/peek/commit/3fbcade9a47b8375e0e10d15bf693104587433f3))
228228+- [x] Complete role-based migration — all window creation uses role policy, remove legacy session tracking ([8528](https://tangled.org/burrito.space/peek/commit/8528f053e1ef930b191eb2b834180eb84475851c))
229229+- [x] Promote content to child-content when opened from parent window ([92d3](https://tangled.org/burrito.space/peek/commit/92d359c5c5ecdf8baa6aca5cdcc3fb81c34c7921))
230230+- [x] Promote transient session on app focus, fix startup role ([055b](https://tangled.org/burrito.space/peek/commit/055b77ed748ccce030da378d116e1d8c503bf659))
280231281232Desktop - Navigation & UI
282282-- [x] fix(nav): restore floating nav bar — remove embedded regression (93060df3)
283283-- [x] fix(peek-card): delegate click/focus through shadow DOM boundary (b15c6434)
284284-- [x] feat(tags): migrate tags UI to shared peek-components (3145a08a)
285285- - Tags extension uses peek-card, peek-grid from shared component library
286286- - Consistent styling across all card-based views
287287-- [x] fix(config): align startupFeature schema default with actual default (aab2b20b)
288288-- [x] fix(external-url): delay URL processing to ensure app activation completes (f0d1e5bd)
233233+- [x] Restore floating nav bar — remove embedded regression ([9306](https://tangled.org/burrito.space/peek/commit/93060df349c11e0bae011121552a1901ec02c068))
234234+- [x] Delegate click/focus through shadow DOM boundary in peek-card ([b15c](https://tangled.org/burrito.space/peek/commit/b15c6434bd885e0e00b31ce2ef62e670c282232c))
235235+- [x] Migrate tags UI to shared peek-components for consistent styling ([3145](https://tangled.org/burrito.space/peek/commit/3145a08ad2604f17424b26604e8d1b003c4aacf9))
236236+- [x] Align startupFeature schema default with actual default ([aab2](https://tangled.org/burrito.space/peek/commit/aab2b20b8a365fdb47c28554c9cbbf9062010ed2))
237237+- [x] Delay URL processing to ensure app activation completes ([f0d1](https://tangled.org/burrito.space/peek/commit/f0d1e5bd1289caf470e9a6a9d793414abb3ae6a1))
289238290239Desktop - Entity Recognition
291291-- [x] feat(entities): implement Phase 1 entity recognition extension (ae0cd811)
292292- - Extract entities (people, places, dates, etc.) from saved items
293293- - Extensible matcher and store architecture
294294- - Unit tests for extractors, matcher, and store
240240+- [x] Entity recognition extension — extract entities (people, places, dates, etc.) from saved items with extensible matcher and store ([ae0c](https://tangled.org/burrito.space/peek/commit/ae0cd81109117239e4ad4ac0f30366246a1e94b9))
295241296242Desktop - HUD & Groups
297297-- [x] fix(hud): populate mode, active window, and stats fields (be18f49f)
298298-- [x] fix(groups): preserve group context through page navigation (1d69ce8f)
299299-- [x] fix(datastore): disable FK checks during entity type migration (98025bcc)
243243+- [x] Populate HUD mode, active window, and stats fields ([be18](https://tangled.org/burrito.space/peek/commit/be18f49f540738aab4bcd11cb2ab3f2c388ffd2e))
244244+- [x] Preserve group context through page navigation ([1d69](https://tangled.org/burrito.space/peek/commit/1d69ce8fd81c9fc23faac81368fb004d7bb82d9a))
245245+- [x] Disable FK checks during entity type migration ([9802](https://tangled.org/burrito.space/peek/commit/98025bcca6309076ea578a32b287d81091295a55))
300246301247Desktop - Shortcuts & Page
302302-- [x] fix(shortcuts): guard ev.reply() against destroyed senders + add roundtrip tests (49b626e9)
303303-- [x] fix(shortcuts): use BrowserWindow ID not WebContents ID for shortcut callbacks (d6fe8cbf)
304304-- [x] fix(shortcuts): resolve stale IPC reference in global shortcut callbacks (221d5a44)
305305-- [x] fix(page): content-sized BrowserWindow instead of fullscreen canvas (2eb7a703)
248248+- [x] Guard ev.reply() against destroyed senders and add roundtrip tests ([49b6](https://tangled.org/burrito.space/peek/commit/49b626e9c92523f39dc190d8024770e84737d17d))
249249+- [x] Use BrowserWindow ID not WebContents ID for shortcut callbacks ([d6fe](https://tangled.org/burrito.space/peek/commit/d6fe8cbfe845cd081eb712d6add07b4b08dab227))
250250+- [x] Resolve stale IPC reference in global shortcut callbacks ([221d](https://tangled.org/burrito.space/peek/commit/221d5a442d970de8a1db07dfd4f5816b607a60f2))
251251+- [x] Content-sized BrowserWindow instead of fullscreen canvas ([2eb7](https://tangled.org/burrito.space/peek/commit/2eb7a7037b92ef3d9a3961a39de2774fbf41ecff))
306252307253Desktop - Command Bar
308308-- [x] fix(cmd): restore URL detection for domains without protocol (youtube.com) (8abf13b6)
254254+- [x] Restore URL detection for domains without protocol (youtube.com) ([8abf](https://tangled.org/burrito.space/peek/commit/8abf13b6300b6735ff748d65a71145f584972fed))
309255310310-Sync Architecture - syncSource Migration
311311-- [x] feat(sync): Phase 1 - separate sync pull from user operations (b3cbb47e)
312312- - Sync pull is now architecturally separate from user-facing operations
313313- - Server _sync metadata preserved naturally without guards
314314-- [x] refactor(sync): remove syncSource from unified sync module and update docs (3ffa9bf1)
315315- - Removed syncSource column from schema and all datastore code
316316- - Replaced with device ID tracking via _sync metadata in item metadata JSON
317317-- [x] refactor(mobile): remove active sync_source usage from iOS sync (3ca335f0)
318318-- [x] feat(mobile): add device ID and _sync metadata to mobile backend (abc40815)
256256+Sync Architecture
257257+- [x] Separate sync pull from user operations — server metadata preserved naturally ([b3cb](https://tangled.org/burrito.space/peek/commit/b3cbb47e44fa6fb766c98a1e87547d86f2fce87c))
258258+- [x] Remove syncSource from schema, replace with device ID tracking via _sync metadata ([3ffa](https://tangled.org/burrito.space/peek/commit/3ffa9bf15275feeafcb1fcef5cfce0013276d7db))
259259+- [x] Remove sync_source usage from iOS sync ([3ca3](https://tangled.org/burrito.space/peek/commit/3ca335f097031f0d227d9d4984274f019a53f05d))
260260+- [x] Add device ID and _sync metadata to mobile backend ([abc4](https://tangled.org/burrito.space/peek/commit/abc408159b76a74cf8712ab42e6c6f572b9f9ebc))
319261320262Mobile / iOS
321321-- [x] feat(ios): native inline WKWebView + fix dev build pipeline (ac1154e7)
322322-- [x] fix(ios): separate dev/release build paths and enable media autoplay (50444786)
323323-- [x] fix(mobile): prevent white flash when opening inline webview (edc1b5b9)
324324-- [x] fix(mobile): tighten header layout alignment (6f639e85)
325325-- [x] fix(ui): editor overlays fill to keyboard, tagset cards use tag chips (bb032a08)
326326-- [x] fix(mobile): replace Once::call_once with retryable Mutex for DB init (bb02d535)
327327-- [x] feat(mobile): hide from:history items from default list view (c6acfc60)
328328-- [x] fix(build): separate derivedDataPath for simulator and device builds (d6870291)
329329-- [x] fix(build): add --standalone flag to embed real frontend in iOS builds (90c7f5d8)
263263+- [x] Native inline WKWebView and fix dev build pipeline ([ac11](https://tangled.org/burrito.space/peek/commit/ac1154e70ac137d8c4079ebfd90fbf504c951f9e))
264264+- [x] Separate dev/release build paths and enable media autoplay ([5044](https://tangled.org/burrito.space/peek/commit/5044478650895bf02ea44ab07247a1437de290c4))
265265+- [x] Prevent white flash when opening inline webview ([edc1](https://tangled.org/burrito.space/peek/commit/edc1b5b97953a149f48bdea6f7b02e5a00e1b26a))
266266+- [x] Tighten header layout alignment ([6f63](https://tangled.org/burrito.space/peek/commit/6f639e85a362d16b7a3a0d40d55d2369fb679929))
267267+- [x] Editor overlays fill to keyboard, tagset cards use tag chips ([bb03](https://tangled.org/burrito.space/peek/commit/bb032a08cc463712f90feff4d66d2e79c89ff534))
268268+- [x] Replace Once::call_once with retryable Mutex for DB init ([bb02](https://tangled.org/burrito.space/peek/commit/bb02d53584824cc53a8231b5edf603798a309933))
269269+- [x] Hide from:history items from default list view ([c6ac](https://tangled.org/burrito.space/peek/commit/c6acfc60))
270270+- [x] Separate derivedDataPath for simulator and device builds ([d687](https://tangled.org/burrito.space/peek/commit/d687029109f05f5d20cebeb6b3c459e1f86469fe))
271271+- [x] Add --standalone flag to embed real frontend in iOS builds ([90c7](https://tangled.org/burrito.space/peek/commit/90c7f5d80c3c7333c51c4838a3b04597b4dff348))
330272331273Testing
332332-- [x] test(cmd): add comprehensive URL detection tests for command panel (ccc5a13b)
333333-- [x] test(server): add syncSource migration simulation tests (72731acf)
334334-- [x] test(entities): add unit tests for extractors, matcher, and store (8759b707)
335335-- [x] test(groups): add mode context propagation tests (5fbcc1ca)
336336-- [x] feat(test): deterministic profile IDs via PEEK_PROFILE_ID env var (7c61aa6e)
337337-- [x] fix(test): run unit tests under Electron's Node to match native module ABI (e1e0c7c5)
338338-- [x] fix(server): enable single-user mode for e2e tests (c6c249b5)
274274+- [x] Add comprehensive URL detection tests for command panel ([ccc5](https://tangled.org/burrito.space/peek/commit/ccc5a13b2af9dff5333de06918bd9b89595dcd30))
275275+- [x] Add syncSource migration simulation tests ([7273](https://tangled.org/burrito.space/peek/commit/72731acf9cd9d3be88c0a1f8f5f92217c023ce70))
276276+- [x] Add unit tests for entity extractors, matcher, and store ([8759](https://tangled.org/burrito.space/peek/commit/8759b7070b4d9fb4703d9b3533a2b3b3d6c22a69))
277277+- [x] Add mode context propagation tests ([5fbc](https://tangled.org/burrito.space/peek/commit/5fbcc1cae400d44fba0007d77155937b7e03b7a7))
278278+- [x] Deterministic profile IDs via PEEK_PROFILE_ID env var ([7c61](https://tangled.org/burrito.space/peek/commit/7c61aa6e47e5d0b03b63918b68134c449d99b867))
279279+- [x] Run unit tests under Electron's Node to match native module ABI ([e1e0](https://tangled.org/burrito.space/peek/commit/e1e0c7c5c989c296fc75adf8f493ada592443caa))
280280+- [x] Enable single-user mode for e2e tests ([c6c2](https://tangled.org/burrito.space/peek/commit/c6c249b52830b6efd18b2d91ea2eaad6e3bc94f6))
339281340282## 2026-02-02
341283342284Desktop - IZUI (Inverted Zooming User Interface)
343343-- [x] feat(izui): implement IZUI state machine for transient vs active window behavior (457ce41d)
344344- - Centralized `IzuiStateCoordinator` manages session-based state tracking
345345- - Fixes cmd bar stuck on "group" mode when invoked transiently
346346- - Fixes ESC from overlay showing groups instead of returning to previous app
347347- - Transient state propagates to child windows (cmd -> overlay)
348348- - Uses `isFocused()` for accurate system focus detection
349349- - KeepLive windows re-evaluate transient state on each show
350350- - Added `api.izui.*` renderer API for querying state
351351- - 54 unit tests with dependency injection for testability
352352- - See `docs/izui.md` for full documentation
353353-- [x] fix(izui): OS-level focus for transient detection + graceful test shutdown (e1764328)
354354- - Transient detection uses OS-level app focus (`app.isFocused`) instead of window visibility
355355- - Tests use graceful `app.quit()` instead of SIGTERM/SIGKILL (no more crash dialogs)
356356- - 5 new IZUI behavior tests for real app focus scenarios
357357-- [x] refactor(izui): passive backend window manager - extensions use api.window.open() directly (188894c4)
358358- - Backend no longer creates windows for extensions; extensions open their own via API
359359- - Simplifies window lifecycle and reduces coupling
360360-- [x] fix(izui): child windows always close on ESC + center windows on screen (b0d07b89)
361361- - ESC policy: child windows always close, active root windows do not
362362- - All new windows centered on screen at creation
363363-- [x] fix(izui): visibility-based transient detection + active mode ESC protection (d74b62b5)
364364-- [x] feat(izui): center child windows over parent window (bd947dbc)
365365- - Parent window position/size used to calculate centered placement
366366- - Focus restored to parent on child close
367367-- [x] fix(izui): renderer-driven escape lifecycle for navigate mode windows (dc470b7f)
368368-- [x] fix(izui): fix ESC navigation, window drag, and navbar cleanup (3ca4841b)
369369-- [x] fix(izui): fix transient detection race condition (d634a52b)
370370-- [x] fix: clean up modes, remove overlay, fix IZUI navigation stack (6be5fc45)
371371-- [x] fix(groups): filter peek:// URLs and fix IZUI stack navigation (70ab1706)
372372-- [x] cleanup(overlay): remove vestigial overlay references and rename events (16402840)
373373-- [x] fix(main): remove non-existent overlay from CONSOLIDATED_EXTENSION_IDS (518c4406)
285285+- [x] IZUI state machine for transient vs active window behavior — centralized state tracking, ESC behavior depends on context ([457c](https://tangled.org/burrito.space/peek/commit/457ce41d3dd96dc2447951347ce5047f85d87029))
286286+- [x] OS-level focus for transient detection, graceful test shutdown ([e176](https://tangled.org/burrito.space/peek/commit/e17643284ffa2e175fa4d48aca1b973382a60b96))
287287+- [x] Passive backend window manager — extensions open their own windows via API ([1888](https://tangled.org/burrito.space/peek/commit/188894c4855996600fbbb1702a592b6a2b6be035))
288288+- [x] Child windows always close on ESC, new windows centered on screen ([b0d0](https://tangled.org/burrito.space/peek/commit/b0d07b893143dff7da8fdebc2669e0520c01a2a8))
289289+- [x] Visibility-based transient detection and active mode ESC protection ([d74b](https://tangled.org/burrito.space/peek/commit/d74b62b550f87d05a927a1f5e3fee75b82159355))
290290+- [x] Center child windows over parent window, restore focus on close ([bd94](https://tangled.org/burrito.space/peek/commit/bd947dbcbcd76009990571d8292f283d81268cd1))
291291+- [x] Renderer-driven escape lifecycle for navigate mode windows ([dc47](https://tangled.org/burrito.space/peek/commit/dc470b7fe05f1b83c77f66e4ffe0b38522848919))
292292+- [x] Fix ESC navigation, window drag, and navbar cleanup ([3ca4](https://tangled.org/burrito.space/peek/commit/3ca4841b6a279c6280d9673632b64f6433e88f45))
293293+- [x] Fix transient detection race condition ([d634](https://tangled.org/burrito.space/peek/commit/d634a52bd07f2b64112e5a7d6cd3e60119a5a959))
294294+- [x] Clean up modes, remove overlay, fix IZUI navigation stack ([6be5](https://tangled.org/burrito.space/peek/commit/6be5fc453d88914a3536d66cc6ecb80e5118d731))
295295+- [x] Filter peek:// URLs and fix IZUI stack navigation ([70ab](https://tangled.org/burrito.space/peek/commit/70ab1706b21a2456b0f5896a60ac5acf0e23c5d2))
296296+- [x] Remove vestigial overlay references and rename events ([1640](https://tangled.org/burrito.space/peek/commit/164028401acd7efb18e149270868cb6ca3ddf220))
297297+- [x] Remove non-existent overlay from consolidated extension IDs ([518c](https://tangled.org/burrito.space/peek/commit/518c44065a4b23cd221bca9f1e054eeb5ea6a7c9))
374298375299Desktop - Reactivity & Events
376376-- [x] feat(reactivity): add tag-centric events for real-time UI updates (8c229cdf)
377377- - `tag:created`, `tag:item-added`, `tag:item-removed` events
378378- - Extensions can subscribe to tag changes for live UI updates
379379-- [x] feat(reactivity): item CRUD events, debouncing, history/feeds subscriptions (1d351083)
380380- - `item:created`, `item:updated`, `item:deleted` events
381381- - Debounced event emission to prevent UI thrashing
382382- - History and feeds extensions subscribe to relevant events
383383-- [x] feat(datastore): implement item_events table and CRUD operations (78950782)
384384-- [x] feat(preload): expose item_events API to renderer (f8f85ebc)
300300+- [x] Tag-centric events for real-time UI updates — tag:created, tag:item-added, tag:item-removed ([8c22](https://tangled.org/burrito.space/peek/commit/8c229cdf68c32bb51332f49c7feb6093b7201a2e))
301301+- [x] Item CRUD events with debouncing, history/feeds subscriptions ([1d35](https://tangled.org/burrito.space/peek/commit/1d351083780203bd00166ecf0d800167f5d038bb))
302302+- [x] Implement item_events table and CRUD operations ([7895](https://tangled.org/burrito.space/peek/commit/78950782d132b1f3e2fc25b5e76fd10dbdb52759))
303303+- [x] Expose item_events API to renderer ([f8f8](https://tangled.org/burrito.space/peek/commit/f8f85ebcba23b323d93c38bd97a4308c7472301d))
385304386305Desktop - Window Management
387387-- [x] feat(window): add overlay mode for transient full-screen views (0727112b)
388388-- [x] fix(windows): hide other windows AFTER windows view opens (37ee7d43)
389389-- [x] fix(windows): ESC always closes, remove fallback emoji (3fddd1a6)
390390-- [x] refactor(windows): transparent bg with groups/tags card style (414e2139)
391391-- [x] refactor(windows): use peek-card and peek-grid components (666efa8d)
392392-- [x] fix(windows): use correct path for component imports (8b6686e4)
306306+- [x] Add overlay mode for transient full-screen views ([0727](https://tangled.org/burrito.space/peek/commit/0727112b71e08949c5c85ab1f4ae11eb4e5f519c))
307307+- [x] Hide other windows after windows view opens ([37ee](https://tangled.org/burrito.space/peek/commit/37ee7d4361aa10d5f320a4d41c7985837b2a75c4))
308308+- [x] ESC always closes windows, remove fallback emoji ([3fdd](https://tangled.org/burrito.space/peek/commit/3fddd1a6beaaeb2d9032c5a697d2a1b3814726c3))
309309+- [x] Transparent background with groups/tags card style ([414e](https://tangled.org/burrito.space/peek/commit/414e2139f66fa276266fe53e27f4b8c563c8301d))
310310+- [x] Use peek-card and peek-grid components for windows ([666e](https://tangled.org/burrito.space/peek/commit/666efa8d77ddf47fa81f214cff5e8564db06d074))
311311+- [x] Fix component import paths ([8b66](https://tangled.org/burrito.space/peek/commit/8b6686e4809a891ee9db6007fb5c79d7ab059b3d))
393312394313Desktop - Architecture & Modes
395395-- [x] feat(context): add app-wide context API for extensible mode management (196a12d0)
396396-- [x] refactor(modes): remove modes.ts, consolidate into context API and datastore (5943e223)
397397-- [x] refactor(modes): remove settings mode and minor modes (simplify to page/group/default) (eab54a3f)
398398-- [x] feat(schema): add feeds and series architecture (8688c501)
399399-- [x] feat(feeds): add feed reader extension and API documentation (44c5b507)
314314+- [x] App-wide context API for extensible mode management ([196a](https://tangled.org/burrito.space/peek/commit/196a12d063dcb5c6eafca5a2e9c40b9b1ab4c474))
315315+- [x] Consolidate modes into context API and datastore ([5943](https://tangled.org/burrito.space/peek/commit/5943e2232e66658377ba0843d607f7ee0101f605))
316316+- [x] Simplify to page/group/default modes ([eab5](https://tangled.org/burrito.space/peek/commit/eab54a3ff2b29957873ecd224dd419f8d8185511))
317317+- [x] Add feeds and series architecture ([8688](https://tangled.org/burrito.space/peek/commit/8688c50133ebac280772bca4173b5ee99cd4a61b))
318318+- [x] Add feed reader extension ([44c5](https://tangled.org/burrito.space/peek/commit/44c5b507a1d0f879ba60c68de0b1e529bc5feed9))
400319401320Desktop - Editor & Commands
402402-- [x] feat(editor): implement note editing flow with autosave (0ae56bb7)
403403-- [x] feat(cmd): restore mode indicator to command bar (from orphaned commits) (917640ca)
404404- - Shows current mode (page/group/settings)
405405- - Click to cycle through modes
406406- - Auto-hides when in default mode
407407-- [x] feat(cmd): add Sync now command for manual sync trigger (18d02d2c)
408408-- [x] refactor(cmd): use connector pattern for edit and note commands (48465f72)
409409-- [x] fix(cmd): url command returns error instead of opening editor when no URL provided (5141fb07)
321321+- [x] Note editing flow with autosave ([0ae5](https://tangled.org/burrito.space/peek/commit/0ae56bb7c9586de0c2c9cf14245148ae9de2ecfd))
322322+- [x] Restore mode indicator to command bar — shows current mode, click to cycle ([9176](https://tangled.org/burrito.space/peek/commit/917640cacdb7e6f016cdd7e5a4dec3434a198d4b))
323323+- [x] Add "Sync now" command for manual sync trigger ([18d0](https://tangled.org/burrito.space/peek/commit/18d02d2cd3d65f60537a1d1622923c0696029999))
324324+- [x] Use connector pattern for edit and note commands ([4846](https://tangled.org/burrito.space/peek/commit/48465f72a50e5b801a71e9c09c4262dff0636ebb))
325325+- [x] URL command returns error instead of opening editor when no URL provided ([5141](https://tangled.org/burrito.space/peek/commit/5141fb07b095f117552fd8ce461ac318f5907219))
410326411327Desktop - UI & Components
412412-- [x] feat(components): add glass-morphism tokens and component modes (7b2e52dc)
413413-- [x] fix(ui): center card headers, disable URL input autocapitalize, fix dev script (aa578e0d)
414414-- [x] fix(page): set default background on webview content when page has none (9fc274ab)
415415- - Respects system theme (dark/light)
416416- - Only applies when page doesn't set its own background
417417-- [x] fix(page): use trackNavigation for URL visit recording (f2677891)
328328+- [x] Add glass-morphism tokens and component modes ([7b2e](https://tangled.org/burrito.space/peek/commit/7b2e52dca752a2c46920364667e0f58a42360ba2))
329329+- [x] Center card headers, disable URL input autocapitalize, fix dev script ([aa57](https://tangled.org/burrito.space/peek/commit/aa578e0d91539d6f4d7b6e177e993106e9e9b226))
330330+- [x] Set default background on webview content when page has none — respects system theme ([9fc2](https://tangled.org/burrito.space/peek/commit/9fc274ab7ffc402f4409769023bed2bfcb439d3e))
331331+- [x] Use trackNavigation for URL visit recording ([f267](https://tangled.org/burrito.space/peek/commit/f267789149b2418d4e58d90f24da86c023bf930f))
418332419333Desktop - Profiles & Startup
420420-- [x] feat(profiles): add Chromium session partition isolation per profile (2d704158)
421421-- [x] fix(profiles): register peek:// protocol on profile session (cd80de8d)
422422-- [x] fix(startup): respect startupFeature pref instead of always opening settings (5b920fab)
334334+- [x] Chromium session partition isolation per profile ([2d70](https://tangled.org/burrito.space/peek/commit/2d704158814b911fd76579febe03ea6119e596ea))
335335+- [x] Register peek:// protocol on profile session ([cd80](https://tangled.org/burrito.space/peek/commit/cd80de8d23562964ac212b240f49813535f9b1d3))
336336+- [x] Respect startupFeature pref instead of always opening settings ([5b92](https://tangled.org/burrito.space/peek/commit/5b920fab23aa7c30105f3e435931a0d25092fa70))
423337424338Desktop - Fixes
425425-- [x] fix: ESC handling for Active mode windows (IZUI policy compliance)
426426-- [x] fix: add getFocusedVisibleWindowId API for modal window targeting
427427-- [x] fix: add trackNavigation API for unified page load tracking
428428-- [x] fix: update test to use peek://ext/cmd/panel.html (correct URL after cleanup)
429429-- [x] fix: window-list returns actual URLs from peek://app/page containers
430430-- [x] fix: mode detection from URL in window creation
431431-- [x] fix: add native module check script (prevents NODE_MODULE_VERSION mismatch)
432432-- [x] fix: unit tests run under Electron's Node (ELECTRON_RUN_AS_NODE=1) to match native module ABI
433433-- [x] fix(ipc): cast address to string for type safety (32a7f8a0)
434434-- [x] fix(ipc): sanitize window params to prevent serialization crash (fca6a26f)
435435-- [x] fix(build): exclude tmp/ agent workspaces from electron-builder (f0f26e31)
436436-- [x] fix(build): electron-builder uses yml config via extends (4620155f)
437437-- [x] fix(url): normalize trailing slash on bare domain URLs (3c2bbd61)
339339+- [x] ESC handling for Active mode windows (IZUI policy compliance)
340340+- [x] Add getFocusedVisibleWindowId API for modal window targeting
341341+- [x] Add trackNavigation API for unified page load tracking
342342+- [x] Update test to use peek://ext/cmd/panel.html
343343+- [x] Window-list returns actual URLs from peek://app/page containers
344344+- [x] Mode detection from URL in window creation
345345+- [x] Add native module check script (prevents NODE_MODULE_VERSION mismatch)
346346+- [x] Unit tests run under Electron's Node to match native module ABI
347347+- [x] Cast address to string for type safety ([32a7](https://tangled.org/burrito.space/peek/commit/32a7f8a0b97b12718211cc4cd39264cea5a6de49))
348348+- [x] Sanitize window params to prevent serialization crash ([fca6](https://tangled.org/burrito.space/peek/commit/fca6a26f963623bc04a94bc2361cb9e4f49a2678))
349349+- [x] Exclude tmp/ agent workspaces from electron-builder ([f0f2](https://tangled.org/burrito.space/peek/commit/f0f26e312d0174f2d6a304ed8638145d09a2c94b))
350350+- [x] Electron-builder uses yml config via extends ([4620](https://tangled.org/burrito.space/peek/commit/4620155f4f96c9a42bdf00211967efa547063e19))
351351+- [x] Normalize trailing slash on bare domain URLs ([3c2b](https://tangled.org/burrito.space/peek/commit/3c2bbd619327e7cb6dfbba027ce1805d5873e0b2))
438352439353Mobile / iOS
440440-- [x] feat(mobile): add URL action icons with native WKWebView + visit tracking (ee06ef99)
441441- - Open in Browser: opens URL in Safari
442442- - Open in Webview: opens URL in embedded native WKWebView
443443- - Track visits when URLs are loaded/navigated in webview
444444-- [x] fix(webview-plugin): simplify Swift integration with direct FFI (18258830)
445445-- [x] feat(mobile): fix native webview and restore icon system (1b641ed1)
446446-- [x] fix(ios): require hold gesture for pull-to-refresh (prevents accidental triggers) (0efb4445)
447447-- [x] feat(ios): bottom sheet webview + research docs (80fb7d8f)
448448-- [x] feat(webview): card-expansion iframe overlay replaces native bottom sheet (eb43f135)
449449-- [x] fix(ios): silence linker warnings and remove unused default icons (8cd36323)
450450-- [x] fix(ios): UX polish pass - 18 fixes for editor, share extension, layout, build (cf5fe38b)
451451-- [x] fix(ios): UX polish - 13 fixes for share sheet, editor, keyboard, sorting, filters (956fdcb8)
452452-- [x] fix(ui): maximize editor card space - tighter padding, remove separator, expand to edges (2a0fc4bf)
453453-- [x] fix(ui): undo/redo at top, reduce gaps, add webview link for text items (90d76c51)
454454-- [x] fix(share): commit pending tag text when Done is tapped (712a5108)
455455-- [x] fix(build): use dynamic DerivedData path for sim:install (94420c17)
354354+- [x] URL action icons with native WKWebView + visit tracking — open in Safari or embedded webview ([ee06](https://tangled.org/burrito.space/peek/commit/ee06ef990eb2bad8a17de65708a088198625e7f7))
355355+- [x] Simplify Swift webview integration with direct FFI ([1825](https://tangled.org/burrito.space/peek/commit/182588302aef990b8ced2c8b4bd1143ba813653f))
356356+- [x] Fix native webview and restore icon system ([1b64](https://tangled.org/burrito.space/peek/commit/1b641ed1fdd510c83847c8cf213cc14eac5e1319))
357357+- [x] Require hold gesture for pull-to-refresh to prevent accidental triggers ([0efb](https://tangled.org/burrito.space/peek/commit/0efb444539dba1d4cc7ed5cbd68815978ee2a5b0))
358358+- [x] Bottom sheet webview ([80fb](https://tangled.org/burrito.space/peek/commit/80fb7d8f9f3df9d064720c4801c91af0898e611f))
359359+- [x] Card-expansion iframe overlay replaces native bottom sheet ([eb43](https://tangled.org/burrito.space/peek/commit/eb43f135aaf8ed51c69dff6d7726cf995bf0c3ed))
360360+- [x] Silence linker warnings and remove unused default icons ([8cd3](https://tangled.org/burrito.space/peek/commit/8cd36323c9173e18559108b909718589433bbcda))
361361+- [x] UX polish pass — 18 fixes for editor, share extension, layout, build ([cf5f](https://tangled.org/burrito.space/peek/commit/cf5fe38b9cf9148fb2b506085aced75a0871221f))
362362+- [x] UX polish — 13 fixes for share sheet, editor, keyboard, sorting, filters ([956f](https://tangled.org/burrito.space/peek/commit/956fdcb80b723c155a25195e6a6aa55e9a35b336))
363363+- [x] Maximize editor card space — tighter padding, expand to edges ([2a0f](https://tangled.org/burrito.space/peek/commit/2a0fc4bf7c778068a7a76bee723410d98a44265b))
364364+- [x] Undo/redo at top, reduce gaps, add webview link for text items ([90d7](https://tangled.org/burrito.space/peek/commit/90d76c5178864b8d313333b0a6507b64ff1eaf6b))
365365+- [x] Commit pending tag text when Done is tapped ([712a](https://tangled.org/burrito.space/peek/commit/712a5108ebca84bfa96143b6dfd12d0725a79b54))
366366+- [x] Use dynamic DerivedData path for sim:install ([9442](https://tangled.org/burrito.space/peek/commit/94420c1731e25992049d270b48b6a0626f13a54e))
456367457368Testing
458458-- [x] feat(tests): add Playwright browser extension e2e tests
459459-- [x] fix(tests): improve extension ID detection and shared instance handling
460460-- [x] fix(tests): remove Firefox Playwright support (not supported by Playwright)
461461-- [x] test: add integration tests for tag-centric events (ed9dd17a)
369369+- [x] Add Playwright browser extension e2e tests
370370+- [x] Improve extension ID detection and shared instance handling
371371+- [x] Remove Firefox Playwright support (not supported by Playwright)
372372+- [x] Add integration tests for tag-centric events ([ed9d](https://tangled.org/burrito.space/peek/commit/ed9dd17a41ba94b54faae75cd595934f2e9cecb2))
462373463374Refactoring
464464-- [x] refactor(extensions): move tag and tagset commands to tags extension (d6636aaa)
465465-- [x] refactor(extensions): create files extension with csv and save commands (435cc952)
466466-- [x] refactor(extensions): create sync extension with sync command (e5867452)
375375+- [x] Move tag and tagset commands to tags extension ([d663](https://tangled.org/burrito.space/peek/commit/d6636aaa3087c2ec7bcf817363f16a9b7c901244))
376376+- [x] Create files extension with csv and save commands ([435c](https://tangled.org/burrito.space/peek/commit/435cc952196795389322bda8f9f9d48b176c4340))
377377+- [x] Create sync extension with sync command ([e586](https://tangled.org/burrito.space/peek/commit/e5867452459b6c136b01c663d1237cc3c05a4899))
467378468379Datastore & UI
469469-- [x] fix(datastore): show addresses/visits/tags stats with safe error handling
470470-- [x] fix(datastore): extract stats from result.data wrapper
471471-- [x] chore: clean up settings and diagnostic UI
380380+- [x] Show addresses/visits/tags stats with safe error handling
381381+- [x] Extract stats from result.data wrapper
382382+- [x] Clean up settings and diagnostic UI
472383473384Code Cleanup
474474-- [x] chore: remove vestigial app/cmd/ directory (24 files, replaced by extensions/cmd/)
475475-- [x] chore: remove app/scripts/ (disabled feature with missing HTML files)
476476-- [x] chore: remove dead functions from app/index.js (uninitFeature, initIframeFeature)
477477-- [x] chore: remove Cmd and Scripts entries from app/config.js (non-existent URLs)
478478-- [x] chore: simplify app/features.js (all features are now extensions)
479479-- [x] chore: remove commented-out sendToWindow/onMessage APIs from preload.js
480480-- [x] chore: remove 7 unused IPC handlers from ipc.ts (~155 lines)
385385+- [x] Remove vestigial app/cmd/ directory (24 files, replaced by extensions/cmd/)
386386+- [x] Remove app/scripts/ (disabled feature with missing HTML files)
387387+- [x] Remove dead functions from app/index.js
388388+- [x] Remove Cmd and Scripts entries from app/config.js
389389+- [x] Simplify app/features.js (all features are now extensions)
390390+- [x] Remove commented-out sendToWindow/onMessage APIs from preload.js
391391+- [x] Remove 7 unused IPC handlers from ipc.ts (~155 lines)
481392482393## 2026-01-26
483394
+645-726
docs/feed.xml
···44 <title>Peek Changelog</title>
55 <link>https://tangled.org/burrito.space/peek</link>
66 <description>Recent changes to Peek</description>
77- <lastBuildDate>Thu, 19 Feb 2026 16:38:31 GMT</lastBuildDate>
77+ <lastBuildDate>Thu, 19 Feb 2026 17:09:20 GMT</lastBuildDate>
88 <generator>changelog-to-rss.js</generator>
99 <atom:link href="https://tangled.org/burrito.space/peek/raw/main/docs/feed.xml" rel="self" type="application/rss+xml"/>
1010 <item>
···1212 <link>https://tangled.org/burrito.space/peek</link>
1313 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-19</guid>
1414 <pubDate>Thu, 19 Feb 2026 12:00:00 GMT</pubDate>
1515- <description><![CDATA[<p>Desktop - Themes<br>
1616-<ul><li>feat(themes): implement themes-as-extensions Phase 1+2 — unified lifecycle and cmd palette switching (213b)</li><br>
1717-<li style="margin-left:1em">Themes are CSS-only extensions served via peek://theme/ protocol</li><br>
1818-<li style="margin-left:1em">Switch themes from command palette, auto-discovers installed theme extensions</li><br>
1919-<li style="margin-left:1em">Includes default "Peek" theme with bundled fonts</li><br>
2020-<li>feat(theme): add 七十二候 micro-seasons theme with traditional Japanese colors (d031)</li><br>
2121-<li style="margin-left:1em">Colors change automatically every ~5 days based on Japan's 72 micro-seasons calendar</li><br>
2222-<li style="margin-left:1em">Uses 伝統色 (traditional Japanese colors) with automatic dark mode derivation via color-mix()</li><br>
2323-<li>fix(themes): copy fonts to theme-peek extension and fix font URLs (da4b)</li><br>
2424-<li>fix(editor): improve syntax highlighting readability in dark mode (de99)</li><br>
2525-</ul><br>
2626-Desktop - Groups<br>
2727-<ul><li>feat(groups): add workspace persistence — save and restore window layouts per group (1a25)</li><br>
2828-<li>feat(groups): add quick wins — close, search scope, switch, pin (b8a6)</li><br>
2929-<li style="margin-left:1em">Close all windows in group, scope search to group, switch between groups, pin windows</li><br>
3030-<li>test(groups): add unit tests for groups quick wins (805d)</li><br>
3131-</ul><br>
3232-Desktop - Widget System<br>
3333-<ul><li>feat(sheets): add widget sheet extension with freeform layout (9644)</li><br>
3434-<li>feat(hud): migrate HUD to widget sheet system with individual widget pages (4ec6)</li><br>
3535-<li>feat(extensions): add widget demo extension (7aeb)</li><br>
3636-<li>feat(grid): add freeform layout mode with drag/resize editing (6f05)</li><br>
3737-<li style="margin-left:1em">New "freeform" viewMode for peek-grid — drag to move, edge-drag to resize, snap-to-grid</li><br>
3838-</ul><br>
3939-Desktop - Editor<br>
4040-<ul><li>feat(editor): add vim :set wrap/nowrap, :set number/nonumber, and :q command (4750)</li><br>
4141-<li>feat(editor): persist vim :set settings (wrap, lineNumbers) across sessions (ab30)</li><br>
4242-<li>fix(editor): support multiple simultaneous editor instances (a3be)</li><br>
4343-</ul><br>
4444-Desktop - Page View<br>
4545-<ul><li>feat(page): show loading indicator for in-page webview navigations (538f)</li><br>
4646-<li>fix(page): rewrite loading indicator — separate lifecycle from visual effect (847d)</li><br>
4747-<li>fix(page): ensure page loading glow clears when page finishes loading (1630)</li><br>
4848-</ul><br>
4949-Desktop - Entity Recognition<br>
5050-<ul><li>feat(entities): add Phase 1 entity validation framework (64f7)</li><br>
5151-<li>test(entities): add unit tests for name-validator module (d81c)</li><br>
5252-</ul><br>
5353-Desktop - Tauri<br>
5454-<ul><li>feat(tauri): add system tray with click-to-show (c469)</li><br>
5555-<li>feat(tauri): add net-fetch proxy and file dialog commands (83f5)</li><br>
5656-</ul><br>
5757-Desktop - Refactoring<br>
5858-<ul><li>refactor: extract shared modules to app/lib — pubsub, izui, frecency, shortcuts, session (da44, 9ff2, 10f0, e267, 7ed8)</li><br>
5959-<li style="margin-left:1em">Platform-agnostic implementations shared between Electron and Tauri backends</li><br>
6060-</ul><br>
6161-Desktop - Fixes<br>
6262-<ul><li>fix(drag): use !important CSS classes for hold/drag cursor feedback (6e86)</li><br>
6363-<li>fix(sync): make sync now fire-and-forget + add 15s timeout (96ed, 73f9)</li><br>
6464-<li>fix: handle macOS open command with local file paths (1ae8)</li><br>
6565-<li>fix: prevent opening app directory as file:// URL on startup (e12b)</li><br>
6666-<li>fix(ext): use Promise.allSettled for extension loading so one failure doesn't block all commands (d031)</li><br>
6767-</ul><br>
6868-Testing<br>
6969-<ul><li>fix(tests): resolve pre-existing unit test failures across 4 test suites (a961)</li></ul></p>]]></description>
1515+ <description>Desktop - Themes
1616+- Switchable themes from command palette — themes are now installable CSS extensions (213b (https://tangled.org/burrito.space/peek/commit/213b4794a5f6dac0f29da22b9317c41fd23563d9))
1717+- Add 七十二候 micro-seasons theme — colors change automatically every ~5 days based on Japan's 72 seasons calendar (d031 (https://tangled.org/burrito.space/peek/commit/d031c4f42b804bbe2442c1169069264c6ecfa326))
1818+- Fix theme font loading and URLs (da4b (https://tangled.org/burrito.space/peek/commit/da4b78bf3077013c31ba650f02dba8a0b393eff9))
1919+- Improve syntax highlighting readability in dark mode (de99 (https://tangled.org/burrito.space/peek/commit/de993e4710b2c02369c0a0ef378c908f6e11f583))
2020+2121+Desktop - Groups
2222+- Save and restore window layouts per group (1a25 (https://tangled.org/burrito.space/peek/commit/1a25f1d8742a52ec3e849f99b9465cafc61f3089))
2323+- Close all windows in group, scope search to group, switch between groups, pin windows (b8a6 (https://tangled.org/burrito.space/peek/commit/b8a6befeb2eff51b5638aa4b790b77a74c4ddf52))
2424+- Add unit tests for group quick wins (805d (https://tangled.org/burrito.space/peek/commit/805d0993e4c4edc294b57bd463bcfef71d9f0266))
2525+2626+Desktop - Widget System
2727+- Add widget sheet extension with freeform layout (9644 (https://tangled.org/burrito.space/peek/commit/96449d04269ac0a14740bad03067ddf2e784b6e3))
2828+- Migrate HUD to widget sheet system with individual widget pages (4ec6 (https://tangled.org/burrito.space/peek/commit/4ec60504040874495d9439636db38513188aad46))
2929+- Add widget demo extension (7aeb (https://tangled.org/burrito.space/peek/commit/7aeb1baa90812f18a26699035eab6487294c78fd))
3030+- Add freeform layout mode with drag-to-move, edge-drag-to-resize, and snap-to-grid (6f05 (https://tangled.org/burrito.space/peek/commit/6f05c81f835653363d7f5df6ede6f48878495031))
3131+3232+Desktop - Editor
3333+- Add vim :set wrap/nowrap, :set number/nonumber, and :q command (4750 (https://tangled.org/burrito.space/peek/commit/4750ab83412366fa303bd4756fab3c393aebaaf8))
3434+- Persist vim :set settings across sessions (ab30 (https://tangled.org/burrito.space/peek/commit/ab30313bf529b5065a06a1e55517c2a1c7edff35))
3535+- Support multiple simultaneous editor instances (a3be (https://tangled.org/burrito.space/peek/commit/a3beea130920c0f4da96ee99d4021ab673a576b9))
3636+3737+Desktop - Page View
3838+- Show loading indicator for in-page navigations (538f (https://tangled.org/burrito.space/peek/commit/538f3769aa6cba57af1c12cb57cb14437527a4db))
3939+- Rewrite loading indicator for reliability (847d (https://tangled.org/burrito.space/peek/commit/847dd119d0b540cd96f9fa1d9a6bdbd0c6fb2a95))
4040+- Ensure loading glow clears when page finishes loading (1630 (https://tangled.org/burrito.space/peek/commit/16304f58514b40a14cf040e31826699e83dc93a6))
4141+4242+Desktop - Entity Recognition
4343+- Add entity validation framework (64f7 (https://tangled.org/burrito.space/peek/commit/64f7a7a470aa06fd7576607113b04cfa9adfbb1c))
4444+- Add unit tests for name-validator module (d81c (https://tangled.org/burrito.space/peek/commit/d81c07d73229f5920d1f253b220e2d4fa35d9578))
4545+4646+Desktop - Tauri
4747+- Add system tray with click-to-show (c469 (https://tangled.org/burrito.space/peek/commit/c469d9da5ea67e513eb0467bda8550f3f10e1c1c))
4848+- Add net-fetch proxy and file dialog commands (83f5 (https://tangled.org/burrito.space/peek/commit/83f5a1d261ff53a8d91407131c60218ba2eb2971))
4949+5050+Desktop - Refactoring
5151+- Extract shared modules to app/lib for platform-agnostic use between Electron and Tauri (da44 (https://tangled.org/burrito.space/peek/commit/da44fd3dd4ea7db548b9894687e8cefa18efbe64), 9ff2 (https://tangled.org/burrito.space/peek/commit/9ff26e737bf254facffdcc47ec708ec5ef88db23), 10f0 (https://tangled.org/burrito.space/peek/commit/10f0bfc0855ac5934ec1f6c7f6843fc5efd0025e), e267 (https://tangled.org/burrito.space/peek/commit/e267e2661139e7ebad0e91ac7e458af05a3502ba), 7ed8 (https://tangled.org/burrito.space/peek/commit/7ed8b22556f1e2fbbe26c3cc833956f7cc29a270))
5252+5353+Desktop - Fixes
5454+- Fix hold/drag cursor feedback CSS (6e86 (https://tangled.org/burrito.space/peek/commit/6e862be638d70eac3fa1163c6c1dd7e14b11b8f5))
5555+- Make sync fire-and-forget with 15s timeout (96ed (https://tangled.org/burrito.space/peek/commit/96edd06a18c374926e515b703d6193116fe2c19d), 73f9 (https://tangled.org/burrito.space/peek/commit/73f9896fd1aa5c6b0b683cafa9d58ec12528be6c))
5656+- Handle macOS open command with local file paths (1ae8 (https://tangled.org/burrito.space/peek/commit/1ae8101e0554cf9d2e17db11ee94b9aabc58e8c7))
5757+- Prevent opening app directory as file:// URL on startup (e12b (https://tangled.org/burrito.space/peek/commit/e12bef73e27699ed8cc7b53da178fc2a247b198b))
5858+- Use Promise.allSettled for extension loading so one failure doesn't block all commands (d031 (https://tangled.org/burrito.space/peek/commit/d031c4f42b804bbe2442c1169069264c6ecfa326))
5959+6060+Testing
6161+- Resolve pre-existing unit test failures across 4 test suites (a961 (https://tangled.org/burrito.space/peek/commit/a9610b631d66db1a190ab49332cc06667fad3ef9))</description>
7062 </item>
7163 <item>
7264 <title>2026-02-16</title>
7365 <link>https://tangled.org/burrito.space/peek</link>
7466 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-16</guid>
7567 <pubDate>Mon, 16 Feb 2026 12:00:00 GMT</pubDate>
7676- <description><![CDATA[<p>Desktop - Command Palette<br>
7777-<ul><li>feat(cmd): generic command chaining with pipe system (597)</li><br>
7878-<li>feat(cmd): replace embedded chain editor with popup window system (572)</li><br>
7979-<li>feat(cmd): add parameter suggestions to command palette (693)</li><br>
8080-<li>feat(cmd): add noun registration API for declarative command generation (191)</li><br>
8181-<li>fix(cmd): remove download cmd, fix save filename, fix dialog parent, unify hashtag extraction (5b95)</li><br>
8282-<li>fix(cmd): preserve noun routing metadata in command registry pipeline (39a4)</li><br>
8383-</ul><br>
8484-Desktop - Entity Recognition<br>
8585-<ul><li>feat(entities): add observation frequency ranking — Phase 1 (803)</li><br>
8686-<li>feat(entities): add thumbs up/down feedback for entity quality scoring (c0e)</li><br>
8787-</ul><br>
8888-Desktop - Tags<br>
8989-<ul><li>feat(tags): add rename and delete tag operations (ac2)</li><br>
9090-<li>fix(tags): add protocol 404 logging, handle all item types, fix filter counts (403e)</li><br>
9191-</ul><br>
9292-Desktop - Display Switching<br>
9393-<ul><li>refactor(display-watcher): replace 3-phase algorithm with safety-net-only approach (afa)</li><br>
9494-<li style="margin-left:1em">Gutted 881-line 3-phase algorithm, replaced with 304-line single-pass safety net</li><br>
9595-<li style="margin-left:1em">Lets macOS handle display migration natively, only rescues genuinely orphaned windows</li><br>
9696-</ul><br>
9797-Desktop - Page View & Dragging<br>
9898-<ul><li>fix(page): filter Cmd+L/R/[/] pubsub by windowId so only active page window responds (657)</li><br>
9999-<li>fix(page): fully end drag on webview mouseup to prevent overlay blocking clicks (a7b)</li><br>
100100-<li>fix(page): handle webview mousemove during active drag for window movement (ac37)</li><br>
101101-<li>fix(drag): remove data-no-drag from extension window bodies to restore hold-to-drag (63c1)</li><br>
102102-</ul><br>
103103-Desktop - Auth & URLs<br>
104104-<ul><li>feat(auth): OAuth popup bridge and flow improvements (c93)</li><br>
105105-<li>fix(url): wait for frontend ready and session restore before processing external URLs (e7ab)</li><br>
106106-</ul><br>
107107-Testing<br>
108108-<ul><li>test(cmd): add completer unit tests; fix tag # prefix stripping (610)</li><br>
109109-<li>test(cmd): add integration tests for command execution through pubsub (e11)</li><br>
110110-<li>test(cmd): add command chaining pipe system tests (566c)</li><br>
111111-<li>test(oauth): add OAuth bridge unit tests (77b)</li><br>
112112-<li>fix(test): fix 4 stale test expectations in desktop smoke tests (4d9)</li></ul></p>]]></description>
6868+ <description>Desktop - Command Palette
6969+- Generic command chaining with pipe system (5975 (https://tangled.org/burrito.space/peek/commit/5975f593ff109df82daf56b47233cf6910db89d3))
7070+- Replace embedded chain editor with popup window system (5729 (https://tangled.org/burrito.space/peek/commit/5729822b4748acc4bf98c9563d4f7c2a17ae2435))
7171+- Add parameter suggestions to command palette (693d (https://tangled.org/burrito.space/peek/commit/693de4ad13de5edf49643088a724d2788936aca6))
7272+- Add noun registration API for declarative command generation (191f (https://tangled.org/burrito.space/peek/commit/191fb02212c460355702d619f264fa5801edb6b3))
7373+- Remove download cmd, fix save filename, fix dialog parent, unify hashtag extraction (5b95 (https://tangled.org/burrito.space/peek/commit/5b95d1af28ec91787778989f5d0f4d8b34435769))
7474+- Preserve noun routing metadata in command registry pipeline (39a4 (https://tangled.org/burrito.space/peek/commit/39a45314a629b9083163e03a2e59162836266e31))
7575+7676+Desktop - Entity Recognition
7777+- Add observation frequency ranking for entities (8031 (https://tangled.org/burrito.space/peek/commit/80313a9eb1da5e586e5d5d50823c0f88a23f57b9))
7878+- Add thumbs up/down feedback for entity quality scoring (c0e5 (https://tangled.org/burrito.space/peek/commit/c0e5afab57ec4749b29ab35c5ab526b24912720b))
7979+8080+Desktop - Tags
8181+- Add rename and delete tag operations (ac2a (https://tangled.org/burrito.space/peek/commit/ac2a86fb419412483cbaa784108526e15067642e))
8282+- Fix protocol 404 logging, handle all item types, fix filter counts (403e (https://tangled.org/burrito.space/peek/commit/403ea5b151149ef10cd2a22b61838cf7fa3b02a8))
8383+8484+Desktop - Display Switching
8585+- Simplify display-watcher to safety-net-only approach — let macOS handle display migration natively, only rescue orphaned windows (afae (https://tangled.org/burrito.space/peek/commit/afae1e4af08491ae69b6feb6dab9c6f1fa7cae10))
8686+8787+Desktop - Page View & Dragging
8888+- Fix keyboard shortcuts responding in wrong page window (6573 (https://tangled.org/burrito.space/peek/commit/65735c4d27ac2411d62d9c32c4b6c4494e28e0ba))
8989+- Fix drag ending on webview mouseup to prevent overlay blocking clicks (a7b8 (https://tangled.org/burrito.space/peek/commit/a7b8948d19f2fec4c239bf51217421dda79d4b80))
9090+- Fix webview mousemove during active drag for window movement (ac37 (https://tangled.org/burrito.space/peek/commit/ac37674d8b52be9359f4aa1706d86dca11c8ec72))
9191+- Restore hold-to-drag in extension windows (63c1 (https://tangled.org/burrito.space/peek/commit/63c17b27bd19b3c8f9a288ba491271054a31b450))
9292+9393+Desktop - Auth & URLs
9494+- Improve OAuth popup bridge and flow (c93a (https://tangled.org/burrito.space/peek/commit/c93a46dc3ed7ce977e1227f8e3f8ce02152e4695))
9595+- Wait for frontend ready and session restore before processing external URLs (e7ab (https://tangled.org/burrito.space/peek/commit/e7ab8092a3cdde2dd2ba99de18b7fd1babc4a3c2))
9696+9797+Testing
9898+- Add completer unit tests; fix tag # prefix stripping (6102 (https://tangled.org/burrito.space/peek/commit/61020b937d52bd87cfad5425f77167e65421c3c1))
9999+- Add integration tests for command execution through pubsub (e11d (https://tangled.org/burrito.space/peek/commit/e11daddb41f2c53cbba0ecbae40b0e71e1ec4cb0))
100100+- Add command chaining pipe system tests (566c (https://tangled.org/burrito.space/peek/commit/566c9ec7028c8197426369b93f148090aa2e7087))
101101+- Add OAuth bridge unit tests (77b0 (https://tangled.org/burrito.space/peek/commit/77b0f1972afb51f6e0c271bf8abaff09e80a8020))
102102+- Fix 4 stale test expectations in desktop smoke tests (4d96 (https://tangled.org/burrito.space/peek/commit/4d9683f93f590c58fc823024fddcc65f38b29183))</description>
113103 </item>
114104 <item>
115105 <title>2026-02-13</title>
116106 <link>https://tangled.org/burrito.space/peek</link>
117107 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-13</guid>
118108 <pubDate>Fri, 13 Feb 2026 12:00:00 GMT</pubDate>
119119- <description><![CDATA[<p>Desktop - Session Restore<br>
120120-<ul><li>feat(session): implement full session save/restore system (Phases 1-4) (0e8afccd, f270c56d, d0150877, d2fb834a)</li><br>
121121-<li style="margin-left:1em">Phase 1: Snapshot all windows on quit (position, size, URL, mode)</li><br>
122122-<li style="margin-left:1em">Phase 2: Restore windows on startup with confirmation dialog</li><br>
123123-<li style="margin-left:1em">Phase 3: Autosave timer and manual session commands</li><br>
124124-<li style="margin-left:1em">Phase 4: Crash recovery dialog and error handling</li><br>
125125-<li>fix(session): save settings windows, strip stale params on restore, fix display-watcher race conditions (d12bd2b9)</li><br>
126126-<li>fix(session): suppress display-watcher during session restore to preserve window positions (c32b73df)</li><br>
127127-<li>fix(session): handle SIGINT/SIGTERM as clean shutdowns to prevent false crash dialog (f56f5624, 8ab6d36d, 16a2d4bc)</li><br>
128128-<li>fix(session): synchronous SIGINT save and correct canvas page bounds (2df8a733)</li><br>
129129-<li>fix(session): open startup feature when restore is declined or fails (0f280143)</li><br>
130130-</ul><br>
131131-Desktop - Display Switching<br>
132132-<ul><li>feat(display): reposition windows when displays change (d732fa79)</li><br>
133133-<li style="margin-left:1em">Pre-debounce bounds capture preserves window positions before OS moves them</li><br>
134134-<li style="margin-left:1em">Group-based distance scaling for proportional repositioning</li><br>
135135-<li>fix(display-watcher): add home display tracking to restore windows after display reconnect (60b0798d)</li><br>
136136-<li>fix(display): use group-based distance scaling for window repositioning (11166190)</li><br>
137137-</ul><br>
138138-Desktop - Entity Recognition<br>
139139-<ul><li>feat(entities): show source pages in entity list and add detail pane with full metadata (12feb902)</li><br>
140140-<li>fix(entities): improve detection coverage and reduce price noise (82b70037)</li><br>
141141-<li>fix(entities): migrate out standalone price entities lacking product context (383202ae)</li><br>
142142-<li>fix(entities): require context for date entities, migrate out standalone dates (6ada27ba)</li><br>
143143-</ul><br>
144144-Desktop - Command Palette<br>
145145-<ul><li>feat(cmd): add command chaining flow for list notes, markdown, download, save as note (04ef4c8a)</li><br>
146146-<li>feat(cmd): add "open file" command with chaining + fix note inline tag extraction (0717e87b)</li><br>
147147-<li>fix(cmd): remove web search fallback on Enter — require explicit command match (49c6e5ec)</li><br>
148148-<li>fix(cmd,perf): sort history by frecency, use targeted queries for URL lookups (0873e5ee)</li><br>
149149-<li>fix(cmd): restore web page URLs in frecency suggestions (65baa072)</li><br>
150150-<li>fix(cmd): ESC clears text first, Shift-Tab cycles backward, fix frecency tracking (8f6b41a8)</li><br>
151151-<li>fix(cmd): register IZUI escape handler so ESC clears text before closing (80592eb0)</li><br>
152152-<li>fix(cmd): remove prefix feedback that caused adaptive sort cross-contamination (5ceb0517)</li><br>
153153-<li>fix(cmd): add deterministic tiebreaker to command palette sort for consistent autocomplete (566b63a8)</li><br>
154154-</ul><br>
155155-Desktop - Page View & Navigation<br>
156156-<ul><li>feat(page): replace fullscreen transparent window with minimal page host (c543e38b)</li><br>
157157-<li>fix(page): eliminate navbar show/hide webview jump (43c9353e, 982f6a10, 083fbdf9, bd0449db)</li><br>
158158-<li>fix(page): restore webview drag with mousedown/mouseup bridge from guest page (63cd1414)</li><br>
159159-<li>fix(page): remove broken click-through code that activated unrelated windows (10f29146)</li><br>
160160-</ul><br>
161161-Desktop - Window Dragging<br>
162162-<ul><li>fix(drag): rewrite window drag system v3 — unified, faster, works everywhere (5a7c7899, fa58f66b, 1f815b61)</li><br>
163163-</ul><br>
164164-Desktop - HUD & Groups<br>
165165-<ul><li>fix(hud): hide on app blur using did-resign-active (be05026c)</li><br>
166166-<li>fix(groups): fix group creation via inline form (141829f7)</li><br>
167167-<li>fix(tags): restore reactivity on sync and data changes (60eb36df)</li><br>
168168-<li>fix(tags/groups/cmd): fix item icons, group creation form, and tagset detection (5b0ca938)</li><br>
169169-</ul><br>
170170-Desktop - Dark Mode & Settings<br>
171171-<ul><li>fix(darkmode): respect OS color scheme in system mode (6813ea5f)</li><br>
172172-<li>fix(websearch): fix suggestions, default engine setting, and settings UI (bcaeb205)</li><br>
173173-<li>feat(websearch): add Kagi as built-in search engine (e7d05c94)</li><br>
174174-<li>fix(settings): add descriptions and human-readable labels to core settings (0bfe87b9)</li><br>
175175-<li>fix(settings): quit shortcut default reset, editor portrait, datastore table fix (f6a16ad4)</li><br>
176176-</ul><br>
177177-Desktop - Fixes<br>
178178-<ul><li>fix(mode,window): fix mode leak into global scope and bring existing windows to front (9b783b6b)</li><br>
179179-<li>fix(shortcuts): silence spurious warnings when unregistering global shortcuts during shutdown (7941b5f6)</li><br>
180180-<li>fix(cmd): ensure command registration after extensions loaded (3f9df015)</li><br>
181181-<li>refactor(cmd): remove cmd:ready/query boilerplate, register commands directly (f7306de6)</li><br>
182182-<li>feat(components): add sorting and view modes to card grid toolbar (83a85332)</li><br>
183183-<li>fix(rss): use tangled.org URLs, fix localsearch manifest loading (06afcb89)</li><br>
184184-</ul><br>
185185-Testing<br>
186186-<ul><li>test(session): add 67 real integration tests for session save/restore (49f094f7)</li><br>
187187-<li>test(display-watcher): add tests for pre-debounce capture, suppress timer cancellation, and isRemoval flag (fd56204f)</li><br>
188188-<li>test: add 94 new unit tests and fix 3 E2E test failures (2251f86f)</li></ul></p>]]></description>
109109+ <description>Desktop - Session Restore
110110+- Full session save/restore — snapshot windows on quit, restore on startup with confirmation, autosave timer, crash recovery dialog (0e8a (https://tangled.org/burrito.space/peek/commit/0e8afccdff0075b9151b3dbd40609f53f16a8521), f270 (https://tangled.org/burrito.space/peek/commit/f270c56db43c1799a0a6c8dd801a00a2419124e3), d015 (https://tangled.org/burrito.space/peek/commit/d0150877ced2ff5e02d7414b3c6c08cd404e0f17), d2fb (https://tangled.org/burrito.space/peek/commit/d2fb834abcd81e1a7d23898b4875f996f8899c52))
111111+- Save settings windows, strip stale params on restore, fix display-watcher race conditions (d12b (https://tangled.org/burrito.space/peek/commit/d12bd2b93d553c124f508fe37bbd6f7d325f4362))
112112+- Suppress display-watcher during session restore to preserve window positions (c32b (https://tangled.org/burrito.space/peek/commit/c32b73dfaf9ef4f497623452d7f919be28194392))
113113+- Treat SIGINT/SIGTERM as clean shutdowns to prevent false crash dialog (f56f (https://tangled.org/burrito.space/peek/commit/f56f5624550c93ef1e93f60392496a70b6dc393f), 8ab6 (https://tangled.org/burrito.space/peek/commit/8ab6d36de9d593b894ef92893dc59b6af751ba3b), 16a2 (https://tangled.org/burrito.space/peek/commit/16a2d4bcabce898ceb850ae3258965c384d71b89))
114114+- Fix synchronous SIGINT save and correct canvas page bounds (2df8 (https://tangled.org/burrito.space/peek/commit/2df8a7339298b2b3c30f81168eef6b0bfabf4299))
115115+- Open startup feature when restore is declined or fails (0f28 (https://tangled.org/burrito.space/peek/commit/0f280143d148e3bf25cd870b39cfaef528939d0a))
116116+117117+Desktop - Display Switching
118118+- Reposition windows when displays change — preserves positions before OS moves them (d732 (https://tangled.org/burrito.space/peek/commit/d732fa7912f47f70d32fde3b932f5842705fcc38))
119119+- Track home display to restore windows after display reconnect (60b0 (https://tangled.org/burrito.space/peek/commit/60b0798db24bc9b6b571a30106a1392b453eae1f))
120120+- Use group-based distance scaling for window repositioning (1116 (https://tangled.org/burrito.space/peek/commit/11166190d9066226b760225731477215c690a1c7))
121121+122122+Desktop - Entity Recognition
123123+- Show source pages in entity list and add detail pane with full metadata (12fe (https://tangled.org/burrito.space/peek/commit/12feb9024640dc6a132b2080ae85012307407c78))
124124+- Improve detection coverage and reduce price noise (82b7 (https://tangled.org/burrito.space/peek/commit/82b700377bbc902113c276d7eb50a5df59812d92))
125125+- Remove standalone price entities lacking product context (3832 (https://tangled.org/burrito.space/peek/commit/383202ae65eb33aebafb52b01d4dd46579a6060b))
126126+- Require context for date entities, remove standalone dates (6ada (https://tangled.org/burrito.space/peek/commit/6ada27ba19445ed4dc1c076961336ace34b0c83e))
127127+128128+Desktop - Command Palette
129129+- Add command chaining flow for list notes, markdown, download, save as note (04ef (https://tangled.org/burrito.space/peek/commit/04ef4c8aaf106cb8ef8c5110abbda841b940f1b7))
130130+- Add "open file" command with chaining and fix note inline tag extraction (0717 (https://tangled.org/burrito.space/peek/commit/0717e87b6898b822075effa65d75beb4c9043120))
131131+- Require explicit command match on Enter — remove web search fallback (49c6 (https://tangled.org/burrito.space/peek/commit/49c6e5ec4027e472af606462fcaeef8044cfdc77))
132132+- Sort history by frecency, use targeted queries for URL lookups (0873 (https://tangled.org/burrito.space/peek/commit/0873e5ee688ec0a53440382fd88ccd681323a0f8))
133133+- Restore web page URLs in frecency suggestions (65ba (https://tangled.org/burrito.space/peek/commit/65baa072eef50d9b1ef7c69ad4e03e33116af346))
134134+- ESC clears text first, Shift-Tab cycles backward, fix frecency tracking (8f6b (https://tangled.org/burrito.space/peek/commit/8f6b41a8db9dc7ca85a1a696f3af4cca74915ac7))
135135+- Register IZUI escape handler so ESC clears text before closing (8059 (https://tangled.org/burrito.space/peek/commit/80592eb03a143100ddaaa3a4f32db2d95eabc3cc))
136136+- Remove prefix feedback that caused adaptive sort cross-contamination (5ceb (https://tangled.org/burrito.space/peek/commit/5ceb05172fdfaf0c779ac6f23547a6e56567e123))
137137+- Add deterministic tiebreaker to sort for consistent autocomplete (566b (https://tangled.org/burrito.space/peek/commit/566b63a8df0b21056b8157670216a668602e1855))
138138+139139+Desktop - Page View & Navigation
140140+- Replace fullscreen transparent window with minimal page host (c543 (https://tangled.org/burrito.space/peek/commit/c543e38bf36d79a2c448e3e860157a4a34da388c))
141141+- Eliminate navbar show/hide webview jump (43c9 (https://tangled.org/burrito.space/peek/commit/43c9353ec1523cd67d3c848ec5536561ad1e797b), 982f (https://tangled.org/burrito.space/peek/commit/982f6a10ac4ed9b7ab383e09b4889aa8224d8262), 083f (https://tangled.org/burrito.space/peek/commit/083fbdf90c90c9b717c259887ae4c22adebae84e), bd04 (https://tangled.org/burrito.space/peek/commit/bd0449db6277a60577ccbc0e6a37afb58adb433c))
142142+- Restore webview drag with mousedown/mouseup bridge from guest page (63cd (https://tangled.org/burrito.space/peek/commit/63cd141464c98f54e17ad475248208c356957c8a))
143143+- Remove broken click-through code that activated unrelated windows (10f2 (https://tangled.org/burrito.space/peek/commit/10f29146d98c2cf25b8c63de56de3cfc85b712a9))
144144+145145+Desktop - Window Dragging
146146+- Rewrite window drag system — unified, faster, works everywhere (5a7c (https://tangled.org/burrito.space/peek/commit/5a7c7899116f7501f40ca99cbe1b6ed8c93031f3), fa58 (https://tangled.org/burrito.space/peek/commit/fa58f66b384faf13746f8aa3e2bca266fdde3530), 1f81 (https://tangled.org/burrito.space/peek/commit/1f815b618a836270b1b444cf9cbfc13c6373a884))
147147+148148+Desktop - HUD & Groups
149149+- Hide HUD on app blur (be05 (https://tangled.org/burrito.space/peek/commit/be05026c3fe8bf9d28c28c05490fc16c3a75a204))
150150+- Fix group creation via inline form (1418 (https://tangled.org/burrito.space/peek/commit/141829f79561a67556fb231fe89197de795cde09))
151151+- Restore tags reactivity on sync and data changes (60eb (https://tangled.org/burrito.space/peek/commit/60eb36df2fc0febad130ac8ce104ce756649cc91))
152152+- Fix item icons, group creation form, and tagset detection (5b0c (https://tangled.org/burrito.space/peek/commit/5b0ca9380c3217a63a66853858ab24dccb5d088f))
153153+154154+Desktop - Dark Mode & Settings
155155+- Respect OS color scheme in system dark mode (6813 (https://tangled.org/burrito.space/peek/commit/6813ea5f2e3fb51f11942470c1b706976e985afd))
156156+- Fix web search suggestions, default engine setting, and settings UI (bcae (https://tangled.org/burrito.space/peek/commit/bcaeb2051189ac03e9c06279cfe87a49c33a730c))
157157+- Add Kagi as built-in search engine (e7d0 (https://tangled.org/burrito.space/peek/commit/e7d05c943f84b04b521fdce849312e5f05574a78))
158158+- Add descriptions and human-readable labels to core settings (0bfe (https://tangled.org/burrito.space/peek/commit/0bfe87b9e109ded26ea92c90a0adc9629f29bf3a))
159159+- Fix quit shortcut default reset, editor portrait, datastore table (f6a1 (https://tangled.org/burrito.space/peek/commit/f6a16ad4a2d060b01ac213b6154bc02aee4f371b))
160160+161161+Desktop - Fixes
162162+- Fix mode leak into global scope and bring existing windows to front (9b78 (https://tangled.org/burrito.space/peek/commit/9b783b6b8e544458af64e6129a190fe6b218d436))
163163+- Silence spurious warnings when unregistering global shortcuts during shutdown (7941 (https://tangled.org/burrito.space/peek/commit/7941b5f670a2e4c764736ab9baff94c287a643b6))
164164+- Ensure command registration after extensions loaded (3f9d (https://tangled.org/burrito.space/peek/commit/3f9df0153f85a43f3ed392d5bd07357b801dfa33))
165165+- Simplify command registration — remove boilerplate (f730 (https://tangled.org/burrito.space/peek/commit/f7306de6a6086d45fe56ce76bb5e27612ab593c1))
166166+- Add sorting and view modes to card grid toolbar (83a8 (https://tangled.org/burrito.space/peek/commit/83a8533205ca3eaf796046a61b627b925dae997f))
167167+- Use tangled.org URLs for RSS, fix localsearch manifest loading (06af (https://tangled.org/burrito.space/peek/commit/06afcb89112a6ff4dfa9e707f9aeeff057c489f2))
168168+169169+Testing
170170+- Add 67 real integration tests for session save/restore (49f0 (https://tangled.org/burrito.space/peek/commit/49f094f7fa698dadd2745c802de1015dcc9f30a3))
171171+- Add display-watcher tests for pre-debounce capture, suppress timer, and isRemoval flag (fd56 (https://tangled.org/burrito.space/peek/commit/fd56204f81d78dcbb6b586aaea0ef97441eecbd8))
172172+- Add 94 new unit tests and fix 3 E2E test failures (2251 (https://tangled.org/burrito.space/peek/commit/2251f86f43643a9b308cac6fa46dbf593141cfb3))</description>
189173 </item>
190174 <item>
191175 <title>2026-02-11</title>
192176 <link>https://tangled.org/burrito.space/peek</link>
193177 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-11</guid>
194178 <pubDate>Wed, 11 Feb 2026 12:00:00 GMT</pubDate>
195195- <description><![CDATA[<p>Desktop - New Extensions<br>
196196-<ul><li>feat(websearch): implement web search extension with OpenSearch discovery and suggestions (bf488889)</li><br>
197197-<li style="margin-left:1em">Search from command palette with live suggestions from multiple engines</li><br>
198198-<li style="margin-left:1em">Auto-discovers OpenSearch endpoints on visited pages</li><br>
199199-<li style="margin-left:1em">Widget notification in page view when OpenSearch engine found</li><br>
200200-<li>feat(search): implement unified search extension (4b95973d)</li><br>
201201-<li>feat(pagestream): implement vertical history stream extension (35f9afcc)</li><br>
202202-</ul><br>
203203-Desktop - History Unification<br>
204204-<ul><li>refactor(history): unify address/visit system into items table (6 phases) (475e97fe..6f90f258)</li><br>
205205-<li style="margin-left:1em">Phase 1-2: Remove dual-write, redirect renderer address APIs to items</li><br>
206206-<li style="margin-left:1em">Phase 3-4: IPC compatibility layer, update tests and URL normalization</li><br>
207207-<li style="margin-left:1em">Phase 5-6: Update Tauri backend, remove legacy address/visit code and types</li><br>
208208-</ul><br>
209209-Desktop - Dark Mode<br>
210210-<ul><li>feat(darkmode): implement 3-tier dark mode system for web pages (ef242dde)</li><br>
211211-<li style="margin-left:1em">Tier 1 (System): Sets prefers-color-scheme: dark for all webviews</li><br>
212212-<li style="margin-left:1em">Tier 2 (Force): Chromium WebContentsForceDark with CIELAB inversion</li><br>
213213-<li style="margin-left:1em">Settings UI with Off/System/Force selector</li><br>
214214-</ul><br>
215215-Desktop - Page View & Navigation<br>
216216-<ul><li>feat(page): add browser navigation hotkeys and editable URL bar (52a99ec7)</li><br>
217217-<li style="margin-left:1em">Cmd+R reload, Cmd+[/] back/forward, Cmd+L to edit URL</li><br>
218218-<li>feat(page): add widget system with OpenSearch discovery notification (ce5ae4bb)</li><br>
219219-<li>fix(page): improve drag-from-anywhere with long-press detection and all-corner resize (d135cfa6)</li><br>
220220-<li>fix(page): apply background detection to non-canvas web pages (e1ac7b6f)</li><br>
221221-<li>fix(nav): restore full-width navbar — remove floating bubble design (7769f1e1)</li><br>
222222-<li>fix(titles): fix Loading... title bug, add page content extraction and URL metadata enrichment (61ca6f00)</li><br>
223223-<li style="margin-left:1em">Filter "Loading..." from stored titles across all code paths</li><br>
224224-<li style="margin-left:1em">Add extract-page-content IPC handler for live page HTML extraction</li><br>
225225-<li style="margin-left:1em">URL item metadata enrichment with OG tags, description, favicon</li><br>
226226-</ul><br>
227227-Desktop - Tags & Editor<br>
228228-<ul><li>feat(tags): embed editor in detail pane for inline note editing (a575013e)</li><br>
229229-<li style="margin-left:1em">Replace modal with inline detail view, ESC navigation between list and detail</li><br>
230230-<li style="margin-left:1em">Vim status/command bar overlaid on editor, respects vim mode preference</li><br>
231231-<li>feat(tags): add content search with tag combo filtering, pin selected tags in sidebar (d005d3dd)</li><br>
232232-<li>fix(editor,tags): fix note command blank editor, tags reactivity, and editor height (cb4d5e10)</li><br>
233233-<li style="margin-left:1em">New notes create datastore items immediately for autosave</li><br>
234234-<li style="margin-left:1em">Tags UI subscribes to item:updated events for live reactivity</li><br>
235235-<li>fix(editor): forward ESC to vim in insert/visual mode before IZUI handles it (7b866e87)</li><br>
236236-<li>fix(tags): editor layout, vim status bar positioning, and focus ring cleanup (08483e4e, 3100ec71, 3a072f24)</li><br>
237237-</ul><br>
238238-Desktop - Shortcuts & Commands<br>
239239-<ul><li>feat(shortcuts): implement dual hotkey registration — local Cmd+ alongside global Opt+ (545e95b4)</li><br>
240240-<li style="margin-left:1em">Cmd+K (palette), Cmd+E (editor), Cmd+T (tags), Cmd+G (groups), Cmd+H (HUD)</li><br>
241241-<li style="margin-left:1em">Fix: Cmd+Q quit, Cmd+, settings (were incorrectly using Opt+)</li><br>
242242-<li>feat(api): implement commands.list() to query registered commands via pubsub (696c7859)</li><br>
243243-<li>fix(cmd): fix frecency/adaptive sorting in command palette (2f6da3fd)</li><br>
244244-<li style="margin-left:1em">Unified weighted ranking combining adaptive score and frecency</li><br>
245245-<li style="margin-left:1em">Cross-query adaptive feedback for substring matches</li><br>
246246-</ul><br>
247247-Desktop - Settings & Extensions<br>
248248-<ul><li>fix(settings): rework extensions settings — rename sections, unify layout, add options buttons (cb540409)</li><br>
249249-<li style="margin-left:1em">Rename: Features (Peek extensions) vs Extensions (bundled webextensions)</li><br>
250250-<li style="margin-left:1em">Options button for extensions with options pages</li><br>
251251-<li>fix(settings): dynamically list all builtin extensions in Features section (90fe93d0)</li><br>
252252-<li>feat(chrome-ext): generic settings/UI system for bundled Chrome extensions (edbf5169)</li><br>
253253-<li>feat(adblocker): migrate from @cliqz/adblocker-electron to @ghostery/adblocker-electron (93b44561)</li><br>
254254-</ul><br>
255255-Desktop - Fixes<br>
256256-<ul><li>fix(windows): HUD focus stealing, chrome ext options styling, duplicate group cards (47686da7)</li><br>
257257-<li>fix(groups): prevent duplicate windows/URLs, fix race conditions and title resolution (20cb9956)</li><br>
258258-<li>fix(hud): resolve extension disabled by settings key collision (671df42e)</li><br>
259259-<li>fix(context): resolve window ID from caller when null, set mode before loadURL (c1d77f28)</li><br>
260260-<li>fix(entities): align UI with groups/tags component and theme patterns (c5df43bc)</li><br>
261261-<li>fix(scripts): align UI with groups/tags component and theme patterns (50c639ff)</li><br>
262262-<li>fix(editor): use extension settings API for vim mode, audit localStorage usage (3962110b)</li><br>
263263-<li>fix(build): pin Node version to 24.11.1 to match Electron 40 (96c05941)</li><br>
264264-</ul><br>
265265-Testing<br>
266266-<ul><li>test(history): add unified URL/history tests for unification refactor (d3ac05f7)</li><br>
267267-<li>test(entities): add comprehensive test data for entity recognition (d710d039)</li></ul></p>]]></description>
179179+ <description>Desktop - New Extensions
180180+- Web search extension — search from command palette with live suggestions, auto-discovers OpenSearch endpoints on visited pages (bf48 (https://tangled.org/burrito.space/peek/commit/bf488889b77d22dd6b17d3613597379ba2b15737))
181181+- Unified search extension (4b95 (https://tangled.org/burrito.space/peek/commit/4b95973d39a9ab252cce55b8402fbed674d742c4))
182182+- Vertical history stream extension (35f9 (https://tangled.org/burrito.space/peek/commit/35f9afccca7020cee7762bb603ee68709949dcea))
183183+184184+Desktop - History Unification
185185+- Unify address/visit system into items table — remove dual-write, redirect APIs, update Tauri backend, remove legacy code (475e (https://tangled.org/burrito.space/peek/commit/475e97feb695d45e1253e03cd05e1b8a2d1982d7)..6f90 (https://tangled.org/burrito.space/peek/commit/6f90f258e36b729608a49b178db50894478f628f))
186186+187187+Desktop - Dark Mode
188188+- 3-tier dark mode for web pages — System (prefers-color-scheme), Force (Chromium CIELAB inversion), with settings UI (ef24 (https://tangled.org/burrito.space/peek/commit/ef242dde9d5829fdb5342d1ba7781bc0e9767485))
189189+190190+Desktop - Page View & Navigation
191191+- Browser navigation hotkeys and editable URL bar — Cmd+R reload, Cmd+[/] back/forward, Cmd+L to edit URL (52a9 (https://tangled.org/burrito.space/peek/commit/52a99ec7c345ba5bd9cfc37036848d29ca0294ae))
192192+- Widget system with OpenSearch discovery notification (ce5a (https://tangled.org/burrito.space/peek/commit/ce5ae4bb7d118320c02ae80a00af9793a5749bcf))
193193+- Improve drag-from-anywhere with long-press detection and all-corner resize (d135 (https://tangled.org/burrito.space/peek/commit/d135cfa61cc3563cb597987ebf7b55eea5e3d03c))
194194+- Apply background detection to non-canvas web pages (e1ac (https://tangled.org/burrito.space/peek/commit/e1ac7b6f8920944019cbca21aaf1188b25592bd2))
195195+- Restore full-width navbar — remove floating bubble design (7769 (https://tangled.org/burrito.space/peek/commit/7769f1e19c6f74cb5fd18493c42bbaecc8a59644))
196196+- Fix Loading... title bug, add page content extraction and URL metadata enrichment (61ca (https://tangled.org/burrito.space/peek/commit/61ca6f009ba9ad357e09f310770fa5cdf2940b9c))
197197+198198+Desktop - Tags & Editor
199199+- Embed editor in detail pane for inline note editing with vim status bar (a575 (https://tangled.org/burrito.space/peek/commit/a575013e7000b50db91235fa09b67104ea5293d2))
200200+- Content search with tag combo filtering, pin selected tags in sidebar (d005 (https://tangled.org/burrito.space/peek/commit/d005d3dd966595778c482c2ce8f555ffb8550ca6))
201201+- Fix note command blank editor, tags reactivity, and editor height (cb4d (https://tangled.org/burrito.space/peek/commit/cb4d5e10b8d4a27c6529945e00efea2bed701fc0))
202202+- Forward ESC to vim in insert/visual mode before IZUI handles it (7b86 (https://tangled.org/burrito.space/peek/commit/7b866e87a87e357bd1482e5d8e5775f9702c5d81))
203203+- Fix editor layout, vim status bar positioning, and focus ring cleanup (0848 (https://tangled.org/burrito.space/peek/commit/08483e4ef820d8eece5fc28f7c113690ff002c82), 3100 (https://tangled.org/burrito.space/peek/commit/3100ec71fc60978bc7cc89da1c1a5f8bf82f4e11), 3a07 (https://tangled.org/burrito.space/peek/commit/3a072f24678bb375a193b04ea7fdb05b92d546be))
204204+205205+Desktop - Shortcuts & Commands
206206+- Dual hotkey registration — local Cmd+ alongside global Opt+ for palette, editor, tags, groups, HUD (545e (https://tangled.org/burrito.space/peek/commit/545e95b47d436171406bc01c3783ac7d1e5ca382))
207207+- Query registered commands via pubsub (696c (https://tangled.org/burrito.space/peek/commit/696c7859c3b10bb81a8ea741dbb65e595bbe3af3))
208208+- Fix frecency/adaptive sorting in command palette (2f6d (https://tangled.org/burrito.space/peek/commit/2f6da3fd76ba4780daf8e0626bd45e9a50b1dd5e))
209209+210210+Desktop - Settings & Extensions
211211+- Rework extensions settings — separate Features vs Extensions sections, add options buttons (cb54 (https://tangled.org/burrito.space/peek/commit/cb54040945458d258ed48f9951820998ebdd6e75))
212212+- Dynamically list all builtin extensions in Features section (90fe (https://tangled.org/burrito.space/peek/commit/90fe93d0fea4d2286ab6099ffd097e40205e1fef))
213213+- Generic settings/UI system for bundled Chrome extensions (edbf (https://tangled.org/burrito.space/peek/commit/edbf5169a396539ed2d94df1b873690d168d7b7a))
214214+- Migrate ad blocker from @cliqz to @ghostery (93b4 (https://tangled.org/burrito.space/peek/commit/93b445613d086b8f1d4caea934d5e466a0b975a6))
215215+216216+Desktop - Fixes
217217+- Fix HUD focus stealing, chrome ext options styling, duplicate group cards (4768 (https://tangled.org/burrito.space/peek/commit/47686da71893feb30b286fbc5e45021e6f442e07))
218218+- Prevent duplicate windows/URLs, fix race conditions and title resolution (20cb (https://tangled.org/burrito.space/peek/commit/20cb9956145d94e57a902a1976e1bd56a1242d4b))
219219+- Resolve extension disabled by settings key collision (671d (https://tangled.org/burrito.space/peek/commit/671df42e33f9b08db4a058e98e8e4e6f7bdbddad))
220220+- Resolve window ID from caller when null, set mode before loadURL (c1d7 (https://tangled.org/burrito.space/peek/commit/c1d77f286c8ba45015514d6a836bf4a13df7f66a))
221221+- Align entity and script UIs with groups/tags component patterns (c5df (https://tangled.org/burrito.space/peek/commit/c5df43bcf9d5f28dd1dbf129fe47612346c26b6f), 50c6 (https://tangled.org/burrito.space/peek/commit/50c639ff3a591181e8bd6b10b8bfdd8f906406a3))
222222+- Use extension settings API for vim mode, audit localStorage usage (3962 (https://tangled.org/burrito.space/peek/commit/3962110b5db93447fd6b95379281de6a0223a203))
223223+- Pin Node version to 24.11.1 to match Electron 40 (96c0 (https://tangled.org/burrito.space/peek/commit/96c05941d16a0989f7407b00a63cda2994e52d24))
224224+225225+Testing
226226+- Add unified URL/history tests for unification refactor (d3ac (https://tangled.org/burrito.space/peek/commit/d3ac05f7135ead6685d7c8ddb50ba378c2e700b9))
227227+- Add comprehensive test data for entity recognition (d710 (https://tangled.org/burrito.space/peek/commit/d710d039355e4e355c0c3e26844753c8c6d4e245))</description>
268228 </item>
269229 <item>
270230 <title>2026-02-09</title>
271231 <link>https://tangled.org/burrito.space/peek</link>
272232 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-09</guid>
273233 <pubDate>Mon, 09 Feb 2026 12:00:00 GMT</pubDate>
274274- <description><![CDATA[<p>Desktop - IZUI Role-Based Redesign<br>
275275-<ul><li>feat(izui): systemic ESC handling, peek-component migrations, HUD test fixes (21d59cc0)</li><br>
276276-<li style="margin-left:1em">Migrated peek-card, peek-grid, peek-list to shared peek-components</li><br>
277277-<li style="margin-left:1em">Unified ESC key handling across all window types</li><br>
278278-<li style="margin-left:1em">Fixed HUD test infrastructure</li><br>
279279-<li>feat(izui): implement role-based window policy (Phase 1-2) (3fbcade9)</li><br>
280280-<li style="margin-left:1em">Replaced session-based transient/active detection with deterministic role system</li><br>
281281-<li style="margin-left:1em">Five roles: root, child-content, child-tool, hud, transient</li><br>
282282-<li style="margin-left:1em">Role assigned at window creation, governs ESC behavior and lifecycle</li><br>
283283-<li>feat(izui): complete role-based migration (Phase 3-6) (8528f053)</li><br>
284284-<li style="margin-left:1em">Migrated all window creation sites to use role-based policy</li><br>
285285-<li style="margin-left:1em">Removed legacy IzuiStateCoordinator session tracking</li><br>
286286-<li style="margin-left:1em">ESC behavior fully determined by window role</li><br>
287287-<li>fix(izui): promote content to child-content when opened from parent window (92d359c5)</li><br>
288288-<li>fix(izui): promote transient session on app focus, fix startup role (055b77ed)</li><br>
289289-</ul><br>
290290-Desktop - Navigation & UI<br>
291291-<ul><li>fix(nav): restore floating nav bar — remove embedded regression (93060df3)</li><br>
292292-<li>fix(peek-card): delegate click/focus through shadow DOM boundary (b15c6434)</li><br>
293293-<li>feat(tags): migrate tags UI to shared peek-components (3145a08a)</li><br>
294294-<li style="margin-left:1em">Tags extension uses peek-card, peek-grid from shared component library</li><br>
295295-<li style="margin-left:1em">Consistent styling across all card-based views</li><br>
296296-<li>fix(config): align startupFeature schema default with actual default (aab2b20b)</li><br>
297297-<li>fix(external-url): delay URL processing to ensure app activation completes (f0d1e5bd)</li><br>
298298-</ul><br>
299299-Desktop - Entity Recognition<br>
300300-<ul><li>feat(entities): implement Phase 1 entity recognition extension (ae0cd811)</li><br>
301301-<li style="margin-left:1em">Extract entities (people, places, dates, etc.) from saved items</li><br>
302302-<li style="margin-left:1em">Extensible matcher and store architecture</li><br>
303303-<li style="margin-left:1em">Unit tests for extractors, matcher, and store</li><br>
304304-</ul><br>
305305-Desktop - HUD & Groups<br>
306306-<ul><li>fix(hud): populate mode, active window, and stats fields (be18f49f)</li><br>
307307-<li>fix(groups): preserve group context through page navigation (1d69ce8f)</li><br>
308308-<li>fix(datastore): disable FK checks during entity type migration (98025bcc)</li><br>
309309-</ul><br>
310310-Desktop - Shortcuts & Page<br>
311311-<ul><li>fix(shortcuts): guard ev.reply() against destroyed senders + add roundtrip tests (49b626e9)</li><br>
312312-<li>fix(shortcuts): use BrowserWindow ID not WebContents ID for shortcut callbacks (d6fe8cbf)</li><br>
313313-<li>fix(shortcuts): resolve stale IPC reference in global shortcut callbacks (221d5a44)</li><br>
314314-<li>fix(page): content-sized BrowserWindow instead of fullscreen canvas (2eb7a703)</li><br>
315315-</ul><br>
316316-Desktop - Command Bar<br>
317317-<ul><li>fix(cmd): restore URL detection for domains without protocol (youtube.com) (8abf13b6)</li><br>
318318-</ul><br>
319319-Sync Architecture - syncSource Migration<br>
320320-<ul><li>feat(sync): Phase 1 - separate sync pull from user operations (b3cbb47e)</li><br>
321321-<li style="margin-left:1em">Sync pull is now architecturally separate from user-facing operations</li><br>
322322-<li style="margin-left:1em">Server _sync metadata preserved naturally without guards</li><br>
323323-<li>refactor(sync): remove syncSource from unified sync module and update docs (3ffa9bf1)</li><br>
324324-<li style="margin-left:1em">Removed syncSource column from schema and all datastore code</li><br>
325325-<li style="margin-left:1em">Replaced with device ID tracking via _sync metadata in item metadata JSON</li><br>
326326-<li>refactor(mobile): remove active sync_source usage from iOS sync (3ca335f0)</li><br>
327327-<li>feat(mobile): add device ID and _sync metadata to mobile backend (abc40815)</li><br>
328328-</ul><br>
329329-Mobile / iOS<br>
330330-<ul><li>feat(ios): native inline WKWebView + fix dev build pipeline (ac1154e7)</li><br>
331331-<li>fix(ios): separate dev/release build paths and enable media autoplay (50444786)</li><br>
332332-<li>fix(mobile): prevent white flash when opening inline webview (edc1b5b9)</li><br>
333333-<li>fix(mobile): tighten header layout alignment (6f639e85)</li><br>
334334-<li>fix(ui): editor overlays fill to keyboard, tagset cards use tag chips (bb032a08)</li><br>
335335-<li>fix(mobile): replace Once::call_once with retryable Mutex for DB init (bb02d535)</li><br>
336336-<li>feat(mobile): hide from:history items from default list view (c6acfc60)</li><br>
337337-<li>fix(build): separate derivedDataPath for simulator and device builds (d6870291)</li><br>
338338-<li>fix(build): add --standalone flag to embed real frontend in iOS builds (90c7f5d8)</li><br>
339339-</ul><br>
340340-Testing<br>
341341-<ul><li>test(cmd): add comprehensive URL detection tests for command panel (ccc5a13b)</li><br>
342342-<li>test(server): add syncSource migration simulation tests (72731acf)</li><br>
343343-<li>test(entities): add unit tests for extractors, matcher, and store (8759b707)</li><br>
344344-<li>test(groups): add mode context propagation tests (5fbcc1ca)</li><br>
345345-<li>feat(test): deterministic profile IDs via PEEK_PROFILE_ID env var (7c61aa6e)</li><br>
346346-<li>fix(test): run unit tests under Electron's Node to match native module ABI (e1e0c7c5)</li><br>
347347-<li>fix(server): enable single-user mode for e2e tests (c6c249b5)</li></ul></p>]]></description>
234234+ <description>Desktop - IZUI Role-Based Redesign
235235+- Unified ESC handling, migrate components to shared peek-components, fix HUD tests (21d5 (https://tangled.org/burrito.space/peek/commit/21d59cc00e8516382e0425f2442019ff915936e5))
236236+- Role-based window policy — five deterministic roles (root, child-content, child-tool, hud, transient) govern ESC behavior and lifecycle (3fbc (https://tangled.org/burrito.space/peek/commit/3fbcade9a47b8375e0e10d15bf693104587433f3))
237237+- Complete role-based migration — all window creation uses role policy, remove legacy session tracking (8528 (https://tangled.org/burrito.space/peek/commit/8528f053e1ef930b191eb2b834180eb84475851c))
238238+- Promote content to child-content when opened from parent window (92d3 (https://tangled.org/burrito.space/peek/commit/92d359c5c5ecdf8baa6aca5cdcc3fb81c34c7921))
239239+- Promote transient session on app focus, fix startup role (055b (https://tangled.org/burrito.space/peek/commit/055b77ed748ccce030da378d116e1d8c503bf659))
240240+241241+Desktop - Navigation & UI
242242+- Restore floating nav bar — remove embedded regression (9306 (https://tangled.org/burrito.space/peek/commit/93060df349c11e0bae011121552a1901ec02c068))
243243+- Delegate click/focus through shadow DOM boundary in peek-card (b15c (https://tangled.org/burrito.space/peek/commit/b15c6434bd885e0e00b31ce2ef62e670c282232c))
244244+- Migrate tags UI to shared peek-components for consistent styling (3145 (https://tangled.org/burrito.space/peek/commit/3145a08ad2604f17424b26604e8d1b003c4aacf9))
245245+- Align startupFeature schema default with actual default (aab2 (https://tangled.org/burrito.space/peek/commit/aab2b20b8a365fdb47c28554c9cbbf9062010ed2))
246246+- Delay URL processing to ensure app activation completes (f0d1 (https://tangled.org/burrito.space/peek/commit/f0d1e5bd1289caf470e9a6a9d793414abb3ae6a1))
247247+248248+Desktop - Entity Recognition
249249+- Entity recognition extension — extract entities (people, places, dates, etc.) from saved items with extensible matcher and store (ae0c (https://tangled.org/burrito.space/peek/commit/ae0cd81109117239e4ad4ac0f30366246a1e94b9))
250250+251251+Desktop - HUD & Groups
252252+- Populate HUD mode, active window, and stats fields (be18 (https://tangled.org/burrito.space/peek/commit/be18f49f540738aab4bcd11cb2ab3f2c388ffd2e))
253253+- Preserve group context through page navigation (1d69 (https://tangled.org/burrito.space/peek/commit/1d69ce8fd81c9fc23faac81368fb004d7bb82d9a))
254254+- Disable FK checks during entity type migration (9802 (https://tangled.org/burrito.space/peek/commit/98025bcca6309076ea578a32b287d81091295a55))
255255+256256+Desktop - Shortcuts & Page
257257+- Guard ev.reply() against destroyed senders and add roundtrip tests (49b6 (https://tangled.org/burrito.space/peek/commit/49b626e9c92523f39dc190d8024770e84737d17d))
258258+- Use BrowserWindow ID not WebContents ID for shortcut callbacks (d6fe (https://tangled.org/burrito.space/peek/commit/d6fe8cbfe845cd081eb712d6add07b4b08dab227))
259259+- Resolve stale IPC reference in global shortcut callbacks (221d (https://tangled.org/burrito.space/peek/commit/221d5a442d970de8a1db07dfd4f5816b607a60f2))
260260+- Content-sized BrowserWindow instead of fullscreen canvas (2eb7 (https://tangled.org/burrito.space/peek/commit/2eb7a7037b92ef3d9a3961a39de2774fbf41ecff))
261261+262262+Desktop - Command Bar
263263+- Restore URL detection for domains without protocol (youtube.com) (8abf (https://tangled.org/burrito.space/peek/commit/8abf13b6300b6735ff748d65a71145f584972fed))
264264+265265+Sync Architecture
266266+- Separate sync pull from user operations — server metadata preserved naturally (b3cb (https://tangled.org/burrito.space/peek/commit/b3cbb47e44fa6fb766c98a1e87547d86f2fce87c))
267267+- Remove syncSource from schema, replace with device ID tracking via _sync metadata (3ffa (https://tangled.org/burrito.space/peek/commit/3ffa9bf15275feeafcb1fcef5cfce0013276d7db))
268268+- Remove sync_source usage from iOS sync (3ca3 (https://tangled.org/burrito.space/peek/commit/3ca335f097031f0d227d9d4984274f019a53f05d))
269269+- Add device ID and _sync metadata to mobile backend (abc4 (https://tangled.org/burrito.space/peek/commit/abc408159b76a74cf8712ab42e6c6f572b9f9ebc))
270270+271271+Mobile / iOS
272272+- Native inline WKWebView and fix dev build pipeline (ac11 (https://tangled.org/burrito.space/peek/commit/ac1154e70ac137d8c4079ebfd90fbf504c951f9e))
273273+- Separate dev/release build paths and enable media autoplay (5044 (https://tangled.org/burrito.space/peek/commit/5044478650895bf02ea44ab07247a1437de290c4))
274274+- Prevent white flash when opening inline webview (edc1 (https://tangled.org/burrito.space/peek/commit/edc1b5b97953a149f48bdea6f7b02e5a00e1b26a))
275275+- Tighten header layout alignment (6f63 (https://tangled.org/burrito.space/peek/commit/6f639e85a362d16b7a3a0d40d55d2369fb679929))
276276+- Editor overlays fill to keyboard, tagset cards use tag chips (bb03 (https://tangled.org/burrito.space/peek/commit/bb032a08cc463712f90feff4d66d2e79c89ff534))
277277+- Replace Once::call_once with retryable Mutex for DB init (bb02 (https://tangled.org/burrito.space/peek/commit/bb02d53584824cc53a8231b5edf603798a309933))
278278+- Hide from:history items from default list view (c6ac (https://tangled.org/burrito.space/peek/commit/c6acfc60))
279279+- Separate derivedDataPath for simulator and device builds (d687 (https://tangled.org/burrito.space/peek/commit/d687029109f05f5d20cebeb6b3c459e1f86469fe))
280280+- Add --standalone flag to embed real frontend in iOS builds (90c7 (https://tangled.org/burrito.space/peek/commit/90c7f5d80c3c7333c51c4838a3b04597b4dff348))
281281+282282+Testing
283283+- Add comprehensive URL detection tests for command panel (ccc5 (https://tangled.org/burrito.space/peek/commit/ccc5a13b2af9dff5333de06918bd9b89595dcd30))
284284+- Add syncSource migration simulation tests (7273 (https://tangled.org/burrito.space/peek/commit/72731acf9cd9d3be88c0a1f8f5f92217c023ce70))
285285+- Add unit tests for entity extractors, matcher, and store (8759 (https://tangled.org/burrito.space/peek/commit/8759b7070b4d9fb4703d9b3533a2b3b3d6c22a69))
286286+- Add mode context propagation tests (5fbc (https://tangled.org/burrito.space/peek/commit/5fbcc1cae400d44fba0007d77155937b7e03b7a7))
287287+- Deterministic profile IDs via PEEK_PROFILE_ID env var (7c61 (https://tangled.org/burrito.space/peek/commit/7c61aa6e47e5d0b03b63918b68134c449d99b867))
288288+- Run unit tests under Electron's Node to match native module ABI (e1e0 (https://tangled.org/burrito.space/peek/commit/e1e0c7c5c989c296fc75adf8f493ada592443caa))
289289+- Enable single-user mode for e2e tests (c6c2 (https://tangled.org/burrito.space/peek/commit/c6c249b52830b6efd18b2d91ea2eaad6e3bc94f6))</description>
348290 </item>
349291 <item>
350292 <title>2026-02-02</title>
351293 <link>https://tangled.org/burrito.space/peek</link>
352294 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-02-02</guid>
353295 <pubDate>Mon, 02 Feb 2026 12:00:00 GMT</pubDate>
354354- <description><![CDATA[<p>Desktop - IZUI (Inverted Zooming User Interface)<br>
355355-<ul><li>feat(izui): implement IZUI state machine for transient vs active window behavior (457ce41d)</li><br>
356356-<li style="margin-left:1em">Centralized <code>IzuiStateCoordinator</code> manages session-based state tracking</li><br>
357357-<li style="margin-left:1em">Fixes cmd bar stuck on "group" mode when invoked transiently</li><br>
358358-<li style="margin-left:1em">Fixes ESC from overlay showing groups instead of returning to previous app</li><br>
359359-<li style="margin-left:1em">Transient state propagates to child windows (cmd -> overlay)</li><br>
360360-<li style="margin-left:1em">Uses <code>isFocused()</code> for accurate system focus detection</li><br>
361361-<li style="margin-left:1em">KeepLive windows re-evaluate transient state on each show</li><br>
362362-<li style="margin-left:1em">Added <code>api.izui.*</code> renderer API for querying state</li><br>
363363-<li style="margin-left:1em">54 unit tests with dependency injection for testability</li><br>
364364-<li style="margin-left:1em">See <code>docs/izui.md</code> for full documentation</li><br>
365365-<li>fix(izui): OS-level focus for transient detection + graceful test shutdown (e1764328)</li><br>
366366-<li style="margin-left:1em">Transient detection uses OS-level app focus (<code>app.isFocused</code>) instead of window visibility</li><br>
367367-<li style="margin-left:1em">Tests use graceful <code>app.quit()</code> instead of SIGTERM/SIGKILL (no more crash dialogs)</li><br>
368368-<li style="margin-left:1em">5 new IZUI behavior tests for real app focus scenarios</li><br>
369369-<li>refactor(izui): passive backend window manager - extensions use api.window.open() directly (188894c4)</li><br>
370370-<li style="margin-left:1em">Backend no longer creates windows for extensions; extensions open their own via API</li><br>
371371-<li style="margin-left:1em">Simplifies window lifecycle and reduces coupling</li><br>
372372-<li>fix(izui): child windows always close on ESC + center windows on screen (b0d07b89)</li><br>
373373-<li style="margin-left:1em">ESC policy: child windows always close, active root windows do not</li><br>
374374-<li style="margin-left:1em">All new windows centered on screen at creation</li><br>
375375-<li>fix(izui): visibility-based transient detection + active mode ESC protection (d74b62b5)</li><br>
376376-<li>feat(izui): center child windows over parent window (bd947dbc)</li><br>
377377-<li style="margin-left:1em">Parent window position/size used to calculate centered placement</li><br>
378378-<li style="margin-left:1em">Focus restored to parent on child close</li><br>
379379-<li>fix(izui): renderer-driven escape lifecycle for navigate mode windows (dc470b7f)</li><br>
380380-<li>fix(izui): fix ESC navigation, window drag, and navbar cleanup (3ca4841b)</li><br>
381381-<li>fix(izui): fix transient detection race condition (d634a52b)</li><br>
382382-<li>fix: clean up modes, remove overlay, fix IZUI navigation stack (6be5fc45)</li><br>
383383-<li>fix(groups): filter peek:// URLs and fix IZUI stack navigation (70ab1706)</li><br>
384384-<li>cleanup(overlay): remove vestigial overlay references and rename events (16402840)</li><br>
385385-<li>fix(main): remove non-existent overlay from CONSOLIDATED_EXTENSION_IDS (518c4406)</li><br>
386386-</ul><br>
387387-Desktop - Reactivity & Events<br>
388388-<ul><li>feat(reactivity): add tag-centric events for real-time UI updates (8c229cdf)</li><br>
389389-<li style="margin-left:1em"><code>tag:created</code>, <code>tag:item-added</code>, <code>tag:item-removed</code> events</li><br>
390390-<li style="margin-left:1em">Extensions can subscribe to tag changes for live UI updates</li><br>
391391-<li>feat(reactivity): item CRUD events, debouncing, history/feeds subscriptions (1d351083)</li><br>
392392-<li style="margin-left:1em"><code>item:created</code>, <code>item:updated</code>, <code>item:deleted</code> events</li><br>
393393-<li style="margin-left:1em">Debounced event emission to prevent UI thrashing</li><br>
394394-<li style="margin-left:1em">History and feeds extensions subscribe to relevant events</li><br>
395395-<li>feat(datastore): implement item_events table and CRUD operations (78950782)</li><br>
396396-<li>feat(preload): expose item_events API to renderer (f8f85ebc)</li><br>
397397-</ul><br>
398398-Desktop - Window Management<br>
399399-<ul><li>feat(window): add overlay mode for transient full-screen views (0727112b)</li><br>
400400-<li>fix(windows): hide other windows AFTER windows view opens (37ee7d43)</li><br>
401401-<li>fix(windows): ESC always closes, remove fallback emoji (3fddd1a6)</li><br>
402402-<li>refactor(windows): transparent bg with groups/tags card style (414e2139)</li><br>
403403-<li>refactor(windows): use peek-card and peek-grid components (666efa8d)</li><br>
404404-<li>fix(windows): use correct path for component imports (8b6686e4)</li><br>
405405-</ul><br>
406406-Desktop - Architecture & Modes<br>
407407-<ul><li>feat(context): add app-wide context API for extensible mode management (196a12d0)</li><br>
408408-<li>refactor(modes): remove modes.ts, consolidate into context API and datastore (5943e223)</li><br>
409409-<li>refactor(modes): remove settings mode and minor modes (simplify to page/group/default) (eab54a3f)</li><br>
410410-<li>feat(schema): add feeds and series architecture (8688c501)</li><br>
411411-<li>feat(feeds): add feed reader extension and API documentation (44c5b507)</li><br>
412412-</ul><br>
413413-Desktop - Editor & Commands<br>
414414-<ul><li>feat(editor): implement note editing flow with autosave (0ae56bb7)</li><br>
415415-<li>feat(cmd): restore mode indicator to command bar (from orphaned commits) (917640ca)</li><br>
416416-<li style="margin-left:1em">Shows current mode (page/group/settings)</li><br>
417417-<li style="margin-left:1em">Click to cycle through modes</li><br>
418418-<li style="margin-left:1em">Auto-hides when in default mode</li><br>
419419-<li>feat(cmd): add Sync now command for manual sync trigger (18d02d2c)</li><br>
420420-<li>refactor(cmd): use connector pattern for edit and note commands (48465f72)</li><br>
421421-<li>fix(cmd): url command returns error instead of opening editor when no URL provided (5141fb07)</li><br>
422422-</ul><br>
423423-Desktop - UI & Components<br>
424424-<ul><li>feat(components): add glass-morphism tokens and component modes (7b2e52dc)</li><br>
425425-<li>fix(ui): center card headers, disable URL input autocapitalize, fix dev script (aa578e0d)</li><br>
426426-<li>fix(page): set default background on webview content when page has none (9fc274ab)</li><br>
427427-<li style="margin-left:1em">Respects system theme (dark/light)</li><br>
428428-<li style="margin-left:1em">Only applies when page doesn't set its own background</li><br>
429429-<li>fix(page): use trackNavigation for URL visit recording (f2677891)</li><br>
430430-</ul><br>
431431-Desktop - Profiles & Startup<br>
432432-<ul><li>feat(profiles): add Chromium session partition isolation per profile (2d704158)</li><br>
433433-<li>fix(profiles): register peek:// protocol on profile session (cd80de8d)</li><br>
434434-<li>fix(startup): respect startupFeature pref instead of always opening settings (5b920fab)</li><br>
435435-</ul><br>
436436-Desktop - Fixes<br>
437437-<ul><li>fix: ESC handling for Active mode windows (IZUI policy compliance)</li><br>
438438-<li>fix: add getFocusedVisibleWindowId API for modal window targeting</li><br>
439439-<li>fix: add trackNavigation API for unified page load tracking</li><br>
440440-<li>fix: update test to use peek://ext/cmd/panel.html (correct URL after cleanup)</li><br>
441441-<li>fix: window-list returns actual URLs from peek://app/page containers</li><br>
442442-<li>fix: mode detection from URL in window creation</li><br>
443443-<li>fix: add native module check script (prevents NODE_MODULE_VERSION mismatch)</li><br>
444444-<li>fix: unit tests run under Electron's Node (ELECTRON_RUN_AS_NODE=1) to match native module ABI</li><br>
445445-<li>fix(ipc): cast address to string for type safety (32a7f8a0)</li><br>
446446-<li>fix(ipc): sanitize window params to prevent serialization crash (fca6a26f)</li><br>
447447-<li>fix(build): exclude tmp/ agent workspaces from electron-builder (f0f26e31)</li><br>
448448-<li>fix(build): electron-builder uses yml config via extends (4620155f)</li><br>
449449-<li>fix(url): normalize trailing slash on bare domain URLs (3c2bbd61)</li><br>
450450-</ul><br>
451451-Mobile / iOS<br>
452452-<ul><li>feat(mobile): add URL action icons with native WKWebView + visit tracking (ee06ef99)</li><br>
453453-<li style="margin-left:1em">Open in Browser: opens URL in Safari</li><br>
454454-<li style="margin-left:1em">Open in Webview: opens URL in embedded native WKWebView</li><br>
455455-<li style="margin-left:1em">Track visits when URLs are loaded/navigated in webview</li><br>
456456-<li>fix(webview-plugin): simplify Swift integration with direct FFI (18258830)</li><br>
457457-<li>feat(mobile): fix native webview and restore icon system (1b641ed1)</li><br>
458458-<li>fix(ios): require hold gesture for pull-to-refresh (prevents accidental triggers) (0efb4445)</li><br>
459459-<li>feat(ios): bottom sheet webview + research docs (80fb7d8f)</li><br>
460460-<li>feat(webview): card-expansion iframe overlay replaces native bottom sheet (eb43f135)</li><br>
461461-<li>fix(ios): silence linker warnings and remove unused default icons (8cd36323)</li><br>
462462-<li>fix(ios): UX polish pass - 18 fixes for editor, share extension, layout, build (cf5fe38b)</li><br>
463463-<li>fix(ios): UX polish - 13 fixes for share sheet, editor, keyboard, sorting, filters (956fdcb8)</li><br>
464464-<li>fix(ui): maximize editor card space - tighter padding, remove separator, expand to edges (2a0fc4bf)</li><br>
465465-<li>fix(ui): undo/redo at top, reduce gaps, add webview link for text items (90d76c51)</li><br>
466466-<li>fix(share): commit pending tag text when Done is tapped (712a5108)</li><br>
467467-<li>fix(build): use dynamic DerivedData path for sim:install (94420c17)</li><br>
468468-</ul><br>
469469-Testing<br>
470470-<ul><li>feat(tests): add Playwright browser extension e2e tests</li><br>
471471-<li>fix(tests): improve extension ID detection and shared instance handling</li><br>
472472-<li>fix(tests): remove Firefox Playwright support (not supported by Playwright)</li><br>
473473-<li>test: add integration tests for tag-centric events (ed9dd17a)</li><br>
474474-</ul><br>
475475-Refactoring<br>
476476-<ul><li>refactor(extensions): move tag and tagset commands to tags extension (d6636aaa)</li><br>
477477-<li>refactor(extensions): create files extension with csv and save commands (435cc952)</li><br>
478478-<li>refactor(extensions): create sync extension with sync command (e5867452)</li><br>
479479-</ul><br>
480480-Datastore & UI<br>
481481-<ul><li>fix(datastore): show addresses/visits/tags stats with safe error handling</li><br>
482482-<li>fix(datastore): extract stats from result.data wrapper</li><br>
483483-<li>chore: clean up settings and diagnostic UI</li><br>
484484-</ul><br>
485485-Code Cleanup<br>
486486-<ul><li>chore: remove vestigial app/cmd/ directory (24 files, replaced by extensions/cmd/)</li><br>
487487-<li>chore: remove app/scripts/ (disabled feature with missing HTML files)</li><br>
488488-<li>chore: remove dead functions from app/index.js (uninitFeature, initIframeFeature)</li><br>
489489-<li>chore: remove Cmd and Scripts entries from app/config.js (non-existent URLs)</li><br>
490490-<li>chore: simplify app/features.js (all features are now extensions)</li><br>
491491-<li>chore: remove commented-out sendToWindow/onMessage APIs from preload.js</li><br>
492492-<li>chore: remove 7 unused IPC handlers from ipc.ts (~155 lines)</li></ul></p>]]></description>
296296+ <description>Desktop - IZUI (Inverted Zooming User Interface)
297297+- IZUI state machine for transient vs active window behavior — centralized state tracking, ESC behavior depends on context (457c (https://tangled.org/burrito.space/peek/commit/457ce41d3dd96dc2447951347ce5047f85d87029))
298298+- OS-level focus for transient detection, graceful test shutdown (e176 (https://tangled.org/burrito.space/peek/commit/e17643284ffa2e175fa4d48aca1b973382a60b96))
299299+- Passive backend window manager — extensions open their own windows via API (1888 (https://tangled.org/burrito.space/peek/commit/188894c4855996600fbbb1702a592b6a2b6be035))
300300+- Child windows always close on ESC, new windows centered on screen (b0d0 (https://tangled.org/burrito.space/peek/commit/b0d07b893143dff7da8fdebc2669e0520c01a2a8))
301301+- Visibility-based transient detection and active mode ESC protection (d74b (https://tangled.org/burrito.space/peek/commit/d74b62b550f87d05a927a1f5e3fee75b82159355))
302302+- Center child windows over parent window, restore focus on close (bd94 (https://tangled.org/burrito.space/peek/commit/bd947dbcbcd76009990571d8292f283d81268cd1))
303303+- Renderer-driven escape lifecycle for navigate mode windows (dc47 (https://tangled.org/burrito.space/peek/commit/dc470b7fe05f1b83c77f66e4ffe0b38522848919))
304304+- Fix ESC navigation, window drag, and navbar cleanup (3ca4 (https://tangled.org/burrito.space/peek/commit/3ca4841b6a279c6280d9673632b64f6433e88f45))
305305+- Fix transient detection race condition (d634 (https://tangled.org/burrito.space/peek/commit/d634a52bd07f2b64112e5a7d6cd3e60119a5a959))
306306+- Clean up modes, remove overlay, fix IZUI navigation stack (6be5 (https://tangled.org/burrito.space/peek/commit/6be5fc453d88914a3536d66cc6ecb80e5118d731))
307307+- Filter peek:// URLs and fix IZUI stack navigation (70ab (https://tangled.org/burrito.space/peek/commit/70ab1706b21a2456b0f5896a60ac5acf0e23c5d2))
308308+- Remove vestigial overlay references and rename events (1640 (https://tangled.org/burrito.space/peek/commit/164028401acd7efb18e149270868cb6ca3ddf220))
309309+- Remove non-existent overlay from consolidated extension IDs (518c (https://tangled.org/burrito.space/peek/commit/518c44065a4b23cd221bca9f1e054eeb5ea6a7c9))
310310+311311+Desktop - Reactivity & Events
312312+- Tag-centric events for real-time UI updates — tag:created, tag:item-added, tag:item-removed (8c22 (https://tangled.org/burrito.space/peek/commit/8c229cdf68c32bb51332f49c7feb6093b7201a2e))
313313+- Item CRUD events with debouncing, history/feeds subscriptions (1d35 (https://tangled.org/burrito.space/peek/commit/1d351083780203bd00166ecf0d800167f5d038bb))
314314+- Implement item_events table and CRUD operations (7895 (https://tangled.org/burrito.space/peek/commit/78950782d132b1f3e2fc25b5e76fd10dbdb52759))
315315+- Expose item_events API to renderer (f8f8 (https://tangled.org/burrito.space/peek/commit/f8f85ebcba23b323d93c38bd97a4308c7472301d))
316316+317317+Desktop - Window Management
318318+- Add overlay mode for transient full-screen views (0727 (https://tangled.org/burrito.space/peek/commit/0727112b71e08949c5c85ab1f4ae11eb4e5f519c))
319319+- Hide other windows after windows view opens (37ee (https://tangled.org/burrito.space/peek/commit/37ee7d4361aa10d5f320a4d41c7985837b2a75c4))
320320+- ESC always closes windows, remove fallback emoji (3fdd (https://tangled.org/burrito.space/peek/commit/3fddd1a6beaaeb2d9032c5a697d2a1b3814726c3))
321321+- Transparent background with groups/tags card style (414e (https://tangled.org/burrito.space/peek/commit/414e2139f66fa276266fe53e27f4b8c563c8301d))
322322+- Use peek-card and peek-grid components for windows (666e (https://tangled.org/burrito.space/peek/commit/666efa8d77ddf47fa81f214cff5e8564db06d074))
323323+- Fix component import paths (8b66 (https://tangled.org/burrito.space/peek/commit/8b6686e4809a891ee9db6007fb5c79d7ab059b3d))
324324+325325+Desktop - Architecture & Modes
326326+- App-wide context API for extensible mode management (196a (https://tangled.org/burrito.space/peek/commit/196a12d063dcb5c6eafca5a2e9c40b9b1ab4c474))
327327+- Consolidate modes into context API and datastore (5943 (https://tangled.org/burrito.space/peek/commit/5943e2232e66658377ba0843d607f7ee0101f605))
328328+- Simplify to page/group/default modes (eab5 (https://tangled.org/burrito.space/peek/commit/eab54a3ff2b29957873ecd224dd419f8d8185511))
329329+- Add feeds and series architecture (8688 (https://tangled.org/burrito.space/peek/commit/8688c50133ebac280772bca4173b5ee99cd4a61b))
330330+- Add feed reader extension (44c5 (https://tangled.org/burrito.space/peek/commit/44c5b507a1d0f879ba60c68de0b1e529bc5feed9))
331331+332332+Desktop - Editor & Commands
333333+- Note editing flow with autosave (0ae5 (https://tangled.org/burrito.space/peek/commit/0ae56bb7c9586de0c2c9cf14245148ae9de2ecfd))
334334+- Restore mode indicator to command bar — shows current mode, click to cycle (9176 (https://tangled.org/burrito.space/peek/commit/917640cacdb7e6f016cdd7e5a4dec3434a198d4b))
335335+- Add "Sync now" command for manual sync trigger (18d0 (https://tangled.org/burrito.space/peek/commit/18d02d2cd3d65f60537a1d1622923c0696029999))
336336+- Use connector pattern for edit and note commands (4846 (https://tangled.org/burrito.space/peek/commit/48465f72a50e5b801a71e9c09c4262dff0636ebb))
337337+- URL command returns error instead of opening editor when no URL provided (5141 (https://tangled.org/burrito.space/peek/commit/5141fb07b095f117552fd8ce461ac318f5907219))
338338+339339+Desktop - UI & Components
340340+- Add glass-morphism tokens and component modes (7b2e (https://tangled.org/burrito.space/peek/commit/7b2e52dca752a2c46920364667e0f58a42360ba2))
341341+- Center card headers, disable URL input autocapitalize, fix dev script (aa57 (https://tangled.org/burrito.space/peek/commit/aa578e0d91539d6f4d7b6e177e993106e9e9b226))
342342+- Set default background on webview content when page has none — respects system theme (9fc2 (https://tangled.org/burrito.space/peek/commit/9fc274ab7ffc402f4409769023bed2bfcb439d3e))
343343+- Use trackNavigation for URL visit recording (f267 (https://tangled.org/burrito.space/peek/commit/f267789149b2418d4e58d90f24da86c023bf930f))
344344+345345+Desktop - Profiles & Startup
346346+- Chromium session partition isolation per profile (2d70 (https://tangled.org/burrito.space/peek/commit/2d704158814b911fd76579febe03ea6119e596ea))
347347+- Register peek:// protocol on profile session (cd80 (https://tangled.org/burrito.space/peek/commit/cd80de8d23562964ac212b240f49813535f9b1d3))
348348+- Respect startupFeature pref instead of always opening settings (5b92 (https://tangled.org/burrito.space/peek/commit/5b920fab23aa7c30105f3e435931a0d25092fa70))
349349+350350+Desktop - Fixes
351351+- ESC handling for Active mode windows (IZUI policy compliance)
352352+- Add getFocusedVisibleWindowId API for modal window targeting
353353+- Add trackNavigation API for unified page load tracking
354354+- Update test to use peek://ext/cmd/panel.html
355355+- Window-list returns actual URLs from peek://app/page containers
356356+- Mode detection from URL in window creation
357357+- Add native module check script (prevents NODE_MODULE_VERSION mismatch)
358358+- Unit tests run under Electron's Node to match native module ABI
359359+- Cast address to string for type safety (32a7 (https://tangled.org/burrito.space/peek/commit/32a7f8a0b97b12718211cc4cd39264cea5a6de49))
360360+- Sanitize window params to prevent serialization crash (fca6 (https://tangled.org/burrito.space/peek/commit/fca6a26f963623bc04a94bc2361cb9e4f49a2678))
361361+- Exclude tmp/ agent workspaces from electron-builder (f0f2 (https://tangled.org/burrito.space/peek/commit/f0f26e312d0174f2d6a304ed8638145d09a2c94b))
362362+- Electron-builder uses yml config via extends (4620 (https://tangled.org/burrito.space/peek/commit/4620155f4f96c9a42bdf00211967efa547063e19))
363363+- Normalize trailing slash on bare domain URLs (3c2b (https://tangled.org/burrito.space/peek/commit/3c2bbd619327e7cb6dfbba027ce1805d5873e0b2))
364364+365365+Mobile / iOS
366366+- URL action icons with native WKWebView + visit tracking — open in Safari or embedded webview (ee06 (https://tangled.org/burrito.space/peek/commit/ee06ef990eb2bad8a17de65708a088198625e7f7))
367367+- Simplify Swift webview integration with direct FFI (1825 (https://tangled.org/burrito.space/peek/commit/182588302aef990b8ced2c8b4bd1143ba813653f))
368368+- Fix native webview and restore icon system (1b64 (https://tangled.org/burrito.space/peek/commit/1b641ed1fdd510c83847c8cf213cc14eac5e1319))
369369+- Require hold gesture for pull-to-refresh to prevent accidental triggers (0efb (https://tangled.org/burrito.space/peek/commit/0efb444539dba1d4cc7ed5cbd68815978ee2a5b0))
370370+- Bottom sheet webview (80fb (https://tangled.org/burrito.space/peek/commit/80fb7d8f9f3df9d064720c4801c91af0898e611f))
371371+- Card-expansion iframe overlay replaces native bottom sheet (eb43 (https://tangled.org/burrito.space/peek/commit/eb43f135aaf8ed51c69dff6d7726cf995bf0c3ed))
372372+- Silence linker warnings and remove unused default icons (8cd3 (https://tangled.org/burrito.space/peek/commit/8cd36323c9173e18559108b909718589433bbcda))
373373+- UX polish pass — 18 fixes for editor, share extension, layout, build (cf5f (https://tangled.org/burrito.space/peek/commit/cf5fe38b9cf9148fb2b506085aced75a0871221f))
374374+- UX polish — 13 fixes for share sheet, editor, keyboard, sorting, filters (956f (https://tangled.org/burrito.space/peek/commit/956fdcb80b723c155a25195e6a6aa55e9a35b336))
375375+- Maximize editor card space — tighter padding, expand to edges (2a0f (https://tangled.org/burrito.space/peek/commit/2a0fc4bf7c778068a7a76bee723410d98a44265b))
376376+- Undo/redo at top, reduce gaps, add webview link for text items (90d7 (https://tangled.org/burrito.space/peek/commit/90d76c5178864b8d313333b0a6507b64ff1eaf6b))
377377+- Commit pending tag text when Done is tapped (712a (https://tangled.org/burrito.space/peek/commit/712a5108ebca84bfa96143b6dfd12d0725a79b54))
378378+- Use dynamic DerivedData path for sim:install (9442 (https://tangled.org/burrito.space/peek/commit/94420c1731e25992049d270b48b6a0626f13a54e))
379379+380380+Testing
381381+- Add Playwright browser extension e2e tests
382382+- Improve extension ID detection and shared instance handling
383383+- Remove Firefox Playwright support (not supported by Playwright)
384384+- Add integration tests for tag-centric events (ed9d (https://tangled.org/burrito.space/peek/commit/ed9dd17a41ba94b54faae75cd595934f2e9cecb2))
385385+386386+Refactoring
387387+- Move tag and tagset commands to tags extension (d663 (https://tangled.org/burrito.space/peek/commit/d6636aaa3087c2ec7bcf817363f16a9b7c901244))
388388+- Create files extension with csv and save commands (435c (https://tangled.org/burrito.space/peek/commit/435cc952196795389322bda8f9f9d48b176c4340))
389389+- Create sync extension with sync command (e586 (https://tangled.org/burrito.space/peek/commit/e5867452459b6c136b01c663d1237cc3c05a4899))
390390+391391+Datastore & UI
392392+- Show addresses/visits/tags stats with safe error handling
393393+- Extract stats from result.data wrapper
394394+- Clean up settings and diagnostic UI
395395+396396+Code Cleanup
397397+- Remove vestigial app/cmd/ directory (24 files, replaced by extensions/cmd/)
398398+- Remove app/scripts/ (disabled feature with missing HTML files)
399399+- Remove dead functions from app/index.js
400400+- Remove Cmd and Scripts entries from app/config.js
401401+- Simplify app/features.js (all features are now extensions)
402402+- Remove commented-out sendToWindow/onMessage APIs from preload.js
403403+- Remove 7 unused IPC handlers from ipc.ts (~155 lines)</description>
493404 </item>
494405 <item>
495406 <title>2026-01-26</title>
496407 <link>https://tangled.org/burrito.space/peek</link>
497408 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-01-26</guid>
498409 <pubDate>Mon, 26 Jan 2026 12:00:00 GMT</pubDate>
499499- <description><![CDATA[<p>Server<br>
500500-<ul><li>feat(server): add single-user mode support (no auth required for solo use)</li><br>
501501-<li>feat(server): add storage abstraction layer for image handling</li><br>
502502-<li>feat(server): add SQL abstraction layer for database portability</li><br>
503503-</ul><br>
504504-Extension<br>
505505-<ul><li>feat(extension): add command bar popup with tag, note, search</li><br>
506506-<li>feat(extension): add Alt+P hotkey for command bar popup</li><br>
507507-<li>feat(extension): simplify command bar popup UI</li><br>
508508-<li>feat(extension): add e2e sync tests and preserve original timestamps</li><br>
509509-</ul><br>
510510-Desktop - Fullscreen Canvas<br>
511511-<ul><li>feat(page): implement fullscreen transparent canvas architecture</li><br>
512512-<li>feat(page): fullscreen transparent canvas with floating navbar</li><br>
513513-<li>fix(navbar): prevent hiding when hovering over gaps between child elements</li><br>
514514-</ul><br>
515515-Desktop - IZUI / ESC Handling<br>
516516-<ul><li>feat(izui): add minimal IZUI window navigation system</li><br>
517517-<li>feat(izui): complete ESC key handling with IZUI integration</li><br>
518518-<li>feat(izui): navigation stack for ESC in child windows</li><br>
519519-<li>feat(izui): complete preload API wiring for ESC key handling</li><br>
520520-<li>feat(esc): change default escapeMode from 'close' to 'auto'</li><br>
521521-<li>fix(izui): overlay no longer steals ESC from web pages</li><br>
522522-<li>fix(esc): web pages now close on first ESC key press</li><br>
523523-<li>feat(cmd): add mode indicator to command bar</li><br>
524524-</ul><br>
525525-Mobile<br>
526526-<ul><li>feat(mobile): improve item card UI and keyboard stability</li><br>
527527-<li>feat(mobile): migrate tags.id from INTEGER to TEXT for sync compatibility</li><br>
528528-<li>fix(mobile): prevent orphaned databases and ensure dev profile in dev builds</li><br>
529529-<li>fix(mobile): resolve deadlock and respect profile choice in dev builds</li><br>
530530-<li>fix(sync): filter out peek:// URLs from server sync</li><br>
531531-</ul><br>
532532-Schema & Data Layer<br>
533533-<ul><li>feat(schema): add schema codegen system with single source of truth</li><br>
534534-<li>feat(schema): integrate codegen into build system with Rust backend tests</li><br>
535535-<li>feat(schema): comprehensive test coverage for generated types</li><br>
536536-<li>chore(server): align Node engine to repo-wide v22 policy</li><br>
537537-</ul><br>
538538-Testing Infrastructure<br>
539539-<ul><li>test(components): add component test infrastructure</li><br>
540540-<li>test(components): expand coverage to 56 tests with deterministic waits</li><br>
541541-<li>docs(components): add Testing section to README</li><br>
542542-<li>fix(tests): consolidate packaged tests to single Electron instance</li><br>
543543-</ul><br>
544544-Editor<br>
545545-<ul><li>feat(editor): integrate CodeMirror markdown editor with three-panel layout</li><br>
546546-<li style="margin-left:1em">Outline sidebar with header navigation</li><br>
547547-<li style="margin-left:1em">Live markdown preview sidebar</li><br>
548548-<li style="margin-left:1em">Vim mode toggle (persisted in settings)</li><br>
549549-<li style="margin-left:1em">Resizable panels, focus mode</li><br>
550550-<li style="margin-left:1em">Full syntax highlighting</li><br>
551551-<li>feat(editor): add vim fold commands, status line, and comprehensive tests</li><br>
552552-</ul><br>
553553-Web Extensions<br>
554554-<ul><li>feat(web-ext): add bundled web extensions infrastructure</li><br>
555555-<li>feat(extensions): bundle Consent-O-Matic for automatic cookie consent handling</li><br>
556556-<li>docs: add research on bundled web extensions (uBlock, Proton Pass, Consent-O-Matic)</li><br>
557557-<li>Integrated @cliqz/adblocker-electron for native ad blocking</li><br>
558558-</ul><br>
559559-Mobile / iOS<br>
560560-<ul><li>feat(mobile): add Release CLI builds via xcodebuild</li><br>
561561-<li style="margin-left:1em">Fix Share Extension configuration inheritance (CONFIGURATION=Release override)</li><br>
562562-<li style="margin-left:1em">Add yarn mobile:ios:xcodebuild:release command</li><br>
563563-<li style="margin-left:1em">Add yarn mobile:ios:xcodebuild:install:release command</li><br>
564564-<li>feat(tests): iOS e2e testing improvements and window utilities</li><br>
565565-<li style="margin-left:1em">Add PEEK_AUTO_SYNC env var support</li><br>
566566-<li style="margin-left:1em">Add --headless and --build flags to e2e-full-sync-test.sh</li><br>
567567-<li>docs: add research on xcodebuild CLI vs Xcode GUI environment issues</li><br>
568568-</ul><br>
569569-Developer Tooling<br>
570570-<ul><li>chore: add multi-agent workflow with jj workspaces</li><br>
571571-<li>chore: update agent-setup to handle both install and update</li><br>
572572-<li>docs: add CLAUDE.coordinator.md for coordinator agents</li><br>
573573-<li>docs: update jj workflow - always commit before operations</li></ul></p>]]></description>
410410+ <description>Server
411411+- feat(server): add single-user mode support (no auth required for solo use)
412412+- feat(server): add storage abstraction layer for image handling
413413+- feat(server): add SQL abstraction layer for database portability
414414+415415+Extension
416416+- feat(extension): add command bar popup with tag, note, search
417417+- feat(extension): add Alt+P hotkey for command bar popup
418418+- feat(extension): simplify command bar popup UI
419419+- feat(extension): add e2e sync tests and preserve original timestamps
420420+421421+Desktop - Fullscreen Canvas
422422+- feat(page): implement fullscreen transparent canvas architecture
423423+- feat(page): fullscreen transparent canvas with floating navbar
424424+- fix(navbar): prevent hiding when hovering over gaps between child elements
425425+426426+Desktop - IZUI / ESC Handling
427427+- feat(izui): add minimal IZUI window navigation system
428428+- feat(izui): complete ESC key handling with IZUI integration
429429+- feat(izui): navigation stack for ESC in child windows
430430+- feat(izui): complete preload API wiring for ESC key handling
431431+- feat(esc): change default escapeMode from 'close' to 'auto'
432432+- fix(izui): overlay no longer steals ESC from web pages
433433+- fix(esc): web pages now close on first ESC key press
434434+- feat(cmd): add mode indicator to command bar
435435+436436+Mobile
437437+- feat(mobile): improve item card UI and keyboard stability
438438+- feat(mobile): migrate tags.id from INTEGER to TEXT for sync compatibility
439439+- fix(mobile): prevent orphaned databases and ensure dev profile in dev builds
440440+- fix(mobile): resolve deadlock and respect profile choice in dev builds
441441+- fix(sync): filter out peek:// URLs from server sync
442442+443443+Schema & Data Layer
444444+- feat(schema): add schema codegen system with single source of truth
445445+- feat(schema): integrate codegen into build system with Rust backend tests
446446+- feat(schema): comprehensive test coverage for generated types
447447+- chore(server): align Node engine to repo-wide v22 policy
448448+449449+Testing Infrastructure
450450+- test(components): add component test infrastructure
451451+- test(components): expand coverage to 56 tests with deterministic waits
452452+- docs(components): add Testing section to README
453453+- fix(tests): consolidate packaged tests to single Electron instance
454454+455455+Editor
456456+- feat(editor): integrate CodeMirror markdown editor with three-panel layout
457457+ - Outline sidebar with header navigation
458458+ - Live markdown preview sidebar
459459+ - Vim mode toggle (persisted in settings)
460460+ - Resizable panels, focus mode
461461+ - Full syntax highlighting
462462+- feat(editor): add vim fold commands, status line, and comprehensive tests
463463+464464+Web Extensions
465465+- feat(web-ext): add bundled web extensions infrastructure
466466+- feat(extensions): bundle Consent-O-Matic for automatic cookie consent handling
467467+- docs: add research on bundled web extensions (uBlock, Proton Pass, Consent-O-Matic)
468468+- Integrated @cliqz/adblocker-electron for native ad blocking
469469+470470+Mobile / iOS
471471+- feat(mobile): add Release CLI builds via xcodebuild
472472+ - Fix Share Extension configuration inheritance (CONFIGURATION=Release override)
473473+ - Add yarn mobile:ios:xcodebuild:release command
474474+ - Add yarn mobile:ios:xcodebuild:install:release command
475475+- feat(tests): iOS e2e testing improvements and window utilities
476476+ - Add PEEK_AUTO_SYNC env var support
477477+ - Add --headless and --build flags to e2e-full-sync-test.sh
478478+- docs: add research on xcodebuild CLI vs Xcode GUI environment issues
479479+480480+Developer Tooling
481481+- chore: add multi-agent workflow with jj workspaces
482482+- chore: update agent-setup to handle both install and update
483483+- docs: add CLAUDE.coordinator.md for coordinator agents
484484+- docs: update jj workflow - always commit before operations</description>
574485 </item>
575486 <item>
576487 <title>2026-01-19</title>
577488 <link>https://tangled.org/burrito.space/peek</link>
578489 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-01-19</guid>
579490 <pubDate>Mon, 19 Jan 2026 12:00:00 GMT</pubDate>
580580- <description><![CDATA[<p><ul><li>[x][desktop] history & addressability: track peek:// loads, all window/webview loads, in-page navigation, JS window.open child windows (mkylrnxy)</li><br>
581581-<li>[x][desktop] history chaining: prevId/nextId columns on visits table with migration backfill (mkylrnxy)</li><br>
582582-<li>[x][desktop] history API: getHistory() with date range filtering, enriched visit+address join query, IPC + preload exposure (mkylrnxy)</li><br>
583583-<li>add device ID tracking to item metadata (swskpulq)</li><br>
584584-<li>app version and datastore version as separate layers of compatibility (rltmkytv)</li><br>
585585-<li>define compat detection system across desktop/server/mobile/other (rltmkytv)</li><br>
586586-<li>define how sync works when incompatible (clients only sync w/ datastore-compatible nodes) (rltmkytv)</li><br>
587587-<li>sync is not spoke server - all nodes equal participants (rltmkytv)</li><br>
588588-<li>implement version compat in desktop/server (DATASTORE_VERSION + PROTOCOL_VERSION, exact match, 409 on mismatch) (rltmkytv)</li><br>
589589-<li>implement version compat in mobile (add version headers to lib.rs sync) (rlrlqkqz)</li><br>
590590-<li>[x][mobile] fix sync re-pushing all items every time - per-item synced_at (nxszorty)</li><br>
591591-<li>[x][mobile] add version headers to mobile sync - DATASTORE_VERSION + PROTOCOL_VERSION (rlrlqkqz)</li><br>
592592-<li>[x][desktop] add new items - url/tagset/note commands (pwuyrstl)</li><br>
593593-<li>[x][desktop] editor extension with full note editing (rmztsrkr)</li><br>
594594-<li>[x][tauri] sync module, schema migrations, version compat to match Electron (zzyllzsk)</li><br>
595595-<li>e2e sync & version test suite, fix sync profile resolution (rlrlqkqz)</li><br>
596596-<li>[x][mobile] fix share extension creating duplicate items per tag (yvumsuqr)</li><br>
597597-<li>[x][mobile] merge home and search into unified view, configurable archive tag (txzkumku)</li><br>
598598-<li>[x][mobile] fix big bottom bar showing again (tqnmowqm)</li><br>
599599-<li>[x][mobile] iOS profile support with build detection and per-profile databases (ylkwxtut)</li><br>
600600-<li>[x][mobile] UUID-based profile sync across mobile, desktop, and server (mlqntkvw)</li><br>
601601-<li>[x][mobile] iOS share extension fixes + tag input filtering (smuxwlzx)</li><br>
602602-<li>[x][mobile] consolidate editor views with shared components (wvvqrquo)</li><br>
603603-<li>[x][mobile] add clear buttons to all input fields and textareas (vyuwkrpy)</li><br>
604604-<li>[x][mobile] fix tags not persisting on text notes (qowppxlk)</li><br>
605605-<li>[x][mobile] add archive tag support to hide items from views (urmmzrvr)</li><br>
606606-<li>[x][mobile] add font size slider in settings with realtime preview (umqpnqto)</li><br>
607607-<li>[x][mobile] mobile editing ux - toasts, validation, draft persistence, spacing, bottom bar fix (rqwmmpnm)</li><br>
608608-<li>[x][mobile] pull-to-refresh gesture triggers sync (roqqsxyp)</li><br>
609609-<li>[x][desktop] window titlebar hide/show pref with settings UI (wpykxvrl)</li><br>
610610-<li>[x][desktop] windows movable and resizable by default with window.open API params (wpykxvrl)</li><br>
611611-<li>[x][desktop] persist keyed/url window position+size across app restarts (wpykxvrl)</li><br>
612612-<li>[x][desktop] pin window on top (app and OS level) with commands (wpykxvrl)</li><br>
613613-<li>[x][desktop] configurable escape behavior per-window via window.open API (wpykxvrl)</li><br>
614614-<li>[x][desktop] window animation API (to/from coords, time) + slides impl (wpykxvrl)</li><br>
615615-<li>[x][desktop] Desktop Windows - title bar, persistence, pin controls, animations (wpykxvrl)</li><br>
616616-<li>[x][desktop] migrate old addresses to items table, fix CHECK constraint (ltovmzon)</li><br>
617617-<li>[x][desktop] multi-tag search in tags UI (ltovmzon)</li><br>
618618-<li>[x][desktop] extension nav styling improvements (ltovmzon)</li><br>
619619-<li>[x][desktop] fix groups extension - add visit tracking, filter for URLs only (wuywuwyn)</li><br>
620620-<li>[x][desktop] fix sync status in settings UI - use correct field name for display (xxtpswys)</li><br>
621621-<li>[x][desktop] persist autoSync setting in extension_settings (vyvorvtq)</li><br>
622622-<li>[x][desktop+server] add sync version compatibility - DATASTORE_VERSION + PROTOCOL_VERSION (rltmkytv)</li><br>
623623-<li>[x][desktop+server] add user profiles and profile switching (qlyszyzx)</li><br>
624624-<li>[x][desktop] add tags extension for tag visualization and management (kwuwspun)</li><br>
625625-<li>[x][desktop] click-and-hold window dragging for frameless windows (myyozwzx)</li><br>
626626-<li>[x][desktop] fix better-sqlite3 node/electron version mismatch with postinstall script (mmywmysr)</li><br>
627627-<li>[x][desktop] debug and stabilize build on new Electron (stale node_modules after upgrade) (kszpuvqr)</li><br>
628628-<li>[x][desktop] upgrade Electron to 40 + pin Node to 24 (kszpuvqr)</li><br>
629629-<li>[x][desktop] e2e sync test infrastructure for production (snrnkvls)</li><br>
630630-<li>[x][desktop] daily data snapshots saved to compress archives in ~/sync/peek-backups (qkpozntl)</li><br>
631631-<li>[x][desktop] fix 5GB packaged build by adding exclusions to electron-builder.yml (~280MB now) (qknnlynl)</li><br>
632632-<li>[x][desktop] update release build and drive it (rlytpznn)</li><br>
633633-<li>[x][security] remove production server endpoint from source - require env config (rnxppwkx)</li><br>
634634-<li>[x][server] Add pre-migration backup to server migration (uvkkmoos)</li><br>
635635-<li>[x][server] add daily snapshot backups on server, test locally, deploy, test and confirm working on railway (vpvuotkr)</li><br>
636636-<li>[x][server] document Railway deployment info so agents don't have to relearn each time (wlwruzuq)</li><br>
637637-<li>[x][sync] fix duplicates: add sync_id parameter for server-side deduplication (yswsyzvl)</li><br>
638638-<li>[x][sync] investigate remaining sync edge cases (purnxzzz)</li><br>
639639-<li>[x][sync] E2E integration tests for desktop-server sync (uowlzlxm)</li><br>
640640-<li>data model: multi-user support (server full, desktop profile isolation) (qlyszyzx)</li><br>
641641-<li>desktop sync working (bidirectional in backend/electron/sync.ts) (mxwrymlv)</li><br>
642642-<li>sync config in settings UI (vyvorvtq)</li><br>
643643-<li>windows draggable/moveable (click-and-hold in app/drag.js) (myyozwzx)</li><br>
644644-<li>notes in datastore (items table with type='text') (xxnxwnwx)</li><br>
645645-<li>peek-node supports text/urls/tagsets/images (xxnxwnwx)</li><br>
646646-<li>backup/restore snapshots (daily automated + manual) (zuzylokr)</li><br>
647647-<li>action history storage (visits table) (wuywuwyn)</li><br>
648648-<li>update main README (kpylorrl)</li><br>
649649-<li>[x][mobile] shared iOS build cache to avoid Rust rebuilds across agent workspaces (nputkypr)</li><br>
650650-<li>[x][mobile] update to full bidirectional sync (pull + push, not just webhook push) (otsvqvzo)</li><br>
651651-<li>[x][workflow] agent workspace isolation - rules to stay in workspace, no parent repo access (lorkrruo)</li><br>
652652-<li>[x][workflow] fix divergent commits - mmerge uses jj new+restore pattern (zponttxz)</li><br>
653653-<li>[x][workflow] Railway deploy scripts - npm/yarn scripts with --service flag (zponttxz)</li><br>
654654-<li>[x][workflow] fix TODO archival - updated agent templates with clearer instructions (uytsrstx)</li><br>
655655-<li>[x][workflow] clarify ./app rule - now about respecting front-end/back-end architecture boundary (tkvzpvlu)</li><br>
656656-<li>[x][workflow] restore git/github push for Railway deploys (vkrunkpn)</li><br>
657657-<li>[x][workflow] fix jj commit/merge strategy - agents no longer touch main bookmark (srmykyqy)</li></ul></p>]]></description>
491491+ <description>- [x][desktop] history & addressability: track peek:// loads, all window/webview loads, in-page navigation, JS window.open child windows (mkylrnxy)
492492+- [x][desktop] history chaining: prevId/nextId columns on visits table with migration backfill (mkylrnxy)
493493+- [x][desktop] history API: getHistory() with date range filtering, enriched visit+address join query, IPC + preload exposure (mkylrnxy)
494494+- add device ID tracking to item metadata (swskpulq)
495495+- app version and datastore version as separate layers of compatibility (rltmkytv)
496496+- define compat detection system across desktop/server/mobile/other (rltmkytv)
497497+- define how sync works when incompatible (clients only sync w/ datastore-compatible nodes) (rltmkytv)
498498+- sync is not spoke server - all nodes equal participants (rltmkytv)
499499+- implement version compat in desktop/server (DATASTORE_VERSION + PROTOCOL_VERSION, exact match, 409 on mismatch) (rltmkytv)
500500+- implement version compat in mobile (add version headers to lib.rs sync) (rlrlqkqz)
501501+- [x][mobile] fix sync re-pushing all items every time - per-item synced_at (nxszorty)
502502+- [x][mobile] add version headers to mobile sync - DATASTORE_VERSION + PROTOCOL_VERSION (rlrlqkqz)
503503+- [x][desktop] add new items - url/tagset/note commands (pwuyrstl)
504504+- [x][desktop] editor extension with full note editing (rmztsrkr)
505505+- [x][tauri] sync module, schema migrations, version compat to match Electron (zzyllzsk)
506506+- e2e sync & version test suite, fix sync profile resolution (rlrlqkqz)
507507+- [x][mobile] fix share extension creating duplicate items per tag (yvumsuqr)
508508+- [x][mobile] merge home and search into unified view, configurable archive tag (txzkumku)
509509+- [x][mobile] fix big bottom bar showing again (tqnmowqm)
510510+- [x][mobile] iOS profile support with build detection and per-profile databases (ylkwxtut)
511511+- [x][mobile] UUID-based profile sync across mobile, desktop, and server (mlqntkvw)
512512+- [x][mobile] iOS share extension fixes + tag input filtering (smuxwlzx)
513513+- [x][mobile] consolidate editor views with shared components (wvvqrquo)
514514+- [x][mobile] add clear buttons to all input fields and textareas (vyuwkrpy)
515515+- [x][mobile] fix tags not persisting on text notes (qowppxlk)
516516+- [x][mobile] add archive tag support to hide items from views (urmmzrvr)
517517+- [x][mobile] add font size slider in settings with realtime preview (umqpnqto)
518518+- [x][mobile] mobile editing ux - toasts, validation, draft persistence, spacing, bottom bar fix (rqwmmpnm)
519519+- [x][mobile] pull-to-refresh gesture triggers sync (roqqsxyp)
520520+- [x][desktop] window titlebar hide/show pref with settings UI (wpykxvrl)
521521+- [x][desktop] windows movable and resizable by default with window.open API params (wpykxvrl)
522522+- [x][desktop] persist keyed/url window position+size across app restarts (wpykxvrl)
523523+- [x][desktop] pin window on top (app and OS level) with commands (wpykxvrl)
524524+- [x][desktop] configurable escape behavior per-window via window.open API (wpykxvrl)
525525+- [x][desktop] window animation API (to/from coords, time) + slides impl (wpykxvrl)
526526+- [x][desktop] Desktop Windows - title bar, persistence, pin controls, animations (wpykxvrl)
527527+- [x][desktop] migrate old addresses to items table, fix CHECK constraint (ltovmzon)
528528+- [x][desktop] multi-tag search in tags UI (ltovmzon)
529529+- [x][desktop] extension nav styling improvements (ltovmzon)
530530+- [x][desktop] fix groups extension - add visit tracking, filter for URLs only (wuywuwyn)
531531+- [x][desktop] fix sync status in settings UI - use correct field name for display (xxtpswys)
532532+- [x][desktop] persist autoSync setting in extension_settings (vyvorvtq)
533533+- [x][desktop+server] add sync version compatibility - DATASTORE_VERSION + PROTOCOL_VERSION (rltmkytv)
534534+- [x][desktop+server] add user profiles and profile switching (qlyszyzx)
535535+- [x][desktop] add tags extension for tag visualization and management (kwuwspun)
536536+- [x][desktop] click-and-hold window dragging for frameless windows (myyozwzx)
537537+- [x][desktop] fix better-sqlite3 node/electron version mismatch with postinstall script (mmywmysr)
538538+- [x][desktop] debug and stabilize build on new Electron (stale node_modules after upgrade) (kszpuvqr)
539539+- [x][desktop] upgrade Electron to 40 + pin Node to 24 (kszpuvqr)
540540+- [x][desktop] e2e sync test infrastructure for production (snrnkvls)
541541+- [x][desktop] daily data snapshots saved to compress archives in ~/sync/peek-backups (qkpozntl)
542542+- [x][desktop] fix 5GB packaged build by adding exclusions to electron-builder.yml (~280MB now) (qknnlynl)
543543+- [x][desktop] update release build and drive it (rlytpznn)
544544+- [x][security] remove production server endpoint from source - require env config (rnxppwkx)
545545+- [x][server] Add pre-migration backup to server migration (uvkkmoos)
546546+- [x][server] add daily snapshot backups on server, test locally, deploy, test and confirm working on railway (vpvuotkr)
547547+- [x][server] document Railway deployment info so agents don't have to relearn each time (wlwruzuq)
548548+- [x][sync] fix duplicates: add sync_id parameter for server-side deduplication (yswsyzvl)
549549+- [x][sync] investigate remaining sync edge cases (purnxzzz)
550550+- [x][sync] E2E integration tests for desktop-server sync (uowlzlxm)
551551+- data model: multi-user support (server full, desktop profile isolation) (qlyszyzx)
552552+- desktop sync working (bidirectional in backend/electron/sync.ts) (mxwrymlv)
553553+- sync config in settings UI (vyvorvtq)
554554+- windows draggable/moveable (click-and-hold in app/drag.js) (myyozwzx)
555555+- notes in datastore (items table with type='text') (xxnxwnwx)
556556+- peek-node supports text/urls/tagsets/images (xxnxwnwx)
557557+- backup/restore snapshots (daily automated + manual) (zuzylokr)
558558+- action history storage (visits table) (wuywuwyn)
559559+- update main README (kpylorrl)
560560+- [x][mobile] shared iOS build cache to avoid Rust rebuilds across agent workspaces (nputkypr)
561561+- [x][mobile] update to full bidirectional sync (pull + push, not just webhook push) (otsvqvzo)
562562+- [x][workflow] agent workspace isolation - rules to stay in workspace, no parent repo access (lorkrruo)
563563+- [x][workflow] fix divergent commits - mmerge uses jj new+restore pattern (zponttxz)
564564+- [x][workflow] Railway deploy scripts - npm/yarn scripts with --service flag (zponttxz)
565565+- [x][workflow] fix TODO archival - updated agent templates with clearer instructions (uytsrstx)
566566+- [x][workflow] clarify ./app rule - now about respecting front-end/back-end architecture boundary (tkvzpvlu)
567567+- [x][workflow] restore git/github push for Railway deploys (vkrunkpn)
568568+- [x][workflow] fix jj commit/merge strategy - agents no longer touch main bookmark (srmykyqy)</description>
658569 </item>
659570 <item>
660571 <title>2026-01-12</title>
661572 <link>https://tangled.org/burrito.space/peek</link>
662573 <guid isPermaLink="false">https://tangled.org/burrito.space/peek#2026-01-12</guid>
663574 <pubDate>Mon, 12 Jan 2026 12:00:00 GMT</pubDate>
664664- <description><![CDATA[<p><ul><li>[x][desktop] settings UI for sync (vyvorvtq)</li><br>
665665-<li>[x][desktop] test sync and package (ssxzpoxo)</li><br>
666666-<li>merge peek-node into peek repo (now at backend/server/) (zturryym)</li><br>
667667-<li>update peek-node to support multi-user and the core types (already done) (zturryym)</li><br>
668668-<li>unify data model across mobile/desktop/server (nlxqykul)</li><br>
669669-<li>sync working between all three (mxwrymlv)</li><br>
670670-<li>[x][mobile] test and deploy ios to prod (rtmtkykn)</li><br>
671671-</ul><br>
672672-<h3>Old completed items</h3></p><p><h3>Addressability / Core history</h3><br>
673673-<ul><li>add peek:// loads to history table (mkylrnxy)</li><br>
674674-<li>peek urls don't need params yet, but we'll need to do cmd params and connector data somehow maybe (mkylrnxy)</li><br>
675675-<li>ensure all window/frame/webview loads of any kind are entered in history (mkylrnxy)</li><br>
676676-<li>bug: some link clicks in web pages open in a window with a title bar that's clearly not entered in peek's window tracking, maybe js in the page opening windows? (mkylrnxy)</li><br>
677677-<li>sync: don't sync peek addresses for now (mkylrnxy)</li><br>
678678-<li>not doing paths/forking yet - is just one single chain of actions (mkylrnxy)</li><br>
679679-<li>add next/prev cols to history table, or maintain in new table? (mkylrnxy)</li><br>
680680-<li>when a history record is added, set prevId pointing to previous history record (mkylrnxy)</li><br>
681681-<li>each time a history record is added, set nextId to its prevId (mkylrnxy)</li><br>
682682-<li>enumerate history (mkylrnxy)</li><br>
683683-<li>filter on date ranges (mkylrnxy)</li><br>
684684-</ul><br>
685685-<h3>Server Backend</h3><br>
686686-<ul><li>Add database integrity verification (uvkkmoos)</li><br>
687687-</ul><br>
688688-<h3>Base Extensions</h3><br>
689689-<ul><li>see notes/extensibility.md</li><br>
690690-<li>window manager views (bad name, but what Peek "features" are now)</li><br>
691691-<li>commands (eg Quicksilver, Ubiquity, Raycast style)</li><br>
692692-</ul><br>
693693-<h3>Portability</h3><br>
694694-<ul><li>Abstract back-end system</li><br>
695695-<li>Electron back-end</li><br>
696696-<li>Tauri back-end</li><br>
697697-</ul><br>
698698-<h3>Pages, Tagging & Groups</h3><br>
699699-<ul><li>Open page by default in cmd</li><br>
700700-<li>Open page from OS, other apps</li><br>
701701-<li>Cmd to tag current page</li><br>
702702-<li>Groups based on tags, for now</li><br>
703703-<li>Untagged -> default group</li><br>
704704-<li>Cmd to open groups home</li><br>
705705-<li>Escape for navigating back up the group views, not closing window</li><br>
706706-<li>adaptive matching</li><br>
707707-<li>frecency</li><br>
708708-</ul><br>
709709-<h3>V.0.3 - Datastore</h3><br>
710710-<ul><li>Datastore</li><br>
711711-</ul><br>
712712-<h3>v0.2 - MVCP</h3><br>
713713-<ul><li>app showing in dock even tho disabled</li><br>
714714-<li>app not showing in tray, even tho enabled</li><br>
715715-<li>all api calls get source attached</li><br>
716716-<li>window cache s/custom/map/</li><br>
717717-<li>window cache all windows not just persistent</li><br>
718718-<li>window cache - evaluate key approach (use-case: apps need to identify windows they open)</li><br>
719719-<li>always return window id, so apps can manage it</li><br>
720720-<li>reimplement keys, so much easier for callers than managing ids</li><br>
721721-<li>account for number of renderer processes (seems double?)</li><br>
722722-<li>prototype window.open</li><br>
723723-<li>evaluate webContents.setWindowOpenHandler</li><br>
724724-<li>stop using openWindow to show pre-existing hidden windows?</li><br>
725725-<li style="margin-left:1em">[x] can track web windows locally</li><br>
726726-<li style="margin-left:1em">[x] can identify web windows on both sides (key/name)</li><br>
727727-<li style="margin-left:1em">[x] add new custom api for windows superpowers</li><br>
728728-<li>collapse window opening to span both approaches</li><br>
729729-<li>finish converting all openWindow to window.open</li><br>
730730-<li>figure out single devtools window if possible</li><br>
731731-</ul><br>
732732-<h3>v0.1 - MVPOC</h3></p><p>minimum viable proof of concept.</p><p>question: would i use this?</p><p>Core moduluarization<br>
733733-<ul><li>Modularize feature types, eyeing the extensibility model</li><br>
734734-<li>move settings window to features/settings</li><br>
735735-</ul><br>
736736-App cleanup<br>
737737-<ul><li>main window vs settings</li><br>
738738-<li>change settings shortcut from global+esc to opt+comma</li><br>
739739-</ul><br>
740740-Window lifecycle<br>
741741-<ul><li>modularize window open/close + hidden/visible</li><br>
742742-<li>update settings, peeks, slides, scripts</li><br>
743743-<li>hide/show window vs create fresh</li><br>
744744-<li>update slides impl to use openWindow (x, y)</li><br>
745745-</ul><br>
746746-Minimal Electron + Maximal Web<br>
747747-<ul><li>move features to all web code, with a couple special apis</li><br>
748748-<li>make globalShortcut an api like openWindow</li><br>
749749-</ul><br>
750750-Create core app<br>
751751-<ul><li>core settings</li><br>
752752-<li>registers other features</li><br>
753753-</ul><br>
754754-Move all features to web implementation<br>
755755-<ul><li>move all possible code from the electron file to the web app</li><br>
756756-<li>move to web implemented globalShortcut</li><br>
757757-<li>move to web implemented openWindow</li><br>
758758-<li>move settings re-use code to utils lib</li><br>
759759-<li>ability to add clickable links in settings panes</li><br>
760760-<li>add links to Settings app</li><br>
761761-<li>per-feature settings ui</li><br>
762762-</ul><br>
763763-Core+settings<br>
764764-<ul><li>move feature list and enablement to storage</li><br>
765765-<li>merge core + settings</li><br>
766766-<li>enable/disable features</li><br>
767767-<li>configurable default feature to load on app open (default to settings)</li><br>
768768-<li>wire up tray icon to pref</li><br>
769769-<li>tray click opens default app</li><br>
770770-</ul><br>
771771-Core/Basic<br>
772772-<ul><li>basic command bar to open pages</li><br>
773773-<li>fix setting layout wrapping issue</li><br>
774774-</ul><br>
775775-Commands/messaging<br>
776776-<ul><li>implement pubsub api</li><br>
777777-<li>way to tell feature to open default ui (if there is one)</li><br>
778778-<li>way tell feature to open its settings ui (if there is one)</li><br>
779779-</ul><br>
780780-Features cleanup<br>
781781-<ul><li>enable/disable individual slides, peeks</li><br>
782782-<li>enable/disable individual scripts</li><br>
783783-</ul><br>
784784-Internal cleanup<br>
785785-<ul><li>s/guid/id/</li><br>
786786-<li>fix label names, match to pwa manifest</li><br>
787787-<li>put readable log labels back in</li></ul></p>]]></description>
575575+ <description>- [x][desktop] settings UI for sync (vyvorvtq)
576576+- [x][desktop] test sync and package (ssxzpoxo)
577577+- merge peek-node into peek repo (now at backend/server/) (zturryym)
578578+- update peek-node to support multi-user and the core types (already done) (zturryym)
579579+- unify data model across mobile/desktop/server (nlxqykul)
580580+- sync working between all three (mxwrymlv)
581581+- [x][mobile] test and deploy ios to prod (rtmtkykn)
582582+583583+### Old completed items
584584+585585+### Addressability / Core history
586586+- add peek:// loads to history table (mkylrnxy)
587587+- peek urls don't need params yet, but we'll need to do cmd params and connector data somehow maybe (mkylrnxy)
588588+- ensure all window/frame/webview loads of any kind are entered in history (mkylrnxy)
589589+- bug: some link clicks in web pages open in a window with a title bar that's clearly not entered in peek's window tracking, maybe js in the page opening windows? (mkylrnxy)
590590+- sync: don't sync peek addresses for now (mkylrnxy)
591591+- not doing paths/forking yet - is just one single chain of actions (mkylrnxy)
592592+- add next/prev cols to history table, or maintain in new table? (mkylrnxy)
593593+- when a history record is added, set prevId pointing to previous history record (mkylrnxy)
594594+- each time a history record is added, set nextId to its prevId (mkylrnxy)
595595+- enumerate history (mkylrnxy)
596596+- filter on date ranges (mkylrnxy)
597597+598598+### Server Backend
599599+- Add database integrity verification (uvkkmoos)
600600+601601+### Base Extensions
602602+- see notes/extensibility.md
603603+- window manager views (bad name, but what Peek "features" are now)
604604+- commands (eg Quicksilver, Ubiquity, Raycast style)
605605+606606+### Portability
607607+- Abstract back-end system
608608+- Electron back-end
609609+- Tauri back-end
610610+611611+### Pages, Tagging & Groups
612612+- Open page by default in cmd
613613+- Open page from OS, other apps
614614+- Cmd to tag current page
615615+- Groups based on tags, for now
616616+- Untagged -> default group
617617+- Cmd to open groups home
618618+- Escape for navigating back up the group views, not closing window
619619+- adaptive matching
620620+- frecency
621621+622622+### V.0.3 - Datastore
623623+- Datastore
624624+625625+### v0.2 - MVCP
626626+- app showing in dock even tho disabled
627627+- app not showing in tray, even tho enabled
628628+- all api calls get source attached
629629+- window cache s/custom/map/
630630+- window cache all windows not just persistent
631631+- window cache - evaluate key approach (use-case: apps need to identify windows they open)
632632+- always return window id, so apps can manage it
633633+- reimplement keys, so much easier for callers than managing ids
634634+- account for number of renderer processes (seems double?)
635635+- prototype window.open
636636+- evaluate webContents.setWindowOpenHandler
637637+- stop using openWindow to show pre-existing hidden windows?
638638+ - [x] can track web windows locally
639639+ - [x] can identify web windows on both sides (key/name)
640640+ - [x] add new custom api for windows superpowers
641641+- collapse window opening to span both approaches
642642+- finish converting all openWindow to window.open
643643+- figure out single devtools window if possible
644644+645645+### v0.1 - MVPOC
646646+647647+minimum viable proof of concept.
648648+649649+question: would i use this?
650650+651651+Core moduluarization
652652+- Modularize feature types, eyeing the extensibility model
653653+- move settings window to features/settings
654654+655655+App cleanup
656656+- main window vs settings
657657+- change settings shortcut from global+esc to opt+comma
658658+659659+Window lifecycle
660660+- modularize window open/close + hidden/visible
661661+- update settings, peeks, slides, scripts
662662+- hide/show window vs create fresh
663663+- update slides impl to use openWindow (x, y)
664664+665665+Minimal Electron + Maximal Web
666666+- move features to all web code, with a couple special apis
667667+- make globalShortcut an api like openWindow
668668+669669+Create core app
670670+- core settings
671671+- registers other features
672672+673673+Move all features to web implementation
674674+- move all possible code from the electron file to the web app
675675+- move to web implemented globalShortcut
676676+- move to web implemented openWindow
677677+- move settings re-use code to utils lib
678678+- ability to add clickable links in settings panes
679679+- add links to Settings app
680680+- per-feature settings ui
681681+682682+Core+settings
683683+- move feature list and enablement to storage
684684+- merge core + settings
685685+- enable/disable features
686686+- configurable default feature to load on app open (default to settings)
687687+- wire up tray icon to pref
688688+- tray click opens default app
689689+690690+Core/Basic
691691+- basic command bar to open pages
692692+- fix setting layout wrapping issue
693693+694694+Commands/messaging
695695+- implement pubsub api
696696+- way to tell feature to open default ui (if there is one)
697697+- way tell feature to open its settings ui (if there is one)
698698+699699+Features cleanup
700700+- enable/disable individual slides, peeks
701701+- enable/disable individual scripts
702702+703703+Internal cleanup
704704+- s/guid/id/
705705+- fix label names, match to pwa manifest
706706+- put readable log labels back in</description>
788707 </item>
789708 </channel>
790709</rss>
+21-37
scripts/changelog-to-rss.js
···6464 // Title: use the heading text (may include more than just the date)
6565 const title = heading;
66666767- // Convert markdown body to simple HTML for RSS description
6868- const description = markdownToSimpleHtml(body);
6767+ // Convert markdown body to plain text for RSS description
6868+ const description = markdownToPlainText(body);
69697070 items.push({ title, date, dateStr, description });
7171 }
···7373 return items;
7474}
75757676-// Minimal markdown to HTML conversion for RSS descriptions
7777-function markdownToSimpleHtml(md) {
7878- let html = md
7979- // Headings (### and below, since ## are already split out)
8080- .replace(/^#### (.+)$/gm, '<h4>$1</h4>')
8181- .replace(/^### (.+)$/gm, '<h3>$1</h3>')
8282- // Bold
8383- .replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
8484- // Italic
8585- .replace(/\*(.+?)\*/g, '<em>$1</em>')
8686- // Inline code
8787- .replace(/`([^`]+)`/g, '<code>$1</code>')
8888- // Links
8989- .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>')
9090- // List items (- [x] and - [ ] and plain -)
9191- .replace(/^- \[x\] (.+)$/gm, '<li>$1</li>')
9292- .replace(/^- \[ \] (.+)$/gm, '<li>$1</li>')
9393- .replace(/^- (.+)$/gm, '<li>$1</li>')
9494- // Indented list items ( - )
9595- .replace(/^ - (.+)$/gm, '<li style="margin-left:1em">$1</li>')
9696- // Wrap consecutive <li> in <ul>
9797- .replace(/((?:<li[^>]*>.*<\/li>\n?)+)/g, '<ul>$1</ul>')
9898- // Paragraphs (double newline)
9999- .replace(/\n\n+/g, '</p><p>')
100100- // Single newlines to <br>
101101- .replace(/\n/g, '<br>\n');
102102-103103- // Wrap in paragraph if not empty
104104- if (html.trim()) {
105105- html = '<p>' + html + '</p>';
106106- }
107107- // Clean up empty paragraphs
108108- html = html.replace(/<p>\s*<\/p>/g, '');
7676+// Convert markdown to plain text for RSS descriptions
7777+function markdownToPlainText(md) {
7878+ let text = md
7979+ // Convert markdown links to "text (URL)" format
8080+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1 ($2)')
8181+ // Remove checkboxes
8282+ .replace(/^- \[x\] /gm, '- ')
8383+ .replace(/^- \[ \] /gm, '- ')
8484+ // Remove bold markers
8585+ .replace(/\*\*(.+?)\*\*/g, '$1')
8686+ // Remove italic markers
8787+ .replace(/\*(.+?)\*/g, '$1')
8888+ // Remove inline code backticks
8989+ .replace(/`([^`]+)`/g, '$1')
9090+ // Collapse multiple blank lines
9191+ .replace(/\n{3,}/g, '\n\n')
9292+ .trim();
10993110110- return html;
9494+ return text;
11195}
1129611397// Escape XML special characters
···157141 <link>${escapeXml(meta.link || '')}</link>
158142 <guid isPermaLink="false">${escapeXml(guid)}</guid>
159143 <pubDate>${pubDate}</pubDate>
160160- <description><![CDATA[${item.description}]]></description>
144144+ <description>${escapeXml(item.description)}</description>
161145 </item>
162146`;
163147 }