diff options
Diffstat (limited to 'docs/detection-findings.md')
| -rw-r--r-- | docs/detection-findings.md | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/docs/detection-findings.md b/docs/detection-findings.md index 9898dfd..8f5cea7 100644 --- a/docs/detection-findings.md +++ b/docs/detection-findings.md @@ -945,3 +945,42 @@ the state file, uncomputed. figures above are computable from `state.json` for every show. A show whose gaps straddle zero has no usable yardstick and arguably should not publish a subtraction-derived `ad` either. 3. Whether #188's 89-second span is actually advertising. Needs a listen, not a measurement. + +## 2026-11-03: a quarter of the whisper budget was re-doing work + +Retention was publication date and nothing else. `Show.Partition` kept the newest N and everything +else was pruned, and pruning called `words.Forget`, which deletes the transcript *file* as well as +the state's record of it. So an episode outside the window was fetched on demand, recognised, +served, and deleted again on the next poll -- and asking for it a second time paid the whole cost +over. + +Measured from the live server's journal over twenty-one days: + +| | | +|---|---| +| transcription runs | 397 | +| distinct episodes | 309 | +| first-time work | 25.7 h | +| **repeat work** | **7.7 h — 23% of all whisper time** | + +The mechanism, confirmed in the code rather than inferred: `serveRequest` mirrors an on-demand +episode and `detect`s it, but nothing records that anybody wanted it, so the next feed poll +partitions by date and prunes exactly what was just fetched. For a back catalogue -- the archive +tier, the slow-drip shows, the listening this feature was for -- every episode cost a full +recognition and resuming one cost another. + +**The window now decides what is worth fetching and being asked for decides what is worth +keeping.** `Episode.RequestedAtUnix` is stamped on every `/api/episode` call, mirrored episodes +included, because resuming something played last month must not let it fall out mid-listen. +`Partition` spares anything asked for in the last 28 days -- the same span `refetchAfterSeconds` +uses, being the same kind of judgement about how long something stays interesting. + +Disk makes this cheap in the right direction: transcripts are 36MB for 445 files, audio is 17GB +for 336 episodes, and the volume has 365GB free. The expensive artefact is the small one. + +### Still open + +The phone's half. A `pending` reply is retried only on a feed refresh -- the 5am alarm, launch, or +the button -- so an episode the server will have in about a minute stays "waiting for server" +until the next refresh. That, rather than anything on the server, is what makes "not checked yet" +a state a listener sees. |
