Why Sadness produced nothing — and what fixes it

A plain-language walkthrough, then listenable examples from each alternative rule.

1. The short version

Ask the miner for a chain where Sadness rises steadily, and it returns nothing at all. Not "a few", not "low quality" — zero. That looks like a bug. It is not. It is the scoring scale doing exactly what it was told, and the fix has to change the rule, not the code.

2. How a score becomes a number between 0 and 1

Every emotion is scored by a model, and those raw scores are not comparable between emotions — one model head may run hot, another cold. So before mining, each emotion is rank-normalised: a clip's value is replaced by the fraction of the corpus it scores above. The lowest clip becomes 0, the highest becomes 1, the median becomes 0.5. After that, "moved 0.25" means the same thing for every emotion — you crossed a quarter of the corpus.

One detail matters enormously here: when many clips have exactly the same score, they cannot be ranked against each other, so they are all given the midpoint of the range they jointly occupy. A tie of a million clips becomes a million copies of one number.

3. What that does to Sadness

90.0 % of clips score at or below zero on Sadness. Zero does not mean "slightly sad"; it means the model found no sadness. Those clips are all tied, so they all collapse onto a single point near 0.45. The clips that do carry sadness land up at 0.85–1.00. And in between there is nothing.
0.000.250.500.751.0090.0 % of clips: no sadness at allthe 10 % that donothing here — a 0.449-wide gapone step is allowed to be this long (cap 0.25)
So the rule fails for a reason nobody guesses first. It is not that the chain cannot move far enough — one hop from the spike to the sad clips covers 0.45, far more than the 0.25 required. It is that the rule also says every single step may be at most 0.25, and there is nothing in the gap to step onto. With k=2 the one step is too long. With k=3 or more there is no middle clip to stand on. Both fail, so the miner returns zero — correctly.

4. The same picture for three emotions

Same axis, same bins. The only thing that differs is whether there is a gap wider than the step cap.

Sadness gap 0.449

largest gap 0.449 — WIDER than the 0.25 step cap0.00.20.50.81.0

Anger gap 0.121

largest gap 0.1210.00.20.50.81.0

Concentration gap 0.013

largest gap 0.0130.00.20.50.81.0
Read it as one sentence: if the widest empty stretch on an emotion's axis is wider than the step cap, the strict rule can never build a chain on that emotion. If it is narrower, the rule works fine.

5. Which emotions this predicts — and it does

emotionclips ≤ 0largest gapwider than the 0.25 cap?strict rule, k=3
Sadness90.0 %0.449yes — blocked0
Awe95.1 %0.474yes — blocked0
Distress90.5 %0.453yes — blocked0
Disappointment84.3 %0.422yes — blocked0
Helplessness88.8 %0.105no19,693
Anger49.9 %0.121no18,029
Concentration2.7 %0.013no14,763
The prediction holds exactly. Every emotion whose gap exceeds the cap returns 0 chains under the strict rule; every emotion whose gap is under the cap returns tens of thousands. Measured over 40,000 tracks.

One correction worth flagging: Helplessness was expected to be blocked too, but its gap is only 0.105 — comfortably under the cap — and the strict rule already yields 19,693 chains for it. It was never broken. A rescue tier for it is included purely as a control.

6. The alternative rules, and what each one costs

All of these are looser than the strict rule. None is a drop-in replacement; each buys examples by giving something up.

rulewhat it changeswhat it costsSadness k=2k=3
BASEThe strict rule, unchanged, as a control. Rank-normalise the emotion over the whole corpus, then require the chain to rise by at least 0.25 end-to-end with every consecutive step at most 0.25.Nothing -- this is the strict rule everything else is measured against.00
S1Positives-only renormalisation. Throw away the huge block of clips that score zero -- 'no sadness' is not a degree of sadness -- and rank-normalise only the clips that actually carry the emotion. The gap disappears, and the ordinary 0.25 / 0.25 test then works normally.The number stops being comparable with other emotions: 'moved 0.25' now means a quarter of the sadness-BEARING subpopulation, not a quarter of the corpus. The chains also come from a small, self-selected slice of the data.03,162
S2Raw-delta. Ignore the normalised scale altogether and require the chain to rise by at least 1.0 in RAW score units.Raw scores are uncalibrated and not comparable between emotions, so the same 1.0 means different things on different axes.7,9245,920
S3Absent to present. The chain must start at or below 0.05 (the emotion is absent) and end at or above 1.0 (it is clearly present). The most literal reading of 'from not sad to sad'.Says nothing about the SHAPE of the path -- only that it begins absent and ends present. Any intermediate clip is unconstrained.7,8265,806
S4Same total move, bigger allowed step. Keep the 0.25 end-to-end requirement on the normalised scale but lift the per-step cap so a chain may cross the gap in one hop.The chain is no longer a smooth ramp. It is allowed to jump the whole distance in a single step, which is exactly what the step cap existed to forbid. Use it for k=2 pairs, where there is only one step anyway, and be careful reading it as a gradual progression.19,0600
Two readings to be careful about. S4 shows 0 at k=3 not because it fails, but because a rule with no step cap has no way to prefer a middle clip — the search takes the biggest jump available first and has nothing left to reach for. Treat S4 as a k=2 rule. And BASE shows 0 at k=2 for every emotion, including healthy ones: when the required total and the per-step cap are the same number, a two-clip chain would have to move exactly the cap and no more. That is why every manifest tier reports zero chains at k=2.

7. Does the fix generalise?

emotiongapS1 k=3S2 k=2S3 k=2S3 k=3S4 k=2
Sadness0.4493,1627,9247,8265,80619,060
Awe0.4741,9015,7865,7624,07116,092
Distress0.4532,7307,9737,8755,64418,257
Disappointment0.4225,03513,55113,4959,95123,089
Helplessness0.1053,2185,7225,5955,08129,373
Yes. The mechanism is not specific to Sadness: it is a property of any emotion whose scorer outputs a large block of exact zeros. The same rules recover comparable numbers for Awe, Distress and Disappointment, which have the same shape of axis. S3 is the one to reach for first — it is the most interpretable ("started not sad, ended clearly sad") and it needs no renormalisation. S1 is the one to reach for if you want a genuine multi-step ramp rather than a pair.

8. Listen to them

Every example is labelled with the rule that produced it. The question to answer is simply: does it sound like the emotion is growing?

tieremotionrulekwhy it is hereshown
sad-Sadness-S3-k2SadnessS32the literal 'not sad -> clearly sad' pair20listen →
sad-Sadness-S3-k3SadnessS33the same, with one unconstrained clip in between20listen →
sad-Sadness-S1-k3SadnessS13a genuine three-step ramp, once the zero block is removed20listen →
sad-Sadness-S2-k2SadnessS22a pair defined purely by raw score movement20listen →
sad-Sadness-S4-k2SadnessS42one hop straight across the gap, step cap lifted20listen →
sad-Awe-S3-k2AweS32does the winning rule generalise? Awe has the widest gap (0.474)20listen →
sad-Distress-S3-k2DistressS32generalisation check, gap 0.45320listen →
sad-Disappointment-S3-k2DisappointmentS32generalisation check, gap 0.42220listen →
sad-Helplessness-BASE-k3HelplessnessBASE3CONTROL: Helplessness has a gap of only 0.105, below the 0.25 step cap, so the STRICT rule already works here -- it was never blocked20listen →