Alejandro Gutiérrez
e758205eb8
feat(db): runtime presence + message queue + pending_status tables for broker
...
- mesh.presence: live WS connection tracking (memberId, sessionId, pid,
cwd, status, statusSource, statusUpdatedAt, connectedAt, lastPingAt,
disconnectedAt). Persisted so broker can resume after restart.
- mesh.message_queue: E2E-encrypted envelopes awaiting delivery (meshId,
senderMemberId, targetSpec, priority, nonce, ciphertext, expiresAt).
Broker routes ciphertext only — crypto happens client-side.
- mesh.pending_status: first-turn race catcher keyed by (pid, cwd). No
FK to member (member doesn't exist yet when hook fires pre-register).
- Enums: presence_status, presence_status_source, message_priority.
- Relations: mesh→messageQueue, member→presences+sentMessages,
presence→member, messageQueue→mesh+sender.
- Cascade chain: mesh → member → presence + messageQueue (no orphans).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 21:28:24 +01:00
Alejandro Gutiérrez
d3163a5bff
feat(db): mesh data model — meshes, members, invites, audit log
...
- pgSchema "mesh" with 4 tables isolating the peer mesh domain
- Enums: visibility, transport, tier, role
- audit_log is metadata-only (E2E encryption enforced at broker/client)
- Cascade on mesh delete, soft-delete via archivedAt/revokedAt
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 21:19:32 +01:00