회의 — 시작에서 확정까지
회의 하나가 시작해서 확정될 때까지 무엇이 어떤 순서로 일어나는가?
중지 · 재개 · 끊김 · 실패까지 그린다. SA는 경계를, 이 문서는 순서를 진다.
실제로 깨지는 자리는 전부 예외 경로에 있다. 정상 경로 한 줄기만 그리면 만들 때 반드시 구멍이 난다.
1. 회의 하나의 상태
| 상태 | 성격 |
|---|---|
NOT_STARTED · IN_PROGRESS · PAUSED · ENDED | 회의록에 이미 있는 값 넷 |
화자분리중 · 화자확인대기 · 요약생성중 · 검토대기 · 확정 | 아직 컬럼이 없다 |
확정 → 검토대기 | 참여자 전원이 다시 고칠 수 있다. 잠그지 않는다 |
⚠️ 지금 스키마는 ENDED 에서 끝난다 — 종료 후 파이프라인의 상태를 담을 자리가 없다. 마이그레이션 묶음에 같이 넣어야 한다.
2. 회의 중 — 중지와 재개가 세션을 가른다
전사 세션은 회의와 1:1 이 아니다. 중지·재개마다 새 세션이 열리고, 오디오 오브젝트도 세션마다 하나다.
| 규칙 | 내용 |
|---|---|
| 좌표 | 저장 값은 세션 기준이다. 회의 기준 시각은 세션 시작 오프셋을 더해 얻는다 |
| 세션 사이 무음 | 채우지 않는다. 세션 안의 유실만 채운다 |
| 오브젝트 | 세션마다 하나. 키가 회의 식별자로 시작한다 |
| 동시 세션 금지 | 한 회의에 살아 있는 세션은 하나뿐이라고 스키마가 강제한다 |
요약에서 전사로 점프하는 근거 칩이 여기 걸린다 — 저장된 시각이 세션 오프셋이라 세션이 둘 이상이면 같은
04:12가 다른 줄을 가리킨다. 세션 시작 오프셋이 그것을 닫는다.
3. 회의 중에 끊기는 세 가지
셋 다 "회의가 끝난 것"이 아니다. 구분해서 다뤄야 한다.
| 무엇 | 유실 | 왜 |
|---|---|---|
| 진행자의 중지·종료 | 0 | finalize 를 기다린다 |
| 배포·스케일 인 | 0 | SIGTERM 에서 버퍼를 밀어 넣는다 → CA |
| 태스크 크래시 | 최대 109초 | 5 MiB 파트가 PCM 기준 약 109초 |
| RDS 장애 전환 | 60~120초의 세그먼트 쓰기 | 재시도 버퍼로 흡수할 계획 |
⚠️ STT 재연결은 세션 경계가 아니다. Soniox 연결이 끊겨 다시 붙는 것은 전사 세션을 새로 열 이유가 아니다. 지금 그 구분이 문서에 없다.
4. 종료 후 — 화자 분리에서 확정까지
| 규칙 | 내용 |
|---|---|
| 요약은 화자 확정 뒤에 | AI 가 화자를 알고 써야 담당자를 제안하고 결정을 사람에게 귀속할 수 있다 |
| 요약 문장에 이름을 안 박는다 | 근거 세그먼트를 참조하고 화면이 조인한다. 확정 후에도 화자를 고칠 수 있어야 하므로 |
| 매핑 | 겹침이 가장 긴 화자 하나. 동률이면 먼저 시작한 쪽. 안 겹치면 비운다 |
| 세그먼트 불변 | 한 번 쓰면 지우고 다시 만들지 않는다. 파생은 따로 둔다 |
| webhook 은 api 가 받는다 | worker 에는 공개 엔드포인트가 없다 |
| 목표 시간을 두지 않는다 | 배치로 돌려 보고 느리면 그때 개선한다 |
5. 종료 후에 어긋나는 것들
| 예외 | 처리 |
|---|---|
| 화자 분리 실패 | 매핑을 건너뛰고 바로 요약으로. 화면에 배너를 띄우고 화자 없이 진행 |
| 사용자가 영영 안 들어옴 | 미정 — 자동 생성할지 계속 기다릴지 |
| 잡이 두 번 죽음 | 미정 — 갈 곳이 없다. 워치독이 1회 재디스패치하고 끝이다 |
| 분석 실패 | 워치독이 1분마다 스캔해 10분 넘은 것을 1회 재디스패치 |
| 늦은 화자 결과가 사용자 수정을 덮음 | 미정 |
⚠️ 지연 알람에서 화자 확인 대기 를 빼야 한다. 나머지는 시스템이 진행 중인 것이고 이것만 사람을 기다린다. 안 빼면 사용자가 안 들어온 회의가 전부 장애로 잡힌다.