Initial: Mesh-Skills, Configs, Scripts

This commit is contained in:
root
2026-09-02 23:49:07 +02:00
commit 26c7980750
783 changed files with 145393 additions and 0 deletions
@@ -0,0 +1,49 @@
# TicTacToe 3D-Relaunch → kompletter Revert (2026-08-04)
Chronologie einer über-engineert-Erweiterung, die der Nutzer 3× ablehnte, und
der saubere Revert — als Muster, warum "minimal + funktionierend" gilt.
## Ablauf
1. **Ausgangslage:** tictactoe.perfekt-ohne-en.de, statisches HTML/JS, Player (X) gegen
KI (O), Minimax (unschlagbar), Flip-Coin-Animation, helles Glas-Design. Funktioniert.
2. **Mesh-Brainstorming (Rechen-Agenten):** UnraidHermes empfahl Schwierigkeitsstufen,
SwitchHermes (KRITIK) empfahl stattdessen "Wer beginnt (X/O)" — kleinster Eingriff mit
größtem Nutzen, weil gegen perfekte KI nur der Startende Remis erzwingen kann.
→ Entscheidung: X/O-Wahl als Punkt 3.
3. **Umsetzung zu grob:** Statt nur X/O-Wahl wurde ein kompletter 3D-Relaunch gebaut
(Three.js, 3D-X aus gekreuzten Balken, 3D-O als Torus, rotierendes 3D-Board).
4. **Ablehnung Runde 1:** Nutzer: "Sieht schön aus aber ist wegen der Drehung unspielbar."
→ Nur Rotation entfernt.
5. **Ablehnung Runde 2:** Nutzer: "Ich klicke blind und verliere" (perspektivisches
Canvas-Klick-Mapping ungenau). → 2D-Grid, CSS-3D-Steine.
6. **Ablehnung Runde 3:** "Schade ... X und o selbst sollte 3D bleiben." → Three.js echte
3D-Steine + unsichtbares 2D-Grid-Overlay für präzise Klicks.
7. **Finales "Komplett zurück":** Nutzer zufrieden nur mit der ORIGINAL-Version.
→ `cp index-original.html.bak index.html`, `rm -rf lib/`, chown, Re-verify im Browser.
## Kernlektion
- Der Nutzer will **funktionierend + vertraut**, nicht **schick + neu**. Eine laufende
Seite mit einer blassen Erweiterung anzufassen ist riskant; ein full 3D-Redesign
bei einem simplen Spiel war die falsche Hebelgröße.
- Die Interaktion (präzises Klicken) ist unverhandelbar. Deko (3D) darf nie die
Bedienbarkeit brechen.
- Beim ersten "zurück / unspielbar" früh auf minimalen Stand zurück (nicht "reparieren
bis es gefällt") — spart · die 3 Wiederversuche.
## Was gut war & bleibt
- **Mesh-Brainstorming lief gut:** beide Rechen-Agenten (UnraidHermes + SwitchHermes)
lieferten substantielle, kritisch geprüfte Ideen mit eingebettetem Kontext in die
Task-Beschreibung (Briefing-Pitfall: NIE externe Datei — Agenten sehen nur /srv/work/tasks/).
- **Gegenprüfung:** LaptopHermes offline → KRITIK-Task an SwitchHermes umgeleitet, lief sauber.
## Three.js-Gotcha (Detail)
`BoxGeometry`/`BufferGeometry` haben KEINE `.rotation`-Eigenschaft — nur `Object3D`
(Mesh, Group) haben das. `g1.rotation.z = Math.PI/4` wirft
`TypeError: Cannot set properties of undefined (setting 'z')`.
Fix: `g1.rotateZ(Math.PI/4)` (Geometrie-Methode) oder Geometrie in ein Mesh packen.
Isolierter Browser-Test (`new THREE.BoxGeometry(...)`, `new THREE.MeshPhysicalMaterial(...)`)
half, den Fehler auf die Geometrie-Zeile einzugrenzen.
@@ -0,0 +1,43 @@
# urlaub.perfekt-ohne-en.de — 3-Ebenen-Zugsuche (2026-08-09)
Referenz für mehrstufige, DB-gestützte Navigations-Web-App. Gelernt beim Bau einer
3-Ebenen-Zugziele-Suche (Radevormwald → 100k → 50k/25k → 25k/10k).
## Architektur (endgültig)
- Flask + SQLite (`/opt/urlaub/urlaub.db`), Routen: `/`, `/2/<slug>`, `/3/<slug>`, `/pdf/<stadt>`, `/dbauskunft/<von>/<nach>`
- Templates: `ebene.html` (Kategorien als `selectattr`), `pdf.html`, `leer.html`
- systemd `urlaub.service` + nginx reverse_proxy auf `127.0.0.1:8040`
- PDF on-demand via `wkhtmltopdf` (ein `/tmp/urlaub-html/*.html` je Stadt)
## DB-Deep-Link — DEAD ENDS (wichtig, verifiziert 08.08)
Nutzer-Wunsch: ein Button, der bahn.de mit vorbefüllter Suche öffnet.
**Alle Deep-Link-Formate sind kaputt/nicht zuverlässig:**
- `reiseauskunft.bahn.de` → **toter DNS** (`DNS_PROBE_FAILED_NXDOMAIN`). Sub-Agent "bestätigte" dieses Format aus altem Wissen — **musste live getestet werden**.
- `reiseauskunft.de/bin/query.exe/dn?...` → toter Pfad ("Seite existiert nicht mehr")
- `www.bahn.de/buchung/fahrplan/suche?von=..&nach=..&..` → SPA übernimmt Query-Parameter NICHT
- `#query=start:X;destination:Y` → fragil, übernimmt nicht zuverlässig
**Lösung:** ehrliche Zwischenseite — zeigt Start/Ziel (readonly), Button + Fallback-Link auf
`https://www.bahn.de/buchung/fahrplan/suche` (verifiziert HTTP 200). Nutzer trägt Start/Ziel
manuell ein (paar Sekunden). Kein fabrizierter zuverlässiger Deep-Link.
## Daten-Pitfalls
- **Sortier-Filter-Bug:** `sorted(nach Distanz)[:N]` → nur nächste Ziele, alle fernen
5-7h/>7h-Kategorien "verschwinden". Fix: je Kategorie (unter5h/5-7h/über7h) die nächsten N.
- **Kategorie aus berechneter Zeit** ableiten (`h=d/70`, kategorisiere auf h), nicht aus
Distanz-Bandbreite — sonst Label widerspricht Zeit.
- **Platzhalter-Einwohner (alle 150000)** waren als "keine echten kleinen Städte" erkennbar.
Fix: echte Werte aus Referenzliste.
- Schwellen-Umbau im Nutzer-Konsens: E2 = 25k, E3 = 10k (nicht 50k/25k). Anzahl Städte ~
≥100k:80, ≥50k:~180-200, ≥25k:~400-450, ≥10k:~900-1100. Diese "mehr Städte bei tieferer
Schwelle"-Erwartung des Nutzers war korrekt.
## Abdeckung/Deep-Links
- Jede Ebene-Ziel sollte klickbar zur nächsten Ebene sein; bei finaler Ebene (z.B. 3) dürfen
Links nicht auf nicht-existente `/4/` zeigen (wäre 404-Dangling) — Endpunkt als `(final)` markieren.
- Umlaute in URLs: slug erzeugt `osnabrueck` via ae/oe/ue/ss-Transkription; Route muss
MEHRERE Kandidaten durchprobieren (`wuerzburg`, `würzburg`, `wurzburg`) inkl. umgekehrte
Richtung (`koln` → `Köln`). Wir praxis: `LOWER(replace(nach,' ',''))`-Vergleich.
## Mengen (zur Orientierung)
- Ebene1: 33 Ziele (100k+). Ebene2 (25k): ~1946. Ebene3 (10k): ~10222. (Nach Kategorien-Balance.)