The Watched() logic is quite simple:
If Number Plays > 0, return Yes
else
if Bookmark > 90%, return Yes
else if Bookmark > 15%, return Partial
else return No
This is how it works today. The only problem is that Number Plays increments at 50% already, which causes the 90% rule in Watched() to not really account for much.
I could add a time-based component, say 90% or within 5 (10/15?) minutes of the ending, or something like that. Would that make sense? It would cover shorter videos somewhat. Tilting the percentage over depending on the overall length seems rather fragile, imho.
All 3 Watched(1) states work fine here, 0 for No, 1 for Partial (between 15% and 50%), and 2 for Yes (above 50% due to the mentioned bug before). After the fix Partial would go from 15% to 90% of course.
Watched(2) actually outputs a half-transparent checkmark for partial watched (would show grey-ish), but that difference is probably only visible in Theater View, not in Standard View, and even then probably not all that obvious.
I would be open to alternate visual indicators for Watched(2) for the Partial state.