Кажется, я упустил что-то в этом сообщении: Let's talk Moderation - #2 by simon. Предыдущие блокировки действительно влияют на повышение до уровня tl3. Странно, что требования, перечисленные здесь, вычисляются дважды в процессе повышения:
Сначала в задаче повышения до tl3, а затем снова при вызове review_tl2. Этот метод заново вычисляет требования для tl3, на этот раз учитывая количество штрафов за молчание и блокировки: discourse/app/models/trust_level3_requirements.rb at main · discourse/discourse · GitHub.
Это довольно существенно, поскольку блокировки часто используются как способ временного ограничения доступа к сайту, который не предназначен для наказания пользователей. Например, пользователи блокируются, когда истекает срок действия платной подписки во внешнем приложении.
Редактирование: похоже, что если пользователь был заблокирован, а затем разблокирован пользователем, который не является системным пользователем, счетчик штрафов удаляется: discourse/app/models/trust_level3_requirements.rb at main · discourse/discourse · GitHub. Это означает, что если пользователь был случайно заблокирован, а затем разблокирован человеком, счетчик штрафов не появится. Это также означает, что в случае, когда пользователей блокируют «навсегда» как способ ограничения доступа к сайту после истечения срока действия внешней подписки, счетчик штрафов не появится при их разблокировке, если разблокировка не выполнена системным пользователем.
Такая логика имеет смысл, но, возможно, её можно сделать более явной в каком-то месте. Довольно часто блокируют и разблокируют пользователей через API. Я не знал до сих пор, что имеет значение, было ли действие выполнено системным пользователем или нет.
Та же логика применяется для подсчета штрафов за молчание пользователя.