This website requires JavaScript.
172398171a
docs(systems): finish detach consolidation — federation.md §6.3b, database.md, stale comments (detach spec §8)
Jannis Braun
2026-07-02 19:15:24 +02:00
9e917d5117
feat(federation): account-settings notice for detached accounts (detach spec §4.7)
Jannis Braun
2026-07-02 19:10:35 +02:00
5ad8aefaff
feat(federation): reset-cleanup panel — informational detach copy, real server-side Dismiss, Keep removed (detach spec §4.6)
Jannis Braun
2026-07-02 19:06:21 +02:00
42ad5e141d
feat(federation): server-side acknowledge for reset events (acknowledged_at + admin endpoint) (detach spec §4.6)
Jannis Braun
2026-07-02 18:59:33 +02:00
7e1e32de69
feat(federation): detached accounts get local profile+password self-service; self-view flag (detach spec §4.4, §4.7)
Jannis Braun
2026-07-02 18:54:37 +02:00
ea66ec5dbd
test(federation): pin registration 409 + suffixed stub creation against detached accounts (detach spec §4.3.5)
Jannis Braun
2026-07-02 18:47:29 +02:00
68be2e26b1
feat(federation): S2S surfaces exclude detached accounts — tier-2, profile_update, identity delete (detach spec §4.3)
Jannis Braun
2026-07-02 18:39:54 +02:00
d37919b5a0
feat(federation): reset heal detaches real accounts instead of freeze+rename (detach spec §4.2)
Jannis Braun
2026-07-02 18:33:47 +02:00
79c1138813
feat(federation): detached accounts keep local-password login; self-heal permanently disabled (detach spec §4.1)
Jannis Braun
2026-07-02 18:28:55 +02:00
1629f8fbe1
fix(dm): enforce read-only guard on DM reactions (WS) + harden purge/ownership tests
Jannis Braun
2026-07-02 16:45:44 +02:00
e4e83eb3fb
docs(dm): document Deleted-User DM tombstone semantics + heal broadcast
Jannis Braun
2026-07-02 16:26:30 +02:00
3da18bc87c
test(dm): cover zero-other and mixed-others branches of isDeletedPartnerDm
Jannis Braun
2026-07-02 16:22:44 +02:00
ae07ae66e4
feat(dm): read-only composer notice for Deleted-User 1-on-1 threads (C2)
Jannis Braun
2026-07-02 16:20:38 +02:00
2a0574ee6c
test(dm): lock Deleted-User name resolution + updateUserEverywhere DM patch (C1)
Jannis Braun
2026-07-02 16:02:44 +02:00
a380927e72
test(dm): assert JOIN users guard drops orphan author in DM membership backfill (S5 review)
Jannis Braun
2026-07-02 16:00:19 +02:00
3470bb1914
fix(dm): idempotent backfill restores pre-existing broken Deleted-User 1-on-1 threads (S5)
Jannis Braun
2026-07-02 15:54:46 +02:00
d03f8e4f77
fix(federation): heal path broadcasts user_updated so tombstoned-stub DMs update live (S4)
Jannis Braun
2026-07-02 15:50:08 +02:00
3ebdd048bd
feat(dm): read-only guard blocks message create/edit/delete in a Deleted-User 1-on-1 (S3)
Jannis Braun
2026-07-02 15:43:07 +02:00
12d8256f65
fix(dm): purge DMs with zero live members (exclude-uid, scoped) so dead-both threads clean up (S2)
Jannis Braun
2026-07-02 15:37:33 +02:00
e5a1cc9506
fix(dm): keep 1-on-1 dm_members on tombstone, drop only group membership (S1)
Jannis Braun
2026-07-02 15:32:04 +02:00
411e9baaa9
docs(readme): drop redundant ELv2→AGPL relicensing note
Jannis Braun
2026-07-02 13:40:10 +02:00
6926bdb8f8
fix(federation): /peer/initiate handles needs_attention/awaiting_approval/rejected rows instead of 500ing
Jannis Braun
2026-07-02 13:29:46 +02:00
83ebc06759
docs(federation): document honest handshake contract; mark BUG-0/1/2/4/5 resolved
Jannis Braun
2026-07-02 13:14:48 +02:00
cd28c0336c
refactor(federation): store verified epoch as peer baseline; drop redundant assertion
Jannis Braun
2026-07-02 13:07:35 +02:00
ad7c86e89e
fix(web): Re-peer surfaces incomplete outcome instead of false success (BUG-2)
Jannis Braun
2026-07-02 13:03:03 +02:00
c6f0e6f25d
fix(federation): initiator handles 409 + verifies handshake before activating (BUG-1b/BUG-2)
Jannis Braun
2026-07-02 12:56:26 +02:00
edcb4cb72a
fix(federation): /peer/accept returns honest 409 instead of false 200 for existing peer (BUG-1a)
Jannis Braun
2026-07-02 12:40:16 +02:00
442811e600
test(federation): reproduce handshake desync BUG-1/BUG-2 over real handshake (RED) (BUG-0)
Jannis Braun
2026-07-02 12:32:09 +02:00
085670cff3
fix(federation): handshake sourceOrigin honors PUBLIC_ORIGIN (align with S2S auth origin)
Jannis Braun
2026-07-02 12:31:02 +02:00
aa7bf5b532
test(federation): real-handshake two-instance harness helpers (BUG-0)
Jannis Braun
2026-07-02 11:51:54 +02:00
df1e457971
feat(federation): add needs_attention_reason 'repeer_incomplete' (BUG-2 prep)
Jannis Braun
2026-07-02 11:46:10 +02:00
fd0ff4d199
fix(federation): clear federation_home_orphaned on tombstone (BUG-5)
Jannis Braun
2026-07-02 11:42:48 +02:00
6de14b281b
fix(federation): friend-add returns graceful 503 instead of 500 on peer lookup failure (BUG-3)
Jannis Braun
2026-07-02 11:23:08 +02:00
43d1dad1d7
fix(federation): carry error body on HttpError so Reset-cleanup owns-spaces copy reaches the UI
Jannis Braun
2026-07-02 02:19:13 +02:00
493deefc64
docs(federation): document instance-epoch self-healing (Phase 2)
Jannis Braun
2026-07-02 02:09:19 +02:00
be7749b83f
fix(federation): scope Reset-cleanup Remove owns-spaces detection to ownedSpaces payload
Jannis Braun
2026-07-02 02:01:50 +02:00
946255c4a1
feat(federation): admin Reset cleanup UI (Re-peer + Keep/Remove)
Jannis Braun
2026-07-02 01:57:30 +02:00
9d00cf024a
feat(federation): client handler for federation_peer_reset_detected
Jannis Braun
2026-07-02 01:51:18 +02:00
290cd606c0
feat(federation): GET /reset-events admin endpoint + types
Jannis Braun
2026-07-02 01:47:58 +02:00
ee52ff0c7b
feat(federation): expose needsAttentionReason on peer API
Jannis Braun
2026-07-02 01:43:12 +02:00
732d146396
feat(federation): quarantine real accounts on reset heal (freeze + free-handle)
Jannis Braun
2026-07-02 01:39:26 +02:00
e0a0d92fe7
feat(federation): login self-heal epoch guard (fetchPeerEpoch, fail-closed)
Jannis Braun
2026-07-02 01:33:42 +02:00
9b945ba5b7
feat(federation): freeze login for reset-orphaned federated accounts
Jannis Braun
2026-07-02 01:27:47 +02:00
954ff6e3dd
Merge branch 'feat/federation-instance-epoch': federation instance-epoch split-brain self-healing (Phase 1)
Jannis Braun
2026-07-02 00:57:13 +02:00
d8fec00905
feat(federation): detect peer reset on needs_attention peers (§4.1)
Jannis Braun
2026-07-02 00:34:33 +02:00
769ed64314
docs(federation): document instance-epoch self-healing (Phase 1)
Jannis Braun
2026-07-02 00:20:43 +02:00
7d8c9c9d8d
feat(federation): peer_reset_pending guard during limbo window
Jannis Braun
2026-07-01 22:32:40 +02:00
7ef1ded116
test(federation): lock reset admissibility for peer_reset_detected peers
Jannis Braun
2026-07-01 22:22:43 +02:00
8ae8dcfd86
feat(federation): heal on re-peer with false-positive guard
Jannis Braun
2026-07-01 22:17:14 +02:00
45e1c88bdc
feat(federation): reset detection (markPeerReset) via handshake + probe
Jannis Braun
2026-07-01 22:09:43 +02:00
3b1a0b64a3
feat(federation): relay envelope populates peer epoch baseline
Jannis Braun
2026-07-01 21:58:03 +02:00
8f60e92f94
feat(federation): deterministic baseline epoch-refresh worker
Jannis Braun
2026-07-01 21:49:18 +02:00
bf74aa8bb2
feat(federation): signed /api/federation/epoch endpoint + caller
Jannis Braun
2026-07-01 21:43:02 +02:00
538519fcd2
feat(federation): exchange + store peer epoch on handshake
Jannis Braun
2026-07-01 21:35:20 +02:00
7acf48d0a4
feat(federation): shared epoch types + getInstanceId()
Jannis Braun
2026-07-01 21:19:25 +02:00
d8f2b1a9c7
feat(federation): instance epoch schema + minting
Jannis Braun
2026-07-01 21:11:34 +02:00
807b2f6234
refactor(web): fold final-review polish into join modal feature
Jannis Braun
2026-07-01 19:06:10 +02:00
cf9bcfbf1a
docs(spaces): document discovery-first Join a Space modal
Jannis Braun
2026-07-01 18:59:48 +02:00
309abd86e2
feat(web): discovery-first Join a Space modal
Jannis Braun
2026-07-01 18:56:56 +02:00
fc8df54cb0
feat(web): compact ExploreSpacePreviewCard for join modal
Jannis Braun
2026-07-01 18:51:31 +02:00
e840dcbe40
refactor(web): SpaceCard uses shared useSpaceJoin hook
Jannis Braun
2026-07-01 18:47:16 +02:00
6c66af7a88
feat(web): add shared useSpaceJoin hook over exploreStore
Jannis Braun
2026-07-01 18:42:45 +02:00
215750cb7a
fix(install): harden prereq/DNS paths against set -euo pipefail aborts
Jannis Braun
2026-07-01 18:35:20 +02:00
737402b5d2
docs(deployment): note install.sh commit injection + HTTPS reachability check
Jannis Braun
2026-07-01 18:14:38 +02:00
20ba7b42f9
feat(install): production-hardening for public self-hosting
Jannis Braun
2026-07-01 18:14:38 +02:00
f481e1fe9e
license: relicense to AGPL-3.0-only with commercial dual-license
Jannis Braun
2026-07-01 16:38:22 +02:00
16d75f2806
docs(readme): drop private-test-instance mention from status
Jannis Braun
2026-07-01 13:25:52 +02:00
3be8b36064
docs(readme): finalize for 1.0.0 public launch
Jannis Braun
2026-07-01 13:22:37 +02:00
ac20f22c72
fix(voice): consistent state on DM-call ↔ space-channel transitions
Jannis Braun
2026-07-01 02:08:53 +02:00
7a3d892c6e
deploy: never rsync over the host-owned Caddyfile
Jannis Braun
2026-07-01 01:34:16 +02:00
d2e9b92e80
docs(readme): correct project-status + bans wording
Jannis Braun
2026-07-01 01:28:28 +02:00
bdf957514c
docs: accurate read-state wording + mobile/PWA and app-store-roadmap mention
Jannis Braun
2026-07-01 01:15:33 +02:00
3f5b2920a4
docs: fix screenshot caption overclaiming read states
Jannis Braun
2026-07-01 01:11:47 +02:00
cb16c8feac
docs: add screenshot showcase to README + gallery
Jannis Braun
2026-07-01 01:06:08 +02:00
cfe4fd80c4
fix(icons): render small favicons from 3D raster to kill white tab-border
Jannis Braun
2026-07-01 00:58:51 +02:00
0eb65b6608
fix(uploads): keep HEVC inline playback for Safari/WebKit
Jannis Braun
2026-06-30 17:41:42 +02:00
209aef7e9d
fix(uploads): graceful fallback for browser-unplayable video (HEVC .mov)
Jannis Braun
2026-06-30 17:38:11 +02:00
e84daf57aa
fix(voice): push voice presence to user on mid-session space join
Jannis Braun
2026-06-30 17:00:37 +02:00
f807524103
docs: public-release prep polish (README, CLA, CONTRIBUTING, prep script/spec)
Jannis Braun
2026-06-26 14:25:11 +02:00
77ceda148a
docs(federation): document demand-driven peer recovery + recheck endpoint
Jannis Braun
2026-06-26 14:03:27 +02:00
e372a7a571
feat(web): Check now button to manually recover unreachable federation peers
Jannis Braun
2026-06-26 13:58:38 +02:00
4ad83a7cc1
feat(federation): POST /peers/:id/recheck — manual reachability probe
Jannis Braun
2026-06-26 13:53:57 +02:00
603973a02e
feat(federation): demand-driven recovery tick; health-check tick keeps rotation only
Jannis Braun
2026-06-26 13:49:40 +02:00
a6c7584e0c
feat(federation): lean federationRecovery module (probe + markPeerRecovered)
Jannis Braun
2026-06-26 13:44:37 +02:00
bafc7fbb47
feat(federation): add last_probe_at/probe_attempts columns for peer recovery pacing
Jannis Braun
2026-06-26 13:41:29 +02:00
00a2876e96
fix(channels): newly created channel sometimes hidden until space reopened
Jannis Braun
2026-06-25 12:34:11 +02:00
a4af708a41
fix(web): uniform category spacing in channel sidebar
Jannis Braun
2026-06-25 12:21:37 +02:00
8dd76f3435
Public-release prep: ELv2 license, README/CLA/NOTICE, SSRF safeFetch, identifier genericization, export tooling
Jannis Braun
2026-06-22 16:04:03 +02:00
c0a6477059
fix(install): post-install message reflects first-user-becomes-admin (no seeded admin/admin123)
Jannis Braun
2026-06-20 03:14:16 +02:00
a91702a255
fix(backup): manual snapshot CLI must open its own DB handle (getRawDb undefined in standalone process)
Jannis Braun
2026-06-20 02:58:46 +02:00
baf3a7d047
merge: deploy pipeline launch hardening (admin bootstrap, DB backups, image pinning, reproducible builds)
Jannis Braun
2026-06-20 02:52:22 +02:00
5107f63e60
harden(security): chmod seed-admin-rotated.txt to 0600 (guarantee perms on overwrite)
Jannis Braun
2026-06-20 02:51:13 +02:00
1c23c1fb60
docs(deploy): deployment.md (backup/restore, admin bootstrap, pinning) + env + CLAUDE.md
Jannis Braun
2026-06-20 02:45:33 +02:00
239578edc9
build(deploy): drop non-reproducible lockfile fallback; require frozen install
Jannis Braun
2026-06-20 02:41:26 +02:00
63732b9efb
build: pin Docker image tags for reproducible builds
Jannis Braun
2026-06-20 02:40:09 +02:00
a4333c4c23
fix(restore): robust empty-dir listing + injection-proof container swap
Jannis Braun
2026-06-20 02:38:07 +02:00
70da1ede64
feat(backup): manual-snapshot CLI + host-side backup.sh and restore.sh (safe restore)
Jannis Braun
2026-06-20 02:34:30 +02:00
9407e48293
feat(backup): scheduled snapshot worker wired into server lifecycle
Jannis Braun
2026-06-20 02:32:17 +02:00
154feb2dd6
feat(backup): pre-migration snapshot gated on pending migrations; checkpoint WAL on shutdown
Jannis Braun
2026-06-20 02:26:51 +02:00
48bcd69031
feat(backup): VACUUM INTO snapshot core (create/list/prune) + config + off-box hook
Jannis Braun
2026-06-20 02:21:22 +02:00