Pruefdurchgang ueber alle 26 Bildschirme - fuenf Fehler behoben, HIG nachgezogen
Gemessen statt geschaut: eine Pruefroutine lief auf jedem Bildschirm und
pruefte Ueberlauf, Tippziele, abgeschnittenen Text, Bilder ohne Quelle und
WCAG-Kontrast fuer jeden Textknoten. Dazu die Live-App mit echten Daten, die
Musterseite fuer Leerzustaende und das Panel zum Abgleich.
1. Deutsche Datumsangaben wurden falsch gelesen. new Date("01.03.2025")
liest amerikanisch: Tage bis 12 wurden still vertauscht, ab Tag 13 fiel
der Wert ganz weg. Die Erstzulassung stand auf zwei Bildschirmen
unterschiedlich da. alsZeitpunkt() erkennt jetzt ISO, TT.MM.JJJJ und
MM/JJJJ, weist unmoegliche Daten ab und fuehrt die Genauigkeit mit -
aus "08/2026" wird "August 2026", kein erfundener Erster.
2. Die Hauptuntersuchung war in beiden Oberflaechen unerreichbar. Das Panel
leitete sie aus der Erstzulassung ab, aber nur bei MM/JJJJ, und benutzte
den eingetragenen Wert gar nicht. Jetzt beide: eingetragene Faelligkeit
vor Servicebuch vor Erstzulassung + 24 Monate.
3. Die Tankstellenmarke stand zweimal da, wenn der Name kein Komma hat
("Shell München Ost"). ohneMarkeVorn() nimmt sie vorn ab.
4. Bilder wurden geholt, obwohl beide wussten, dass es sie nicht gibt -
fuenf 404 fuer dieselbe Datei in einem Ladevorgang. Jetzt gar keine
Adresse bei Stand 0; nachgemessen 4 Anfragen, alle 200.
5. Ein Bildelement ohne Quelle zeigte das kaputte Bildsymbol, und onerror
greift dort nicht: ohne src gibt es keinen Ladeversuch.
Dazu: leere Klammern beim Steuersatz, leere graue Kachel bei leerer
Leistungsgruppe, Umbruch auf dem Einrichtungsbildschirm, drei
Leerdarstellungen in einer Kachel, fehlende Grundschrift.
Apple HIG: Kontrast war an einer Stelle 3,18 statt 4,5, weisse Schrift auf
der Loeschflaeche 3,41/3,55. Rot als Schrift und Rot als Flaeche sind jetzt
getrennte Token (--bad / --bad-flaeche), beide Apples systemRed fuer
erhoehten Kontrast. Tippziele: unsichtbares 44x44-Overlay, wo die sichtbare
Groesse Teil des Bildes ist, echte Mindesthoehe, wo das Element Flaeche ist -
Formulare werden dadurch sichtbar hoeher.
Neu auf Wunsch: Wischen in der Bildergalerie (beide Richtungen) und die
HIG-konforme Loeschgeste - ein voller Wisch loescht ohne zweiten Tipp, ab
55 % der Zeilenbreite, mit wachsender roter Flaeche und erhaltener
Rueckfrage. Dabei fiel auf, dass der Zugwert aus dem React-Zustand gelesen
wurde und ein schneller Wisch dadurch verlorenging; er liegt jetzt in einer
Referenz.
Paritaet: alle 26 Routen und Titel decken sich, Fahrzeugstatus zeilengleich,
zwei ungeplante Abweichungen (Datumsformatierung, Herkunft der
Hauptuntersuchung) geschlossen.
tsc sauber, 271 Tests, vite build sauber, Design-System gebaut, Panel als
Modul geparst, audi_ha_test auf 2026.9.4.23 ohne Traceback. Live nachgemessen:
Datum auf beiden Bildschirmen gleich, keine 404 mehr, Zurueck-Pfeil sichtbar
34x34 und treffbar 44x44, Galerie wischt in beide Richtungen, voller Wisch
loest die Rueckfrage aus, keine Kontrast-Unterschreitung mehr.
This commit is contained in:
@@ -10914,3 +10914,206 @@ Parser-Suite jetzt **17 Tests** (von 11): die neue Klasse
|
||||
und dass ein Aufgeben den Beleg nicht beschaedigt. Alle zwoelf Belege liefern
|
||||
weiterhin `Shell`. `audi_ha_test` auf 2026.9.4.22, 0 Tracebacks, das Nachtragen
|
||||
lief erwartungsgemaess **nicht** erneut.
|
||||
|
||||
## CP. Der grosse Pruefdurchgang - und was er gefunden hat (2026.9.4.23)
|
||||
|
||||
Auftrag des Eigentuemers: alle Funktionen, alle Bildschirme, optisch und
|
||||
funktional, Audi CI und Apple HIG, danach die Paritaet. Danach: alles beheben.
|
||||
|
||||
### Wie geprueft wurde
|
||||
|
||||
Nicht nach Augenmass. Eine Pruefroutine (`/local/pruef.js` im Testcontainer)
|
||||
lief auf **jedem der 26 Bildschirme** und mass seitlichen Ueberlauf,
|
||||
Tippzielgroessen, abgeschnittenen Text, Schriftgroessen unter 11 px, Bilder
|
||||
ohne Quelle und **WCAG-Kontrast fuer jeden einzelnen Textknoten**. Dazu die
|
||||
Live-App mit den echten Daten (der Eigentuemer hat den Zugang selbst
|
||||
eingetragen), die Musterseite fuer Leer- und Fehlerzustaende, und das Panel
|
||||
zum Abgleich.
|
||||
|
||||
**Merkposten fuer kuenftige Pruefungen:** ohne Token zeigt die App nur den
|
||||
Einrichtungsbildschirm. Statt wieder auf die Musterseite auszuweichen und die
|
||||
Live-Pruefung als "nicht moeglich" zu vermerken - **danach fragen**. Der
|
||||
Eigentuemer hat sie sofort gegeben.
|
||||
|
||||
### Befund 1: deutsche Datumsangaben wurden falsch gelesen
|
||||
|
||||
`new Date("01.03.2025")` liest amerikanisch, also Monat vor Tag:
|
||||
|
||||
| gespeichert | angezeigt |
|
||||
|---|---|
|
||||
| `01.03.2025` (1. Maerz) | **`03.01.2025`** |
|
||||
| `12.11.2024` | **`11.12.2024`** |
|
||||
| `25.03.2025` | **"-"** - der Wert verschwand |
|
||||
| `08/2026` (Hauptuntersuchung) | **"-"** |
|
||||
|
||||
Tage bis 12 wurden **still vertauscht**, ab Tag 13 fiel der Wert ganz weg.
|
||||
Sichtbar an der Erstzulassung: "Mein Audi" zeigte den Rohwert richtig,
|
||||
"Identitaet und Technik" formatierte ihn und drehte ihn dabei um - **derselbe
|
||||
Wert, zwei Ergebnisse auf zwei Bildschirmen**.
|
||||
|
||||
`alsZeitpunkt()` in `format.ts` erkennt jetzt genau die drei Formen, die in
|
||||
diesem Projekt vorkommen: ISO vom Backend, `TT.MM.JJJJ` aus den
|
||||
Eingabefeldern, `MM/JJJJ` fuer die Hauptuntersuchung. Alles andere bleibt
|
||||
`null` - **lieber kein Datum als ein erfundenes**. Unmoegliche Daten werden
|
||||
abgewiesen statt still verschoben (`new Date(2025,1,31)` waere der 3. Maerz).
|
||||
|
||||
**Monatsgenau ist eine eigene Genauigkeit.** `08/2026` nennt keinen Tag;
|
||||
daraus "01.08.2026" zu machen waere eine Erfindung. Das Ergebnis traegt seine
|
||||
Genauigkeit mit sich, und angezeigt wird "August 2026".
|
||||
|
||||
### Befund 2: die Hauptuntersuchung war in beiden Oberflaechen unerreichbar
|
||||
|
||||
`08/2026` stand im Profil, gezeigt wurde "-". In der App aus Befund 1. Im
|
||||
Panel aus einem anderen Grund, der genauso stillschweigend war: es leitete die
|
||||
Faelligkeit aus der **Erstzulassung** ab - aber nur, wenn die ein Schraegstrich
|
||||
enthielt. Bei `01.03.2025` (eine voellig richtige Eingabe) blieb der Termin
|
||||
leer, und den ausdruecklich eingetragenen Wert benutzte es gar nicht.
|
||||
|
||||
Beide Oberflaechen nehmen jetzt dieselbe Reihenfolge: **eingetragene
|
||||
Faelligkeit vor Servicebuch vor Erstzulassung + 24 Monate**. Das Panel hat dazu
|
||||
`datumAusText()` bekommen - wortgleich mit `alsZeitpunkt()` in der App.
|
||||
|
||||
### Befund 3: die Tankstellenmarke stand zweimal da
|
||||
|
||||
Mein eigener Fehler vom selben Tag (Abschnitt CN). Ein von Hand eingetragener
|
||||
Name ohne Komma rutschte komplett als "Ort" durch:
|
||||
|
||||
"Shell München Ost" + "Musterstraße 5"
|
||||
-> "Shell, Musterstr., Shell München Ost"
|
||||
|
||||
Die Regel uebersprang nur Teile, die **fuer sich** eine Marke sind.
|
||||
`ohneMarkeVorn()` nimmt die Marke jetzt vorn ab. Steht sie NICHT am Anfang
|
||||
("Autohof Shell Nord"), bleibt der Teil unangetastet - dort ist nicht sicher,
|
||||
was Marke und was Ortsname ist.
|
||||
|
||||
### Befund 4: Bilder wurden geholt, obwohl beide wussten, dass es sie nicht gibt
|
||||
|
||||
Der Code sagt es selbst - "0 heisst: dieses Foto gibt es nicht" - und baute
|
||||
die Adresse trotzdem. Gemessen: **fuenf Anfragen fuer `front-schraeg.webp` in
|
||||
einem einzigen Ladevorgang**, dazu heckansicht, cockpit, sitze und
|
||||
seitenansicht-winter, jede eine 404, bei jedem Rendern erneut.
|
||||
|
||||
Sichtbar war nichts (der Platzhalter griff ueber `onerror`), die Konsole aber
|
||||
voll. Jetzt liefern `bildUrl()` bzw. `bildAdresse()` gar keine Adresse mehr,
|
||||
wenn der Stand 0 ist. **Nach der Korrektur gemessen: 4 Anfragen, alle 200,
|
||||
kein einziges `v=0`.**
|
||||
|
||||
### Befund 5: ein Bildelement ohne Quelle zeigt das kaputte Bildsymbol
|
||||
|
||||
Und der Rettungsanker greift dabei nicht: **ohne `src` findet kein Ladeversuch
|
||||
statt, also feuert `onerror` nie**. Genau dann, wenn er gebraucht wuerde. Auf
|
||||
der Musterseite als kaputtes Symbol samt Alternativtext "Shell" gesehen.
|
||||
|
||||
Neu `Markenlogo` (App) - rendert bei fehlender Adresse **nichts**. Im Panel
|
||||
faellt das `src`-Attribut weg und die Box startet gleich als `bild-fehlt`; das
|
||||
Bildelement bleibt trotzdem stehen, weil die Galerie es weiterschaltet.
|
||||
|
||||
### Kleinere Maengel, alle behoben
|
||||
|
||||
* `Versicherungsteuer ()` - leere Klammern ohne Steuersatz (beide).
|
||||
* Eine Leistungsgruppe ohne Namen UND ohne Posten wurde zur **leeren grauen
|
||||
Kachel** (beide).
|
||||
* "Server-Adresse" brach am Bindestrich um - auf dem allerersten Bildschirm.
|
||||
Seitlicher Rand von 32 auf 20 px.
|
||||
* Drei Leerdarstellungen in EINER Kachel (Strich, "noch offen", nichts). Die
|
||||
Erstzulassung wird jetzt formatiert und zeigt einen Strich, wenn nichts da
|
||||
ist.
|
||||
* Das Wurzelelement hatte keine Schriftfamilie - Rueckfall auf Times New
|
||||
Roman. Sichtbar war heute nichts, die Flanke ist trotzdem zu.
|
||||
|
||||
### Apple HIG
|
||||
|
||||
**Kontrast**: auf 25 von 26 Bildschirmen einwandfrei. Eine Unterschreitung -
|
||||
"Tankvorgang loeschen", `#FF3B30` auf `#F2F2F7` = **3,18** statt 4,5.
|
||||
|
||||
Dabei kam ein zweites, groesseres heraus: **weisse Schrift auf der roten
|
||||
Loeschflaeche** ergibt 3,41 (Nacht) und 3,55 (Tag) - beide zu wenig.
|
||||
|
||||
Geloest ueber eine **Trennung der Rollen**: Rot als Schrift und Rot als Flaeche
|
||||
brauchen Gegensaetzliches. Rote Schrift will Abstand zum HELLEN Grund, eine
|
||||
rote Flaeche will Abstand zur WEISSEN Schrift darauf. Hell ist `--bad` jetzt
|
||||
`#D70015` (4,83), und `--bad-flaeche` ist in beiden Modi `#D70015` (weiss
|
||||
darauf: 5,38). Beides Apples eigenes systemRed fuer erhoehten Kontrast - die
|
||||
HIG-Palette bleibt.
|
||||
|
||||
**Tippziele**: durchgehend unter 44x44 pt - der Zurueck-Pfeil mit 34x34, und
|
||||
**ohne jede Vergroesserung**, beim meistbenutzten Element der App.
|
||||
|
||||
Zwei Wege, je nach Element:
|
||||
|
||||
* **Unsichtbares Overlay**, wo die sichtbare Groesse Teil des Bildes ist
|
||||
(Zurueck-Pfeil, Symbolknoepfe, Griff des Standort-Blatts). Nachgemessen mit
|
||||
`elementFromPoint`: **sichtbar 34x34, treffbar 44x44**.
|
||||
* **Echte Mindesthoehe** 44 px, wo das Element ohnehin Flaeche ist
|
||||
(Eingabefelder, Auswahlfelder, Pillen, Segmente).
|
||||
|
||||
Der zweite Weg **veraendert das Bild sichtbar**: Formulare werden hoeher. Das
|
||||
ist Absicht und dem Eigentuemer so gemeldet.
|
||||
|
||||
### Wischen in der Bildergalerie (Wunsch des Eigentuemers)
|
||||
|
||||
Links/rechts wischen schaltet durch, in beide Richtungen. Zeigerereignisse
|
||||
statt Beruehrungsereignisse - dieselbe Verdrahtung traegt Finger, Stift und
|
||||
Maus, genau wie das Standort-Blatt es schon macht. Ueberwiegt die senkrechte
|
||||
Bewegung, war es ein Scrollen. Ein Wisch schluckt den nachlaufenden Klick,
|
||||
sonst schaltete die Galerie zweimal weiter.
|
||||
|
||||
### Loeschgeste HIG-konform (Wunsch des Eigentuemers)
|
||||
|
||||
Ein **voller** Wisch loescht jetzt sofort, ohne zweiten Tipp. Schwelle: 55 %
|
||||
der Zeilenbreite (mindestens 120, hoechstens 220 px) - eine halbe Zeile ist
|
||||
beim seitlichen Scrollen leicht versehentlich erreicht, eine klare Mehrheit
|
||||
nicht. Die rote Flaeche waechst mit dem Zug und wird beim Ueberschreiten
|
||||
heller: **Farbe heisst entschieden**. Die Rueckfrage bleibt - geloescht werden
|
||||
Fahrten, Belege und Messwerte, die nicht wiederkommen.
|
||||
|
||||
**Dabei einen echten Fehler gefunden:** die Abschlussbehandlung las den
|
||||
Zugwert aus dem React-Zustand, und der hinkt eine Darstellung hinterher.
|
||||
Treffen die letzte Bewegung und das Loslassen in derselben Aufgabe ein - genau
|
||||
das tut ein schneller Wisch -, war die Geste verloren. Nachgestellt: **ein
|
||||
voller Wisch tat gar nichts.** Der Zug liegt jetzt zusaetzlich in einer
|
||||
Referenz, und die entscheidet.
|
||||
|
||||
### Paritaet
|
||||
|
||||
Alle 26 Routen und Titel decken sich; der Fahrzeugstatus ist **zeilengleich**;
|
||||
`live` bleibt der einzige app-eigene Bildschirm.
|
||||
|
||||
**Zwei ungeplante Abweichungen gefunden, beide geschlossen:** die
|
||||
Datumsformatierung (App formatierte, Panel gab roh aus - deshalb war das Panel
|
||||
richtig und die App falsch) und die Herkunft der Hauptuntersuchung. Beide
|
||||
zeigen jetzt dasselbe.
|
||||
|
||||
Die Tankstellen-Funktionen weiterhin **byteweise gleich** ueber elf Faelle -
|
||||
die Panel-Funktionen aus dem Buendel geschnitten und in Node gegen dieselben
|
||||
Eingaben laufen lassen.
|
||||
|
||||
### Verifiziert
|
||||
|
||||
`tsc --noEmit` sauber, **271 Tests** (von 258: 9 fuer die Datumsformen, 4 fuer
|
||||
die Marke am Wortanfang), `vite build` sauber, Design-System gebaut, Panel als
|
||||
**Modul** geparst, `audi_ha_test` auf `2026.9.4.23`, **0 Tracebacks**.
|
||||
|
||||
**Live nachgemessen, nicht nur kompiliert:**
|
||||
|
||||
* Erstzulassung `01.03.2025` auf BEIDEN Bildschirmen, Hauptuntersuchung
|
||||
`August 2026` - in App **und** Panel.
|
||||
* Bildanfragen: 4, alle 200, kein `v=0`.
|
||||
* Zurueck-Pfeil: sichtbar 34x34, treffbar 44x44. Eingabefelder 44 px hoch.
|
||||
* Galerie: Wisch links vor, Wisch rechts zurueck, kurzer Tipp vor.
|
||||
* Loeschzeile: kurzer Wisch klappt auf, voller Wisch (-260 bei 343 px Breite)
|
||||
loest die Rueckfrage "Fahrt vom 10.08.2026 loeschen?" aus.
|
||||
* Kontrastpruefung ueber alle Bildschirme: **keine Unterschreitung mehr**.
|
||||
|
||||
### Nicht geprueft - und warum
|
||||
|
||||
Live-Fahrt (braucht eine laufende Fahrt), QR-Scanner (Kamera in der Vorschau
|
||||
gesperrt), Zwischenablage/Teilen/Kalender (nativ, brauchen das Geraet), das
|
||||
echte iPhone (Notch, Dynamic Type), und Loeschvorgaenge wurden nicht
|
||||
ausgeloest - das sind die Daten des Eigentuemers.
|
||||
|
||||
**Eine Korrektur an mir selbst:** ich hatte zwischendurch gemeldet, das
|
||||
Standort-Blatt sei fehlerhaft, weil "Route" und "Teilen" hinter der Tab-Leiste
|
||||
liegen. Das war falsch - die 96-px-Vorschau ist Absicht, aufgezogen sitzt das
|
||||
Blatt sauber 30 px ueber der Leiste. Mein Klick-Test war der Fehler, nicht die
|
||||
App: das Blatt hoert auf Zeigerereignisse, nicht auf `click`.
|
||||
|
||||
Reference in New Issue
Block a user