docs/spec.txt (view raw)
1honk spec
2
3-- references
4
5See security.txt for some notes on security.
6
7See ping.txt for a proposed Ping extension to ActivityPub.
8
9-- retries
10
11If a message can't be delivered, we backoff and retry.
12
131 - five minutes later in case the servce restarted
142 - one hour later in case the server rebooted
153 - 12 more hours later in case the server was upgraded
164 - 24 more hours later in case there was a catastrophe
175 - it's dead.
18
19A random drift of up to 10% is added to each delay to avoid swarming.
20
21-- federating
22
23Messages are transformed for federation and display. Some transformations
24occur send side and some occur receive client because it's more exciting that
25way. @mentions and *markdown* are converted to HTML before transmission.
26Message :emoji: are converted to inline images after receiving.
27
28-- schema
29
30Some notes on the database schema. Mostly for development, but maybe useful
31for administration as well.
32
33The config table contains settings, some of which may not be editable via the
34normal interface.
35
36For development purposes, adding a config value (debug, 1) to the database
37will disable caching and hot reload templates. It's not meant to be
38harmful in production, just less efficient.
39
40We don't use null, only empty strings. This is easier to work with on the go
41side.
42
43The main table is honks. This stores both locally created honks and incoming
44ActivityPub notes converted to honks. It is important to differentiate the two
45cases so that we don't accidentally publish external honks in the public web
46view. (Previously this was accomplished via separate tables. That made some
47queries more difficult, but I think it's possible to workaround this. It would
48be considerably safer.) The honker column will be empty for local honks.
49
50The what column further refines the type of honk. If a reply, tonk. If
51deleted, zonk. If shared, bonk. In particular for the case of bonk, there
52aren't enough columns to store original honker and bonker. This seems to work
53out okay though.
54
55The honkers table is used to manage follows and followers. The flavor column
56describes what. 'sub' is a follow. We have subscribed to their newsletter.
57'dub' is a follower. They get dubbed whenever we honk.
58
59The xonkers table stores info about external accounts that we may interact
60with. Their keys, their inboxes, etc.
61
62The zonkers table stores things we do not wish to see, per the wherefore
63column. zonkers are bad people, zurls are bad hosts, zonvoys are bad threads.
64
65The xid column generally corresponds to ActivityPub id. For local honks, it
66will be a short string, not a complete URL.
67
68Note that some logical seeming joins won't work. The honker column of honks
69does not have a corresponding entry in the honkers table, since we frequently
70receive messages from people we don't follow. Should we track everybody whose
71identity crosses our path? This seems unnecessary. The honkers table is more
72like a mapping of active relationships, not a directory of all peoples.
73
74Some deduping of honks is performed. This may not be perfect.