What airs
Every generated spot is dry voice. "No jingles are being ducked as promised."
Why
src/GenWave.Ads/AdSpotWorker.cs:289, 301 — BedMediaId: null on every worker-written row. The bed path exists only for owner drafts through the editor's BedPicker (AdRenderService.ResolveBedAsync, Ads:BedDuckDb −12 dB; F161.2 "mixes an optional bed"; the v5.6.0 changelog promises the same).
- There is no bed source to pick from: the demo library has no bed/jingle material at all (imaging kinds today: ad ×12, liner ×2); briefs and packs carry no bed.
Ruling (Dean, 2026-09-06)
Generated spots get background music, ducked under the voices.
Source ruling (Dean, 2026-09-06)
Background music comes from jingle packs — a coming catalog kind in its own epic (the ad-pack / font-pack shape: community-shelf entries carrying licensed short instrumentals and station jingles). This issue is the consumer side and is sequenced after that epic: the worker's per-spot pick reads from installed jingle packs, so the bed pool, its licence handling and the shelf UI belong to the packs epic, not here. Until then a spot without an installed pack stays dry (no synthetic bed, no bundled CC0 seed).
Fix
Acceptance
A worker-written ready row has bed_media_id; the rendered file carries music under the voice at the configured duck; the ear.
Epic: #380
What airs
Every generated spot is dry voice. "No jingles are being ducked as promised."
Why
src/GenWave.Ads/AdSpotWorker.cs:289, 301—BedMediaId: nullon every worker-written row. The bed path exists only for owner drafts through the editor's BedPicker (AdRenderService.ResolveBedAsync,Ads:BedDuckDb−12 dB; F161.2 "mixes an optional bed"; the v5.6.0 changelog promises the same).Ruling (Dean, 2026-09-06)
Generated spots get background music, ducked under the voices.
Source ruling (Dean, 2026-09-06)
Background music comes from jingle packs — a coming catalog kind in its own epic (the ad-pack / font-pack shape: community-shelf entries carrying licensed short instrumentals and station jingles). This issue is the consumer side and is sequenced after that epic: the worker's per-spot pick reads from installed jingle packs, so the bed pool, its licence handling and the shelf UI belong to the packs epic, not here. Until then a spot without an installed pack stays dry (no synthetic bed, no bundled CC0 seed).
Fix
bed_media_id; the existing mixer ducks it byAds:BedDuckDb, cue-trimmed to the voice length with a short tail fade. No pack installed → no bed, logged once per tick at Information.Acceptance
A worker-written ready row has
bed_media_id; the rendered file carries music under the voice at the configured duck; the ear.Epic: #380