in [expected] охотно совпадает с [9], даже когда прямо над ним стоит expected = 7. Читается как «принимать только семь». А на деле нет. Голая переменная в шаблоне связывает всё, что пришло, так что expected тихо становится 9, и ветка выполняется.
Исправить можно через in [^expected], он сравнивает с уже имеющимся значением. Когда знаешь, читается приятно. Только смысла на одну крошечную шляпку многовато.
Для одного сравнения пин меня вполне устраивает. Когда условие разрастается, in [value] if value == expected показывает связывание и проверку двумя видимыми шагами, и я бы выбрал это, а не хитрый компактный шаблон, скрывающий, что именно проверяется. Где именно пину становится тесно, честно, пока сказать не могу.