Files
talktime/features/PROJ-9-synapse-integration-health-check.md
T
patrickandClaude Sonnet 5 b1d662fa5b feat: rename CLAUDE.md to TalkTime, retro-document features, add PROJ-11 chat spec
- CLAUDE.md header/description now match actual project (TalkTime), not starter-kit template
- Retro-documented already-built MVP features as PROJ-1..PROJ-10 in features/INDEX.md
- Corrected PROJ-9: Matrix User Provisioning, room sync and reconciliation were already implemented, not just health-check
- Added PROJ-11 requirements spec for basic chat (Matrix Client-Server API, team scope, text-only MVP)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67
2026-09-11 17:18:22 +02:00

2.6 KiB

PROJ-9: Synapse-Integration (Health Check, User Provisioning, Raum-Sync)

Status: Deployed Created: 2026-09-11 (retro-dokumentiert, gebaut in 5e6ee2c; Korrektur 2026-09-11 — Provisioning/Sync war bereits gebaut, initiale Retro-Doku war unvollständig)

Summary

Vollständige Synapse-Anbindung: Health-Check, automatische Matrix-User-Provisionierung bei Einladungsannahme, automatische Team-Raum-Anlage/-Zuordnung, Mitgliederstatus-Sync über Outbox-Queue mit Retry+Backoff, periodische Reconciliation. Admin-Token bleibt serverseitig (PRD-Constraint).

Built

  • backend/src/services/synapse.ts — Synapse Admin/Client-API-Wrapper (healthCheck, createUser, getUser, deactivateUser, reactivateUser, createRoom, addUserToRoom, removeUserFromRoom)
  • backend/src/services/sync-worker.ts — Outbox-Queue (sync_jobs-Tabelle) mit vier Jobtypen (provision_matrix_user, create_team_room, join_team_room, leave_team_room), exponentiellem Backoff (1min→30min, max. 5 Versuche), 30s-Poll-Worker, runReconciliation() alle 10min (vergleicht lokalen Mitgliederstatus gegen Synapse, loggt Abweichungen in Audit-Log statt automatisch zu korrigieren)
  • backend/src/routes/synapse.ts — GET /api/synapse/health
  • Trigger-Stellen: backend/src/routes/invitations.ts (Provisionierung bei Einladungsannahme), backend/src/routes/teams.ts (Raum-Anlage + Join/Leave bei Team-Zuordnung)
  • Schema: members.matrixUserId, chat_rooms (matrixRoomId, scope, department/team-Zuordnung), sync_jobs (status/attempts/lastError)

Acceptance Criteria

  • Backend kann Synapse-Erreichbarkeit prüfen
  • Synapse Admin Token verlässt Backend nie
  • Neues Mitglied bekommt bei Einladungsannahme automatisch Matrix-Account (Localpart-Kollision wird durch Suffix aufgelöst)
  • Neue Mannschaft bekommt automatisch Matrix-Raum
  • Mitglied wird bei Team-Zuordnung automatisch in Raum aufgenommen/entfernt
  • Fehlgeschlagene Sync-Jobs werden mit Backoff wiederholt (max. 5 Versuche, dann failed)
  • Reconciliation-Job erkennt Abweichungen zwischen TalkTime- und Synapse-Status

Open Items

  • Grundlegender Chat (eigene Oberfläche via Matrix Client-Server API, Nachrichten senden/lesen) — noch nicht gebaut, siehe PROJ-11
  • Manueller Resync-Trigger in der UI bei erkannten Reconciliation-Abweichungen (PRD P1) fehlt noch
  • Abteilungs-weite Räume (chat_rooms.scope) — Schema unterstützt es, Provisionierungs-Logik existiert bisher nur für team-Scope

Notes

Korrigierte Retro-Spec. Ursprüngliche Version dieser Datei unterschätzte den Baufortschritt — Provisioning/Raum-Sync/Reconciliation liefen bereits produktiv.