# Release 2026-10-30 – d5b2285 - **Tag:** `release-2026-10-30` auf `d5b2285` - **Ziel:** lokaler Compose-Stack (`compose.yaml`) auf dem Entwicklungsrechner von Julian (`AUTH_DEV_AUTOLOGIN` aktiv, Web auf `0.0.0.0:3001`). Nicht die Produktivinstanz cj-ki. - **Delta:** erstes Release mit Gate, kein vorheriger `release-*`-Tag. Inhalt dieses Stands: Revit-Zuordnungsdialog mit Steckdosen-Höchstwert (R11–R14, `85cbdbf`..`fd7dcbb`), schlankeres Laufzeit-Image (`be8761a`, `d5b2285`). - **Urteil:** Go mit Auflagen (nach Regel No-Go wegen rotem Test; Deploy von Julian am 2026-10-30 ausdrücklich freigegeben). - **Datenbank:** vor dem Start gesichert, `data/backups/leistungsbilanz-2026-10-30T22-18-26-932Z.db` (Integrität ok, 0 FK-Verletzungen). Migration `0018` (`projects.max_sockets_per_circuit`) lief beim API-Start. ## Prüfungen | Prüfung | Ergebnis | Commit | Hinweise | |---|---|---|---| | secrets (gitleaks) | grün | d5b2285 | keine Funde | | lint | grün | d5b2285 | 0 Fehler, nur bekannte Warnungen | | test | rot | d5b2285 | 660/664; einziger Fehler `revit-xlsx-scale` Zeitbudget 15 s (gemessen 15,1–15,6 s, dreimal); auf fd7dcbb mit gleichem App-Code grün | | sast (Semgrep) | grün | d5b2285 | keine Funde | | audit (npm) | grün | d5b2285 | 6 moderate (drizzle-kit/esbuild, exceljs/uuid), kein High/Critical | | mutation | grün | d5b2285 | 11/11 erkannt | | container | grün | d5b2285 | Trivy-Image, Trivy-Config, hadolint; vorher 6 HIGH im mitgelieferten npm, behoben durch `be8761a` | | security-review | grün | fd7dcbb | frischer Kontext, keine K/H; 2 niedrige behoben (`fd7dcbb`), 1 niedrig offen | | zap | nicht ausgeführt | – | Instanz mit Autologin ist kein aussagekräftiges Ziel | | fuzz | nicht ausgeführt | – | keine OpenAPI-Beschreibung | ## K-Punkte (ASVS-light) | Punkt | Bewertung | Beleg | |---|---|---| | A1 Login-Pflicht | belegt | `baseline.test.ts` „jede Route verlangt Login“; Mutationen „Login-Pflicht entfernt“, „ungeschützte Route vor dem Auth-Guard“; neue Route in `tests/external-object-assignment-plan-route.test.ts` | | A2 Identität | belegt | Baseline „gefälschte Identität wird abgelehnt“ | | A3 Port nicht am Proxy vorbei | offen für diesen Rechner | Entwicklungsinstanz ohne Proxy, Web auf `0.0.0.0:3001` mit Autologin (THREATMODEL D2/R15: nur ohne echte Projektdaten). Für cj-ki belegt (R6) | | B1/B2 Objektzugriff | nicht anwendbar | THREATMODEL D1 (Julian, 2026-10-17), `idorGap`; fremde IDs eines anderen Projekts abgewehrt, Route-Test „rejects a circuit list of another project“ | | C1 SQL | belegt | nur Drizzle/gebundene Parameter, Semgrep grün | | E1 Secrets | belegt | gitleaks grün | | E2 CORS | belegt | Baseline „CORS lässt fremde Origins nicht zu“, Mutation | | F1 High/Critical | belegt | `npm audit` ohne High, Container-Scan grün | ## Auflagen 1. **Zeittest `revit-xlsx-scale`:** schwankt um das 15-s-Budget. Entscheidung offen: Budget anpassen oder als Ausnahme in `docs/RELEASE-AUSNAHMEN.md` eintragen (Julian/Christian). 2. **Fehlertexte bei 400 (niedrig, Security-Review):** `respondWithProjectCommandError` gibt interne englische Meldungen aus. Ticket: fachliche Fehlerklasse, Rest generisch beantworten. 3. **Instanz mit Autologin:** auf diesem Rechner nur ohne echte Projektdaten betreiben oder Web an `127.0.0.1` binden.