DER FEHLER ZUERST, denn er ist meiner von gestern: die Liste der
Meldungsanlaesse stand ZWEIMAL da -- als Standard in meldung.ts und noch einmal
als Weissliste beim Speichern in dash.ts. Beim Einbau des Plattenwaechters habe
ich nur die erste angefasst.
Ergebnis: das Kaestchen "Der Platz auf der Platte wird knapp" liess sich
ankreuzen, der Server warf den Wert beim Speichern weg, und beim naechsten
Laden war es wieder aus. Ohne ein Wort dazu. Nachgemessen am laufenden Dienst:
geschickt ["sicherung","verwaiste","platte"]
gespeichert ["sicherung","verwaiste"]
Die Liste steht jetzt an EINER Stelle (ANLAESSE in meldung.ts) und wird von
beiden benutzt. Gegengeprueft: alle drei kommen an.
SITZUNGEN BEENDEN. Wer sich an einem fremden Rechner angemeldet hat und es
spaeter merkt, hatte keine Moeglichkeit das zurueckzunehmen -- ein geaendertes
Passwort half nicht, die Sitzungen haengen an einer eigenen Tabelle und
ueberleben es. Der Knopf steht im Kontomenue und nur dann, wenn es ueberhaupt
eine zweite Sitzung gibt. Gemessen: 87 offen, 86 beendet, meine lebt.
Dabei in die eigene Falle getreten: der Weg lag zuerst bei den anderen
/auth-Wegen -- und die stehen mit Absicht VOR der Wache, weil man sich anmelden
koennen muss, ohne angemeldet zu sein. Dort ist c.get('user') leer, und der Weg
antwortete mit "Cannot read properties of undefined". Hono setzt Middleware und
Handler in der Reihenfolge ihrer Anmeldung zusammen; der Pfad sagt darueber
nichts.
VERWALTUNGS-VERLAUF. Der Datei-Verlauf beantwortet "was ist mit den Dateien
passiert". Wer den Discord-Webhook geaendert, einen Token angelegt oder ein
Konto entfernt hat, stand nirgends. Bei zwei Konten verschmerzbar -- sobald ein
drittes ueber die Discord-Rolle von selbst entsteht, ist es die erste Frage.
Eigene Tabelle und nicht events: dort traegt jede Zeile path und size, und eine
Einstellungsaenderung muesste path mit etwas fuellen, das kein Pfad ist.
WERTE STEHEN DORT NIE, nur Schluesselnamen. Unter den Einstellungen liegen das
Discord-Geheimnis und das Nextcloud-Passwort; ein Verlauf, der sie mitschreibt,
macht aus einer Tabelle mit einem Passwort eine Tabelle mit allen, die es je
gab.
Beim Einbau derselbe Fehlertyp wie gestern beim SVG: im SQL-Kommentar standen
Backticks, und das Schema liegt in einem Template-Literal -- ein Backtick
beendet es. Der Uebersetzer hat es gefangen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
142 lines
5.9 KiB
Markdown
142 lines
5.9 KiB
Markdown
# Was noch ginge
|
||
|
||
Stand 12.08.2026. Diese Liste ist **nicht** eine Sammlung von allem, was
|
||
denkbar wäre — sie ist das, was beim Bauen und Messen wirklich aufgefallen ist.
|
||
Was hier steht, hat einen Grund; was keinen hatte, steht am Ende unter
|
||
„Verworfen, mit Begründung".
|
||
|
||
Sortiert nach dem, was ich zuerst täte.
|
||
|
||
---
|
||
|
||
## 1 · Sicher wertvoll
|
||
|
||
### ~~Die Oberfläche auf dem Telefon~~ — abgelehnt am 12.08.2026
|
||
|
||
> Vom Betreiber verworfen: das Dashboard wird nicht mobil benutzt. Der Rest des
|
||
> Abschnitts bleibt stehen, damit die Messung nicht verlorengeht, falls sich das
|
||
> je ändert.
|
||
|
||
**Gemessen:** 18 Umbruchpunkte (`sm:`/`lg:`/`xl:`) im ganzen Frontend. Die
|
||
Galerie ist ein Raster und passt sich an — die **vier Tabellen** in Verlauf,
|
||
Token, Konten und Papierkorb nicht. Auf einem Telefon laufen sie seitlich
|
||
heraus.
|
||
|
||
Der Umbau ist keine Kosmetik: Karten statt Tabellenzeilen unterhalb einer
|
||
Breite, so wie es die Galerie schon macht. Betrifft vier Dateien.
|
||
|
||
**Lohnt sich nur, wenn du das Dashboard mobil aufmachst.** Sonst ist es
|
||
Arbeit für einen Bildschirm, den niemand benutzt.
|
||
|
||
### Sitzungen beenden können
|
||
|
||
**Gemessen:** 86 offene Sitzungen, davon 82 von `admin` — meine Testanmeldungen
|
||
von heute. Sie laufen nach 30 Tagen aus, und `pruneSessions` räumt stündlich
|
||
die abgelaufenen weg. Was fehlt, ist ein Knopf **„alle anderen Sitzungen
|
||
beenden"** im Kontomenü.
|
||
|
||
Das ist mehr als Ordnung: wer sich an einem fremden Rechner angemeldet hat und
|
||
es später merkt, hat heute keine Möglichkeit, das zurückzunehmen — außer das
|
||
Passwort zu ändern und zu hoffen, dass das die Sitzungen mitnimmt (tut es
|
||
nicht, sie hängen an einer eigenen Tabelle).
|
||
|
||
### Was der Verlauf nicht sieht
|
||
|
||
**Gemessen:** `events` kennt `upload`, `replace`, `delete`, `move`, `rename` —
|
||
alles über **Dateien**. Nichts über **Einstellungen**. Wer den Discord-Webhook
|
||
geändert hat, wer einen Token angelegt oder gelöscht hat, wer ein Konto
|
||
entfernt hat: steht nirgends.
|
||
|
||
Bei zwei Konten ist das verschmerzbar. Sobald ein drittes dazukommt — und über
|
||
die Discord-Rolle entsteht es von selbst — ist es die erste Frage, die man
|
||
stellt, wenn etwas anders ist als gestern.
|
||
|
||
---
|
||
|
||
## 2 · Nützlich, wenn der Fall eintritt
|
||
|
||
### Massen-Umbenennen
|
||
|
||
Suchen und Ersetzen über Pfade, mit Vorschau vor dem Zuschlagen. Bei 3578 Items
|
||
ist eine Umbenennung von Hand keine.
|
||
|
||
Der Anlass wäre etwa: `items/` nach `inventar/` verschieben, oder eine
|
||
Namenskonvention ändern. Heute geht das nur Datei für Datei oder gar nicht.
|
||
|
||
**Die Warnung wäre dieselbe wie beim Ordner-Umbenennen** — jede alte Adresse
|
||
gibt danach 404 —, nur mal tausend.
|
||
|
||
### Bilder beim Ablegen verkleinern
|
||
|
||
Eine Obergrenze für die Kantenlänge, einstellbar je Token. Wer ein 6000 × 4000
|
||
großes Foto hochlädt, bekommt es auf, sagen wir, 2048 gerechnet.
|
||
|
||
**Gemessen und deshalb keine Dringlichkeit:** ein 12000 × 12000 großes PNG hat
|
||
den Dienst *nicht* in Verlegenheit gebracht — Vorschau in 374 ms, Speicher bei
|
||
47 MB von 31 GB. libvips arbeitet kachelweise und dekodiert nie das ganze Bild.
|
||
Es geht also um Plattenplatz und Ladezeit beim Ausliefern, nicht um Stabilität.
|
||
|
||
### Fehlende Bilder finden
|
||
|
||
Eine Liste hereinreichen (Fahrzeugmodelle, Item-Namen) und beantwortet
|
||
bekommen: **wozu fehlt ein Bild?** Heute beantwortet das niemand — das
|
||
Fotostudio weiß, was es aufgenommen hat, der Dienst weiß, was liegt, und die
|
||
Differenz rechnet niemand aus.
|
||
|
||
Das wäre ein Endpunkt, der eine Liste entgegennimmt und die fehlenden
|
||
zurückgibt. Klein, und die Antwort auf „warum zeigt das Handy bei manchen
|
||
Autos kein Bild".
|
||
|
||
### Einstellungen aus- und einlesen
|
||
|
||
Discord-Zugang, Sicherungsziel, Vorlagen, Meldungsanlässe — alles steht in
|
||
`settings` und ist beim Neuaufsetzen von Hand nachzutragen. Ein Export als JSON
|
||
(**ohne** die Geheimnisse, oder mit einer ausdrücklichen Ansage) macht aus
|
||
einer Stunde Klickerei fünf Minuten.
|
||
|
||
---
|
||
|
||
## 3 · Wäre schön, drängt nicht
|
||
|
||
- **Verlauf als CSV** — der Export kann heute nur Medien, nicht Ereignisse.
|
||
- **Meldung bei Upload** — Discord-Nachricht, wenn über einen Token etwas
|
||
Neues ankommt. Nützlich für Bildschirmfotos aus dem Spiel, sinnlos für einen
|
||
Serienlauf über 900 Fahrzeuge; bräuchte also eine Drossel.
|
||
- **Papierkorb mit Größendeckel** — heute nur 30 Tage. Wer 200 GB löscht, hat
|
||
sie 30 Tage lang doppelt. Bei 910 GB frei ist das keine Not.
|
||
- **Mehrere Sicherungsziele** — die Archive liegen auf derselben Platte wie die
|
||
Daten, die Kopie in der Nextcloud ist die einzige Trennung.
|
||
|
||
---
|
||
|
||
## Verworfen, mit Begründung
|
||
|
||
Diese standen auf der Liste und sind **gemessen** wieder heruntergefallen. Sie
|
||
stehen hier, damit sie nicht beim nächsten Mal wieder aufschlagen.
|
||
|
||
| Idee | Warum nicht |
|
||
|---|---|
|
||
| Doppelte Dateien zusammenführen | 5 Gruppen, **0,0 MB** verschwendet. Es gibt nichts zu holen. |
|
||
| Aufräumen nach Alter | Alle vier Altersstufen im Bericht stehen auf **0 Dateien**. Es ist nichts alt. |
|
||
| Grenze für Bildmaße als *Schutz* | 12000 × 12000 → 374 ms, 47 MB. libvips streamt, die Gefahr gibt es nicht. |
|
||
| Plattenplatz-Wächter | **Gebaut.** 80/90/95 %, meldet nach Discord. |
|
||
| Kontingent je Token | **Gebaut**, auf beiden Upload-Wegen geprüft. |
|
||
| Eigene Statusseite bauen | `/status` reicht — der d4rkbot zeigt sie schon an. |
|
||
|
||
---
|
||
|
||
## Und was heute noch schnell repariert wurde
|
||
|
||
**`pruneEvents` lief nie von selbst.** Die Funktion gibt es seit dem ersten Tag
|
||
und sie räumt Ereignisse älter als 180 Tage weg — aufgerufen wurde sie aber nur
|
||
von `/maintenance/prune-sessions`, einem Weg, den nicht einmal die Oberfläche
|
||
anbietet. Die dokumentierte Aufbewahrung griff damit **nie**, und die Tabelle
|
||
wuchs für immer.
|
||
|
||
Zum Vergleich: `pruneSessions` hängt seit jeher an einem stündlichen Takt. Das
|
||
eine war verdrahtet, das andere nicht, und der Unterschied fiel niemandem auf,
|
||
weil beide in derselben Zeile stehen.
|
||
|
||
Gemessen: nach **einem** Tag mit Umzug und Serienlauf standen 5355 Zeilen in
|
||
`events`. Läuft jetzt täglich, mit zwei Minuten Verzögerung nach dem Start.
|