A new package, packages/server: Hocuspocus 3.4.4 on /sync, a project a document, refused with a reason when the store has not got it; every update stored in Postgres as it comes and compacted after 500 updates, a minute of quiet and when the last person leaves (FOR UPDATE on the row written when the project is made); the janitor runs only here, at loading and 250 ms after a change that is not its own; readers change nothing; /healthz; JSON log. On closing it takes no one new and closes the sockets too (Hocuspocus' close is a message after which a client signs in again on the same socket). The tests use real clients against a throwaway Postgres in Docker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
2.7 KiB
Markdown
49 lines
2.7 KiB
Markdown
# mdg-filius
|
|
|
|
Netzwerksimulation nach [FILIUS](https://www.lernsoftware-filius.de) für den
|
|
Browser — als App „Filius" im MDG-Dashboard, gemeinsam bearbeitbar.
|
|
|
|
> Based on Filius by Dr. Stefan Freischlad and the Filius project.
|
|
>
|
|
> Dieses Projekt ist unabhängig. Es wird weder vom ursprünglichen
|
|
> Filius-Projekt (Universität Siegen) noch von `filius-project`
|
|
> (Filius on iPad) herausgegeben, betrieben oder unterstützt.
|
|
|
|
## Herkunft
|
|
|
|
Der Simulationskern ist eine Übertragung nach TypeScript aus
|
|
|
|
* [`filius-project/filius-ipad`](https://github.com/filius-project/filius-ipad)
|
|
(Swift, GPLv2 oder GPLv3) — Vorlage für Kern, `.fls`-Codec und Tests,
|
|
* [`filius1/filius`](https://gitlab.com/filius1/filius) (Java, GPLv2 oder
|
|
GPLv3) — Referenz für Dateiformat und Verhalten.
|
|
|
|
Jede übertragene Datei nennt in ihrem Kopf die Quelldatei. `CHANGES.md` führt
|
|
die Herkunft je Paket. Lizenz dieses Repos: **GPL-3.0** (`LICENSE`).
|
|
|
|
## Aufbau
|
|
|
|
| Pfad | Inhalt |
|
|
| --- | --- |
|
|
| `packages/core` | Simulationskern: Modell, Ereignis-Warteschlange, Protokolle, Anwendungen — ohne DOM, ohne Node |
|
|
| `packages/fls` | `.fls` lesen, schreiben, Unbekanntes bewahren |
|
|
| `packages/doc` | gemeinsames Dokument (Yjs): Projekt ⇄ Dokument, Schnappschuss des Kerns, Hausmeister, die Änderungen der Werkzeuge und des Geräte-Blatts (mit Javas Eingabeprüfung) |
|
|
| `packages/protocol` | die eine Nachrichtenliste zwischen Editor und Simulationsraum (`/sim`) |
|
|
| `packages/sim` | Simulationsraum (für Server F und den Web Worker) und `LocalSimHost` |
|
|
| `packages/editor` | Oberfläche im Iframe des Dashboards (React, Vite): Fläche, Palette, Werkzeuge des Entwurfs, Geräte-Blatt, Aktionsmodus (Desktops, Anwendungen, Datenaustausch), Dokumentationsmodus (Text, Gliederungsfläche, Bild exportieren, Bericht als PDF); `npm run dev -w @mdg-filius/editor` öffnet die Entwicklungsseite |
|
|
| `packages/server` | Filius-Dienst auf Server F: gemeinsame Dokumente über Hocuspocus (`/sync`), gespeichert in Postgres (Stand und Aktualisierungen, verdichtet), Hausmeister, `/healthz`; `npm run build -w @mdg-filius/server` bündelt ihn nach `dist/main.mjs` *(Anmeldung, Simulationsräume und Dienstweg folgen)* |
|
|
|
|
Plan und Entscheidungen: `knowledge/plans/FILIUS_WEB_PLAN.md` im Dashboard.
|
|
|
|
## Entwickeln
|
|
|
|
```bash
|
|
npm install
|
|
npm run hooks # Sprachprüfung vor jedem Commit (braucht das Dashboard drumherum)
|
|
npm run check # Typprüfung + Tests (die Server-Tests starten eine Wegwerf-Postgres in Docker, oder nehmen FILIUS_TEST_DATABASE_URL)
|
|
npm run test:browser # Tests im echten Browser (Playwright: Chromium; der Touch-Test auch in WebKit als iPad hoch und quer)
|
|
```
|
|
|
|
Code, Kommentare und Testnamen sind englisch; sichtbare Texte stehen hinter
|
|
i18n-Schlüsseln (Deutsch/Englisch).
|