Fahrten bearbeitbar, Inspektionsprognose, Bootstrap-Takt reisst nicht mehr ab
Sechs gemeldete Punkte plus ein Fund beim Nachlesen des Ladevorgangs: - HECKKLAPPENSCHLOSS_SENSOR ueberall entfernt (einstellungen.py, entitaeten.py-Katalog, _sicherheitscheck()). HECKKLAPPE_SENSOR bleibt. - Bild-Platzhalter in den Einstellungen war halb abgeschnitten: die bare .carfix-Regel der Desktop-Container-Query traf auch den Platzhalter-Div, dessen inset:0 von der festen Hoehe uebersteuert wurde. Auf .bildbox eingegrenzt. - Inspektion bekommt eine eigene "voraussichtlich am ..."-Zeile (nur Datum). oelwechselPrognose() dafuer auf den gemeinsamen Kern servicePrognose() zurueckgefuehrt. - "Neue Fahrt" bietet jetzt alle Felder, die die Einzelfahrt anzeigt, und die Einzelfahrt laesst sich bearbeiten - gemeinsames fahrtFelder()/ fahrtFormularWerte() nach dem Muster von tankFelder(). Backend: Service audi_dashboard_fahrt_aktualisieren, profil.fahrt_bearbeiten() (edited_fields schuetzt gegen die Automatik, nicht gegen den Nutzer). Die Art-Pille speichert jetzt ebenfalls statt nur lokal umzuschalten. - Titelzeile steht auf dem Handy buendig zu den Kacheln: .back:not(.on) gibt seine Breite und den Gap auf allen Breiten frei, .topbar links 16px. - Ladebildschirm: nachladeAnstossen() und datenLaden() stiegen bei fehlendem HASS aus, ohne eine naechste Runde zu planen - genau die Sackgasse, aus der bisher nur ein Menueklick half. Beide planen jetzt weiter, der Timer wird beim Abhaengen gestoppt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -34,7 +34,12 @@ correct (verified via live pointer-event simulation), the real gap was a missing
|
||||
`overscroll-behavior` on the scroll container letting the browser's own native overscroll compete
|
||||
with it on real touch devices; same day: the fuel-receipt upload got a proper dialog — drag the PDF
|
||||
in at the computer, paste it from the clipboard on the phone, file picker still available as a third
|
||||
route — see section C). This file is the entry point for every new agent
|
||||
route — see section C; a twelfth round the same day removed `HECKKLAPPENSCHLOSS_SENSOR`, fixed a
|
||||
half-cut-off image placeholder, gave the Inspektion its own "voraussichtlich am …" forecast, made
|
||||
trips fully editable (new `audi_dashboard_fahrt_aktualisieren`, "Neue Fahrt" now offers every field
|
||||
the detail page shows), aligned the page title with the tiles on phone width, and closed two
|
||||
dead-ends in the bootstrap retry loop behind the reported hanging "Lädt …" screen).
|
||||
This file is the entry point for every new agent
|
||||
session: what this repo is, what is finished, what is missing, and how to work here. Detail lives in
|
||||
the linked documents — this file points, it does not duplicate.
|
||||
|
||||
@@ -1211,6 +1216,68 @@ wraps the web app for iPhone; a PWA home-screen install is the accepted intermed
|
||||
`companion-app` (Nachfolger-App) brauchte keine Änderung - deren `eur()` rundet ohnehin schon
|
||||
auf 2 Stellen. Live geprüft: keine `de(..., 3)`-Aufrufe mehr in der Datei, Liste und
|
||||
Einzelbeleg zeigen "2,07 €/l", "1,99 €/l" usw.
|
||||
- [x] Twelfth round (2026-08-17) — six user-reported items, one of them a real dead-end in the
|
||||
bootstrap:
|
||||
(1) **`HECKKLAPPENSCHLOSS_SENSOR` removed for good**, the same treatment Türschloss/
|
||||
Haubenschloss got on 2026-08-16: gone from `einstellungen.py` (attribute deleted, not
|
||||
blanked), from `entitaeten.py`'s Setup catalog, and from `_sicherheitscheck()` in
|
||||
`frontend_veroeffentlichung.py`. `HECKKLAPPE_SENSOR` (the lid itself) stays. Verified live:
|
||||
"Geprüfte Punkte" no longer lists it, the Setup catalog no longer offers it.
|
||||
(2) **Bild-Platzhalter in Einstellungen war halb abgeschnitten** — reproduced by measurement,
|
||||
not by eye: the placeholder rendered 260px tall inside a 132px `overflow:hidden` box. Cause:
|
||||
`bildMitPlatzhalter()` puts the size class (`carfix`) on the box, the `<img>` **and** the
|
||||
placeholder `<div>`, and the desktop container query said `.carfix,.bildbox.carfix
|
||||
{height:260px}` — the bare selector therefore also hit the placeholder, whose `position:
|
||||
absolute;inset:0` is over-constrained by an explicit height (the height wins, `bottom:0` is
|
||||
ignored). Scoped both rules to `.bildbox.carfix`; image and placeholder fill the box via
|
||||
their own `100%` anyway. Verified: placeholder now measures exactly the box height.
|
||||
(3) **Inspektion bekommt eine "voraussichtlich am …"-Zeile** wie der Ölwechsel, aber auf
|
||||
Wunsch nur mit dem Datum. `oelwechselPrognose()` wurde dafür auf einen gemeinsamen Kern
|
||||
`servicePrognose(stichwort, km, monate)` zurückgeführt; `inspektionPrognose()` nutzt
|
||||
dieselben 30.000 km / 24 Monate wie `intervalle()`/`termine()`. Angezeigt in der
|
||||
Service-Kachel auf "Mein Audi" (auch ohne Fahrzeugmeldung, anders als beim Ölwechsel - dort
|
||||
nennt `terminText()` den generischen Termin schon "voraussichtlich", die Zahl stünde sonst
|
||||
doppelt) und auf der Service-Seite. Live geprüft: beide Stellen zeigen "voraussichtlich am
|
||||
20.10.2027", Ölwechsel unverändert.
|
||||
(4)+(5) **"Neue Fahrt" hat jetzt alle Felder der Einzelfahrt, und die Einzelfahrt lässt sich
|
||||
bearbeiten.** Neues gemeinsames `fahrtFelder()`/`fahrtFormularWerte()` (Datum, Startzeit,
|
||||
Dauer, Art, Start-/Zielort, Start-/Endkilometer, Distanz) nach demselben Muster wie
|
||||
`tankFelder()`/`tankFormularWerte()`, benutzt vom Erfassungsformular und vom neuen
|
||||
"Werte bearbeiten" auf der Einzelfahrt-Seite (`fahrtBearbeitenOffen`, Vorbild `vFill()`).
|
||||
Backend: `audi_dashboard_fahrt_manuell_anlegen` um dieselben Felder erweitert, neuer Service
|
||||
`audi_dashboard_fahrt_aktualisieren`. Zwei Punkte, die dabei zählen: von Hand gesetzte Felder
|
||||
landen in `edited_fields`, damit das Kilometerstand-Screening (§7.2) sie nicht später
|
||||
überschreibt - und weil `_datensatz_aktualisieren()` genau diese Liste schützt, hätte ein
|
||||
zweites Bearbeiten sonst nichts mehr bewirkt; dafür gibt es jetzt `profil.fahrt_bearbeiten()`
|
||||
(`schutz=False`), der Schutz gilt gegen die Automatik, nicht gegen den Menschen. Fehlt die
|
||||
Distanz, ergibt sie sich aus den beiden Kilometerständen (`km_quelle: "manuell"`, Status
|
||||
"vollständig"). Gleich mitgezogen: die Art-Pille auf der Einzelfahrt schaltete bisher nur
|
||||
lokal um und war nach dem nächsten Backend-Push wieder weg - sie ruft jetzt denselben
|
||||
Service. **Merkposten pyscript:** Generator-Ausdrücke gibt es dort nicht
|
||||
(`NotImplementedError: not implemented ast ast_generatorexp`, an `next((f for f in …), None)`
|
||||
real gesehen) - Listen-Abstraktionen dagegen schon. Live end-to-end geprüft: anlegen,
|
||||
bearbeiten, erneut bearbeiten, jeweils in `fahrten.jsonl` nachgesehen und nach Reload wieder
|
||||
im Formular.
|
||||
(6) **Titelzeile stand auf dem Handy 34px rechts von den Kacheln.** Derselbe Befund wie im
|
||||
Design-Audit 2026-08-13, dort aber nur in der Desktop-Container-Query behoben: `.back` ist
|
||||
auf Wurzelseiten unsichtbar (`opacity:0`), belegt aber Breite plus Gap. Die Regel
|
||||
`.back:not(.on){width:0;…}` gilt jetzt auf allen Breiten und hebt per `margin-right:-4px`
|
||||
auch den Gap auf; `.topbar` bekam links 16px statt 20px, passend zu `--seitenrand` von
|
||||
`main#view`. Gemessen: Titel und Kachel beginnen auf dem Handy beide bei 16px, auf dem
|
||||
Desktop beide bei 564px (dort blieben vorher 4px Rest). Detailseiten (`.back.on`) unberührt.
|
||||
- [x] Ladebildschirm: der Takt darf nicht abreißen (2026-08-17) — Nutzerbericht "nach dem Neuladen
|
||||
dreht sich nur 'Lädt …', erst ein Klick auf einen Menüpunkt zeigt die App". Beim Lesen des
|
||||
Bootstraps fanden sich zwei echte Sackgassen, die genau dieses Verhalten erklären:
|
||||
`nachladeAnstossen()` stieg bei `!HASS || !HASS.callWS` **ohne** neuen Timer aus, und
|
||||
`datenLaden()` bei `!HASS` ebenso - danach lief nichts mehr von selbst, und der einzige
|
||||
Ausweg war ein zufälliger hass-Push oder ein Menüklick (`go()` ruft `datenLaden()` mit auf,
|
||||
genau die Abmilderung vom 2026-08-16). Beide planen jetzt die nächste Runde, statt
|
||||
auszusteigen; `disconnectedCallback()` stoppt den Timer dafür sauber, `connectedCallback()`
|
||||
stößt ihn wieder an. **Nicht reproduziert:** weder ein einfacher Reload noch ein
|
||||
Container-Neustart mit sofortigem Reload haben den Hänger in `audi_ha_test` gezeigt (die App
|
||||
war jedes Mal binnen ~2s da) - die Sackgassen sind im Code belegt, dass sie *die* Ursache
|
||||
beim Nutzer waren, ist damit aber nicht bewiesen. Tritt es erneut auf: Browser-Konsole
|
||||
erfragen, bevor weiter geraten wird.
|
||||
- [ ] Fix remaining documentation drift (statistics claim, README gaps, obsolete TODO comment) —
|
||||
text-only changes; INSTALL.md's WLAN/TommiG1 drift and stale variable names were fixed
|
||||
2026-08-12 (see section B); `DESIGN_REVIEW_2026-08-13.md` and `REVIEW_main_2026-08-13.md`
|
||||
|
||||
Reference in New Issue
Block a user