2026-09-09 12:59:55 +02:00
|
|
|
|
# Taken - Testclient
|
|
|
|
|
|
|
|
|
|
|
|
> Prioriteit: **A** | Afhankelijk van: –
|
|
|
|
|
|
>
|
|
|
|
|
|
> **Nieuw en meteen actief op 09-09-2026.** Het masterplan werd dezelfde dag geschreven en op verzoek van
|
|
|
|
|
|
> de gebruiker direct gepromoveerd. Nummer 003, onder de bestaande 005: tier A was leeg en dit is nu de
|
|
|
|
|
|
> lopende focus, dus de bovenkant van de reeks klopt weer.
|
|
|
|
|
|
>
|
|
|
|
|
|
> **Waarom dit plan er is:** vier beweringen over Evolu Relay rusten op redenering uit de broncode in
|
|
|
|
|
|
> plaats van op een proef, waaronder dat blokkeren pas bij de volgende verbinding werkt. Zonder een cliënt
|
|
|
|
|
|
> die geen hardware nodig heeft, blijft dat zo.
|
|
|
|
|
|
|
|
|
|
|
|
## Volgende stap
|
|
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
- [ ] **`.env` invullen met het adres van de relay, en dan fase 4.** Alles staat klaar: de cliënt, het
|
|
|
|
|
|
bedieningsvlak en de opdracht `klop` die de HTTP-status van de upgrade laat zien. Wat er nog nooit
|
|
|
|
|
|
gebeurd is, is een verbinding met een echte relay. **Eigenaar: gebruiker**, want het adres gaat niet
|
|
|
|
|
|
in deze publieke repo; kopieer `.env.sample` naar `.env` en zet `RELAY_URL`
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
|
|
|
|
|
## Fase 1 - de samenstelling (af)
|
|
|
|
|
|
|
|
|
|
|
|
- [x] **`@evolu/common` 8.7.0 en `@evolu/nodejs` 3.1.0 geïnstalleerd in `tools/relay-client/`
|
|
|
|
|
|
(09-09-2026)**
|
|
|
|
|
|
- [x] **Vastgesteld dat `@evolu/nodejs` géén cliënt bevat**, alleen de relay plus losse bouwstenen. De
|
|
|
|
|
|
afhankelijkheden voor `createEvolu` worden daarom zelf samengesteld in `src/evolu-node.js`; zie
|
|
|
|
|
|
[PLAN.md](PLAN.md) §4e voor de vier valstrikken die dat kostte
|
|
|
|
|
|
- [x] **Bewezen dat het werkt zonder relay (09-09-2026):** een eigenaar aanmaken, een Evolu-instantie met
|
|
|
|
|
|
`transports: []`, een rij met een `Uint8Array`-kolom wegschrijven en teruglezen. De bytes komen er
|
|
|
|
|
|
ongeschonden uit en het proces sluit schoon af, zonder defect en zonder te blijven hangen
|
|
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
## Fase 2 - de opdrachtregel (af, 09-09-2026)
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
- [x] **Een eigenaar aanmaken en bewaren.** `src/register.js`: één `owners.json` met naam, mnemonic en
|
|
|
|
|
|
`OwnerId`, geschreven via een tijdelijk bestand en een hernoeming. Het `OwnerId` wordt afgedrukt, de
|
|
|
|
|
|
mnemonic nooit
|
|
|
|
|
|
- [x] **Aanmaken, opsommen, teruglezen, weggooien.** `nieuw`, `lijst`, `vergeet`. Vergeten is vergeten:
|
|
|
|
|
|
de lokale database blijft staan en op de relay verandert er niets, en dat zegt de uitdraai er ook bij
|
|
|
|
|
|
- [x] **Verbinden met de relay via `createOwnerWebSocketTransport`**, met het adres uit `.env`
|
|
|
|
|
|
(`src/config.js`, met `.env.sample` ernaast). **Gebouwd maar niet beproefd**, want er is nog geen
|
|
|
|
|
|
adres; dat is de volgende stap
|
|
|
|
|
|
- [x] **Een blob schrijven met een instelbare omvang, en teruglezen.** `schrijf` en `lees`, met
|
|
|
|
|
|
`--bytes` en `--lokaal`
|
|
|
|
|
|
- [x] **De losse WebSocket-poging die de HTTP-statuscode wél te zien krijgt:** `src/probe.js` en de
|
|
|
|
|
|
opdracht `klop`. Met `node:http` en niet met de WebSocket van Node, want die geeft je bij een
|
|
|
|
|
|
weigering een `error` en geen 401. Daarmee is [OPEN.md](OPEN.md) punt 1 opgelost vóórdat het een
|
|
|
|
|
|
probleem werd
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
## Fase 3 - het bedieningsvlak (af, 09-09-2026)
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
- [x] **De HTTP-server met de pagina**, op localhost. `src/ui.js` en `src/index.html`, geen framework en
|
|
|
|
|
|
geen bouwstap, net als de twee statuspagina's
|
|
|
|
|
|
- [x] **De lijst met eigenaars**, met per eigenaar de toestand, het aantal blobs en de knoppen uit
|
|
|
|
|
|
[PLAN.md](PLAN.md) §4b: aankloppen, verbinden, verbreken, blob schrijven met omvang, lezen, vergeten
|
|
|
|
|
|
- [x] **Het log**, met tijdstip per gebeurtenis
|
|
|
|
|
|
- [x] **`Start.bat` en `Start.command`**, op verzoek van de gebruiker. Ze draaien `npm install` als het
|
|
|
|
|
|
nodig is, waarschuwen als `.env` ontbreekt, openen de browser en houden het venster open bij een fout
|
|
|
|
|
|
- [x] **In de browser nagekeken** (09-09-2026): een blob schrijven en teruglezen werkt vanuit de pagina,
|
|
|
|
|
|
de gegevens zijn dezelfde als die van de opdrachtregel, en licht en donker kloppen allebei
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
|
|
|
|
|
## Fase 4 - de proeven
|
|
|
|
|
|
|
|
|
|
|
|
De zes proeven staan in [PLAN.md](PLAN.md) §4c. Ze zijn handwerk en hebben een draaiende relay nodig, dus
|
|
|
|
|
|
ze komen na fase 2 en kunnen deels vóór fase 3.
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] Onbekende eigenaar met het venster dicht: 401, en een regel in de weigerlijst
|
|
|
|
|
|
- [ ] Toelaten en opnieuw verbinden: komt de hele geschiedenis alsnog binnen
|
|
|
|
|
|
- [ ] Blokkeren tijdens een lopende verbinding: blijft hij schrijven tot de volgende verbinding
|
|
|
|
|
|
- [ ] Het venster van twee minuten met de pagina dicht
|
|
|
|
|
|
- [ ] Eén blob boven `RELAY_MAX_WRITE_BYTES`, en meerdere kleinere die samen groter zijn
|
|
|
|
|
|
- [ ] Twee eigenaars tegelijk verbonden
|
|
|
|
|
|
- [ ] **De uitkomsten terugschrijven** naar §10 van
|
|
|
|
|
|
[Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md) en naar open punt 10 van het
|
|
|
|
|
|
plan **Umbrelapp**. Dit is de opbrengst van het hele plan; zonder deze stap blijft het gereedschap
|
|
|
|
|
|
zonder resultaat
|
|
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
## Fase 5 - de toetsen (af, 09-09-2026)
|
2026-09-09 12:59:55 +02:00
|
|
|
|
|
|
|
|
|
|
Wat automatisch kan is klein, en [PLAN.md](PLAN.md) §7 zegt waarom.
|
|
|
|
|
|
|
2026-09-09 13:39:47 +02:00
|
|
|
|
- [x] **Het register**, in `tests/test_client_register.mjs`: aanmaken, teruglezen, een naam die al
|
|
|
|
|
|
bestaat, een onleesbaar bestand, een onbekende versie. Deze toets heeft géén pakketten nodig, want
|
|
|
|
|
|
`register.js`, `argumenten.js` en `config.js` raken Evolu niet aan
|
|
|
|
|
|
- [x] **Een vaste mnemonic met een vast verwacht `OwnerId`**, in `tests/test_client_lokaal.mjs`. Dit is de
|
|
|
|
|
|
toets die omvalt als Evolu onder ons iets anders gaat doen met de afleiding
|
|
|
|
|
|
- [x] **Het lezen van de opdrachtregel** en van `.env`, met de omzetting van `http://` naar `ws://`
|
|
|
|
|
|
- [x] **Afsluiten en heropenen**, en dat is er een die een echte fout vasthoudt: `evolu.insert` zet de
|
|
|
|
|
|
schrijfactie in de wachtrij en geeft meteen een id terug, dus wie vlak daarna afsluit is de rij kwijt.
|
|
|
|
|
|
`schrijf` wacht daarom op een query erachter
|
|
|
|
|
|
- [x] **Mutatie-getest**, drie keer: de polyfill uitzetten, de dubbele-naam-controle uitzetten, en de
|
|
|
|
|
|
omzetting van `http://` slopen. Alle drie lieten de júiste toets omvallen. De eerste liet zien dat de
|
|
|
|
|
|
suite bij een defect in een worker blíjft hangen in plaats van rood te worden, en daarom heeft
|
|
|
|
|
|
`test_client_lokaal.mjs` nu een wachthond van dertig seconden
|