Core — Live Talking Points
POST /meetings/:id/talking-points ML write-back for provisional draft points, TalkingPointEvent broadcast, and PUT /meetings/:id/synthesis final replacement.
Core — Live Talking Points
Owner: Core Engineer Domain: core Complexity: S Prerequisite: Milestone 04 merged
When this slice is complete, Core accepts ML's live talking-point write-back (POST /meetings/{id}/talking-points), stores each one with is_final: false, and exposes them via GET /meetings/{id}/talking-points. Stopping the recording runs the shared finalization path; the synthesis write-back (PUT /meetings/{id}/synthesis) atomically replaces every draft with the final, is_final: true set — drafts never survive alongside final points, and their ids are disjoint. Private notes are untouched by either path.
Required Capabilities
-
POST /meetings/{id}/talking-points(service auth) creates a talking point withis_final: false. -
GET /meetings/{id}/talking-pointsreturns every talking point for the meeting, live drafts included. - While recording is active, no talking point returned is
is_final: true, and the meeting's synthesis carries no final talking points yet. -
PUT /meetings/{id}/synthesisatomically replaces the entire talking-point set with the final,is_final: truerebuild output — draft ids do not survive into the final set. - After finalization,
GET /meetings/{id}/talking-pointsandGET /meetings/{id}/synthesisagree on the final talking-point content. - Neither the draft write-back nor the final synthesis replacement modifies
notes.
Dependencies
- Milestone 04 (
live-transcript-to-final-rebuild) must be merged — specifically the live recording WebSocket session and the shared finalization pipeline thatPUT /synthesisruns through on stop.
Domain Notes
Draft and final talking points are the same resource at different points in its lifecycle, not two parallel tables — a draft is a row with is_final: false created by the live write-back, and finalization is a full atomic replacement of that meeting's talking-point set, not a merge or patch. This is why the finalization test can assert the draft ids are entirely disjoint from the final ids: replacement, not promotion.
Test Cases
Test cases map to tests/bets/meeting-recording/test_milestone_07_live_talking_points.py. Run via ./dev test bet meeting-recording.
| Test | Location | Assertion |
|---|---|---|
test_draft_talking_points_appear_during_live_transcript | test_milestone_07 | While a live transcript streams, GET /meetings/{id}/talking-points returns at least one draft with non-empty content, and the meeting has live transcript segments backing it. |
test_draft_talking_points_are_marked_provisional | test_milestone_07 | Every live talking point carries is_final: false; the meeting's synthesis (if present) has no final talking points while recording is active. |
test_draft_talking_points_update_with_more_context | test_milestone_07 | After more transcript context streams, the draft content or id set changes from its earlier snapshot, every draft remains is_final: false, and no two drafts share identical content. |
test_finalization_replaces_drafts_with_final_talking_points | test_milestone_07 | After stop and finalization, no is_final: false talking points remain, all returned points are is_final: true, none of the final ids intersect the pre-stop draft ids, and GET /synthesis agrees with GET /talking-points on content. |
test_private_notes_remain_unchanged_by_talking_points | test_milestone_07 | notes set via PATCH /meetings/{id} before recording remain identical after draft talking points appear and after the final synthesis replaces them. |
Completion Checklist
- Code merged and deployed
- Bet progress tests pass (
./dev test bet meeting-recording) - Permanent service tests implemented per testing strategy
- Code review completed
- API review completed (
POST /meetings/{id}/talking-pointswrite-back) - Testing review completed
- System documentation updated (as applicable)
App — Live Talking Points UI
Draft talking points panel in the recording view, provisional label, and replacement with final talking points on SynthesisUpdatedEvent.
ML — Live Talking Points
Batched insight pipeline producing draft talking points every N transcript segments, written back through Core, plus the final talking points in post-meeting synthesis.