Skip to content

feat(meeting): nest recording/transcript into get_past_meeting - #106

Merged
emsearcy merged 1 commit into
mainfrom
lfxv2-2827-nest-recording-transcript
Jul 24, 2026
Merged

feat(meeting): nest recording/transcript into get_past_meeting#106
emsearcy merged 1 commit into
mainfrom
lfxv2-2827-nest-recording-transcript

Conversation

@niravpatel27

Copy link
Copy Markdown
Contributor

Fetch the base past meeting via the meeting-service GetItxPastMeeting Goa client and nest recording/transcript sub-objects (query-service, parent-ref scoped), gracefully omitting them when absent or inaccessible.

Fetch the base past meeting via the meeting-service GetItxPastMeeting Goa
client and nest recording/transcript sub-objects (query-service, parent-ref
scoped), gracefully omitting them when absent or inaccessible.

Signed-off-by: Nirav Patel <npatel@linuxfoundation.org>
Copilot AI review requested due to automatic review settings July 24, 2026 20:01

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

Comment thread go.mod

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds enriched past-meeting retrieval using the meeting service plus query-service recording and transcript data.

Changes:

  • Adds the meeting-service client and dependency.
  • Returns nested meeting, recording, and transcript objects.
  • Treats unavailable child resources as optional.

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 1 comment.

File Description
internal/tools/meeting.go Implements nested past-meeting retrieval.
internal/lfxv2/client.go Initializes the meeting-service client.
go.mod Adds the meeting-service dependency.
go.sum Updates dependency checksums.

Comment thread internal/tools/meeting.go
Comment on lines +1347 to +1350
meeting, err := clients.Meeting.GetItxPastMeeting(ctx, &meetingservice.GetItxPastMeetingPayload{
Version: &version,
PastMeetingID: args.UID,
})

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not true; the LFX MCP uses token exchange to get a user-scoped LFX v2 API token. All client calls use these tokens and are subject to API-gateway authorization checks.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI-assisted: Confirmed. NewClients builds one httpClient, wraps it once via wrapWithAuthInterceptor (client.go:164-177), and passes that same wrapped instance into every per-service NewClient(...) call, including the new meetinghttpclient.NewClient(..., httpClient, ...) (client.go:294). authInterceptor.RoundTrip (client.go:459-477) then injects the token from getOrExchangeToken (client.go:502-536), which does RFC 8693 token exchange for user tokens (falling back to client_credentials only for M2M/API-key). No service-specific auth branching exists — the Meeting client goes through the identical user-scoped token-exchange path as Committee/MailingList/Member/Project/QuerySvc.

Comment thread internal/tools/meeting.go
Type: &resourceType,
Parent: &parentRef,
PageSize: 1,
Sort: "name_asc",

@emsearcy emsearcy Jul 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI-assisted: Sort: "name_asc" here only matters if more than one result can come back for a given past_meeting:<id> parent ref — otherwise it is dead weight. If the code does anticipate >1 recording/transcript per past meeting, "first alphabetically by name" is an arbitrary tie-breaker (should be recency or size, not name).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I don't think Query Service supports a "no sort" option. There will always be a sort, even if we didn't include it here, so it's not like a performance optimization.

@emsearcy

Copy link
Copy Markdown
Contributor

AI-assisted: Checked whether PageSize: 1 in fetchPastMeetingChildResource (internal/tools/meeting.go) could silently drop a second recording/transcript — the classic PCC "multiple recordings, UI shows only the longest" problem.

By design this differs from PCC: both v1_past_meeting_recording and v1_past_meeting_transcript already nest recording_files[]/sessions[] inside a single document (per indexer-contract.md), so multiple Zoom file segments are aggregated into one doc per past meeting rather than indexed as separate sibling docs.

Empirically confirmed against OpenSearch (terms agg on parent_refs filtered to past_meeting:*, sorted by count desc — single-shard index, so counts are exact):

  • prod: 9,336 v1_past_meeting_recording docs / 9,339 v1_past_meeting_transcript docs — top bucket count = 1 for both types.
  • dev: 98/98 docs — same result, 0 buckets with count > 1.

So PageSize: 1 is not dropping data today. See the inline comment on Sort: "name_asc" for a related follow-up suggestion.

@emsearcy
emsearcy merged commit 1752ba4 into main Jul 24, 2026
8 checks passed
@emsearcy
emsearcy deleted the lfxv2-2827-nest-recording-transcript branch July 24, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants