Conclave Docs

Data flow

How a meeting flows — capture → diarize → identify → enrich → view.

There are four flows. All of them keep capture identity-free and all naming consent-gated.

Online (live)

Conclave dispatch → recato-bot joins Meet/Teams/Zoom (structural diarization)
  → Redis transcription_segments → Conclave TEE (persist)
  → VFTE identify(ws) → provisional tags shown live

In-person (live)

browser / OS mic → capture-diart WS (diart live + per-span NEAR Whisper ASR)
  → Redis transcription_segments → Conclave live-view (SSE at /recording/[id])

Post-meeting (authoritative)

Conclave finalize → durable diarize job (Redis diarize_jobs stream)
  → GPU DiariZen worker claims over HTTP, fetches audio by reference (GET /api/diarize/audio/{uid})
  → authoritative {start,end,local_speaker}
  → POST /api/diarize/result → VFTE /v1/identify-spans(ws, audio, spans)
  → reconcile (authoritative overwrite of raw_diarization) → merge_by_timestamp
  → [speaker] text transcript → enrich → KB index/extract

Manual tag

Conclave UI → (a) resolved_speakers overlay (instant, raw stays immutable)
            → (b) VFTE consent-gated feedback
                  (self-tag auto-confirms; else PENDING until the subject confirms)

The segment contract

The split between diarization and identity is exact — segment_dict:

FieldOwner
start, end, local_speakerCapture
voiceprint_id, name, decision, confidenceVFTE

A second meeting recognizes the same voices — the voiceprint count does not grow. The durable job queue (#16) makes finalize crash-safe: restarting Conclave, the worker, or the GPU box loses no jobs (Redis XAUTOCLAIM + dead-letter).

Source: DIARIZATION-MIGRATION.md, FEATURE-SPEC.md §1.

On this page