From 5fc97b66bda97d3af14da6d3de69e84f29299773 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 2 Nov 2026 07:51:10 +0000 Subject: Write down what the corpus actually says, and correct three stale claims The findings doc's last entry was 2026-10-19 and ended by naming what was missing: "a mechanism that can tell a real short ad from a short coincidence". Words are that mechanism, it was built, and thirty-two server commits later the doc never recorded what it measured. A future session would have re-attempted the ad/furniture classifier that was already measured and deleted. The new entry is derived from the live state file rather than quoted, which is how it caught that publish.go's own figure describes a subset. "92% to 104% across eighteen episodes" is the publisher-transcript number. Across the 24 episodes now publishing an ad span, recovery runs 20% to 146%. Split by where the master came from, the spread stops being a spread: a publisher's transcript gives 94-104%, a refetch gives a median of 33%. Nothing in Publishable looks at which it has, and refetch masters are now fifteen of those twenty-four -- the majority of a tier the design had decided not to act on. It also caught me getting a conclusion wrong. Two Reply All episodes publish ad spans at 146% and 138% of their length gap, which reads as the detector over-claiming by half a minute of programme. Looking at the show instead of the episode: Reply All's gaps run from -0.48 to +1.02 minutes across eight episodes. They straddle zero, so the feed's declared durations are not a baseline for that show and the thing being exceeded is noise. The structural finding is the useful one -- HasInsertedAdvertising asks only whether this episode's gap clears one ad unit, and has no notion of whether the show's gaps are consistent enough to mean anything. Both versions are in the entry, because the wrong one is the one a reader would reach for next time. Nothing here changes behaviour. Whether a refetch should publish an ad at all is Peter's call and is written up as such. CLAUDE.md, separately: - It still said the episode description shows about two lines. That was changed to ten yesterday, for a reason that is recorded: the limit existed to stop long notes pushing the transport off-screen, and the merge had already put the notes below the transport. Left as it was, the doc was an instruction to reintroduce the bug. - "207 unit tests" has been wrong for most of the project's life; the suite is past nine hundred. Replaced with a note to ask the wrappers, since any number written here goes stale the same way. - The TDD rule banned backfilling tests onto existing code without qualification, which also forbids the one case where it is right -- pinning behaviour before moving it, so a refactor is provably behaviour-preserving. Narrowed to say that, and to say the order matters. The sixteen formatter tests in 2cc252a were written that way. - Added the rule those formatter files were moved to satisfy: anything the app says out loud lives in a named file of its own and is tested, never inside the composable that renders it. It was already followed by eight files and stated only in WaitingForServerText's own comment. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B --- server/internal/transcript/publish.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'server/internal') diff --git a/server/internal/transcript/publish.go b/server/internal/transcript/publish.go index 670a8d5..b9856c3 100644 --- a/server/internal/transcript/publish.go +++ b/server/internal/transcript/publish.go @@ -10,17 +10,30 @@ decides what the phone will seek past, so it is deliberately narrow. Two detectors produce candidates and they are not close in quality. Subtraction -- comparing an episode's words against a second description of the same programme -- measured 92% to 104% of -what the declared-versus-served length gap implies across eighteen episodes, finding every pod, -with its edges pulled back off the programme. Reading the ad copy measured 0%, 0%, 15% and 29% -on the same kind of episode. Only the first is acted on. +what the declared-versus-served length gap implies, finding every pod, with its edges pulled back +off the programme. Reading the ad copy measured 0%, 0%, 15% and 29% on the same kind of episode. +Only the first is acted on. + +**That 92-104% is the figure for a publisher's transcript**, which is a second description of the +programme written once. Against a refetch -- a second download of the same dynamically-assembled +file, carrying its own advertising at its own positions -- the same code recovers a median of 33% +across fifteen episodes, with a range of 20% to 146%. Measured on the live corpus 2026-11-02; see +docs/detection-findings.md. Nothing below distinguishes the two, which is a known gap, not a +decision. The length gap is both the measure and the guard. It comes from the feed and the file rather than from any detector, which makes it the one number able to contradict one. */ // overshootLimit is how much more than the lengths imply a candidate set may claim and still be -// published, as a percentage. The measured spread runs to 104%; 150 leaves room for a music -// sting at the edge of a pod without leaving room for having found the wrong thing entirely. +// published, as a percentage. 150 leaves room for a music sting at the edge of a pod without +// leaving room for having found the wrong thing entirely. +// +// It was set against the publisher-transcript spread, which runs to 104%, so it sat well clear of +// the distribution. Where it actually binds is the shows whose length gap is noise rather than a +// measurement -- Reply All's gaps run from -0.48 to +1.02 minutes across eight episodes, so a +// percentage of one of them means little either way. Raising this limit would not help and +// lowering it would not either; see docs/detection-findings.md for what would. const overshootLimit = 150 // Publishable returns the candidates fit to skip, or nothing and the reason. -- cgit v1.2.3