Record the 2026-10-30 release

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Julian Appel 2026-10-30 23:19:37 +01:00
parent d5b2285d09
commit 2807b010e9
2 changed files with 63 additions and 0 deletions

View file

@ -905,3 +905,12 @@ Do not introduce global state management unless needed.
entries only after Julian or Christian decide). entries only after Julian or Christian decide).
- After deploy: record `docs/releases/<date>-<commit>.md` (`make release-report`) and tag - After deploy: record `docs/releases/<date>-<commit>.md` (`make release-report`) and tag
`release-<date>` on the deployed commit. `release-<date>` on the deployed commit.
## Letztes Release
- 2026-10-30, Tag `release-2026-10-30` auf `d5b2285`, lokaler Compose-Stack des
Entwicklungsrechners (nicht cj-ki). Urteil: Go mit Auflagen (von Julian
freigegeben trotz rotem Zeittest). Offene Auflagen: Zeitbudget von
`revit-xlsx-scale` klären, generische Fehlertexte bei 400, Autologin-Instanz
nur ohne echte Projektdaten. Protokoll:
`docs/releases/2026-10-30-d5b2285.md`.

View file

@ -0,0 +1,54 @@
# 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.