Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

feat(meetings): add Fellow (fellow.app) meeting-notes connector

merged#2491CedarCopilot

CedarCopilot wants to merge 0 commits into staging from feat/fellow-connector

Live on prod, 1 of 7 behaviors degradedTimeline and evidence
  1. Opened
    Aug 15, 2026, 12:56 PM
  2. Merged
    Aug 15, 2026, 1:29 PM
  3. Live on prod
    Aug 15, 2026, 1:29 PM
  4. Observed 3 days
    Aug 15, 2026, 1:29 PM
  5. Pipelines steady after this deploy
    Aug 15, 2026, 1:29 PM
  6. Mixed signals

    Live on prod, 1 of 7 behaviors degraded

    Aug 18, 2026, 1:23 PM

Behaviors Libra is checking

Fellow is recognized as a first-class meeting provider by the provider registry, capabilities registry, integrations UI, playground provider validation, and bulk meeting backfill.Degradedmedium confidence

Strict CloudWatch fallback found 54 prod failure log lines for sync.provider_read_failed_served_snapshot (Requested entity was not found.) in the last 24h while checking integrationstabcontent, initialsync, providerid, meeting_provider_ids, initial-sync, up from 32 in the.

prod, checked Aug 18, 2026, 1:23 PM
Users can connect Fellow as a meeting-notes provider using an API key and workspace subdomain, including credentials resolved from organization-level configuration.Inconclusivelow confidence

OTEL fallback found no prod spans matching Fellow meeting integration connection flow since deploy.

prod, checked Aug 17, 2026, 6:09 PM
Initial meeting sync can fetch Fellow recordings, transcripts, AI notes, and attendee emails over a requested date range through the fellow-get-meetings workflow.Inconclusivelow confidence

OTEL fallback found no prod spans matching fellowDriver.listMeetings / fellow-get-meetings since deploy.

prod, checked Aug 17, 2026, 6:09 PM
Fellow meeting ingestion excludes Google Calendar room-resource pseudo-attendees before meetings are normalized and routed.Inconclusivelow confidence

OTEL fallback found no prod spans matching fellowDriver.map since deploy.

prod, checked Aug 17, 2026, 6:14 PM
Account-setup operators can safely add or update a user's decrypted Fellow credentials in the Fellow polling schedule without altering other scheduled users.Inconclusivelow confidence

OTEL fallback found no prod spans matching phase10c-fellow account-setup script / fellow-meetings-webhook-sync schedule since deploy.

prod, checked Aug 17, 2026, 6:46 PM
Cedar accepts authenticated Fellow poller payloads at the generic meeting-notes webhook endpoint and maps them into normalized meeting data.Inconclusivelow confidence

OTEL fallback found no prod spans matching POST /webhooks/meeting-notes/fellow since deploy.

prod, checked Aug 17, 2026, 6:46 PM

Libra has verdicts on 1 of 7 tracked behaviors on prod; 6 are still being checked. Libra checks hourly for 3 days after each deploy.

What

Adds Fellow (fellow.app) as a first-class meeting recorder, following the Clari poll-based pattern (a Superglue schedule polls each user's recordings and POSTs CedarMeetingData to /webhooks/meeting-notes/fellow with X-Webhook-Secret + X-User-Id). No native webhook , deliberate (poll gives correctness + ~5-min latency; Fellow's ai_note.generated has its own note-gen lag anyway).

Verified live against a real Fellow workspace: back-fetch returned 43 meetings with transcripts + resolved external attendee emails; the poller dry-run mapped 21 meetings correctly.

Backend

  • meetings/fellow.ts , driver, verifyFellowRequest (shared-secret + X-User-Id, with raw-payload schema-capture logging), mapFellowMeetingToCedar (normalizes; strips @resource.calendar.google.com room pseudo-attendees), getAllFellowMeetings (14-day-chunked back-fetch via fellow-get-meetings).
  • Registered 'fellow' in index.ts, types.ts (both unions), capabilities.ts.
  • phase10c-fellow.ts , registers a user into the fellow-meetings-webhook-sync Superglue schedule (idempotent; verifies other users untouched).

Frontend (so it shows up correctly)

  • AVAILABLE_INTEGRATIONS / derived INTEGRATION_INFO: Fellow entry (name/letter/color) → drives IntegrationIcon everywhere + the dynamic Settings→Connections list (name/fields/instructions already come from the driver).
  • MeetingIntegrationCard: Fellow icon case.
  • Playground bulk-sync provider list + help text.

Fellow API notes (verified, corrects the public docs)

  • Request body is nested (pagination/filters/include); flat params are silently ignored.
  • include:{transcript,ai_notes} hydrates transcript inline on the list; attendee emails come from GET /note/{note_id}.event_attendees (not on the recording).
  • Base URL is workspace-scoped: https://{subdomain}.fellow.app/api/v1.

Not in this PR (deploy actions , see docs/design/fellow-connector-2026-08-15.md)

  • Saving the two Superglue tool configs (docs/design/fellow-superglue-tools/) to prod + creating the */5 schedule.
  • Migrating Varun's key from the temporary fathom row to a fellow connection.
  • Running phase10c-fellow.ts to register him.

🤖 Generated with Claude Code

Greptile Summary

The PR adds Fellow as a first-class meeting-notes provider using a Superglue back-fetch workflow and scheduled polling pipeline.

  • Registers the provider across backend driver, capability, type, and frontend integration registries.
  • Adds Fellow payload normalization, credential resolution, chunked historical synchronization, and webhook verification.
  • Adds production-oriented Superglue tool definitions and a script for registering users in the shared polling schedule.

Confidence Score: 2/5

The PR should not merge until the scheduled poll exhausts Fellow pagination and webhook payload logging is moved behind authentication and stripped of meeting content.

The production-oriented poll can permanently omit recordings after its first 50-result page, and the public webhook path records meeting content before validating the caller; the remaining findings are repository-convention cleanup.

Files Needing Attention: apps/server/src/services/integrations/meetings/fellow.ts; docs/design/fellow-superglue-tools/fellow-meetings-webhook-sync.json

Security Review

The new verifier logs parsed webhook contents before checking the shared secret. This exposes short transcript, note, title, and attendee values from legitimate requests to operational logs and permits unauthenticated callers to inject arbitrary logged payloads. How this was verified: the public route reaches the payload log at fellow.ts:117-127 before the secret check at lines 132-136.

Important Files Changed

FilenameOverview
apps/server/src/services/in
Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • apps/mail/app/(routes)/playground/components/IntegrationsTabContent.tsxno production surface mapped
  • apps/mail/app/(routes)/playground/initial-sync.tsxno production surface mapped
  • apps/mail/modules/aop/constants.tsno production surface mapped
  • apps/mail/modules/integrations/meeting-integration-card.tsxno production surface mapped
  • apps/server/src/db/migrations/scripts/account-setup/phase10c-fellow.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/__tests__/capabilities.test.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/capabilities.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/fellow.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/index.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/types.tsno production surface mapped
  • docs/design/fellow-connector-2026-08-15.mdno production surface mapped
  • docs/design/fellow-superglue-tools/fellow-get-meetings.jsonno production surface mapped
  • docs/design/fellow-superglue-tools/fellow-meetings-webhook-sync.jsonno production surface mapped