Repository navigation
feat: The assistant sees each recording's chapters and speakers - EXO-92130 - #433
Merged
bmestrallet merged 1 commit intoOct 27, 2026
Merged
Conversation
Base automatically changed from
feat/EXO-91998-meeting-recordings
to
feature/ai-contribution
October 27, 2026 11:38
…-92130 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bmestrallet
force-pushed
the
feat/EXO-92130-recordings-outline
branch
from
October 27, 2026 14:11
4093eb0 to
a54fffa
Compare
Author
|
Rebased onto |
exo-swf
pushed a commit
that referenced
this pull request
Oct 28, 2026
…-92130 (#433) ## Why EXO-92130: when an assistant lists a meeting's recordings, each recording shows its chapters and its speakers, so that the assistant picks the right recording and chapter before reading any transcript. ## How - `get_meeting_recordings` gives, for the 10 newest recordings it lists, the chapters of the transcript (start in seconds, time, title) and the speakers' names in the order they first speak: the person's full name, the guest's name, or `Speaker N` (`RecordingOutlineReader`, `RecordingChapterModel`, `RecordingOutlineModel`). A recording without them is listed as before (`NON_EMPTY`). - The outline is read from Documents (`DocumentFileService#getTranscriptionChapters`, `#getTranscriptionSegments`, `#getTranscriptionSpeakers`) with the listing user's identity, so Documents' ACL applies. Chapters and speakers are read separately: a failure on one never takes the other away, and a failure on both lists the recording without an outline. - `documents-api` is a `provided` dependency, and the reader is a bean only when Documents is installed (`@ConditionalOnClass` by name, `ObjectProvider` in the tool): without Documents, recordings are listed as today. - Chapters are numbered as Documents numbers them (title and start present, stored order), and the tool description sends the assistant to `get_transcript_excerpt` (documents) with the recording's `documentId` and the chapter's number. ## Tests - `RecordingOutlineReaderTest`, `MeetingRecordingMcpToolTest`: 22 tests, 0 failures, compiled against a `documents-api` carrying #2121 and #2122 built locally; this PR's CI needs a published `documents-api` with both, so it waits for those PRs. - On the shared test server, through an MCP client (Claude Code) connected to the server's MCP endpoint, not the EVA chat: `get_meeting_recordings` on the « Demo ACME recordings » meeting listed its 13 recordings, the ones with chapters showing them. Asked in the EVA chat by a recording's title, EVA hands the question to its Search or Content specialist and never reaches this tool: routing meeting questions is EXO-92131's. The tool description changed: an instance that already imported it shows the new text after one start with `meeds.mcp.tools.forceReimport=true`. Stacked on #429 (EXO-91998, `get_meeting_recordings`). Knowledge: pending — EXO-92130 This change is classified N1 (the user's identity resolution drives the ACL'd Documents reads, recall-first) at 4093eb0 — its approver must be an Archi/Dev who knows it is N1, not an approval on AI review alone; author ≠ approver. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
EXO-92130: when an assistant lists a meeting's recordings, each recording shows its chapters and its speakers, so that the assistant picks the right recording and chapter before reading any transcript.
How
get_meeting_recordingsgives, for the 10 newest recordings it lists, the chapters of the transcript (start in seconds, time, title) and the speakers' names in the order they first speak: the person's full name, the guest's name, orSpeaker N(RecordingOutlineReader,RecordingChapterModel,RecordingOutlineModel). A recording without them is listed as before (NON_EMPTY).DocumentFileService#getTranscriptionChapters,#getTranscriptionSegments,#getTranscriptionSpeakers) with the listing user's identity, so Documents' ACL applies. Chapters and speakers are read separately: a failure on one never takes the other away, and a failure on both lists the recording without an outline.documents-apiis aprovideddependency, and the reader is a bean only when Documents is installed (@ConditionalOnClassby name,ObjectProviderin the tool): without Documents, recordings are listed as today.get_transcript_excerpt(documents) with the recording'sdocumentIdand the chapter's number.Tests
RecordingOutlineReaderTest,MeetingRecordingMcpToolTest: 22 tests, 0 failures, compiled against adocuments-apicarrying #2121 and #2122 built locally; this PR's CI needs a publisheddocuments-apiwith both, so it waits for those PRs.get_meeting_recordingson the « Demo ACME recordings » meeting listed its 13 recordings, the ones with chapters showing them. Asked in the EVA chat by a recording's title, EVA hands the question to its Search or Content specialist and never reaches this tool: routing meeting questions is EXO-92131's.The tool description changed: an instance that already imported it shows the new text after one start with
meeds.mcp.tools.forceReimport=true.Stacked on #429 (EXO-91998,
get_meeting_recordings).Knowledge: pending — EXO-92130
This change is classified N1 (the user's identity resolution drives the ACL'd Documents reads, recall-first) at 4093eb0 — its approver must be an Archi/Dev who knows it is N1, not an approval on AI review alone; author ≠ approver.
🤖 Generated with Claude Code