Skip to content
Closed
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
738 commits
Select commit Hold shift + click to select a range
61f1dc1
fix(observability): additional Sentry improvements
Just-Insane May 27, 2026
3fa0f0c
fix(observability): additional Sentry improvements
Just-Insane May 27, 2026
5bc53da
fix(timeline): remove premature fallback on permalink jumps
Just-Insane May 27, 2026
a7e475f
fix(timeline): prevent recovery scroll after successful permalink jump
Just-Insane May 27, 2026
3496a40
fix(timeline): prevent layout shift from slow-loading media
Just-Insane May 27, 2026
5d9649d
feat(observability): comprehensive Sentry instrumentation
Just-Insane May 27, 2026
db77a3e
fix(media): graceful SHA-256 hash verification and stale SW cleanup
Just-Insane May 28, 2026
119da2d
fix(media): handle MediaIntegrityError gracefully in all media compon…
Just-Insane May 28, 2026
397c8cf
fix(sw): prevent synthetic 401 body from reaching media decryption
Just-Insane May 28, 2026
bc99c57
refactor(sw): simplify fetch handler and remove complex session valid…
Just-Insane May 28, 2026
51a9479
fix(notifications): improve PWA push reliability and loud room banners
Just-Insane May 28, 2026
b347c7e
feat(notifications): add 'Show Loud Room Counts' badge toggle
Just-Insane May 28, 2026
447c4bf
fix(media): correct SHA-256 verification to check encrypted bytes
Just-Insane May 28, 2026
fad24d8
test(badges): fix UnreadBadge tests for showLoudRoomCounts parameter
Just-Insane May 28, 2026
572c8b4
fix(badges): exclude loud rooms from showUnreadCounts check
Just-Insane May 28, 2026
2ce348a
fix(badges): include Default notification mode in loud room counts
Just-Insane May 28, 2026
bc307e2
feat(notifications): add focus modes for notification filtering
Just-Insane May 28, 2026
b06d2c5
fix(badges): show loud room counts on space badges and add missing fo…
Just-Insane May 30, 2026
1311434
fix(media): bump SW cache version and improve error handling, fix con…
Just-Insane May 30, 2026
ee9a342
fix(sw,profile): add SW fetch error fallback and increase profile con…
Just-Insane May 30, 2026
0dfaee8
fix(call): filter NotAllowedError from autoplay failures in ringtone …
Just-Insane May 30, 2026
c3fd124
fix(sidebar): only count loud rooms in space badges with Show Loud Ro…
Just-Insane May 30, 2026
86dc1c7
fix(sync): prevent unnecessary reconnections on app foreground
Just-Insane May 30, 2026
682eaa9
fix(theme): prevent flash on mobile by deferring theme until settings…
Just-Insane May 30, 2026
93231a1
feat(telemetry): add notification delivery tracking and fix Event.dec…
Just-Insane May 30, 2026
2317158
fix(badges): show space badges for all unreads, counts for loud rooms…
Just-Insane May 30, 2026
cd3e618
fix(badges): stabilize useRoomsUnread selector to prevent race condit…
Just-Insane May 31, 2026
ccdbbf8
debug(badges): add logging to diagnose space badge visibility
Just-Insane May 31, 2026
37aedce
debug(badges): enhance logging to show roomToUnread map contents
Just-Insane May 31, 2026
bcb5a93
debug(badges): add logging to atom initialization and getUnreadInfos
Just-Insane May 31, 2026
81adb91
debug(badges): standardize logging prefix to [BADGE-DEBUG]
Just-Insane May 31, 2026
5da8862
feat(logging): standardize logging and increase Sentry sample rates
Just-Insane May 31, 2026
0209dae
refactor(logging): standardize console.log statements with consistent…
Just-Insane May 31, 2026
3be4cab
fix(badges): remove 2-member DM heuristic causing false highlights
Just-Insane May 31, 2026
a3fbbc8
debug(badges): expand space badge logging to include Tech Chats
Just-Insane May 31, 2026
514f067
fix(presence): add retry logic for 429 rate limit responses
Just-Insane May 31, 2026
39f1b82
docs: add Sentry issues analysis and fixes documentation
Just-Insane May 31, 2026
d9ab0ce
docs: clarify PWA reinstall needed for mobile worker cache issues
Just-Insane May 31, 2026
272554f
fix(badges): show space badges for all unreads, counts for loud rooms…
Just-Insane May 30, 2026
9b3b545
fix(sidebar): only count loud rooms in space badges with Show Loud Ro…
Just-Insane May 30, 2026
e781a30
fix(badges): show loud room counts on space badges and add missing fo…
Just-Insane May 30, 2026
afe91d6
fix(badges): include Default notification mode in loud room counts
Just-Insane May 28, 2026
5ebb17e
fix(badges): exclude loud rooms from showUnreadCounts check
Just-Insane May 28, 2026
96a4a47
test(badges): fix UnreadBadge tests for showLoudRoomCounts parameter
Just-Insane May 28, 2026
ad8f6f3
fix(badges): stabilize useRoomsUnread selector to prevent race condit…
Just-Insane May 31, 2026
620934c
debug(badges): add logging to diagnose space badge visibility
Just-Insane May 31, 2026
f458acc
debug(badges): enhance logging to show roomToUnread map contents
Just-Insane May 31, 2026
9377c74
debug(badges): add logging to atom initialization and getUnreadInfos
Just-Insane May 31, 2026
0efb3ff
debug(badges): standardize logging prefix to [BADGE-DEBUG]
Just-Insane May 31, 2026
fc36365
fix(badges): remove 2-member DM heuristic causing false highlights
Just-Insane May 31, 2026
9cf245d
debug(badges): expand space badge logging to include Tech Chats
Just-Insane May 31, 2026
198e0b6
debug(badges): add logging to diagnose space badge visibility
Just-Insane May 31, 2026
df52dba
debug(badges): enhance logging to show roomToUnread map contents
Just-Insane May 31, 2026
9159398
debug(badges): add logging to atom initialization and getUnreadInfos
Just-Insane May 31, 2026
85e7cc7
debug(badges): standardize logging prefix to [BADGE-DEBUG]
Just-Insane May 31, 2026
478803c
debug(badges): expand space badge logging to include Tech Chats
Just-Insane May 31, 2026
0e69c40
perf(startup): implement 7-strategy cold launch optimization
Just-Insane May 26, 2026
82d1b9d
feat(observability): enhance Sentry error tracking coverage
Just-Insane May 26, 2026
73363bd
feat(observability): complete Sentry coverage for commands, widgets, …
Just-Insane May 26, 2026
0c04e37
feat(observability): add Sentry metrics for startup optimizations
Just-Insane May 26, 2026
9697762
feat(observability): add Sentry metrics to Service Worker prefetch
Just-Insane May 26, 2026
a262e99
feat(observability): add comprehensive Sentry instrumentation
Just-Insane May 27, 2026
cb536b4
fix(observability): implement Sentry cleanup items 1, 2, 4, 5
Just-Insane May 27, 2026
ddf2bdf
fix(observability): additional Sentry improvements
Just-Insane May 27, 2026
2435f88
fix(observability): additional Sentry improvements
Just-Insane May 27, 2026
d7cd03b
feat(observability): comprehensive Sentry instrumentation
Just-Insane May 27, 2026
28cbb89
fix(sentry): resolve multiple Sentry error patterns and iOS update de…
Just-Insane May 27, 2026
946bae3
feat(telemetry): add notification delivery tracking and fix Event.dec…
Just-Insane May 30, 2026
f3f1b15
chore(diagnostics): add comprehensive Sentry logging for startup and …
Just-Insane May 27, 2026
b7a955e
chore(diagnostics): add detailed logging for cold cache detection fai…
Just-Insane May 27, 2026
e08c7fc
feat(timeline): add comprehensive permalink jump logging/Sentry
Just-Insane May 27, 2026
0da2a62
fix(sw): validate persisted session before using for media auth
Just-Insane May 26, 2026
88204d3
fix(sw): add 15s global timeout to prevent media fetch hangs
Just-Insane May 27, 2026
0e837ef
refactor(sw): simplify fetch handler and remove complex session valid…
Just-Insane May 28, 2026
ff6714e
fix(sw): prevent synthetic 401 body from reaching media decryption
Just-Insane May 28, 2026
516926f
fix(sw): handle service worker update check failures gracefully
Just-Insane May 27, 2026
40f2064
fix(sw): improve update detection and fix worker MIME errors
Just-Insane May 27, 2026
d32d96b
feat: add proactive service worker update detection
Just-Insane May 27, 2026
08d1a17
fix(sw,profile): add SW fetch error fallback and increase profile con…
Just-Insane May 30, 2026
1aa0d60
fix(media): graceful SHA-256 hash verification and stale SW cleanup
Just-Insane May 28, 2026
afcb3a4
fix(media): handle MediaIntegrityError gracefully in all media compon…
Just-Insane May 28, 2026
4ff242d
fix(media): correct SHA-256 verification to check encrypted bytes
Just-Insane May 28, 2026
2887e83
fix(media): bump SW cache version and improve error handling, fix con…
Just-Insane May 30, 2026
6b7ebe0
fix(media): prevent 401 errors when SW lacks session (SABLE-4Y)
Just-Insane May 27, 2026
bdc96b0
fix(previews): only show link indicator for link-only messages
Just-Insane May 26, 2026
9f7b7ad
fix(previews): only show link indicator for link-only messages (strict)
Just-Insane May 26, 2026
3e46ee6
fix(url-preview): suppress entire preview when og:image fails to load
Just-Insane May 26, 2026
1008bc2
fix(previews): handle missing body in message preview
Just-Insane May 26, 2026
abf68e1
fix(previews): show correct content for edited link-only messages
Just-Insane May 26, 2026
260fd25
fix(presence): restore auto-idle detection to presence system
Just-Insane May 26, 2026
a979d1d
fix(previews): decrypt replacement events for message preview
Just-Insane May 26, 2026
f181def
fix(previews): remove aggressive imageError state causing preview car…
Just-Insane May 27, 2026
adfda85
fix(previews): only hide image portion when og:image fails, not entir…
Just-Insane May 27, 2026
cfeeb28
debug(previews): add logging to diagnose tiny image issue
Just-Insane May 27, 2026
9f24a40
fix(preview): show minimal link fallback instead of hiding entire pre…
Just-Insane May 27, 2026
029dd0b
fix(preview): handle oEmbed fetch failures gracefully
Just-Insane May 27, 2026
16252b7
fix(message): add error handling to prevent messages with links from …
Just-Insane May 27, 2026
2985308
refactor(logging): standardize console.log statements with consistent…
Just-Insane May 31, 2026
136832b
feat(logging): standardize logging and increase Sentry sample rates
Just-Insane May 31, 2026
0c450e2
feat(debug): add missing log categories for search, storage, and subs…
Just-Insane May 26, 2026
5c017a2
docs: clarify PWA reinstall needed for mobile worker cache issues
Just-Insane May 31, 2026
bbf5c1f
docs: add Sentry issues analysis and fixes documentation
Just-Insane May 31, 2026
7c499ef
feat: pronoun pill hover details
7w1 May 25, 2026
23483d8
feat: customizable pronoun pill limits
7w1 May 25, 2026
5835773
fix(call): filter NotAllowedError from autoplay failures in ringtone …
Just-Insane May 30, 2026
9de7b39
fix(profile): limit concurrent fetches (SABLE-4Z)
Just-Insane May 27, 2026
7d18184
fix(pwa): add error handling to visibility/wake handlers
Just-Insane May 26, 2026
0e3ed7a
fix(lint): resolve all typescript-eslint errors
Just-Insane May 26, 2026
11550e8
revert: remove progressive UI loading from cold launch optimization
Just-Insane May 26, 2026
562781c
perf(startup): optimize cold launch with progressive UI and reduced t…
Just-Insane May 26, 2026
51ac07f
fix(timeline): force timeline refresh on app foreground
Just-Insane May 27, 2026
037a644
fix(timeline): add aggressive fallback with pagination retry for disc…
Just-Insane May 26, 2026
4f87899
fix(timeline): detect and handle disconnected timeline fragments from…
Just-Insane May 26, 2026
a28db3e
fix(timeline): improve jump centering and add proactive context loading
Just-Insane May 26, 2026
720302c
fix(timeline): prevent "Failed to load messages" on permalink jumps t…
Just-Insane May 27, 2026
28dfcdf
fix(timeline): prevent premature scroll to bottom on permalink jumps
Just-Insane May 27, 2026
e8ae0d9
fix(timeline): improve permalink jump scroll timing and reliability
Just-Insane May 27, 2026
f66f4c7
fix(timeline): prevent recovery scroll from overriding successful per…
Just-Insane May 27, 2026
4925083
feat(timeline): show loading skeletons during permalink jumps
Just-Insane May 27, 2026
fd8ebae
fix(timeline): paginate up to 600 events to find disconnected bookmar…
Just-Insane May 27, 2026
47bbb09
fix(timeline): prevent duplicate event loads and show loading skeletons
Just-Insane May 27, 2026
8280078
fix(timeline): resolve permalink/jump button failures for bookmarks, …
Just-Insane May 27, 2026
c79868a
fix(timeline): remove premature fallback on permalink jumps
Just-Insane May 27, 2026
b68fdab
fix(timeline): prevent recovery scroll after successful permalink jump
Just-Insane May 27, 2026
65f01c8
fix(timeline): prevent layout shift from slow-loading media
Just-Insane May 27, 2026
8f47f18
feat(search): add exact match and highlight support
Just-Insane May 26, 2026
dda3bb1
fix(search): keep exact match phrases together for highlighting
Just-Insane May 26, 2026
864511c
fix(search): add phrase verification for exact match searches
Just-Insane May 26, 2026
d6b4845
fix(search): implement true timeline interleaving and exact search
Just-Insane May 26, 2026
c004e24
perf(search): move exact match filtering to search API level
Just-Insane May 26, 2026
d119410
fix(search): use stripped search term for in-memory encrypted room se…
Just-Insane May 26, 2026
41a5827
fix(search): pass exactMatch parameter to worker handler
Just-Insane May 26, 2026
03252a0
fix(search): handle worker instantiation and event indexing errors gr…
Just-Insane May 26, 2026
6a86396
fix(search): clear init timeout on ERROR message to show actual error
Just-Insane May 27, 2026
770b69c
fix(search): use consistent post() helper in instrumentIDB
Just-Insane May 27, 2026
8a4ff60
fix(search): resolve worker init failure cascade (SABLE-52, SABLE-54)
Just-Insane May 27, 2026
0624c55
feat(search): add comprehensive diagnostics for worker and IDB failures
Just-Insane May 27, 2026
4a90d08
fix(search): convert Sentry boolean tags to strings
Just-Insane May 27, 2026
73fc3f2
fix(search): use Vite ?worker import for proper compilation
Just-Insane May 27, 2026
996a98c
feat(search): add ungrouped timeline view
Just-Insane May 26, 2026
81843d6
feat(presence): implement cross-device presence sync via account data
Just-Insane May 26, 2026
64421ca
feat(presence): encode DND state in status_msg for cross-user visibility
Just-Insane May 26, 2026
cd20fd9
feat(presence): use [dnd] prefix to preserve custom status messages
Just-Insane May 26, 2026
5041810
fix(presence): add rate limit handling and throttle to prevent 429 er…
Just-Insane May 26, 2026
7926fb9
fix(presence): restore auto-idle detection to presence system
Just-Insane May 26, 2026
1077777
fix(presence): coordinate auto-idle across devices with activity prec…
Just-Insane May 26, 2026
bd6be40
fix(presence): update hero card presence from settings atoms for own …
Just-Insane May 26, 2026
f713974
fix(presence): eliminate 20+ second delay in multi-device idle coordi…
Just-Insane May 26, 2026
23be287
fix(presence): add retry logic for 429 rate limit responses
Just-Insane May 31, 2026
c60fdef
feat(notifications): add 'Show Loud Room Counts' badge toggle
Just-Insane May 28, 2026
0fd106f
feat(notifications): add focus modes for notification filtering
Just-Insane May 28, 2026
b4712e2
fix(notifications): improve PWA push reliability and loud room banners
Just-Insane May 28, 2026
e502273
fix(notifications): prevent push subscription outside user gesture
Just-Insane May 27, 2026
3a91dc1
fix(theme): prevent flash on mobile by deferring theme until settings…
Just-Insane May 30, 2026
fb858d0
fix(mobile): improve keyboard UX - hide Jump button and Following ind…
Just-Insane May 26, 2026
3d1956e
fix(mobile): emit visibility events on iOS bfcache restore and initia…
Just-Insane May 27, 2026
21b8130
fix(timeline): suppress jump button when keyboard closes
Just-Insane May 26, 2026
d32d854
perf(startup): implement code splitting and parallel IndexedDB init
Just-Insane May 26, 2026
adea457
feat(startup): implement 5 additional cold launch optimizations
Just-Insane May 26, 2026
3343a97
chore(startup): add diagnostic logging for splash screen timing
Just-Insane May 27, 2026
dab7db9
feat(previews): improve message preview text for various content types
Just-Insane May 26, 2026
dcd5146
feat(room-list): implement priority-based sorting
Just-Insane May 26, 2026
6076c35
refactor(room-list): improve DM priority hierarchy
Just-Insane May 26, 2026
7ef427d
feat(settings): add default landing screen setting
Just-Insane May 27, 2026
800a4ee
refactor(settings): move Default Landing Screen to Visual Tweaks
Just-Insane May 27, 2026
724a9cf
fix(settings): correct Default Landing Screen dropdown styling
Just-Insane May 27, 2026
c292e41
fix(router): respect Default Landing Screen setting on cold launch
Just-Insane May 27, 2026
67deb28
fix(sync): prevent unnecessary reconnections on app foreground
Just-Insane May 30, 2026
d618f51
fix(sync): use rooms in memory as primary warm cache signal
Just-Insane May 27, 2026
0eff3c6
fix(sync): remove aggressive retry logic causing iOS reconnection cas…
Just-Insane Jun 1, 2026
8ba9c27
debug(notifications): add focus mode filter logging to diagnose bypass
Just-Insane Jun 1, 2026
b3e9508
debug(notifications): add focus mode logging to BackgroundNotifications
Just-Insane Jun 1, 2026
ac85d84
fix(notifications): add focus mode filtering to service worker push n…
Just-Insane Jun 1, 2026
99def99
fix(notifications): define focusMode in SyncNotificationSettingsWithS…
Just-Insane Jun 1, 2026
a284d67
debug(notifications): add comprehensive push payload logging
Just-Insane Jun 1, 2026
20c4f09
fix(notifications): disable focus mode filtering in service worker
Just-Insane Jun 1, 2026
9270d45
debug(notifications): add Sentry logging for push payload structure
Just-Insane Jun 1, 2026
593084f
fix(search): auto-reload on stale worker asset errors
Just-Insane Jun 1, 2026
ac70361
Merge fix/stale-worker-reload into integration
Just-Insane Jun 1, 2026
b0ac550
fix: eliminate N+1 avatar thumbnail API calls
sentry[bot] Jun 2, 2026
a498a2f
Merge pull request #20 from Just-Insane/seer/fix/n1-avatar-thumbnails
Just-Insane Jun 2, 2026
efb6e89
update to resolve Sentry N+1 API calls (search)
Just-Insane Jun 2, 2026
8584f6d
chore(notifications): remove debug logging and add diagnostic logging
Just-Insane Jun 2, 2026
8017afc
fix(notifications): reorder sound playback to match upstream flow
Just-Insane Jun 2, 2026
fd81b02
fix(notifications): remove clearMediaSessionQuickly from playSound
Just-Insane Jun 2, 2026
e1fc754
chore(notifications): remove unused clearMediaSessionQuickly function
Just-Insane Jun 2, 2026
a86f8b0
fix: eliminate N+1 blob URL fetches and limit concurrency
Just-Insane Jun 2, 2026
64367ed
fix(sw): skip audio file validation in assets handler
Just-Insane Jun 2, 2026
8baa12d
fix(settings): exclude notification sound from cross-device sync
Just-Insane Jun 2, 2026
c382a3f
fix: handle NotAllowedError from audio.play()
sentry[bot] Jun 3, 2026
43cae8c
fix(sentry): add observability for mismatch wipes and reliability imp…
Just-Insane Jun 3, 2026
839f8ee
chore: merge fix/service-worker into integration
Just-Insane Jun 3, 2026
23daf1d
chore: merge fix/settings-sync into integration
Just-Insane Jun 3, 2026
90ec4d0
chore: merge feat/notifications into integration
Just-Insane Jun 3, 2026
8284e68
chore: merge fix/badges into integration
Just-Insane Jun 3, 2026
1856e40
chore: merge upstream/dev into integration
Just-Insane Jun 3, 2026
eafbcbb
fix: resolve merge conflict artifacts
Just-Insane Jun 3, 2026
61492c4
Merge branch 'integration' into seer/fix/handle-audio-play-notallowed…
Just-Insane Jun 3, 2026
59818a0
Merge pull request #24 from Just-Insane/seer/fix/handle-audio-play-no…
Just-Insane Jun 3, 2026
1e7cb6e
fix(crypto): resolve race condition in EncryptedContent decryption li…
Just-Insane Jun 3, 2026
ddac149
fix(sw): correct media fetch error handling and ping keep-alive
Just-Insane Jun 4, 2026
85e5b28
fix(media,sync): direct auth fallback for media, debounce reconnectin…
Just-Insane Jun 4, 2026
0887e97
fix(push): restore SW visibility persistence and relay timeout reset
Just-Insane Jun 4, 2026
dc8f1bf
fix(sw,badges): revert SW ping waitUntil and fix folder badge loud fi…
Just-Insane Jun 5, 2026
f22a9a8
fix(sw,sentry): bump decrypt relay timeout to 8s and filter SDK noise
Just-Insane Jun 5, 2026
68a7cf5
fix(crypto,calls): fix OlmMachine use-after-free and call listener leak
Just-Insane Jun 5, 2026
5ecad44
fix(bfcache): pause sync on pagehide so iOS can bfcache the page
Just-Insane Jun 5, 2026
4b2cae1
fix(crypto): classify transient IDB aborts and surface IndexedDBStore…
Just-Insane Jun 7, 2026
c487f74
fix(media): persistent avatar + media caching, fix SW cache thrash
Just-Insane Jun 7, 2026
7d2bde1
fix(unread): phantom badges, loud count scoping, and notification jum…
Just-Insane Jun 7, 2026
35f3f36
chore(prompts): reorganize GitHub prompt files
Just-Insane Jun 7, 2026
bcc9c60
chore(prompts): reorganize GitHub prompt files
Just-Insane Jun 7, 2026
a7a037e
fix(notifications): harden read state and push suppression
Just-Insane Jun 10, 2026
dce6caf
fix(notifications): harden read state and push suppression
Just-Insane Jun 10, 2026
d0b9503
test(config): mock successful config response
Just-Insane Jun 10, 2026
a5c730c
fix: stabilize notifications theme and sync
Just-Insane Jun 11, 2026
4648635
fix: stabilize notifications theme and sync
Just-Insane Jun 11, 2026
2698134
Merge branch 'dev' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
a6f8aa4
Merge branch 'docs/sentry-and-pwa' into tmp/integration-rebuild-no-la…
Just-Insane Jun 11, 2026
865d1b3
Merge branch 'feat/encrypted-search-idb' into tmp/integration-rebuild…
Just-Insane Jun 11, 2026
9d44a53
Merge branch 'feat/mobile' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
70b9f77
Merge branch 'feat/observability' into tmp/integration-rebuild-no-lau…
Just-Insane Jun 11, 2026
46b4f6f
Merge branch 'feat/presence' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
4e0dc70
Merge branch 'feat/pronoun-pills' into tmp/integration-rebuild-no-lau…
Just-Insane Jun 11, 2026
0c9ba6c
Merge branch 'feat/room-message-preview' into tmp/integration-rebuild…
Just-Insane Jun 11, 2026
a1ffe6f
Merge branch 'feat/sliding-sync-prefetch' into tmp/integration-rebuil…
Just-Insane Jun 11, 2026
afac8ba
Merge branch 'feat/tauri-integration' into tmp/integration-rebuild-no…
Just-Insane Jun 11, 2026
a65e3f0
Merge branch 'feat/timeline' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
7ac76fb
Merge branch 'fix/media-auth' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
7450c0b
Merge branch 'fix/misc-improvements' into tmp/integration-rebuild-no-…
Just-Insane Jun 11, 2026
1680e05
Merge branch 'fix/notification-theme-sync-stability' into tmp/integra…
Just-Insane Jun 11, 2026
20bdb93
Merge branch 'fix/read-marker-resilience' into tmp/integration-rebuil…
Just-Insane Jun 11, 2026
59d1689
Merge branch 'fix/startup-perf' into tmp/integration-rebuild-no-launc…
Just-Insane Jun 11, 2026
f847a12
Merge branch 'fix/url-previews' into tmp/integration-rebuild-no-launc…
Just-Insane Jun 11, 2026
46f388f
Merge branch 'personal/config' into tmp/integration-rebuild-no-launchpad
Just-Insane Jun 11, 2026
e7750f1
Merge branch 'refactor/logging' into tmp/integration-rebuild-no-launc…
Just-Insane Jun 11, 2026
e60ba00
fix: clean up combined branch integration
Just-Insane Jun 11, 2026
ebd4679
fix: restore mobile settings and media resilience
Just-Insane Jun 11, 2026
a05d851
fix: tighten mobile safe area and media rendering
Just-Insane Jun 11, 2026
c78ca6c
fix: repair mobile viewport bookmarks and media
Just-Insane Jun 11, 2026
379ed18
fix: normalize encrypted media hashes and splash inset
Just-Insane Jun 11, 2026
23ee8d6
fix: restore mobile viewport and quiet sentry regressions
Just-Insane Jun 11, 2026
fed4895
fix: remove duplicate bottom insets
Just-Insane Jun 11, 2026
fbe3e69
fix: let mobile shell reach viewport bottom
Just-Insane Jun 11, 2026
0a47082
fix: tune mobile bottom padding
Just-Insane Jun 11, 2026
cb8415c
fix(mobile): remove iOS bottom viewport gap
Just-Insane Jun 11, 2026
3cbfc5e
fix(pwa): remove iOS viewport-fit gap
Just-Insane Jun 11, 2026
717e805
chore: add sentry lifecycle telemetry
Just-Insane Jun 12, 2026
6f12c7e
fix: harden service worker notification recovery
Just-Insane Jun 12, 2026
95a50c6
fix: restore group dm avatar members
Just-Insane Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/auth-sso-addaccount.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Preserve addAccount parameter through SSO redirect.
5 changes: 5 additions & 0 deletions .changeset/developer-tools.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add build-time experiment flag injection, typed deterministic bucketing helpers, and a DevTools panel to force-rotate Megolm encryption sessions per room.
5 changes: 5 additions & 0 deletions .changeset/dm-list-group-avatars.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Show group DM composite avatars in the sidebar DM list.
5 changes: 5 additions & 0 deletions .changeset/dm-routing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Route DM rooms to /direct before checking space parents to fix incorrect navigation.
5 changes: 5 additions & 0 deletions .changeset/edit-in-input.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add experimental Discord-style edit-in-input toggle.
5 changes: 5 additions & 0 deletions .changeset/edit-message-keybind.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add Ctrl+Alt+Up/Down keyboard shortcuts to cycle through editable messages.
5 changes: 5 additions & 0 deletions .changeset/emoji-board-focustrap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Skip displayCheck on FocusTrap activation in the emoji board to prevent focus trap errors.
5 changes: 5 additions & 0 deletions .changeset/encrypted-search-idb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add IndexedDB-backed persistent search index for all rooms via a MiniSearch web worker with multi-tab write safety and LRU eviction. Note: indexed message text is stored unencrypted in IndexedDB.
5 changes: 5 additions & 0 deletions .changeset/encrypted-search-memory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add in-memory encrypted message search with room/DM scoping, member picker avatars, and > quick-switcher prefix.
5 changes: 5 additions & 0 deletions .changeset/fix-phantom-unreads.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Fix phantom unread dot badges when server reports zero unreads or when you sent the latest message.
5 changes: 5 additions & 0 deletions .changeset/media-cache.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add persistent Cache API for media storage; skip caching failed media requests.
5 changes: 5 additions & 0 deletions .changeset/message-bookmarks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add message bookmarks (MSC4438). Users can bookmark messages for easy retrieval via a new Bookmarks section in the home sidebar. Gated by an operator `config.json` experiment flag (`experiments.messageBookmarks`) and a per-user experimental settings toggle.
5 changes: 5 additions & 0 deletions .changeset/message-grouping.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add configurable message grouping time threshold setting.
5 changes: 5 additions & 0 deletions .changeset/mobile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Fix iOS sync resume, network latency retries, iPad layout, and connecting banner during fast-path sync. Add missing items to mobile long-press message menu; fix bookmark toggle and iOS keyboard cover.
5 changes: 5 additions & 0 deletions .changeset/notifications.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Fix notification routing, in-app banners for All Messages rooms, and background audio for loud non-DM rooms.
5 changes: 5 additions & 0 deletions .changeset/polls.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add poll duration picker with hour presets and custom date input to PollCreator.
5 changes: 5 additions & 0 deletions .changeset/presence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Fix presence: optimistic badge updates, own-status sync, idle timer on desktop, and REST API fallback.
5 changes: 5 additions & 0 deletions .changeset/room-message-preview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Show topic and last-message preview below room and DM names in the sidebar.
5 changes: 5 additions & 0 deletions .changeset/settings-sync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Exclude enterForNewline from cross-device settings sync.
5 changes: 5 additions & 0 deletions .changeset/sliding-sync-prefetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Prefetch recently-visited rooms on sliding sync complete.
5 changes: 5 additions & 0 deletions .changeset/timeline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: patch
---

Fix timeline scroll recovery, loading spinner position, autopag loop, blank notification room, and ArrowUp-to-edit routing.
5 changes: 5 additions & 0 deletions .changeset/tiptap-composer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
default: minor
---

Add experimental Tiptap-based message composer behind a settings toggle.
152 changes: 152 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
// Codespace configuration — lives on personal/config (not ephemeral dev/feat branches).
// This file intentionally targets browser-based use on iPad.
{
"name": "Sable",
// Using base + node feature instead of javascript-node:<tag> to avoid
// tag availability issues on newer Node versions.
"image": "mcr.microsoft.com/devcontainers/base:bookworm",

"features": {
"ghcr.io/devcontainers/features/node:1": { "version": "24" },
// Keep git up-to-date for SSH signing support (git ≥ 2.34).
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
},

// ── Codespace user secrets ──────────────────────────────────────────────────
// Configure these at: github.com/settings/codespaces > Secrets
//
// GIT_SIGNING_KEY — passphrase-free SSH private key (ed25519 recommended).
// Add the matching public key to your GitHub account as a
// "signing key": github.com/settings/keys
// postCreate.sh will wire up git automatically if set.
//
// SSH_AUTH_KEY — passphrase-free SSH private key (ed25519 recommended).
// Add the matching public key to ~/.ssh/authorized_keys on
// any server you want to SSH into from the Codespace.
//
// GIT_USER_NAME — e.g. "Evie"
// GIT_USER_EMAIL — e.g. "evie@gauthier.id"
// ───────────────────────────────────────────────────────────────────────────

"remoteEnv": {
// Pin the pnpm store to a known path so the volume mount works across rebuilds.
"PNPM_STORE_DIR": "/home/vscode/.pnpm-store"
},

"customizations": {
"vscode": {
"settings": {
// ── Layout — tuned for iPad browser (vscode.dev / Codespaces web) ─────
// Move the activity bar to the top so it isn't hidden by the iOS Safari
// toolbar or the browser's combined title/status bar.
"workbench.activityBar.location": "top",
// Use a menu for the layout control — fewer tiny hit targets on touch.
"workbench.layoutControl.type": "menu",
// Place the panel (Terminal, Problems, Copilot Chat history) on the
// right so it doesn't fight with the keyboard on small screens.
"workbench.panel.defaultLocation": "right",
// Keep editor tabs visible and wrap them so none are hidden off-screen.
"workbench.editor.showTabs": "multiple",
"workbench.editor.wrapTabs": true,
// Disable minimap — saves horizontal space, improves touch accuracy.
"editor.minimap.enabled": false,
"editor.scrollBeyondLastLine": false,
// Larger default fonts for retina/HiDPI iPad displays.
// Fira Code is loaded as a web font by the tonsky.font-fira-code extension.
// This works for the Monaco *editor* (HTML/CSS rendered), but xterm.js uses
// canvas drawing — it does NOT reliably inherit CSS @font-face on iOS Safari.
// MesloLGS NF / Monaco / Meslo are not iOS system fonts either.
// → Editor: Fira Code via extension is fine.
// → Terminal: use Menlo only (ships with iOS since iOS 7, always available).
"editor.fontSize": 14,
"editor.fontFamily": "'MesloLGS NF', 'Fira Code', Menlo, 'Courier New', monospace",
"editor.fontLigatures": true,
"terminal.integrated.fontSize": 14,
"terminal.integrated.fontFamily": "Menlo, 'Courier New', monospace",
"terminal.integrated.fontLigatures.enabled": false,
"terminal.integrated.gpuAcceleration": "off",

// Use zsh (installed in onCreate) as the default terminal shell.
// Explicit profile with -l (login shell) ensures nvm / PATH additions
// from the devcontainer node feature are loaded inside the terminal.
"terminal.integrated.defaultProfile.linux": "zsh",
"terminal.integrated.profiles.linux": {
"zsh": { "path": "/bin/zsh", "args": ["-l"] }
},

// Shell integration MUST be enabled for Copilot Chat to run terminal
// commands. We set it explicitly because Powerlevel10k instant prompt
// can fire before VS Code injects its integration script and suppress
// the markers — postCreate.sh patches .zshrc to guard against this.
"terminal.integrated.shellIntegration.enabled": true,

// ── Git signing ───────────────────────────────────────────────────────
// postCreate.sh configures gpg.format and user.signingkey if
// GIT_SIGNING_KEY secret is present. This just keeps VS Code's git
// UI in sync.
"git.enableCommitSigning": true,
"git.confirmSync": false,

// ── Copilot Chat ──────────────────────────────────────────────────────
// Always show follow-ups and keep chat history accessible.
"github.copilot.chat.followUps": "always",
// Disable auto-discovery of extension-provided MCP servers (e.g. the
// io.github.github/github-mcp-server registered by vscode-pull-request-github).
// Our explicit HTTP server in .vscode/mcp.json is unaffected and handles all
// GitHub MCP calls without requiring a token prompt.
"chat.mcp.discovery.enabled": false
},
"extensions": [
// ── Copilot ───────────────────────────────────────────────────────────
"GitHub.copilot",
"GitHub.copilot-chat",
"GitHub.vscode-pull-request-github",
// ── Font (web font — required for terminal in browser/iPad) ───────────
"tonsky.font-fira-code",
// ── Theme ─────────────────────────────────────────────────────────────
"GitHub.github-vscode-theme",
// ── Formatting & linting ──────────────────────────────────────────────
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"streetsidesoftware.code-spell-checker",
"davidanson.vscode-markdownlint",
// ── Testing ───────────────────────────────────────────────────────────
"vitest.explorer",
// ── TypeScript / React ────────────────────────────────────────────────
"bradlc.vscode-tailwindcss",
"styled-components.vscode-styled-components",
"dsznajder.es7-react-js-snippets",
"formulahendry.auto-rename-tag",
"wix.vscode-import-cost",
// ── Utilities ─────────────────────────────────────────────────────────
"christian-kohler.path-intellisense",
"usernamehw.errorlens",
"gruntfuggly.todo-tree",
"wayou.vscode-todo-highlight",
"webpro.vscode-knip",
"lokalise.i18n-ally",
// ── Infrastructure ────────────────────────────────────────────────────
"hashicorp.terraform",
"zamerick.vscode-caddyfile-syntax"
]
}
},

// ── Port forwarding ─────────────────────────────────────────────────────────
"forwardPorts": [5173, 4173],
"portsAttributes": {
"5173": { "label": "Vite dev", "onAutoForward": "notify" },
"4173": { "label": "Vite preview", "onAutoForward": "notify" }
},

// ── Persistence ─────────────────────────────────────────────────────────────
// Named volume keeps the pnpm content-addressable store across rebuilds.
// Combined with the PNPM_STORE_DIR env var above so postCreate can also
// point pnpm at the same path.
"mounts": ["source=sable-pnpm-store,target=/home/vscode/.pnpm-store,type=volume"],

"postCreateCommand": "bash .devcontainer/postCreate.sh",
"onCreateCommand": "bash .devcontainer/onCreate.sh",
"remoteUser": "vscode"
}
60 changes: 60 additions & 0 deletions .devcontainer/onCreate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/bash
# onCreate.sh — runs during prebuild AND on first Codespace creation.
# No user secrets are available here — keep this purely about dependencies.
# Everything here is cached in the prebuild snapshot.
set -euo pipefail

# ── Ensure the node feature's PATH additions are active ──────────────────────
# The devcontainers node feature installs via nvm; source it so `node`/`pnpm`
# resolve correctly even in non-login, non-interactive shells.
export NVM_DIR="${NVM_DIR:-/usr/local/share/nvm}"
# shellcheck source=/dev/null
[ -s "${NVM_DIR}/nvm.sh" ] && source "${NVM_DIR}/nvm.sh" --no-use
# Activate the version pinned in .nvmrc / package.json engines.
nvm use 24 2>/dev/null || nvm use node

# ── Fix named-volume ownership ────────────────────────────────────────────────
# Docker mounts named volumes as root; fix ownership so the vscode user can write.
if [ -d "${PNPM_STORE_DIR:-}" ]; then
sudo chown -R "$(id -u):$(id -g)" "${PNPM_STORE_DIR}"
fi

# ── pnpm ──────────────────────────────────────────────────────────────────────
# Suppress corepack's interactive download-confirmation prompt in CI/prebuild.
export COREPACK_ENABLE_DOWNLOAD_PROMPT=0

# Enable corepack so the exact pnpm version from package.json#packageManager is used.
corepack enable

# Point pnpm at the persistent named-volume store so packages survive rebuilds.
if [ -n "${PNPM_STORE_DIR:-}" ]; then
pnpm config set store-dir "${PNPM_STORE_DIR}"
fi

pnpm install

# ── Zsh + Oh My Zsh + Powerlevel10k ──────────────────────────────────────────
# Install these during prebuild so the first Codespace start is fast.
# The dotfiles checkout in postCreate.sh will provide .zshrc / .p10k.zsh.

# Install zsh and tmux if not already present (base:bookworm ships zsh, but be safe).
if ! command -v zsh &>/dev/null || ! command -v tmux &>/dev/null; then
sudo apt-get update -qq && sudo apt-get install -y -qq zsh tmux
fi

# Install Oh My Zsh non-interactively (KEEP_ZSHRC=yes preserves any existing .zshrc).
if [ ! -d "${HOME}/.oh-my-zsh" ]; then
KEEP_ZSHRC=yes CHSH=no RUNZSH=no \
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
fi

# Install Powerlevel10k as an OMZ custom theme.
P10K_DIR="${ZSH_CUSTOM:-${HOME}/.oh-my-zsh/custom}/themes/powerlevel10k"
if [ ! -d "${P10K_DIR}" ]; then
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${P10K_DIR}"
fi

# Make zsh the default shell for this user.
sudo chsh -s "$(command -v zsh)" "$(whoami)"

echo "✓ onCreate complete"
Loading
Loading