Texturen und Fonts werde mit hash filename abgespeichert, daneben wäre ein gleichnamiges meta json gut mit informationen die nützlich sind, wenn man ein asset erstellt und eine vorhandene texture/font auswählt. am wichtigsten wäre der ursprüngliche dateiname, mehr informationen brauchen wir eigentlich nicht.
Texturen und Fonts werde mit hash filename abgespeichert, daneben wäre ein gleichnamiges meta json gut mit informationen die nützlich sind, wenn man ein asset erstellt und eine vorhandene texture/font auswählt. am wichtigsten wäre der ursprüngliche dateiname, mehr informationen brauchen wir eigentlich nicht.
admin
added this to the Development project 2026-09-13 19:46:53 +02:00
admin
moved this to Next in Development on 2026-09-13 19:46:58 +02:00
Der Name reist als &name= neben den rohen Bytes mit und liegt als {file}.json neben der inhaltsadressierten Datei; GET ?r=textures und ?r=fonts geben ihn mit aus. Mehr wird nicht gespeichert — Breite, Höhe und Größe kommen wie bisher aus der Datei selbst.
Deine Regel: der letzte Upload gewinnt. Dieselben Bytes noch einmal unter anderem Namen hochgeladen, benennen um, was die Picker zeigen. Ein Upload ohne Namen löscht den bekannten nicht. Eine Datei von vorher hat schlicht "" und liest sich wie eh und je.
Der Server nimmt den Namen nicht ungeprüft: Verzeichnisse, Steuerzeichen und ungültiges UTF-8 fallen weg, bei 120 Zeichen wird gekappt. Die Sidecar ist bewusst nicht autoritativ — fehlt sie, ist sie unlesbar oder leer, heißt das „kein Name bekannt“.
Was man davon sieht
vorher
jetzt
Kachel im Bild-Picker
100 × 100
hero-idle.png
Zeile im Font-Picker
nur die Beispielschrift
DejaVuSerif.ttf
Asset aus dem Picker
Texture 2 / Font
hero-idle / DejaVuSerif
Eine Kachel, die dieses Projekt schon trägt, zeigt weiterhin ihren Assetnamen — die Unterscheidung bleibt sichtbar.
Geprüft, nicht behauptet
Gate
=== CHECK EXIT 0 ===, 887 Tests (+5)
e2e, voller Lauf
ALL PASSED – 780 checks (775 + 5 neue, einer umgeschrieben)
Die drei Spiele
24 / 19 / 21, === SMOKES EXIT 0 ===
Drei Gegenproben, jede beißt an ihrer Stelle:
OriginalName::read stumpf auf '' → genau die 6 Checks um Beschriftung und Benennung fallen, die anderen 62 bleiben grün.
buildTextureAsset wieder mit {...image} → genau der neue Unit-Test fällt (1 von 6): expected 'hero-idle.png' to be 'Hero'.
Existenzprüfung zurück auf @file_get_contents → GET ?r=texturesHTTP 500, ?r=fonts ebenso; mit der Prüfung beide 200.
Zwei Funde, die der Bau gekostet hat
buildTextureAsset spreadete das Upload-Ergebnis ({...image}). Das neue Feld name hätte damit still den Assetnamen gekapert — der erste Testlauf zeigte name: "". Die Felder werden jetzt einzeln kopiert, ein Test nagelt es fest.
@ schützt hier nicht.api/index.php installiert einen eigenen set_error_handler, der error_reporting() nicht konsultiert — eine unterdrückte Warnung wirft trotzdem. Eine fehlende Sidecar-Datei hat damit die ganze Texturliste mit 500 gekippt (in den php-fpm-Logs bestätigt). Jetzt wird die Existenz geprüft statt die Warnung unterdrückt. Das gilt für jedes @ in dieser API.
Grenze
Die 9 Texturen und 3 Fonts, die vor dieser Änderung hochgeladen wurden, haben keinen Namen mehr — der ist unwiederbringlich weg. Sie lesen sich wie bisher (Pixelmaß bzw. nichts).
Wiki: API (Spalten und die Regeln), Textures, Fonts, Architecture, Development.
Umgesetzt in **99c5d2a**, Wiki **4619f61**.
## Zuschnitt
Der Name reist als `&name=` neben den rohen Bytes mit und liegt als `{file}.json` neben der inhaltsadressierten Datei; `GET ?r=textures` und `?r=fonts` geben ihn mit aus. Mehr wird nicht gespeichert — Breite, Höhe und Größe kommen wie bisher aus der Datei selbst.
**Deine Regel: der letzte Upload gewinnt.** Dieselben Bytes noch einmal unter anderem Namen hochgeladen, benennen um, was die Picker zeigen. Ein Upload *ohne* Namen löscht den bekannten nicht. Eine Datei von vorher hat schlicht `""` und liest sich wie eh und je.
Der Server nimmt den Namen nicht ungeprüft: Verzeichnisse, Steuerzeichen und ungültiges UTF-8 fallen weg, bei 120 Zeichen wird gekappt. Die Sidecar ist bewusst **nicht autoritativ** — fehlt sie, ist sie unlesbar oder leer, heißt das „kein Name bekannt“.
## Was man davon sieht
| | vorher | jetzt |
|---|---|---|
| Kachel im Bild-Picker | `100 × 100` | `hero-idle.png` |
| Zeile im Font-Picker | nur die Beispielschrift | `DejaVuSerif.ttf` |
| Asset aus dem Picker | `Texture 2` / `Font` | `hero-idle` / `DejaVuSerif` |
Eine Kachel, die dieses Projekt schon trägt, zeigt weiterhin ihren **Asset**namen — die Unterscheidung bleibt sichtbar.
## Geprüft, nicht behauptet
| | |
|---|---|
| Gate | `=== CHECK EXIT 0 ===`, **887 Tests** (+5) |
| e2e, voller Lauf | **ALL PASSED – 780 checks** (775 + 5 neue, einer umgeschrieben) |
| Die drei Spiele | **24 / 19 / 21**, `=== SMOKES EXIT 0 ===` |
**Drei Gegenproben, jede beißt an ihrer Stelle:**
1. `OriginalName::read` stumpf auf `''` → genau die **6** Checks um Beschriftung und Benennung fallen, die anderen 62 bleiben grün.
2. `buildTextureAsset` wieder mit `{...image}` → genau der neue Unit-Test fällt (1 von 6): `expected 'hero-idle.png' to be 'Hero'`.
3. Existenzprüfung zurück auf `@file_get_contents` → `GET ?r=textures` **HTTP 500**, `?r=fonts` ebenso; mit der Prüfung beide 200.
## Zwei Funde, die der Bau gekostet hat
**`buildTextureAsset` spreadete das Upload-Ergebnis** (`{...image}`). Das neue Feld `name` hätte damit still den *Asset*namen gekapert — der erste Testlauf zeigte `name: ""`. Die Felder werden jetzt einzeln kopiert, ein Test nagelt es fest.
**`@` schützt hier nicht.** `api/index.php` installiert einen eigenen `set_error_handler`, der `error_reporting()` nicht konsultiert — eine unterdrückte Warnung wirft trotzdem. Eine fehlende Sidecar-Datei hat damit die **ganze Texturliste** mit 500 gekippt (in den php-fpm-Logs bestätigt). Jetzt wird die Existenz geprüft statt die Warnung unterdrückt. Das gilt für jedes `@` in dieser API.
## Grenze
Die 9 Texturen und 3 Fonts, die vor dieser Änderung hochgeladen wurden, haben keinen Namen mehr — der ist unwiederbringlich weg. Sie lesen sich wie bisher (Pixelmaß bzw. nichts).
Wiki: *API* (Spalten und die Regeln), *Textures*, *Fonts*, *Architecture*, *Development*.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Texturen und Fonts werde mit hash filename abgespeichert, daneben wäre ein gleichnamiges meta json gut mit informationen die nützlich sind, wenn man ein asset erstellt und eine vorhandene texture/font auswählt. am wichtigsten wäre der ursprüngliche dateiname, mehr informationen brauchen wir eigentlich nicht.
Umgesetzt in
99c5d2a, Wiki 4619f61.Zuschnitt
Der Name reist als
&name=neben den rohen Bytes mit und liegt als{file}.jsonneben der inhaltsadressierten Datei;GET ?r=texturesund?r=fontsgeben ihn mit aus. Mehr wird nicht gespeichert — Breite, Höhe und Größe kommen wie bisher aus der Datei selbst.Deine Regel: der letzte Upload gewinnt. Dieselben Bytes noch einmal unter anderem Namen hochgeladen, benennen um, was die Picker zeigen. Ein Upload ohne Namen löscht den bekannten nicht. Eine Datei von vorher hat schlicht
""und liest sich wie eh und je.Der Server nimmt den Namen nicht ungeprüft: Verzeichnisse, Steuerzeichen und ungültiges UTF-8 fallen weg, bei 120 Zeichen wird gekappt. Die Sidecar ist bewusst nicht autoritativ — fehlt sie, ist sie unlesbar oder leer, heißt das „kein Name bekannt“.
Was man davon sieht
100 × 100hero-idle.pngDejaVuSerif.ttfTexture 2/Fonthero-idle/DejaVuSerifEine Kachel, die dieses Projekt schon trägt, zeigt weiterhin ihren Assetnamen — die Unterscheidung bleibt sichtbar.
Geprüft, nicht behauptet
=== CHECK EXIT 0 ===, 887 Tests (+5)=== SMOKES EXIT 0 ===Drei Gegenproben, jede beißt an ihrer Stelle:
OriginalName::readstumpf auf''→ genau die 6 Checks um Beschriftung und Benennung fallen, die anderen 62 bleiben grün.buildTextureAssetwieder mit{...image}→ genau der neue Unit-Test fällt (1 von 6):expected 'hero-idle.png' to be 'Hero'.@file_get_contents→GET ?r=texturesHTTP 500,?r=fontsebenso; mit der Prüfung beide 200.Zwei Funde, die der Bau gekostet hat
buildTextureAssetspreadete das Upload-Ergebnis ({...image}). Das neue Feldnamehätte damit still den Assetnamen gekapert — der erste Testlauf zeigtename: "". Die Felder werden jetzt einzeln kopiert, ein Test nagelt es fest.@schützt hier nicht.api/index.phpinstalliert einen eigenenset_error_handler, dererror_reporting()nicht konsultiert — eine unterdrückte Warnung wirft trotzdem. Eine fehlende Sidecar-Datei hat damit die ganze Texturliste mit 500 gekippt (in den php-fpm-Logs bestätigt). Jetzt wird die Existenz geprüft statt die Warnung unterdrückt. Das gilt für jedes@in dieser API.Grenze
Die 9 Texturen und 3 Fonts, die vor dieser Änderung hochgeladen wurden, haben keinen Namen mehr — der ist unwiederbringlich weg. Sie lesen sich wie bisher (Pixelmaß bzw. nichts).
Wiki: API (Spalten und die Regeln), Textures, Fonts, Architecture, Development.