No description
Find a file
Grovy311 02637c1f32 chore(security): Baseline-Update 2026-10-27 (mutation_check, Testvorlage)
Aus cj/security-baseline a04c20b übernommen:
- scripts/security/mutation_check.py: Syntax-/Importfehler aus einer Mutation zählen nicht
  mehr als getötet ([UNGÜLTIG]); getötet nur bei echtem Testfehler (pytest, unittest,
  node:test spec und TAP), TODO-/SKIP-Tests sind kein Beleg.
- Sicherheitstest-Vorlage: ungültige Eingaben müssen konfiguriert sein (Leerlauf-Sperre).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:04:48 +01:00
.agents/skills fix(security): stamp.py schreibt kein __pycache__ mehr 2026-10-17 11:10:44 +02:00
.claude/skills fix(security): stamp.py schreibt kein __pycache__ mehr 2026-10-17 11:10:44 +02:00
.forgejo/workflows Add test and security baseline 2026-10-15 09:40:33 +02:00
.semgrep Add test and security baseline 2026-10-15 09:40:33 +02:00
docs docs(security): R6 behoben, LAN-Port 3090 geschlossen 2026-10-17 13:13:18 +02:00
scripts chore(security): Baseline-Update 2026-10-27 (mutation_check, Testvorlage) 2026-10-27 22:04:48 +01:00
src Address security review notes 2026-10-15 09:45:59 +02:00
tests chore(security): Baseline-Update 2026-10-27 (mutation_check, Testvorlage) 2026-10-27 22:04:48 +01:00
.dockerignore Harden the container runtime and shut down cleanly 2026-09-16 11:04:34 +02:00
.env.example Document authenticated deployment 2026-09-28 22:42:11 +02:00
.gitignore Add test and security baseline 2026-10-15 09:40:33 +02:00
.gitleaks.toml Add test and security baseline 2026-10-15 09:40:33 +02:00
.pre-commit-config.yaml Add test and security baseline 2026-10-15 09:40:33 +02:00
AGENTS.md chore(security): Baseline-Update 2026-10-27 (mutation_check, Testvorlage) 2026-10-27 22:04:48 +01:00
baseline.mk Add test and security baseline 2026-10-15 09:40:33 +02:00
CLAUDE.md Add test and security baseline 2026-10-15 09:40:33 +02:00
compose.dev.yaml Document authenticated deployment 2026-09-28 22:42:11 +02:00
compose.yaml Document authenticated deployment 2026-09-28 22:42:11 +02:00
Dockerfile Harden the container runtime and shut down cleanly 2026-09-16 11:04:34 +02:00
drizzle.config.ts first commit 2026-04-30 18:22:10 +02:00
eslint.config.mjs Add test and security baseline 2026-10-15 09:40:33 +02:00
Makefile chore(security): Baseline-Update Prüfstempel und release-checks 2026-10-17 10:46:29 +02:00
next-env.d.ts Update generated Next.js types 2026-07-22 23:08:32 +02:00
next.config.mjs Harden authentication and put filter toggle and fields in one row 2026-09-28 21:30:30 +02:00
package-lock.json Add test and security baseline 2026-10-15 09:40:33 +02:00
package.json Add test and security baseline 2026-10-15 09:40:33 +02:00
README.md Harden Linear XLSX end to end 2026-09-30 21:02:20 +02:00
security-mutations.toml Add test and security baseline 2026-10-15 09:40:33 +02:00
tsconfig.json Add configurable structured logging 2026-08-06 19:45:39 +02:00
tsconfig.next.json Add configurable structured logging 2026-08-06 19:45:39 +02:00
tsconfig.scripts.json Add configurable structured logging 2026-08-06 19:45:39 +02:00

Leistungsbilanz

Leistungsbilanz ist eine Webanwendung für die elektrische Ausführungsplanung. Im Mittelpunkt steht ein tabellenähnlicher Stromkreislisten-Editor, der Stromkreise, Gerätezeilen und wiederverwendbare Projektgeräte fachlich getrennt behandelt.

Das Projekt befindet sich in aktiver Entwicklung. Für SQLite stehen ein Docker-Server-Stack mit gebautem Anwendungscode und ein separater Entwicklungsstack bereit. Ein vollständig unterstütztes Produktionsdeployment für mehrere gleichzeitig arbeitende Prozesse und ein vollständig unterstütztes Produktionsdeployment fehlen weiterhin. Anmeldung und zwei feste Rollen sind vorhanden. Die Backend- und Persistenzgrundlage der bisherigen Revit-CSV-/IfcGUID-Anbindung ist durch den XLSX-Austausch des Linear-Plugins mit Worksharing-ID als externem Schlüssel ersetzt. R0 bis R10 sind abgeschlossen; die eigene Revit-Seite unterstützt Einstellungen, Erst- und Folgeimport, virtuelle Objektbearbeitung, Editorzuordnung und strukturtreue Rückgabe. Die Phase-14-Kette ist Ende zu Ende und mit 5.000 synthetischen Objekten geprüft.

Unterstützter Arbeitsablauf

  • Projekte und Verteilungen verwalten; Gebäude, Etagen und Räume auf einer eigenen Seite pflegen, Räume optional mit Fläche und Summen je Etage und Gebäude
  • pro Verteilung geschützte Stromkreisgruppen für Beleuchtung, 1-phasige und 3-phasige Stromkreise verwalten
  • Hauptschalter, Überspannungsableiter, Gruppenschutz und zusätzliche Verteilergeräte in der Stromkreisliste abbilden
  • Schutzgeräte je Stromkreis und optional je Gruppe konfigurieren
  • Leitungsquerschnitte für einzelne Stromkreise auf Anforderung nach DIN VDE 0298-4 berechnen und ausdrücklich übernehmen
  • leere, einzeilige und mehrzeilige Stromkreise abbilden
  • Stromkreise und Gerätezeilen per Drag-and-drop umstrukturieren
  • Projektgeräte einfügen, verknüpfen und kontrolliert synchronisieren
  • komplette Stromkreisblöcke filtern und sortieren
  • BMKs stabil halten und nur auf ausdrücklichen Befehl neu nummerieren
  • Änderungen projektweit und auch nach einem Reload rückgängig machen und wiederholen
  • benannte Sicherungspunkte anlegen, wiederherstellen und Revisionen einsehen
  • automatische Sicherungspunkte mit begrenzter Aufbewahrung nutzen
  • Seitenansicht mit Deckblatt, Verteilerübersicht und Verteilerplänen öffnen und über den Browser als PDF drucken; Büroangaben und Logo zentral pflegen
  • grobe Leistungsbilanzen für LPH 2/3 nach Kostengruppen führen, mit der detaillierten Bilanz vergleichen und einzelne Zeilen als Projektgerät übernehmen
  • Linear-XLSX-Dateien verlustarm lesen und schreiben; Erst- und Folgeimporte prüfen, Revit-Objekte zuordnen und geplante Werte strukturerhaltend an Linear zurückgeben

Technik

  • Next.js 16, React 19 und TypeScript für das Frontend
  • Express 5 und Zod für die API
  • SQLite, better-sqlite3 und Drizzle ORM für die Persistenz
  • eigener Spreadsheet-Grid statt eines Bootstrap-Tabellenframeworks
  • Node.js-Test-Runner für Domain-, Grid- und SQLite-Integrationstests

Schnellstart mit Docker

Voraussetzungen:

  • Git
  • Docker Desktop mit Docker Compose
git clone <repository-url>
Set-Location leistungsbilanz-ts
$env:AUTH_BOOTSTRAP_USERNAME = "admin"
$env:AUTH_BOOTSTRAP_PASSWORT = "<eigenes Startpasswort mit mindestens 12 Zeichen>"
docker compose up --build --detach

Danach:

Beim ersten Start erzeugen diese beiden Variablen genau einen Administrator, solange die Benutzertabelle noch leer ist. Danach werden sie ignoriert. Für einen dauerhaften Serverbetrieb gehören die Werte in eine nicht versionierte .env neben compose.yaml; Details stehen unter Anmeldung und Benutzerverwaltung.

Die Express-API ist nicht auf dem Host veröffentlicht. Sämtliche fachlichen API-Routen verlangen eine gültige Anmeldung; der Zugriff läuft über den Rewrite im Web-Dienst.

Der API-Container führt ausstehende Migrationen und die Schemaprüfung beim Start automatisch aus. Die SQLite-Datei liegt auf dem Host unter data/leistungsbilanz.db und bleibt beim Stoppen erhalten.

Das Laufzeit-Image läuft als Benutzer node (UID 1000), nicht als root. Ein data/-Verzeichnis, das ein früherer root-Container angelegt hat, braucht deshalb einmalig sudo chown -R 1000:1000 data auf dem Host.

docker compose ps
docker compose logs --follow
docker compose down

compose.yaml startet den Produktionsstand: gebautes dist/ und next start, ohne Quellcode-Mounts und ohne Datei-Watcher, mit Speichergrenzen und ohne root-Rechte im Container. Details stehen in Deployment und Betrieb.

Für die Entwicklung mit Hot Reload gibt es einen eigenen Stack mit Quellcode-Mounts und Watchern:

docker compose -f compose.dev.yaml up --build --detach
docker compose -f compose.dev.yaml logs --follow
docker compose -f compose.dev.yaml down

Die Watcher darin laufen im Polling-Modus, weil Bind-Mounts unter Windows und macOS keine inotify-Events durchreichen. Das kostet dauerhaft CPU, auch wenn niemand die Anwendung benutzt — deshalb gehört dieser Stack nicht auf einen Server.

Direkte lokale Entwicklung

Voraussetzungen:

  • Node.js 24
  • npm
npm ci
npm run db:migrate
npm run db:verify:circuit-schema
$env:AUTH_BOOTSTRAP_USERNAME = "admin"
$env:AUTH_BOOTSTRAP_PASSWORT = "<eigenes Startpasswort mit mindestens 12 Zeichen>"
npm run dev:api

In einem zweiten Terminal:

npm run dev:web

Frontend und API laufen anschließend auf denselben Ports wie im Docker-Setup.

Qualitätssicherung

npm test
npm run build:api
npm run build:web
npm run typecheck:scripts
npx tsc --noEmit -p tsconfig.next.json

Wichtige Datenbankbefehle:

npm run db:backup
npm run db:migrate
npm run db:verify:circuit-schema
npm run db:generate

db:backup verwendet die SQLite-Online-Backup-API und prüft das Ergebnis auf Integrität und Fremdschlüsselverletzungen. Migration 0000 ist die Release-Baseline für eine leere Datenbank; nachfolgende nummerierte Migrationen entwickeln diese Baseline additiv weiter. Datenbanken aus Entwicklungsständen vor der Baseline werden nicht unterstützt.

Dokumentation

Für LLM-gestützte Änderungen enthält AGENTS.md die verbindlichen Domänenregeln, unterstützten Einstiegspunkte und Architekturgrenzen.