Ошибка off-by-one в последней редакции

Контекст

Не уверен, относится ли это к Discourse Shared Edits или к функции wiki-posts, поскольку обе были включены для этого конкретного сообщения, чтобы изменения одного редактора не делали устаревшими изменения других.

Итак, одно сообщение с включёнными одновременно функциями вики и общих правок…

Описание ошибки

Редактор A вносит правку 55 и нажимает «Готово».

Редактор B сразу переходит к истории правок, чтобы увидеть изменения. Счётчик правок показывает 54 / 55, но получить доступ к правке 55 невозможно. Как только редактор B вносит изменение, оно применяется к правке 54, что фактически полностью удаляет правку 55.

Решение ошибки

Обойти это невозможно. Режим вики не поддерживает одновременную работу нескольких редакторов над одним сообщением, но функция общих правок, похоже, вызывает эту ошибку в сочетании с правками в режиме вики. Было бы здорово иметь возможность использовать обе функции одновременно (как это реализовано в HedgeDoc) или устранить потенциальные конфликты между двумя режимами редактирования.

1 лайк

Это сложная проблема: минус в том, что это может привести к резкому росту количества ревизий, если два редактора работают одновременно. Я проверю, можно ли добавить в плагин настройку сайта, чтобы отключить сворачивание правок от нескольких пользователей.

1 лайк

Кажется, я заметил ещё один аспект этой ошибки, но он может быть не связан с ней.

Когда для поста включена функция «Совместное редактирование», если его редактируют слишком рано (в течение примерно 20 секунд), возникает конфликт: сохраняется только одно из редактирований. Иными словами, функция «Совместное редактирование» не срабатывает, хотя кажется, что она активна. Ситуация становится очень запутанной, если любой из авторов закроет пост и снова войдёт в него: изменения то появляются, то исчезают.

Если оставить всё как есть на некоторое время, проблема, похоже, разрешается сама собой (хотя и с потерей части контента). Возможно, кратковременная блокировка постов на 30 секунд при включённой функции «Совместное редактирование» помогла бы предотвратить это?

1 лайк

Да, уведомление и синхронизация, похоже, правильный подход здесь, согласен, что нужно исправить.

2 лайка

После того как сегодня эта проблема повторилась в посте с уже существующими функциями «Совместное редактирование» и «Вики», кажется, что проблема однозначно заключается во взаимодействии этих двух функций.

Я уже какое-то время использую «Совместное редактирование» между людьми с правами администратора, и эта проблема не возникала. Проблема появляется только тогда, когда на том же посте включена функция «Вики».

Очевидным обходным решением является назначение всех участников модераторами категории или уровня TL4, чтобы функция «Вики» не требовалась, но это имеет свои последствия.

1 лайк

Хм. Похоже, это причина, по которой мы теряем правки в постах, когда на вики включена функция совместного редактирования. Я наивно использовал режим вики, чтобы расширить круг допустимых редакторов.
Полагаю, расширение круга допустимых одновременных редакторов до всех читателей без резервных функций режима вики — не лучшая идея, особенно когда отсутствуют другие возможности резервного копирования (например, кнопка «Сохранить версию»)?

2 лайка

Я считаю, что эта проблема всё ещё актуальна — она точно вызвала хаос на важном совещании вчера!

Дело в том, что часто требуется, чтобы несколько человек имели права на редактирование в общем посте для редактирования, поэтому связка «Вики + Общие правки» крайне полезна.

Кроме того, нередко возникает желание «переключить» пост Вики в режим «Общие правки» на короткие периоды интенсивной синхронной работы. Лично я считаю, что именно так и следует это воспринимать, и интерфейс должен это отражать: то есть «Общие правки» — это расширение функционала Вики, а не его альтернатива.

Или, возможно, в режиме «Общие правки» можно просто включить права на редактирование поста как часть пакета, сделав выбор между этими режимами взаимоисключающим (то есть нельзя выбрать оба одновременно). Я не вижу причин, почему это могло бы вызвать проблемы.

1 лайк

Поскольку мы столкнулись с этой ошибкой, мы используем внешний блокнот (HedgeDoc) и затем копируем результат в Discourse. Это немного неудобно, так как синтаксис Commonmark и HedgeDoc имеют некоторые различия (например, в HD есть уведомления, множество плагинов для диаграмм и т. д., которых нет в Discourse, и наоборот, некоторые функции разметки Discourse недоступны в HedgeDoc, например, стрелки: - + > = → и некоторые эмодзи). Но это гораздо лучше, чем терять правки!

2 лайка