#ktistec 214 hashtags

Todd Sundsted
Release v3.14.0 of Ktistec

v3.14.0 ("question authority") is the end of a long road.

The goal was pluggable, algorithmic feeds. "Pluggable" because I want to drop a script into a directory to add a new algorithm—not recompile the server. "Algorithmic" because I want predictable, fine-grained control over what I see and how it's organized.

I've been working on this feature, across releases, for almost four months. A recent thread gave me the motivation to just get it done!

The discussion in that thread also shaped the result: algorithmic feeds ships with four example algorithms (called "judges") that demonstrate what's possible:

  • quiet_posters shows posts from the people you follow whose posting frequency is in the bottom 25%
  • long_reads groups posts over 500 characters
  • community groups posts from threadiverse servers (Lemmy, PieFed, etc.)
  • polls puts all polls in one feed

One interesting implementation decision: the exchange format between server and judge is an SQLite database holding the batch of posts to be judged. Rather than rolling a custom data exchange format, you get a well-tested file format that brings schema support, serialization/deserialization, and a query language nearly for free.

Here is the full set of changes in this release:

Added

  • Algorithmic feeds, judged by executables in etc/judges.
  • Accept community-relayed votes authorized by the object's audience.
  • Include the linked SQLite3 version and its features in NodeInfo.

Fixed

  • Pick up a remote actor's rotated public key.
  • Don't save actors embedded in community-relayed activities.
  • Ignore community-relayed and directly delivered activities attributed to a local actor.
  • Reload an actor's page only when that actor's Refresh button is pressed.
  • Hide the Refresh button on a local actor's panel.
  • Fall back to the default avatar when a refreshed icon fails to load.
  • Enable icon repair on actor panels and actor cards.
  • Keep the no-replies timeline queries on the timeline index.

Changed

  • Judge feed posts in the background instead of in the request.
  • Reconcile each key once when an actor is blocked or unblocked.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

RE: social.coop/users/scottjenson/

this is a great thread.

i don't have an aversion to "algorithms"—i just want to be in control. surface the "interesting" posts in my inbox—the ones where someone shares something new, novel, or surprising—and bury the posts by the idiots who show up to troll.

it's hard, though. i tried to do it in #ktistec threads by looking for the posts at the center of the conversation instead of the branches where two or three people are just going back and forth—but results are mixed.

Scott Jenson

RE: hachyderm.io/@mekkaokereke/117

GIven the positive traction this post got, I'd like to collect some "benevolent algorithms" we could consider. For example:
* Popular posts among people you follow
* Popular posts on your server
* Popular posts with this hashtag
* What would you suggest???

"popular" is defined as some transparent metric around replies + boosts

Quoted a post by @mekkaokereke@hachyderm.io
Todd Sundsted
Todd Sundsted
Release v3.13.0 of Ktistec

Release v3.13.0 of Ktistec ("love who you choose to love") links the feed deck into the navigation. Feeds are now fully supported.

Feeds are custom collections of posts selected by hashtag, mention, and keyword, each grouped as terms you want any of, all of, or none of, so a feed can be as broad or as narrow as you like. The feed deck is my primary reading interface now.

The rest of the changes mostly address a variety of small federation issues:

Added

  • Link the feed deck from the secondary nav bar.
  • Offer a retry and a link when a quoted post can't be loaded.

Fixed

  • Keep the verify button when a quote authorization can't be fetched.
  • Verify HTTP signatures over the full set of headers the headers signature parameter names.
  • Sign an inbox delivery's fetches with the implicated account.
  • Render directly published media objects as attachments.
  • Handle more attachment media types when rendering.

Changed

  • Finish the feeds API.
  • Widen the metrics charts display.

With feeds shipped, I'm turning my attention back to federation. There are still a ton of small issues (e.g. Likes relayed through Groups are always rejected, RFC 9421 support, blurhash support) that I'd like to squash.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

It is currently de rigueur, I guess, to include little social statements in or alongside the code in your FOSS software projects. Thinking of no project in particular, here...

Not wanting to appear out of fashion, future releases of ktistec will each articulate a different principle I live by.

The next release, which will finally include the feed deck I've been working on, will be known as "Love who you choose to love"—simple guidance for finding happiness in a difficult world.

✌🏻

#ktistec

Todd Sundsted

every so often i crank inbox logging up as loud as it will go and then spend the next two weeks fixing federation bugs. this is apparently the start of those two weeks.

fixing issues with http signatures now...

#ktistec #activitypub #fediverse

Todd Sundsted
Release v3.12.1 of Ktistec

Release v3.12.1 patches a bug that's been present for about two years and fixes issue #163 in the process. Looking at FediDB, it appears most servers on v3.X.X made it through the upgrade to v3.5.0, which is where the bug would have bitten, but the consequences of the bug are annoying enough that a patch is warranted.

Changed

  • Gather query planner statistics on startup and before reconciling materialized views.

Up-to-date query statistics ensure that the expensive migration in v3.5.0 completes in seconds or minutes, instead of hours!

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted
Release v3.12.0 of Ktistec

This release encompasses two broad sets of changes: widening the pool of candidates for feeds and more carefully checking the origin of inbound activities (broadly FEP-fe34, Origin-based security model).

Candidates for feeds were originally limited to posts in the actor's mailboxes. This decision made authorization easy but omitted clearly acceptable posts (for example, posts addressed to the public collection) that arrived via other means (for example, filling in a thread).

Prior to this release, inbox processing did not consistently define an object's origin nor did it apply consistent rules to what it admitted based on the origin.

FEP-fe34 is still not fully enforced, and truth be told, I'm still reviewing some of its mandates, so I'm not yet listing it in Ktistec's federation documentation.

Here's the full list of changes:

Added

  • Notify a deck pane when it has new posts.

Fixed

  • Retry an unresolved quote authorization.
  • Label a draft with the status of its quote request.
  • Compare origins when deciding whether to trust an IRI, key document, or owner.
  • Ignore a trailing slash when matching a dereferenced document's IRI.
  • Allow only Create and Update to update objects.
  • Ignore an inbound vote that fails the FEP-9967 checks.
  • Expand commonly omitted ActivityStreams context terms.
  • Break a long link rather than let it overflow.

Changed

  • Widen the feed scan to every object the server holds.
  • Address a published feed by slug rather than by id.

Removed

  • The proxyUrl property from the actor document.

I am still working hard on the feed deck. Both notifications and feed ordering now work. It's now my preferred reading interface, and should be ready by the next release!

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted
Release v3.11.0 of Ktistec

Despite the fact that a shared inbox is an optional actor endpoint, some servers assume Mastodon and deliver to /inbox instead of the actor's inbox. Okay, fine. This release of Ktistec includes support for shared inboxes.
🖐️🎤

Here's the full changelog:

Added

  • Accept inbound activities at a shared inbox.
  • Bound the time an inbound activity spends fetching remote objects.
  • Collapse long posts behind a generated summary.

Fixed

  • Keep a repeat follow request from ignoring the response already sent.
  • Fix poll's closed namespace, and treat closed and endTime interchangeably.
  • Remove geometry adjustments from the highlighted CSS class.

Changed

  • Be more liberal with the timestamp formats accepted.

My current passion project is the Ktistec feed deck—multiple, parallel panes in the same window, each displaying an algorithmic feed. It will be in usable shape in time for the next release.

#ktistec #crystallang #activitypub #fediverse

Todd Sundsted

The culmination of my recent work on algorithmic feeds is a #fediverse feed reading machine for all of the topics I care about.

Image of an ultrawide monitor showing the Ktistec feed deck across six feeds.

#ktistec