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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# Architecture
Status: accepted
## Problems
- Schist must have a read/write SMS interface (req-031, req-045, req-047,
req-053)
- Schist must have a read/write desktop interface (req-021, req-023, req-048,
req-052)
- Schist must read transactions automatically from a banking API (req-015)
- Schist must persist buckets, pipes, drips, and transactions (req-034, req-056,
req-057, req-058, req-051)
- Schist's persisted data must be resilient and recoverable (req-064)
- Schist should have a Web GUI (ass-018)
## Decisions

- There must be a desktop GUI implemented in iced.rs (ard-000)
- The desktop GUI must persist domain entities to an SQLite file (ard-001)
- The desktop GUI must persist config and caches to files (ard-002)
- There must be a CRDT sync server (ard-003)
- There must be a REST API, which sends and receives messages to and from the
desktop GUI and the Web GUI via HTTPS, and sends and receives messages to and
from the CRDT sync server via Unix sockets (ard-004, ard-011)
- The Web GUI must persist domain entities in IndexedDB (ard-005)
- The CRDT sync server must persist domain entities in an SQLite file (ard-006)
- There must be a backups bucket, running on a separate machine to the CRDT sync
server and the users' machines (ard-007)
- There must be a backup service, which makes regular backups of the CRDT sync
server from the same machine, and stores the backups in the backups bucket
over HTTPS (ard-007)
- The server machine must host the CRDT sync server, the SQLite file, the backup
service, the REST API, the SMS API and the Web GUI (ard-008)
- There must be a Web app server, which serves a Web GUI over HTTPS (ard-009)
- The Web GUI must persist config and caches to Local Storage (ard-010)
- There must be an SMS API (req-031, req-045, req-047, req-053)
- The SMS API must send and receive messages to the CRDT sync server via Unix
sockets (ard-011)
## Gaps
- Schist must read transactions automatically from a banking API (req-015)
- Schist must not allow anybody other than the user to access its data at rest
(req-062)
- Schist must not allow anybody other than the user to access its data in motion
(req-063)
- Right now we're assuming that Schist should have a Web GUI (ass-018). Can we
trace this assumption back to user needs?
- Do we need or want any virtualisation or containerisation on the CRDT sync
server?
- Are there expensive lookups or aggregations we should be caching? If so, how
and where should we implement caching?
- Do we want or need any monitoring or logging?
- What patterns or frameworks should we use -- or avoid -- in the Web GUI?
- There must be documented processes for installing and updating the desktop GUI
on the user's machine (ard-000)
- There must be documented processes for installing, updating and operating the
software on the server machine (ard-008)
- There must be a documented process for recovering the server machine from a
backup after a failure (ard-007)
|