Gemeldet: die Uebersichtsseite zeigt 2000 Bilder, die Galerie 3685. Gemessen
am Ordner "items": es sind WIRKLICH 3685. Es fehlt keine Datei -- die Seite
zaehlte falsch.
Der Grund stand in zwei Zeilen nebeneinander:
... ORDER BY path COLLATE NOCASE LIMIT 2000
anzahl: zeilen.length,
Die Zahl war also nicht die Anzahl der Dateien, sondern die Anzahl der
geholten Zeilen -- und damit machte die Seite aus ihrer eigenen Kappung eine
Aussage ueber den Bestand. Genau der Fall aus CLAUDE.md: eine Auskunft, die
nicht alles sehen kann, meldet nicht die halbe Zahl als ganze.
Jetzt: COUNT(*) getrennt fuer die wahre Zahl, die Grenze bleibt (20000, damit
eine Freigabe auf einen riesigen Ordner den Dienst nicht erschlaegt) und wird
als `gezeigt` mit ausgeliefert. Sind beide gleich, ist die Liste vollstaendig.
DABEI EINEN EIGENEN FEHLER GEMACHT UND ER IST LEHRREICH: die neue Abfrage bekam
EINEN Backslash im ESCAPE statt zwei, und SQLite antwortete mit "ESCAPE
expression must be a single character". Meine Gegenprobe mit grep suchte nach
derselben falschen Fassung und meldete deshalb "passt". Erst `cat -v` neben der
funktionierenden Zeile hat es gezeigt -- eine Pruefung, die das Falsche misst,
ist schlimmer als keine.
Gemessen nach dem Ausrollen: anzahl 3685, gezeigt 3685, items 3685.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.9 KiB
c# Arbeitsweise in diesem Projekt
Prüfen statt raten
Nichts annehmen, was sich messen lässt. Verhalten von Bibliotheken, Routen, Headern und Konfiguration am laufenden System oder in der Dokumentation nachsehen, bevor darauf gebaut wird. Was sich nicht klären lässt: fragen, statt etwas zu bauen, das plausibel aussieht.
Der Grund steht in der Projektgeschichte: eine plausible Annahme, die falsch ist, fällt Stunden später auf und kostet dann genau die Zeit, die das Nachsehen gespart hätte. Beispiele aus diesem Repo, alle erst beim Messen aufgefallen:
c.req.pathträgt in Hono den Einhängepunkt mit — Löschen undexistssahen deshalb am Ziel vorbei.- Ein Sternchen wird von Hono nicht als Parameter erfasst,
:pfad{.+}schon, und der Parameter kommt bereits dekodiert. createReadStreammeldet eine fehlende Datei asynchron; dastry/catchdarum fängt nichts.- Ein Secure-Cookie über
localhostfunktioniert, über eine LAN-Adresse nicht — wer auf localhost gegenprüft, prüft die Ausnahme.
Im Bericht steht, was gemessen wurde, nicht was erwartet wurde. Ungeprüftes
wird als ungeprüft benannt — siehe die Docker-Abschnitte in ROADMAP.md.
Wo es langgeht
ROADMAP.md ist der Einstieg: Zuschnitt, Stand, Reihenfolge, offene
Entscheidungen. Das Warum einer Änderung steht in der Commit-Nachricht, nicht
nur im Diff.
Git
Alles läuft auf master, keine Feature-Branches. Gehostet auf dem eigenen
Gitea (https://git.d4rkst3r.de/D4rkst3r/d4rk_media); Lesen geht anonym,
Schieben über die Umgebungsvariable GITEA_TOKEN.
Die eine Regel fürs Dashboard
Jeder Knopf gibt Rückmeldung, auch der erfolgreiche. Das ist der Fehler, an dem der Fivemanage-Anlauf gescheitert ist: ein Knopf ohne Antwort sieht aus wie ein kaputter Knopf, und das Ergebnis waren neunzehn gleichnamige Organisationen. Gilt auch für die API — kaputtes JSON bekommt einen 400 mit Text, keinen nackten 500.