-
dbcc399ebb
test(settings): tighten 'preserves field when omitted' to actually prove preservation
Jannis Braun
2026-04-28 21:06:05 +02:00
-
8d7ba33c21
feat(settings): expose federatedRegistrationOpen in /settings/instance + /instance/info
Jannis Braun
2026-04-28 21:01:50 +02:00
-
87301bd4d2
test(auth): polish register handler — comment, test isolation, +1 coverage
Jannis Braun
2026-04-28 20:58:16 +02:00
-
0559ea369b
feat(auth): split registration gate by homeInstance + atomic invite redemption
Jannis Braun
2026-04-28 20:51:49 +02:00
-
1b76b8bf2a
test(invites): tighten check-invite assertions to byte-identical responses
Jannis Braun
2026-04-28 20:46:24 +02:00
-
effb36c7f4
feat(auth): GET /api/auth/check-invite with collapsed enumeration shield
Jannis Braun
2026-04-28 20:42:46 +02:00
-
ade5c0d998
test(invites): tighten requireAdmin mock to match real Fastify contract
Jannis Braun
2026-04-28 20:40:24 +02:00
-
0c9865ad90
feat(invites): /api/admin/invites CRUD endpoints
Jannis Braun
2026-04-28 20:36:09 +02:00
-
b775e3bcc9
refactor(invites): typed InviteUnavailableReason + real rollback test
Jannis Braun
2026-04-28 20:32:42 +02:00
-
95737ba405
feat(invites): redeemInvite (atomic txn) + deleteInvite
Jannis Braun
2026-04-28 20:26:57 +02:00
-
b7557aa6fa
test(invites): document empty-updates guard + Path A rollback test
Jannis Braun
2026-04-28 20:24:15 +02:00
-
ee405cba7c
feat(invites): reinstateInvite with revoked-vs-archived branching
Jannis Braun
2026-04-28 20:20:13 +02:00
-
45b2eabed3
refactor(invites): thread tx through resolveCreatorUsername + tighten test assertions
Jannis Braun
2026-04-28 20:17:41 +02:00
-
23338419df
feat(invites): patchInvite + revokeInvite with txn re-derive + foldUsername helper
Jannis Braun
2026-04-28 20:11:47 +02:00
-
ce5d4c10c8
feat(invites): listInvites + listRedemptions with creator/current JOINs
Jannis Braun
2026-04-28 20:04:18 +02:00
-
daf2e958f7
feat(invites): createInvite + getInviteByToken with validation
Jannis Braun
2026-04-28 19:58:03 +02:00
-
967c62d488
feat(invites): inviteStatus derivation + token generator
Jannis Braun
2026-04-28 19:52:16 +02:00
-
e984ce910c
refactor(shared): rename PatchInviteRequest → UpdateInviteRequest + JSDoc
Jannis Braun
2026-04-28 19:50:05 +02:00
-
884b3d9fe9
feat(shared): add invite link types + federatedRegistrationOpen
Jannis Braun
2026-04-28 19:45:25 +02:00
-
22788890f3
feat(db): add invite_links + invite_redemptions tables + federatedRegistrationOpen
Jannis Braun
2026-04-28 18:52:15 +02:00
-
-
76b6621d62
feat(storage): remove upload-size cap, add MB/GB unit toggle
Jannis Braun
2026-04-28 18:37:16 +02:00
-
213fbc943b
docs(sounds): correct self-stream-end suppression note (synchronous, not deferred)
Jannis Braun
2026-04-28 15:03:22 +02:00
-
89b6c80031
docs: cross-reference sounds.md from voice.md + CLAUDE.md subsystem table
Jannis Braun
2026-04-28 14:55:39 +02:00
-
37de0feb31
docs(systems): add sounds.md — inventory + trigger map + mechanism notes
Jannis Braun
2026-04-28 14:54:11 +02:00
-
82ae487765
feat(sounds): add 'Play sound for every message' toggle to Voice settings
Jannis Braun
2026-04-28 14:50:41 +02:00
-
081937a030
fix(sounds): drop singleton AudioManager from SoundController effect deps
Jannis Braun
2026-04-28 14:49:03 +02:00
-
494585adf2
fix(sounds): full SoundController rewrite — every file fires for the right audience
Jannis Braun
2026-04-28 14:43:05 +02:00
-
7c0b67bcc9
feat(sounds): broadcast stream_watch from StreamTile click sites
Jannis Braun
2026-04-28 14:38:39 +02:00
-
62aa87c737
feat(sounds): receive stream_watch pings + evict watchers on participant disconnect
Jannis Braun
2026-04-28 14:35:14 +02:00
-
005559d95e
feat(sounds): add streamWatchers map + recordStreamWatch/clearStreamWatchers/evictWatcher
Jannis Braun
2026-04-28 14:30:45 +02:00
-
a3bd0313a8
feat(sounds): add messageSoundAllChannels preference to voiceStore
Jannis Braun
2026-04-28 14:26:41 +02:00
-
00daa14dcd
test(sounds): use realm-safe Uint8Array check (TextEncoder vs jsdom)
Jannis Braun
2026-04-28 14:25:25 +02:00
-
dacb6df871
test(sounds): tighten encodeStreamWatch round-trip assertion to verify Uint8Array contract
Jannis Braun
2026-04-28 14:23:54 +02:00
-
6a4eac13a3
feat(sounds): add stream_watch data-channel protocol helpers
Jannis Braun
2026-04-28 14:19:41 +02:00
-
40dd2ab52f
feat(sounds): add shouldPlayMessageSound filter (DM + federation-aware mention)
Jannis Braun
2026-04-28 14:13:56 +02:00
-
eede7aeb38
chore(branding): clean up product description strings
Jannis Braun
2026-04-28 11:39:08 +02:00
-
cf72f9d87d
docs(voice): note dormant-by-default preview in two-mode preview section
Jannis Braun
2026-04-27 21:15:06 +02:00
-
4748df8b24
fix(camera): dormant-by-default preview, never trigger camera on tab open
Jannis Braun
2026-04-27 21:13:58 +02:00
-
02e881fd00
docs(voice): document camera device selection subsystem
Jannis Braun
2026-04-27 20:57:13 +02:00
-
2bec5b9d7f
feat(settings): rename Voice tab to 'Voice & Video' to reflect added video section
Jannis Braun
2026-04-27 20:55:42 +02:00
-
93e1478346
feat(voice-panel): mount Video section between Volume and Voice Processing
Jannis Braun
2026-04-27 20:47:19 +02:00
-
47653ab14a
feat(video-section): tab-visibility cleanup and currently-using subline
Jannis Braun
2026-04-27 20:46:04 +02:00
-
37caf30b84
feat(video-section): in-call preview attaches to LK track
Jannis Braun
2026-04-27 20:43:40 +02:00
-
4c6bc9e822
feat(video-section): pre-call preview tile auto-starts getUserMedia
Jannis Braun
2026-04-27 20:41:03 +02:00
-
9b402ed291
feat(video-section): enumerate cameras and render dropdown
Jannis Braun
2026-04-27 20:37:33 +02:00
-
5494460834
feat(video-section): scaffold component with permission-probe state machine
Jannis Braun
2026-04-27 20:33:14 +02:00
-
c9b08cdfd2
feat(devices): sweep stale persisted device ids on mount and devicechange
Jannis Braun
2026-04-27 20:30:54 +02:00
-
786823946a
feat(camera): handle camera-track end with branched toast (unplug vs permission revoke)
Jannis Braun
2026-04-27 20:25:26 +02:00
-
e8534339fb
feat(camera): syncCamera effect hot-swaps publication on cameraDeviceId change
Jannis Braun
2026-04-27 20:19:43 +02:00
-
2e41edbc99
feat(camera): use cameraDeviceId from voiceStore on camera enable
Jannis Braun
2026-04-27 20:17:12 +02:00
-
51ad54fda5
refactor(camera): unify toggle paths through handleCameraAction
Jannis Braun
2026-04-27 20:13:43 +02:00
-
486448607e
feat(voice-store): add pruneStaleDevices to clear stale persisted device ids
Jannis Braun
2026-04-27 20:08:42 +02:00
-
770a77a473
feat(voice-store): add cameraDeviceId persisted field
Jannis Braun
2026-04-27 20:04:45 +02:00
-
8ba644fa44
fix(message-list): pagination flag and scroll restore leak across channel switches
Jannis Braun
2026-04-27 18:11:31 +02:00
-
b6b830568c
fix(message-list): close smooth-scroll-to-bottom race against late-loading media
Jannis Braun
2026-04-27 17:51:55 +02:00
-
de2ef10129
fix(brand): home tile = Element 1 with #000 bg, drop tile lavender
Jannis Braun
2026-04-27 15:39:54 +02:00
-
343fdd6e3d
fix(sidebar): home tile uses brand lavender, not neutral grey
Jannis Braun
2026-04-27 15:32:48 +02:00
-
695f699ddf
fix(sidebar): give home tile visible hover/active feedback
Jannis Braun
2026-04-27 15:27:27 +02:00
-
7a8d0ce0e2
fix(brand): logo.png is bare mark on transparent, 75% padded
Jannis Braun
2026-04-27 15:20:29 +02:00
-
6b71aecc28
fix(brand): logo.png uses full badge, not bare mark
Jannis Braun
2026-04-27 15:06:22 +02:00
-
37797562d7
docs: fix stale Icon Generation block + close spec drift on tray-icon@2x
Jannis Braun
2026-04-27 14:48:05 +02:00
-
8fae1f42c5
docs(desktop): update tray loader table for new 3-branch logic
Jannis Braun
2026-04-27 14:42:37 +02:00
-
eb8ae2874d
chore: delete obsolete icon master, gen-icns.sh, tray-icon@2x
Jannis Braun
2026-04-27 14:40:43 +02:00
-
bd4a7b073a
fix(desktop): rewrite tray loader with explicit per-platform branches
Jannis Braun
2026-04-27 14:38:42 +02:00
-
ff67a792b9
chore(desktop): drop dead cp/gen-icns.sh from dev and prebuild
Jannis Braun
2026-04-27 14:36:35 +02:00
-
5635fd88f1
build(desktop): point electron-builder at new icon outputs
Jannis Braun
2026-04-27 14:34:43 +02:00
-
56e6c72322
chore(brand): regenerate icon set from new SVGs
Jannis Braun
2026-04-27 14:32:05 +02:00
-
81ad0292a5
fix(brand): close Task 3 spec gaps surfaced by code review
Jannis Braun
2026-04-27 14:29:05 +02:00
-
bdfd38bc90
feat(brand): add SVG-driven icon generator (scripts/gen-icons.mjs)
Jannis Braun
2026-04-27 14:20:34 +02:00
-
17dd12fe48
chore: add gen-icons devDeps (sharp, png-to-ico, png2icons)
Jannis Braun
2026-04-27 14:16:15 +02:00
-
f765cfb982
feat(brand): add canonical SVG sources at assets/brand/
Jannis Braun
2026-04-27 14:13:51 +02:00
-
7c21c616b1
docs(desktop): note Windows startMinimized disk fallback when no entry exists
Jannis Braun
2026-04-27 13:22:57 +02:00
-
e7c65ca308
fix(desktop): preserve startMinimized preference across off/on cycle on Windows
Jannis Braun
2026-04-27 13:22:14 +02:00
-
93a91b8235
docs(desktop): clarify recordedExecPath null guard in startup re-apply pseudo-code
Jannis Braun
2026-04-27 13:03:50 +02:00
-
e7413bb504
docs(desktop): rewrite Auto-Launch section to match new architecture
Jannis Braun
2026-04-27 13:01:35 +02:00
-
113efcf583
fix(web): drop optimistic updates and disable inert Start-minimized toggle
Jannis Braun
2026-04-27 12:57:34 +02:00
-
962b669cac
docs(desktop): clarify cross-platform hidden-launch detection
Jannis Braun
2026-04-27 12:54:42 +02:00
-
b0d0ae7be6
fix(desktop): drop unconditional startup re-apply, narrow to AppImage path-refresh
Jannis Braun
2026-04-27 12:52:18 +02:00
-
0d652a72cd
fix(desktop): base set-auto-launch-settings on OS truth, not stale disk
Jannis Braun
2026-04-27 12:49:00 +02:00
-
cd00da07d8
fix(desktop): make get-auto-launch-settings OS-authoritative on Windows
Jannis Braun
2026-04-27 12:46:10 +02:00
-
622b9a6929
fix(desktop): pass enabled/path/args/name to setLoginItemSettings per platform
Jannis Braun
2026-04-27 12:40:44 +02:00
-
495cad717d
refactor(desktop): tighten autoLaunch helpers per code review
Jannis Braun
2026-04-27 12:38:33 +02:00
-
191ba5f248
feat(desktop): add pure auto-launch helpers with tests
Jannis Braun
2026-04-27 12:33:52 +02:00
-
4574a99f2a
chore(desktop): add vitest for pure-helper tests
Jannis Braun
2026-04-27 12:29:38 +02:00
-
4fa2414933
fix(presence): drop status='online' from registration insert
Jannis Braun
2026-04-27 09:35:34 +02:00
-
f17c46c77f
fix(presence): reset stale users.status on boot; drop REST-login online write
Jannis Braun
2026-04-27 00:35:36 +02:00
-
b698ded47d
fix(federation): harden processFriendRequestCreateEvent receiver-side
Jannis Braun
2026-04-27 00:07:52 +02:00
-
8cad964809
chore(test): cover processFriendRequestCreateEvent branches
Jannis Braun
2026-04-26 23:58:45 +02:00
-
8cae4c0b7c
chore(test): migrate federationPeering.test.ts to in-memory drizzle
Jannis Braun
2026-04-26 23:42:08 +02:00
-
ed5a6aa14c
Merge branch 'feat/outbound-peering-gate'
Jannis Braun
2026-04-26 23:30:44 +02:00
-
-
6ba8b9256b
fix(federation): broadcast peering_subscription_changed on terminal state
Jannis Braun
2026-04-26 23:20:31 +02:00
-
e35b44c05f
docs(systems): outbound peering gate documentation across federation, db, api, ws, admin, client-federation
Jannis Braun
2026-04-26 22:59:27 +02:00
-
4fd67fa7dd
fix(web): map peer_pending_local_admin to user-facing message
Jannis Braun
2026-04-26 22:43:52 +02:00
-
cebbd5c859
feat(web): user-facing pending peering subscriptions and outcome notifications
Jannis Braun
2026-04-26 22:42:53 +02:00
-
eddf2254cc
feat(web): render outbound peering requests with subscriber list in admin panel
Jannis Braun
2026-04-26 22:35:16 +02:00
-
51da827089
feat(web): API client methods for peering subscriptions and notifications
Jannis Braun
2026-04-26 22:32:36 +02:00
-
e82ccbde62
fix(federation): tighten peering-notifications GET response to spec shape
Jannis Braun
2026-04-26 22:27:43 +02:00
-
4064d822cd
fix(janitor): restore inbound /peer/denied expiry notification
Jannis Braun
2026-04-26 22:22:34 +02:00
-
86ac54b913
feat(federation): peering-notifications endpoints + janitor expiry fanout
Jannis Braun
2026-04-26 22:18:44 +02:00
-
45ab0ea2c8
feat(federation): peering-subscriptions GET and DELETE endpoints
Jannis Braun
2026-04-26 22:09:41 +02:00