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

45 lines
1.9 KiB
Markdown

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.