fix: Build meldet wieder ESLint-Fehler
Some checks are pending
Playwright Tests / test (push) Waiting to run
Test and SonarQube / quality (push) Waiting to run

eslint.ignoreDuringBuilds stand auf true, der Build verschluckte also jede
Lint-Meldung. Im gesamten Projekt gab es genau zwei echte Errors -- beide
"let json" statt "const json" in SettingsSidebar.tsx. Behoben, Schalter aus,
next lint endet mit Exit 0.

Die 695 Warnungen (470 no-explicit-any, 209 ungenutzte Variablen, 11
unvollstaendige Hook-Abhaengigkeiten) blockieren den Build nicht. Die
Hook-Warnungen sind davon die interessantesten, weil daraus echte Bugs
entstehen -- stehen als eigener Punkt in TODO.md.

Naechster Schritt ist typescript.ignoreBuildErrors; der volle tsc-Lauf
dauert wegen WeeklyView.tsx ueber 15 Minuten und laeuft noch.

v1.117.4

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mARTin-B78 2026-09-07 08:57:20 +02:00
parent 391134f36d
commit 4a9b276d3c
6 changed files with 68 additions and 9 deletions

View File

@ -2,6 +2,15 @@
All notable changes to this project are documented in this file.
## [1.117.4] - 2026-09-07
### Fixed
- Der Build meldet wieder ESLint-Fehler: `eslint.ignoreDuringBuilds` steht auf `false`.
Es waren nur **zwei** echte Errors im gesamten Projekt (`let json` statt `const json` in
`SettingsSidebar.tsx`), beide behoben. `next lint` endet jetzt mit Exit 0.
Die 695 Warnungen — 470-mal `no-explicit-any`, 209 ungenutzte Variablen, 11 unvollständige
Hook-Abhängigkeiten — blockieren den Build nicht und werden fortlaufend abgebaut.
## [1.117.3] - 2026-09-06
### Security

54
TODO.md
View File

@ -97,12 +97,16 @@ Anleitung siehe [`docs/secret-rotation.md`](docs/secret-rotation.md).
## Block C — Build und Typsicherheit
### C1. Build darf Fehler nicht mehr verschlucken (Audit 1)
- [ ] **Schritt 1:** `eslint.ignoreDuringBuilds` in `next.config.js` auf `false`
- [ ] Gemeldete ESLint-Fehler abarbeiten
- [x] **Schritt 1:** `eslint.ignoreDuringBuilds` in `next.config.js` auf `false`
- [x] Gemeldete ESLint-Fehler abarbeiten — es waren nur **2** (`prefer-const` in
`SettingsSidebar.tsx`), verifiziert: `next lint` endet jetzt mit Exit 0
- [ ] **Schritt 2:** `npm run type-check` laufen lassen, Fehlerzahl notieren
- [ ] Fehler abarbeiten — modulweise, nicht auf einmal
- [ ] **Schritt 3:** `typescript.ignoreBuildErrors` auf `false`
- [ ] `any`-Stellen reduzieren (aktuell **452**) — fortlaufend, kein Blocker
- [ ] `any`-Stellen reduzieren — ESLint zählt **470** `no-explicit-any` — fortlaufend, kein Blocker
- [ ] **209** ungenutzte Variablen (`no-unused-vars`) aufräumen — fortlaufend
- [ ] **11** unvollständige Hook-Abhängigkeiten (`react-hooks/exhaustive-deps`) prüfen —
die sind die gefährlichsten der Warnungen, weil daraus echte Bugs entstehen
**Warum:** `next.config.js` hat `ignoreDuringBuilds: true` **und** `ignoreBuildErrors: true`.
`tsconfig.json` sagt zwar `strict: true`, das ist aber wirkungslos, weil der Build die Fehler
@ -229,6 +233,50 @@ F1. Kommt etwas anderes heraus, wurde es längst getauscht und du kannst F1 abha
---
## Block G — Infrastruktur (Supabase-LXC 201)
### G1. Container läuft privilegiert *(Sicherheitsthema)*
- [ ] Entscheiden, ob `unprivileged: 0` so bleiben soll
- [ ] Falls nicht: Container neu aufsetzen und Daten übernehmen
**Warum:** `pct config 201` meldet `unprivileged: 0`. Wer aus diesem Container ausbricht, ist
**root auf dem NUC** — bei einem Container, der die Datenbank betreibt, die relevantere
Baustelle als ein fehlendes Root-Passwort. Meist wird das umgestellt, weil Docker im
unprivilegierten Container zickt; nachvollziehbar, aber ein bewusster Kompromiss.
### G2. Besitzverhältnisse im Dateisystem sind schief
- [ ] Kurzfix, falls SSH-Zugang zum Container gebraucht wird:
`pct exec 201 -- chown 0:0 /etc/passwd` und `pct exec 201 -- chown 0:42 /etc/shadow`
- [ ] Langfristig: Container sauber neu aufsetzen
**Warum:** Das Dateisystem stammt aus einem **unprivilegierten** Container (alles liegt mit
UID 100000 auf der Platte), läuft aber jetzt **privilegiert**, also ohne UID-Mapping. root
besitzt dadurch praktisch keine Datei im System. Zeitstempel belegen es: alles vom 26.02.2026
mit UID 100000, nur `/etc/hostname` vom 06.09. mit `0:0` — das schreibt Proxmox von außen.
Symptom war `passwd: Authentication token manipulation error`. Das System läuft trotzdem,
weil root per `CAP_DAC_OVERRIDE` die Rechteprüfung überspringt; Werkzeuge wie `passwd`, die
strenger prüfen, fallen darüber. Weitere solche Merkwürdigkeiten sind zu erwarten.
⚠️ **Kein `chown -R` über das ganze Dateisystem** — nicht am laufenden Container und schon
gar nicht mit Docker darin. Postgres und die Supabase-Container haben eigene UIDs (999, 70, …),
die dabei zerschossen würden.
**Kein Blocker:** `pct enter 201` gibt jederzeit eine Root-Shell ohne Passwort. Ein
Root-Passwort wird nur für direkten SSH-Zugang gebraucht.
### G3. Supabase Studio ist nicht erreichbar
- [ ] Auf 201 prüfen: `docker compose ps` — laufen die Container?
- [ ] Port klären: Studio hängt hinter Kong auf **8000**, nicht 8001
- [ ] `scripts/supabase-setup.sh` korrigieren: falsche Port-Ausgabe und Shebang `#!/bash`
**Warum:** `http://<IP>:8001` antwortet nicht. Die Zahl stammt aus einer `echo`-Zeile in
`scripts/supabase-setup.sh`, die nirgends eine Portfreigabe setzt — beim offiziellen
`supabase/docker`-Stack ist Studio nur über Kong auf 8000 erreichbar. Zusätzlich hat das
Skript `#!/bash` statt `#!/bin/bash` und ist so gar nicht direkt ausführbar.
---
## Kleinkram (ohne Eile)
- [ ] 114 `console.log` aus dem Produktionscode entfernen (die 275 `console.error` sind in Ordnung)

View File

@ -4,7 +4,9 @@ const { version } = require('./package.json');
const nextConfig = {
output: 'standalone',
eslint: {
ignoreDuringBuilds: true,
// Aus: Der Build soll ESLint-Fehler melden. Warnungen (aktuell ~695, überwiegend
// no-explicit-any) blockieren den Build nicht — nur Errors tun das.
ignoreDuringBuilds: false,
},
typescript: {
ignoreBuildErrors: true,

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "my-weekly-todo-list",
"version": "1.117.3",
"version": "1.117.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "my-weekly-todo-list",
"version": "1.117.3",
"version": "1.117.4",
"license": "MIT",
"dependencies": {
"@auth/prisma-adapter": "^2.11.1",

View File

@ -1,6 +1,6 @@
{
"name": "my-weekly-todo-list",
"version": "1.117.3",
"version": "1.117.4",
"description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view",
"main": "index.js",
"scripts": {

View File

@ -3645,7 +3645,7 @@ function SettingsSidebar({
reader.onload = async (evt) => {
try {
const text = evt.target?.result as string;
let json = JSON.parse(text);
const json = JSON.parse(text);
// Normalizing standard terminal formats to a consistent internal format
const normalized: any = {
@ -3727,7 +3727,7 @@ function SettingsSidebar({
reader.onload = async (evt) => {
try {
const text = evt.target?.result as string;
let json = JSON.parse(text);
const json = JSON.parse(text);
const normalized: any = {
background: json.background,