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