From 76d684a79ace146e505e7222262c27befe5be84f Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Sat, 19 Jul 2025 07:29:32 +0100 Subject: add task-040, update arch v1.0.0 -> v1.0.1, edit epic-000, epic-001, task-011, task-025 --- requirements/architecture/arch-v1.0.0.drawio | 188 --------------------------- requirements/architecture/arch-v1.0.0.md | 63 --------- requirements/architecture/arch-v1.0.0.png | Bin 92612 -> 0 bytes requirements/architecture/arch-v1.0.1.drawio | 188 +++++++++++++++++++++++++++ requirements/architecture/arch-v1.0.1.md | 63 +++++++++ requirements/architecture/arch-v1.0.1.png | Bin 0 -> 92612 bytes requirements/tasks/epic-000.md | 1 - requirements/tasks/epic-001.md | 11 +- requirements/tasks/task-011.md | 2 +- requirements/tasks/task-025.md | 2 + requirements/tasks/task-040.md | 9 ++ 11 files changed, 270 insertions(+), 257 deletions(-) delete mode 100644 requirements/architecture/arch-v1.0.0.drawio delete mode 100644 requirements/architecture/arch-v1.0.0.md delete mode 100644 requirements/architecture/arch-v1.0.0.png create mode 100644 requirements/architecture/arch-v1.0.1.drawio create mode 100644 requirements/architecture/arch-v1.0.1.md create mode 100644 requirements/architecture/arch-v1.0.1.png create mode 100644 requirements/tasks/task-040.md diff --git a/requirements/architecture/arch-v1.0.0.drawio b/requirements/architecture/arch-v1.0.0.drawio deleted file mode 100644 index 5e2d9b8..0000000 --- a/requirements/architecture/arch-v1.0.0.drawio +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/requirements/architecture/arch-v1.0.0.md b/requirements/architecture/arch-v1.0.0.md deleted file mode 100644 index 014cd59..0000000 --- a/requirements/architecture/arch-v1.0.0.md +++ /dev/null @@ -1,63 +0,0 @@ -# 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 - -![architecture diagram](./architecture.png) - -- There must be a desktop GUI implemented in iced.rs (ard-000) -- There must be documented processes for installing and updating the desktop GUI - on the user's machine (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 documented process for recovering the server machine from a - backup after a failure (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 documented processes for installing, updating and operating the - software on the server machine (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? diff --git a/requirements/architecture/arch-v1.0.0.png b/requirements/architecture/arch-v1.0.0.png deleted file mode 100644 index 6f08be2..0000000 Binary files a/requirements/architecture/arch-v1.0.0.png and /dev/null differ diff --git a/requirements/architecture/arch-v1.0.1.drawio b/requirements/architecture/arch-v1.0.1.drawio new file mode 100644 index 0000000..5e2d9b8 --- /dev/null +++ b/requirements/architecture/arch-v1.0.1.drawio @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/requirements/architecture/arch-v1.0.1.md b/requirements/architecture/arch-v1.0.1.md new file mode 100644 index 0000000..c78914c --- /dev/null +++ b/requirements/architecture/arch-v1.0.1.md @@ -0,0 +1,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 + +![architecture diagram](./architecture.png) + +- 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) diff --git a/requirements/architecture/arch-v1.0.1.png b/requirements/architecture/arch-v1.0.1.png new file mode 100644 index 0000000..6f08be2 Binary files /dev/null and b/requirements/architecture/arch-v1.0.1.png differ diff --git a/requirements/tasks/epic-000.md b/requirements/tasks/epic-000.md index 7af6cb3..b351626 100644 --- a/requirements/tasks/epic-000.md +++ b/requirements/tasks/epic-000.md @@ -14,4 +14,3 @@ Status: not ready - [ ] task-029 (CRUDing pipes) - [ ] task-030 (CRUDing buckets) - [ ] task-013 (config & caches) -- [ ] task-011 (distribution) diff --git a/requirements/tasks/epic-001.md b/requirements/tasks/epic-001.md index 0ce4528..4727f57 100644 --- a/requirements/tasks/epic-001.md +++ b/requirements/tasks/epic-001.md @@ -2,16 +2,19 @@ This Epic is done when all the gaps in arch-v1.0.0 are filled. -Status: not ready +Status: ready ## Ordered backlog +- [ ] task-040 (backup recovery process) +- [ ] task-035 (need for a Web GUI) - [ ] task-031 (bank sync) +- [ ] task-037 (caching) +- [ ] task-038 (observability) - [ ] task-032 (security) - [ ] task-033 (resilience) - [ ] task-034 (availability) -- [ ] task-035 (need for a Web GUI) - [ ] task-036 (containerisation/virtualisation) -- [ ] task-037 (caching) -- [ ] task-038 (observability) - [ ] task-039 (Web GUI architecture) +- [ ] task-011 (desktop software distribution) +- [ ] task-025 (server software distribution) diff --git a/requirements/tasks/task-011.md b/requirements/tasks/task-011.md index acf0ce2..7836836 100644 --- a/requirements/tasks/task-011.md +++ b/requirements/tasks/task-011.md @@ -5,6 +5,6 @@ on the user's machine. Source: ard-000 -Epic: epic-000 +Epic: epic-001 Blocked by: task-010 diff --git a/requirements/tasks/task-025.md b/requirements/tasks/task-025.md index f6c8d53..8924352 100644 --- a/requirements/tasks/task-025.md +++ b/requirements/tasks/task-025.md @@ -5,6 +5,8 @@ software on the server machine. Source: ard-008 +Epic: epic-001 + Blocks: task-024 Relates to: task-036 diff --git a/requirements/tasks/task-040.md b/requirements/tasks/task-040.md new file mode 100644 index 0000000..fd017d7 --- /dev/null +++ b/requirements/tasks/task-040.md @@ -0,0 +1,9 @@ +# task-040 + +There must be a documented process for recovering the server machine from a +backup after a failure: otherwise, the backups will be of no use in meeting the +need for the data to be recoverable. + +Sources: req-067, ard-007 + +Epic: epic-001 -- cgit v1.2.3