Files
d4rk_media/CLAUDE.md
T
D4rkst3randClaude Opus 5 0f0097ba3c Die Freigabeseite zaehlte ihre eigene Kappung als Gesamtzahl
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>
2026-08-22 23:11:28 +02:00

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.path trägt in Hono den Einhängepunkt mit — Löschen und exists sahen deshalb am Ziel vorbei.
  • Ein Sternchen wird von Hono nicht als Parameter erfasst, :pfad{.+} schon, und der Parameter kommt bereits dekodiert.
  • createReadStream meldet eine fehlende Datei asynchron; das try/catch darum fängt nichts.
  • Ein Secure-Cookie über localhost funktioniert, ü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.