docs: Otter sensor field notes — learnings from a working ingestion pipeline#1
docs: Otter sensor field notes — learnings from a working ingestion pipeline#1glandua wants to merge 1 commit into
Conversation
Operational learnings from ~1,700 transcripts of production Otter ingestion, written as design input for the Otter reference sensor and the Output Record contract: source-ID-keyed identity, placeholder-body self-healing, participants-vs-speakers trust levels, auth-expiry as a first-class failure mode, and consent/access-tier fields from day one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request introduces a comprehensive reference document detailing design patterns and field notes for the Otter transcript sensor ingestion pipeline. The feedback suggests clarifying the logic around replacing placeholder bodies versus real bodies to prevent contradictions in the self-healing mechanism.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| - **Never clobber a real body.** Replacement of an existing body is allowed | ||
| only when the existing body fails the placeholder check AND the new fetch is | ||
| substantially longer. Metadata refreshes must not be able to destroy | ||
| transcript content, even when the API returns junk. |
There was a problem hiding this comment.
The current phrasing suggests that replacement is only allowed when the existing body is a real body (i.e., it fails the placeholder check) and the new fetch is longer. However, if the existing body is a placeholder (i.e., it passes the placeholder check), we should always allow replacing it with any valid transcript, even if the new fetch is short.
To prevent this logical contradiction with the self-healing re-queue mechanism described in the previous bullet, we should clarify the replacement conditions.
| - **Never clobber a real body.** Replacement of an existing body is allowed | |
| only when the existing body fails the placeholder check AND the new fetch is | |
| substantially longer. Metadata refreshes must not be able to destroy | |
| transcript content, even when the API returns junk. | |
| - **Never clobber a real body.** Replacement of an existing body is allowed | |
| if the existing body is a placeholder, or if the existing body is a real | |
| body (fails the placeholder check) and the new fetch is substantially | |
| longer. Metadata refreshes must not be able to destroy transcript content, | |
| even when the API returns junk. |
maha-rk
left a comment
There was a problem hiding this comment.
Thanks Gregory -- this is exactly what I needed before starting the Otter sensor implementation. A few things that stood out as particularly useful:
The distinction between participants (calendar/claimed) and speakers (observed) is something I wouldn't have caught from the API docs alone -- good to know this needs to be two separate fields from day one.
The auth expiry point is well taken. I'll design the sensor so AUTH_EXPIRED is a surfaced state rather than something that silently looks like an empty sync.
One question on §3 -- the Gemini bot flagged the placeholder replacement logic as potentially contradictory. I think the suggested clarification makes sense: replacing a placeholder body should always be allowed regardless of length, whereas replacing a real body should only happen when the new fetch is substantially longer. Is that the intended behavior?
Approving -- the checklist at the end is going straight into my implementation plan.
What
Adds
docs/otter-sensor-learnings.md: operational field notes from a personal Otter → knowledge-base ingestion pipeline that has been running since spring 2026 (~1,700 transcripts through sync, enrichment, and downstream task extraction).Why
The Otter transcript sensor is this SDK's first reference sensor, and the Output Record contract is being designed right now. This pipeline already does the same job the sensor will do, and these are the lessons we'd rather hand over than have rediscovered — most of them were learned by hitting the failure mode in production.
Highlights for contract design
participants(calendar) vsspeakers(observed) as separate fields with different trust levels (§4)Ends with an implementation checklist for the Otter sensor.
🤖 Generated with Claude Code