5.3 KiB
Lokales ASSESSOR-Backend
Zweck und Betriebsform
Phase 10 führt die spätere Firmenarchitektur zunächst vollständig auf einem Entwicklungsrechner aus. Ein Node.js-Prozess liefert sowohl die gebaute React-Anwendung als auch die versionierte API aus. Dadurch bleiben Browser und API auf demselben Ursprung.
Browser -> http://127.0.0.1:4173 -> ASSESSOR-Backend -> AssessorRepository
Der Server bindet standardmäßig ausschließlich an 127.0.0.1. Eine Freigabe
im Firmennetz ist damit ausdrücklich noch nicht erfolgt. ASSESSOR_HOST und
ASSESSOR_PORT sind Betriebsparameter; eine Bindung an eine Netzwerkschnittstelle
darf erst zusammen mit Phase 14, HTTPS, Authentifizierung und Berechtigungen
erfolgen.
Start
-
npm run devstartet den vollständigen lokalen Entwicklungsstack. Der Starter prüft zuerst/api/v1/health, baut und startet ein fehlendes Backend auf127.0.0.1:4173und öffnet den Vite-Client erst danach auf127.0.0.1:5173. -
npm run dev:clientstartet bewusst nur den Client und ist für die seltenen Fälle gedacht, in denen das Backend separat verwaltet wird. -
npm run buildbaut Browser-App und Backend. -
npm run start:locallädt eine vorhandene.env.postgresund startet den zuvor gebauten Server auf Port 4173. -
npm run serve:localführt beide Schritte nacheinander aus. -
Der Vite-Entwicklungsserver leitet
/apian Port 4173 weiter; dadurch funktioniert der Datahub auch unterhttp://127.0.0.1:5173, wenn das Backend parallel läuft.
Die App zeigt Server verbunden, wenn /api/v1/health erreichbar ist. Ohne
Backend läuft sie vorübergehend im bisherigen Browser-/Tauri-Modus weiter.
API-Grenze
Alle Endpunkte liegen unter /api/v1. Der Vertrag umfasst:
- Health und rein metadatenbasiertes Audit-Log
- Projekte und Assessments
- Finding-Abfragen und Assessment-Modelle
- Reviews, Profile und lokale Vergleichsregeln
- gespeicherte Vergleiche, Projektexport und kontrollierte Projektlöschung
- atomare Importsitzungen mit Stage, Commit und Rollback
- Dateimetadatenprüfung und serverseitiges Parsen von CSV, JSON, XML, HTML, XLSX und XLS
Fehler besitzen immer code, message und requestId. Schreibzugriffe
verlangen die Kopfzeile X-Assessor-Request: 1; vorhandene Origin-Header
müssen zum Serverursprung passen. Der Server setzt keine CORS-Freigabe.
Importdatenfluss
Die React-App prüft beim Start die lokale API. Bei bestehender Verbindung liest der API-Client die ausgewählte Datei als Bytes und übermittelt sie base64-kodiert an den gleichen lokalen Server. Dort gelten derzeit folgende Grenzen:
- unterstützte Erweiterungen: CSV, JSON, XML, HTML/HTM, XLSX und XLS
- maximale Quelldateigröße: 100 MiB
- maximales JSON-Anfragevolumen: 140 MiB wegen Base64-Overhead
- Metadaten und dekodierte Byteanzahl müssen übereinstimmen
- maximal 50 Dateien je Vorschau; Vorschaucache 15 Minuten, 10 Batches und 256 MiB
- dokumentierte Tabellen-, Zeilen-, Spalten-, Zell-, Markup-, JSON- und ZIP-Grenzen
Die vorhandene plattformneutrale Importengine übernimmt Parsing, Profilwahl und
Erkennung. Im Serverbetrieb läuft jeder Parserauftrag in einem isolierten Worker;
Standardwerte sind 30 Sekunden Laufzeit, 512 MiB Old-Generation-Speicher, zwei
parallele Aufträge und acht wartende Aufträge. Der Node-Markupadapter führt keine
importierten Skripte aus und entfernt aktive HTML-Elemente vor der
Tabellenauswertung. Alle Grenzwerte und konfigurierbaren Workerparameter stehen
in docs/IMPORT_SECURITY_LIMITS.md.
Persistenzstand
Mit ASSESSOR_DATABASE_URL verwendet das Backend den dauerhaften
PostgresAssessorRepository. Migrationen laufen beim Start automatisch und
Health meldet persistence: postgresql. Ohne Datenbank-URL bleibt ein
LocalAssessorRepository als ausdrücklich flüchtiger Entwicklungsmodus
verfügbar. Ist eine URL gesetzt und die Datenbank nicht erreichbar, bricht der
Start ab; es findet kein stiller Fallback statt.
Ein vollständiges lokales PostgreSQL-Setup, Schema-, Migrations-, Backup- und
Restore-Regeln stehen in docs/POSTGRESQL.md.
Kuratierter GPO-Regelkatalog
Ohne weitere Konfiguration startet die Policy-Evaluation mit dem freigegebenen, fachlich leeren Katalog. Ein lokal kuratierter JSON-Katalog wird nur geladen, wenn Pfad und erwarteter SHA-256 gemeinsam gesetzt sind:
ASSESSOR_POLICY_RULE_CATALOG_PATH=C:\geschuetzter-pfad\policy-rules.json
ASSESSOR_POLICY_RULE_CATALOG_SHA256=<64-stelliger SHA-256-Hexwert>
Der Server lädt höchstens 5 MiB aus einer regulären Datei, vergleicht den Inhalt vor dem JSON-Parsing mit dem fest konfigurierten Hash und validiert den vollständigen Katalogvertrag einschließlich Kontextüberschneidungen, Comparatoren, Risiko- und Abhängigkeitsregeln. Fehlende Paarparameter, Hashabweichungen, Symlinks, ungültiges UTF-8/JSON oder fachlich ungültige Regeln verhindern den Serverstart. Die Datei wird weder aus dem Netzwerk bezogen noch durch die Anwendung verändert. Jeder Evaluation Run speichert weiterhin den tatsächlich verwendeten vollständigen Katalog für reproduzierbares Reprocessing.
Originaldateien werden aktuell nicht als separate Serverartefakte abgelegt. Die API verarbeitet die Bytes und speichert die daraus erzeugten kanonischen Fachobjekte. Eine spätere Aufbewahrung von Originalartefakten bleibt eine eigene Datenschutz- und Betriebsentscheidung.