Okay, so I don’t actually speak TypeScript, but I took a look at the source code anyway, which seems to back up my hypothesis. The posts that get published to ActivityPub are created in Post.createArticleFromGhostPost
here, and relevantly, include all the relevant data - title, excerpt, summary, content, URL, etc., per lines 459-477.
Per line 464 in particular, it publishes these to ActivityPub as a post/payload of type Article.
Turning to the Mastodon documentation on payloads here, we see that it doesn’t support articles as a first-class object type, but rather converts them “as best as possible”. Specifically, it uses the “content” field, if available, to generate status text (which is what produces the whole-article-in-the-post result).
It does appear, though, that various forks of the Mastodon server and, of course, other AP clients have varied a lot from this: in theory, per that documentation, we should be seeing the “summary” field (containing the excerpt) used as the content warning and the “url” field (containing the original post link) appended, which doesn’t perfectly match what either I on qoto.org or @Cathy_Sarisky on mastodon.social are seeing; it looks like the former is just using “content” as the status and ignoring the other fields, and as best as I can tell from the screenshot, the latter is appending the URL but using “summary” as the status rather than “content”.
Suggestion:
My suggestion here is to give us the option of not broadcasting the full article content by adding a configuration option (either in .env or by a switch on the Network page) which changes the behavior of Post.createArticleFromGhostPost
. Call it “Publish post summary only”, say.
Set “off”, it maintains the current behavior. Set “on”, it replaces the full-content preparation routine (lines 403-452) with one which assembles the “content” field from a formatted version of the title/excerpt/URL of the Ghost post.
That way, both clients which use the “content” field and those which use the other fields in the ActivityPub article should display the teaser-and-link version of the post which people like me are looking for.