Capture the ADR-021 promise as a mapped BDD scenario: re-analyzing a stored video reads the stored transcript and does not fetch captions. Since paste-a-URL and the onboarding burst summarize through the same engine chokepoint (resolveTranscript, store-first), this one scenario covers their reuse path too — there is exactly one gated caption entry point (youtube.FetchTranscript → WaitFetchGate) and one engine caller in front of it, so the dedup is structural, not per-feature. Mapped to TestProcessNewVideo_SecondSummarizeDoesNotRefetch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
2.2 KiB
Gherkin
47 lines
2.2 KiB
Gherkin
Feature: Summarize new videos from subscribed channels
|
|
As a user who follows more channels than I can watch
|
|
I want new videos summarized into highlights and takeaways
|
|
So that I can decide what deserves my full attention without watching everything
|
|
|
|
Background:
|
|
Given I have connected a video account
|
|
And I am subscribed to the channel "Acme Talks"
|
|
|
|
Scenario: A subscribed channel posts a video that has captions
|
|
When "Acme Talks" posts a new video "Designing for Attention" with captions
|
|
Then Tapir detects the new video
|
|
And Tapir resolves a transcript with source "captions"
|
|
And Tapir produces a summary with highlights and takeaways
|
|
And the summary is delivered to my store
|
|
|
|
Scenario: A subscribed channel posts a video with no usable transcript
|
|
When "Acme Talks" posts a new video "Silent Montage" with no captions
|
|
Then Tapir detects the new video
|
|
And Tapir resolves no transcript
|
|
And Tapir records the video as skipped with reason "no transcript"
|
|
And no summary is produced
|
|
|
|
Scenario: A channel I am not subscribed to posts a video
|
|
Given I am not subscribed to the channel "Random Co"
|
|
When "Random Co" posts a new video "Unrelated"
|
|
Then Tapir does not process the video
|
|
|
|
Scenario: The same video is not summarized twice
|
|
Given "Acme Talks" posted a video "Designing for Attention" that was already summarized
|
|
When the watcher sees "Designing for Attention" again
|
|
Then Tapir does not produce a second summary for it
|
|
|
|
Scenario: Re-analyzing a stored video does not re-fetch its transcript
|
|
Given a transcript for "Designing for Attention" is already stored
|
|
When the video is summarized again
|
|
Then Tapir reads the stored transcript
|
|
And Tapir does not fetch captions from YouTube
|
|
|
|
# Captions-first is the core path (ADR-007). Audio-download + speech-to-text is
|
|
# deferred and intentionally has no scenario here yet.
|
|
#
|
|
# Transcript persistence (ADR-021): the stored transcript is shared, keyed by
|
|
# (provider, provider_video_id) and read before any caption fetch, so the
|
|
# re-analysis scenario above also covers paste-a-URL and the onboarding burst —
|
|
# both summarize through the same engine chokepoint.
|