Плагин ActivityPub

Ну, пользователь Mastodon увидит это в контексте ленты, а ленты обычно ограничены. В Mastodon по умолчанию общая лента не превышает 400 постов. Если вы смотрите на оригинал, вы всё равно находитесь в Discourse. Так что, хотя теоретически это верно, на практике я не вижу, чтобы это вызывало реальную путаницу. Чтобы увидеть контент, вы уже должны быть подписчиком; переход по ссылке на оригинал ведёт в Discourse, где путаница устраняется.

Не идеально, но, возможно, это «наименее плохой» вариант?

Думаю, в качестве альтернативы можно распространить через федерацию редактирование, которое аннотирует пост как заменённый в результате передачи прав собственности, что-то вроде добавления ссылки «обсудить это на нашем форуме»?

Конечно, я не утверждаю, что разницы нет; я лишь говорю, что эта разница кажется приемлемой по сравнению с блокировкой полезной и широко используемой функции Discourse.

Удаление оригинала приведёт к тому, что потоки станут сиротскими в контексте других платформ, с которыми вы федеративно связаны, поскольку, насколько я понимаю, нельзя изменить актора, связанного с активностью, при редактировании.

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

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

  • Превращение поста в вики означает, что вы принимаете появление правок других людей в обычном режиме под вашим именем.
  • Даже если это не вики, пользователи с достаточными привилегиями могут редактировать ваш пост в Discourse в зависимости от конфигурации сайта.

С моей точки зрения, это максимально близкое к эквивалентности решение, учитывая различия в базовой модели.

На мой взгляд, функция «нажмите, чтобы увидеть пост на оригинальном сайте» уже показывает разное содержимое между реализациями, ориентированными на Федеривёрс, даже без учёта этого плагина. Разный набор видимых комментариев, другая разметка, разная обработка статей. Так что некоторые различия, видимые через этот плагин, меня не удивляют; я считаю их неизбежными.

(Ещё раз спасибо за вдумчивое рассмотрение этих идей. Я понимаю, что это сложные пограничные случаи, я благодарен за проделанную работу, не предполагаю, что мои идеи являются наилучшими, и не хочу создавать никакого чувства обязательства ни на этом, ни на любом другом этапе работы, и даже не имею в виду необходимость отвечать на что-то конкретное из написанного мной.)

1 лайк

Как и в случае с изменением категории, я думаю, всё зависит от конкретной ситуации. Рассмотрим, например:

  1. Пост 1 создан в категории 1 пользователем 1 (Актор 1).
  2. Автор поста 1 изменён пользователем 3 (администратором) на пользователя 2 (Актор 2) через 2 минуты.
  3. Категорию 1 следят 400 акторов из 20 доменов и 5 различных программных платформ, каждая из которых имеет слегка отличающуюся реализацию лент и механизмов обнаружения контента.
  4. В течение 2 минут после создания поста 1 в эти 400 подписчиков отправляются 2 заметки с идентичным содержимым, но от разных акторов.

Я считаю, что это, скорее всего, вызовет путаницу у значительной части подписчиков, не говоря уже о том, что пользователь 2 может даже не осознавать, что его имя теперь связано с этим дублирующимся контентом, который он не создавал, и который распространён по 20 разным доменам. Возможно, он согласен с тем, что администраторы делают это на одном экземпляре, поскольку это неявно подразумевается при публикации на этом экземпляре. Однако я считаю, что нам следует быть очень осторожными при распространении этого неявного согласия на весь феди́верс, особенно в условиях несовершенного дублирования контента. Смена владельца поста — это мощная административная функция, специфичная для Discourse, и неявно связанная с «социальным контрактом» одного экземпляра.

Я считаю, что аргументы в пользу вики сильнее, однако я ещё раз отмечу то, на что вы уже намекали. Вики — это концепция, укоренившаяся в обычном Discourse. Связывание правок любого пользователя (не только сотрудников) с оригинальным автором — это концепция Discourse, не имеющая аналога в ActivityPub. Нам следует быть осторожными при распространении этой концепции с использованием стандартных методов ActivityPub на весь феди́верс. Эти активности «Обновление» будут восприниматься как любые другие активности «Обновление» во многих различных экземплярах и программных платформах, вырванные из их первоначального контекста вики. Более того, как вы тоже уже отмечали, здесь уже существует потенциальная проблема, связанная с возможностью сотрудников и высокодоверенных пользователей редактировать посты других. Я считаю, что этот более узкий вопрос требует большего обдумывания, прежде чем мы перейдём к вопросу о вики.

Я не пытаюсь поставить нас перед выбором между Discourse и ActivityPub для этих функций. Я говорю о том, что нам не следует просто пытаться переносить чувствительные функции Discourse в Феди́верс, не обдумав тщательно последствия. По умолчанию эти более чувствительные функции должны быть отключены для постов в ActivityPub, пока у нас не появится чуть больше уверенности в том, что мы не навредим и не удивим значительную часть пользователей или сценариев использования.

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

8 лайков

Эти два пункта также выполнены: я только что объединил PR от @angus для верификации идентичности через OAuth. Если не считать исправления ошибок и улучшения производительности, это завершает текущий этап добавления функций в плагин.

На данный момент плагин обладает богатым набором функций. Кратко напомню основные возможности: плагин поддерживает:

  • Публикацию постов только для подписчиков в ActivityPub (по умолчанию — публично);
  • Публикацию только первого поста или всего топика (по умолчанию — только первый пост);
  • Двустороннюю синхронизацию при публикации всего топика, то есть все посты в топике, созданные в Discourse, публикуются в ActivityPub, и наоборот — ответы в ActivityPub публикуются в Discourse;
  • Возможность публиковать посты как заметки (Notes, для сервисов с коротким контентом, таких как Mastodon) или как статьи (Article, более подходящие для сервисов с длинным контентом);
  • Верификацию идентичности.

Далее мы займёмся доработкой текущих функций и улучшением удобства использования. Отзывы, конечно, по-прежнему приветствуются. Меня особенно интересуют способы объяснить, как всё это работает, обычным пользователям — это непростая задача.

Я полностью согласен с @angus: наша цель — делать то, что практично и достижимо с разумными затратами усилий. В связи с этим мы готовы принять некоторое снижение функциональности в Discourse на данном этапе. Это наш лучший шанс понять, стоит ли уделять внимание конкретным ограничениям (например, будут ли пользователи плагина часто сталкиваться с ограничениями wiki-ActivityPub?).

6 лайков

Правильно ли я понимаю, что мы уже достигли точки, когда имеет смысл сформулировать ограничения?

Привет! :slight_smile:

Сначала спасибо за разработку всего этого.

Затем, я очень заинтересован в соединении различных сервисов ActivityPub вместе, и насколько я понял, это в основном связано с отправкой сообщений между Discourse и Mastodon в обоих направлениях.

Я понимаю, что протокол не зависит от сервиса, но есть ли какая-либо документация, чтобы, например, соединить разные экземпляры Discourse или интегрировать Nextcloud, PeerTube и т.д.?

1 лайк

Мы временно отключили возможность изменения автора сообщения и вики-редактирование в темах ActivityPub по причинам, которые я уже указал (их предположения не работают с ActivityPub «из коробки»). Это единственные две функции, которые были временно отключены в темах ActivityPub таким образом. Любое другое снижение функциональности следует сообщать как проблему.

Это плагин ActivityPub, который строго следует спецификации ActivityPub, поэтому он предназначен для работы с любым сервисом, соответствующим этой спецификации, включая все упомянутые вами (и другие). Mastodon стал первой платформой ActivityPub, с которой мы сосредоточились на интеграции, потому что, с практической точки зрения, необходимо обеспечивать совместимость с одним сервисом за раз, а Mastodon — крупнейшая платформа ActivityPub.

4 лайка

Попытался дважды по адресу https://meta.discourse.org/u/rokejulianlockhart/preferences/activity-pub

{
	"errors": ["У вас нет прав для просмотра запрошенного ресурса."],
	"error_type": "invalid_access"
}

Что мне делать?

2 лайка

Привет @rokejulianlockhart, спасибо за обратную связь. Как именно вы выполняете процесс авторизации? Нажимаете ли вы кнопку «Authorize» на скриншоте выше в браузере (и в каком именно браузере)? Или вы каким-то образом копируете и вставляете URL-адреса? Я спрашиваю, потому что они есть в вашем сообщении. Вот видео с демонстрацией стандартного процесса, который работает у меня на meta.discourse.org:

Вы делаете что-то отличное от этого?

2 лайка

@angus,

  1. rokejulianlockhart@mastodon.social

  2. Вы собираетесь войти на сайт «mastodon.social» под именем пользователя «rokejulianlockhart», но веб-сайт не требует аутентификации. Это может быть попытка обмана.

    Является ли «mastodon.social» сайтом, который вы хотите посетить?

    Здесь я нажимаю

    Да

  3. https://mastodon.social/oauth/authorize?client_id=Y1GuLE1eoX28c2qqaw1qCe8n_KHF256IPFnpiZYuW5g&response_type=code&redirect_uri=https%3A%2F%2Fmeta.discourse.org%2Fap%2Fauth%2Foauth%2Fredirect&scope=read%3Aaccounts&force_login=true

    Требуется авторизация
    meta.discourse.org запрашивает разрешение на доступ к вашему аккаунту. Это стороннее приложение. Если вы ему не доверяете, не давайте разрешение.
    Просмотр разрешений

    Аккаунты
    Доступ только для чтения

    Здесь я нажимаю

    Авторизовать

  4. Затем появляется предыдущее

    Является ли «mastodon.social» сайтом, который вы хотите посетить?

    приглашение, и я делаю то же самое.

  5. https://meta.discourse.org/ap/auth/oauth/redirect?code=s2H3Og_3oLTb8cAsYN9Kmgeh8xPySeOaWSp2bdZ2sEE

    1. .JSON

      {"errors":["У вас нет прав на просмотр запрошенного ресурса."],"error_type":"invalid_access"}
      
    2. Заголовки

      X-Firefox-Spdy: h2
      content-encoding: gzip
      content-type: application/json; charset=utf-8
      date: Mon, 25 Sep 2023 11:39:30 GMT
      referrer-policy: strict-origin-when-cross-origin
      server: nginx
      vary: Accept-Encoding
      x-content-type-options: nosniff
      x-discourse-route: o_auth/redirect
      x-discourse-username: rokejulianlockhart
      x-download-options: noopen
      x-frame-options: SAMEORIGIN
      x-permitted-cross-domain-policies: none
      x-request-id: 01276bd6-77ea-42ae-8f60-6fa365a70e1f
      x-xss-protection: 0
      
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Encoding: gzip, deflate, br
      Accept-Language: en-GB,en;q=0.7,en-US;q=0.3
      Connection: keep-alive
      Host: meta.discourse.org
      Sec-Fetch-Dest: document
      Sec-Fetch-Mode: navigate
      Sec-Fetch-Site: cross-site
      Sec-Fetch-User: ?1
      Upgrade-Insecure-Requests: 1
      User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0
      

Здравствуйте, после последнего обновления, похоже, сломались профили пользователей (/u/user). Отображаются имя пользователя и аватар (а также список нарушений пользователя вверху).

Мы просмотрели список плагинов и отключали их по одному, пока проблема не исчезла. Также всё работало при включённом безопасном режиме. Вот некоторые ошибки клиента, которые мы получали:

Cannot read properties of null (reading 'getBoundingClientRect')
at Object.offset (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:5104:37)
at e.scrolled (https://amcforum.wiki/assets/discourse-9756bc4a118ac228ac6ac3f2b29c7d4a7d60a9f16ece25de4a772f0055c6eb94.js:2347:106)
at p.invoke (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4339:182)
at p.flush (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4331:141)
at h.flush (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4346:207)
at $._end (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4410:9)
at $.end (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4363:240)
at $._runExpiredTimers (https://amcforum.wiki/assets/vendor-db2360c46fde6d9039e575c45f307a3475f72fc389fad00414eaf0f83a1621a6.js:4417:192)

Вот как это выглядит с включённым плагином (для вашей собственной учётной записи):

Для другого пользователя (в данном случае, 9pfs):

Вот ещё одна забавная ошибка, вызванная плагином:

В настоящее время мы используем версию 3.2.0.beta2-dev из этого коммита, а также версию 0.1.0 плагина из этого коммита.

1 лайк

@rokejulianlockhart У вас отключены файлы cookie или работает какое-либо расширение для конфиденциальности? Процесс авторизации в настоящее время требует наличия безопасного сеансового файла cookie для корректной работы.

@aboutDavid Спасибо за сообщение. Хотя это возможно, маловероятно, что описанная вами проблема вызвана сбоем в этом плагине. Не могли бы вы предоставить ссылку на ваш сайт? Также скажите, включены ли у вас какие-либо темы или компоненты тем?

2 лайка

Из диагностики в безопасном режиме мы точно знаем следующее:

  1. Это неофициальный плагин.
  2. Это не тема и не компонент темы.

Насколько мне известно, у нас есть два неофициальных плагина:

  1. Анимация аватаров (вручную подтверждено, что это не причина проблемы).
  2. ActivityPub.

Что касается ссылки на сайт:

3 лайка

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

2 лайка

Проблема на вашем сайте, скорее всего, вызвана чем-то, использующим выходной канал плагина user-profile-avatar-flair. Этот плагин не использует данный канал. Однако плагин анимированных аватаров использует его.

Как вы это подтвердили?

1 лайк

@aboutDavid проверил и убедился, что в плагине нет клиентского JS. Проблема частично на стороне сервера?

1 лайк

Отсутствие клиентского JavaScript не обязательно означает отсутствие проблем на стороне клиента. В данном случае проблема, похоже, возникает из-за способа использования плагина outlet, возможно, в шаблоне. Попробуйте удалить плагин Animated Avatars и сообщите о результатах.

(Кстати, плагин Animated Avatars действительно содержит клиентский JavaScript. См., например).

1 лайк

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

Полагаю, технически они перешли из состояния nil в значение по умолчанию, так что фактического изменения в поведении нет? Тем не менее, было бы хорошо избежать такого логирования удаления, чтобы не вводить в заблуждение.

2 лайка

Спасибо за отчет, Дэвид, я скоро посмотрю.

1 лайк

Ой, я сегодня немного туплю, извините.

edit: да, скорее всего, это анимированные аватары, извините за потраченное время lol

3 лайка

@angus, насколько мне известно, нет.

Кроме того, я отключил uBlock Origin, хотя в любом случае я не использую списки приватности.


Однако сегодня при тестировании я столкнулся с другой проблемой.

https://mastodon.social/oauth/authorize?client_id=Y1GuLE1eoX28c2qqaw1qCe8n_KHF256IPFnpiZYuW5g&response_type=code&redirect_uri=https%3A%2F%2Fmeta.discourse.org%2Fap%2Fauth%2Foauth%2Fredirect&scope=read%3Aaccounts&force_login=true

Ошибка аутентификации клиента из-за неизвестного клиента, отсутствия аутентификации клиента или неподдерживаемого метода аутентификации.