Plugin ActivityPub

Merci pour votre travail ici ! J’ai vraiment hâte de mettre cela en service, et merci de l’avoir rendu disponible pour les tests, afin que ceux d’entre nous qui ont diverses configurations puissent contribuer au moins aux tests dans un ensemble plus large de scénarios.

En réfléchissant à quand activer cela pour mon site, j’essaie de réfléchir à ce que pourraient être les « portes à sens unique ».

Sous-catégories

J’ai 8 catégories de niveau supérieur, mais en plus j’ai 21 sous-catégories publiques. Avoir à suivre 29 acteurs pour suivre toute l’activité publique du site semble beaucoup. De plus, cela pourrait être une surprise pour les utilisateurs que suivre une catégorie ne suive pas les sous-catégories.

Si je pouvais sélectionner une option dans les paramètres ActivityPub de la catégorie pour « fédérer également les sous-catégories publiques », je le ferais. La décision de fédérer séparément les sous-catégories semble être une porte principalement à sens unique du point de vue de l’utilisateur, je pense. Donc, si vous pouviez envisager une option « fédérer également les sous-catégories », cela pourrait éclairer mes projets. Notre barre latérale par défaut n’affiche que les catégories de niveau supérieur, et le comportement par défaut de Discourse lors de leur consultation regroupe tout le contenu de niveau supérieur et de sous-catégorie, ce qui semble raisonnablement cohérent avec les attentes de Discourse.

Fédérer toutes les choses !

Je pense qu’il pourrait être intéressant d’ajouter également un paramètre à l’échelle du site pour un acteur ActivityPub qui fédère tous les messages publics d’un site. Je l’utiliserais moi-même. Mais je ne vois pas cela comme une porte à sens unique — je configurerais la fédération des catégories dès qu’elle serait prête, même si plus tard j’ajoutais un acteur « all@ » pour tout fédérer.

Limitations de modification

L’une des choses qui n’est pas évidente dans votre publication est qu’elle peut être interprétée comme si seule la section littérale [note]...[/note] ne pouvait pas être modifiée. Pour les autres ici, ce que cela signifie réellement, c’est que si vous fédérez, la modification est actuellement désactivée sur tous les messages dès qu’ils sont fédérés (sauf pour les messages avec une section littérale [note]...[/note]); ce message s’affiche uniquement lorsque vous essayez d’ enregistrer votre modification :

Mon site permet intentionnellement aux utilisateurs suffisamment fiables de modifier indéfiniment, je ne peux donc pas activer cela sans la possibilité de désactiver ce contrôle (ou que le contrôle soit supprimé car les modifications sont fédérées). À titre d’exemple général applicable au-delà de tels sites de confiance, toute catégorie avec des messages en mode wiki sera rompue en configurant la fédération pour cette catégorie.

J’ai essayé de supprimer un message fédéré que j’avais transformé en wiki, et j’ai obtenu ceci :

Cependant, le message a été supprimé et la suppression a été fédérée.

Personnalité

Il serait agréable de fournir une image de profil pour chaque acteur désigné. Dans Mastodon, je ne vois que l’image du pachyderme gris pour chaque acteur de catégorie, et j’aimerais ajouter un peu de personnalité ici. :smiling_face:

Journaux d’erreurs

J’ai rencontré deux types d’erreurs dans mes journaux du plugin activitypub jusqu’à présent :

Message (3 copies signalées)

NoMethodError (undefined method `ap_type' for nil:NilClass)
(eval):7:in `_fast_attributes'
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:367:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:18:in `object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:18:in `_object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:9:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/object.rb:50:in `json'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `map'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `ordered_items'
(eval):7:in `_fast_attributes'
Message

Job exception: undefined method `model' for #<DiscourseActivityPubActivity id: 2, ap_id: "https://social.makerforums.info/cf2e1e8d-83e3-447e...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 3, object_id: "1", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 02:23:13.798564000 +0000", updated_at: "2023-06-01 02:23:13.798564000 +0000">

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activemodel-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'
/var/www/discourse/plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:79:in `after_deliver'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:42:in `perform_request'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:13:in `execute'
/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'
/var/www/discourse/app/jobs/base.rb:232:in `each'
/var/www/discourse/app/jobs/base.rb:232:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.9/lib/sidekiq/processor.rb:202:in `execute_job'

Merci encore pour votre travail sur ce sujet !

8 « J'aime »