Files
talktime/features
patrickandClaude Sonnet 5 7fa658b4ff feat(PROJ-11): build team chat via direct browser-to-Synapse connection
Frontend: matrix-js-sdk client per opened team, /sync against Synapse
directly (no chat traffic proxied through the backend), timeline with
day-grouping and read receipts, history backfill, lazy-loaded chat tab
in TeamsPage's team detail view (keeps matrix-js-sdk out of the initial
bundle).

Backend: POST /api/chat/token mints/caches a short-lived per-member
Matrix access token via Synapse's admin puppet-login (1h TTL, in-memory
cache with 5min pre-expiry refresh, concurrent-request dedup, audited
on real mints only); GET /api/chat/room resolves a team's Matrix room.
Cached tokens are invalidated immediately on member suspend/leave.

Fixes found while wiring this up:
- createRoom() now explicitly sets history_visibility=shared (PROJ-9)
  instead of relying on the private_chat preset's implicit default.
- POST /api/organizations never provisioned a Matrix account for the
  org creator (only the invitation-accept path did) — they'd have
  seen "Chat wird eingerichtet" forever. Now enqueues the same
  provision_matrix_user job invitations use.

Open: SYNAPSE_PUBLIC_BASE_URL needs documenting in backend/.env.example
(blocked by local permission rules on that file — added manually on
the talkhub test host instead), per-tile unread counts need an
app-level Matrix client instead of one per opened team, and Synapse
needs TLS + public reachability before this works outside a LAN.

Verified end-to-end on the talkhub/matrix test LXCs: registered a
throwaway account, created org → department → season → team, joined
the team, minted a token, sent a message directly to Synapse, read it
back from room history.

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

Feature Specifications

Dieser Ordner enthält detaillierte Feature Specs vom Requirements Engineer.

Naming Convention

PROJ-X-feature-name.md

Beispiele:

  • PROJ-1-user-authentication.md
  • PROJ-2-kanban-board.md
  • PROJ-3-file-attachments.md

Was gehört in eine Feature Spec?

1. User Stories

Beschreibe, was der User tun möchte:

Als [User-Typ] möchte ich [Aktion] um [Ziel zu erreichen]

2. Acceptance Criteria

Konkrete, testbare Kriterien:

- [ ] User kann Email + Passwort eingeben
- [ ] Passwort muss mindestens 8 Zeichen lang sein
- [ ] Nach Registration wird User automatisch eingeloggt

3. Edge Cases

Was passiert bei unerwarteten Situationen:

- Was passiert bei doppelter Email?
- Was passiert bei Netzwerkfehler?
- Was passiert bei gleichzeitigen Edits?

4. Tech Design (vom Solution Architect)

## Database Schema
CREATE TABLE tasks (...);

## Component Architecture
ProjectDashboard
├── ProjectList
│   └── ProjectCard

5. QA Test Results (vom QA Engineer)

Am Ende des Feature-Dokuments fügt QA die Test-Ergebnisse hinzu:

---

## QA Test Results

**Tested:** 2026-01-12
**App URL:** http://localhost:3000

### Acceptance Criteria Status
- [x] AC-1: User kann Email + Passwort eingeben
- [x] AC-2: Passwort mindestens 8 Zeichen
- [ ] ❌ BUG: Doppelte Email wird nicht abgelehnt

### Bugs Found
**BUG-1: Doppelte Email-Registrierung**
- **Severity:** High
- **Steps to Reproduce:** 1. Register with email, 2. Try again with same email
- **Expected:** Error message
- **Actual:** Silent failure

6. Deployment Status (vom DevOps Engineer)

---

## Deployment

**Status:** ✅ Deployed
**Deployed:** 2026-01-13
**Production URL:** https://your-domain.example
**Git Tag:** v1.0.0-PROJ-1

Workflow

  1. Requirements Engineer erstellt Feature Spec
  2. User reviewed Spec und gibt Feedback
  3. Solution Architect fügt Tech-Design hinzu
  4. User approved finales Design
  5. Frontend/Backend Devs implementieren (dokumentiert via Git Commits)
  6. QA Engineer testet und fügt Test-Ergebnisse zum Feature-Dokument hinzu
  7. DevOps deployed und fügt Deployment-Status zum Feature-Dokument hinzu

Status-Tracking

Feature-Status wird direkt im Feature-Dokument getrackt:

# PROJ-1: Feature Name

**Status:** 🔵 Planned | 🟡 In Progress | ✅ Deployed
**Created:** 2026-01-12
**Last Updated:** 2026-01-12

Status-Bedeutung:

  • 🔵 Planned – Requirements sind geschrieben, ready for development
  • 🟡 In Progress – Wird gerade gebaut
  • ✅ Deployed – Live in Production

Git als Single Source of Truth:

  • Alle Implementierungs-Details sind in Git Commits
  • git log --grep="PROJ-1" zeigt alle Änderungen für dieses Feature
  • Keine separate FEATURE_CHANGELOG.md nötig!