fix: Build meldet wieder ESLint-Fehler
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:
parent
391134f36d
commit
4a9b276d3c
@ -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
54
TODO.md
@ -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)
|
||||
|
||||
@ -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
4
package-lock.json
generated
@ -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",
|
||||
|
||||
@ -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": {
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user