From 300d0fc58e355a3f6d6347f8def633867d416339 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Thu, 29 Oct 2026 10:15:10 +0000 Subject: Do not claim to know why subtraction ran over Nine episodes subtracted against their publishers' masters land between 82% and 110% of what the declared-versus-served gap implies, and all but one are over. The readout said the excess was advertising baked into what the publisher serves, which the gap cannot see. That was a guess, and on inspection it is wrong at least some of the time. Heavyweight "#70 Cayden" is over by 46 seconds across four candidates. Its first candidate opens on `Today's episode, "Caiton."` and `[MUSIC]` -- a title card and a music sting, neither of which is advertising and neither of which appears in a publisher's written transcript either. Subtraction answers "not in the master", which is a superset of "advertising": whisper's own [MUSIC] and `>>` markers qualify too. So the readout now states the overrun and names both possible causes instead of picking one. Tightening the edges is a separate piece of work and needs to be measured in both directions -- the same lesson MinRunSamples taught, where improving one show doubled a false positive on another. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B --- server/cmd/listend/main.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'server') diff --git a/server/cmd/listend/main.go b/server/cmd/listend/main.go index 6dd3c65..d45f890 100644 --- a/server/cmd/listend/main.go +++ b/server/cmd/listend/main.go @@ -589,9 +589,16 @@ func adAccounting(e *store.Episode, found []transcript.Candidate) string { "so anything found is baked into what the publisher serves", len(found), how, clock(total)) case total > gap: - return fmt.Sprintf("%d ad candidate(s) %s, %s against %s inserted -- the excess is "+ - "advertising baked in rather than inserted, which the length gap cannot see", - len(found), how, clock(total), clock(gap)) + // Deliberately does not say why it is over. Two causes look identical here and the + // first guess was the wrong one: advertising baked into what the publisher serves, + // which the gap cannot see, and candidate edges reaching past the advertisement. + // Subtraction answers "not in the master", which is a superset of "advertising" -- + // a title card, a music sting and whisper's own [MUSIC] markers are all absent from a + // publisher's written transcript too. Checked on Heavyweight "#70 Cayden", where a + // 134-second candidate opens on `Today's episode, "Caiton."` and `[MUSIC]`. + return fmt.Sprintf("%d ad candidate(s) %s, %s against %s inserted -- over by %s, "+ + "which is either baked-in advertising or candidate edges reaching too far", + len(found), how, clock(total), clock(gap), clock(total-gap)) default: return fmt.Sprintf("%d ad candidate(s) %s, %s of the %s inserted (%d%%)", len(found), how, clock(total), clock(gap), total*100/gap) -- cgit v1.2.3