summaryrefslogtreecommitdiffhomepage
path: root/protocol.txt
blob: 223f58a278b690542cb483bd07e03d6622c3bcf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
The debug-me protocol is a series of JSON objects, exchanged between
the two participants, known as the user and the developer.

The exact composition of the JSON objects is not described here; see
Types.hs for the data types that JSON serialization instances are derived
from.

A debug-me session starts with the user sending an Activity Seen
containing some introductory message. This first Activity Seen has
Nothing as its prevActivity. All subsequent Activity sent by either the
user or developer has a prevActivity that points to the Hash of
the previous activity, so a chain of Activity is built up.

The exact details about how these objects are hashed is not described here;
see Hash.hs for the implementation. Note that the JSON strings are *not*
directly hashed (to avoid tying hashing to JSON serialization details),
instead the values in the data types are hashed.

The user and developer have different points of view; the debug-me protocol
makes sure that both sides agree on what is happening, to avoid
disagreements. For example, the developer could send an Activity Entered
at the same time the user is sending an Activity Seen. In this case,
the developer didn't see something that happened while they were entering
a command. So, when the user receives their Activity Entered, and sees that
its prevActivity does not point to the just sent Activity Seen, the user
will reject that input, sending back a Rejected message to let the
developer know.

This requirement that the developer always send Activity Entered that points
to the last Activity that the user has sent/accepted is known as the
synchronicity requirement.

The synchronicity requirement can be problematic when the developer is
entering a command, because each letter they type gets echoed back, and
that echo happens asynchronously. To avoid needing to wait for the letter
to be echoed back before the next letter can be entered, the debug-me
protocol allows the developer to include echoDatta in an Activity Entered.