Audit: Livepfad und Rueckblick messen wieder dasselbe (2026.9.1.17)
BEFUND 1 (behoben): dieselbe Fahrt, zwei Strecken screening.py las den Verlauf ueber verlauf_lesen(), das den Stand zu Beginn des Fensters mitliefert. historienimport.py schnitt sein Fenster streng heraus und verlor genau diesen Punkt. An der echten Fahrt nachgemessen: 6,896 km gegen 6,816 km fuer denselben Zeitraum. Neu verlauf.zaehlerstrecke(punkte, start, ende) - der Anker ist der letzte Datensatz am oder vor dem Beginn, dieselbe Ueberlegung wie bei wert_bei(). Beide Wege schneiden jetzt durch dieselbe Funktion. Nachgewiesen: Rueckblick 6,896, Livepfad 6,896. Dritter Fall dieser Art nach UNPLAUSIBLE_KMH und MINDESTDAUER_S - und ich hatte ihn am selben Tag selbst eingebaut. BEFUND 2 (behoben): STANDARDWERTE gingen unnoetig ueber die Leitung. zuordnung.py schickte sie mit jeder Katalogantwort; gelesen hat sie seit dem Entfernen des Zuruecksetzen-Knopfes niemand mehr. Die Konstante bleibt, sie traegt intern die Vorgabewerte und leitet SCHLUESSEL ab. BEFUND 3 und 4 bleiben offen und gehoeren dem Eigentuemer: die vier Tage alte Reichweite auf der Uebersicht (RANGE_SENSOR besser leer lassen) und die Nullfahrt-Regel, die nur der Rueckblick kennt - im Livepfad hiesse sie, einen bereits gespeicherten Datensatz automatisch zu loeschen. SAUBER: 24 Backend-Dateien py_compile, Panel als Modul geparst, tsc --noEmit und vite build sauber, 165/165 Tests, 27 Katalogeintraege gegen 27 Dataclass-Felder ohne Abweichung, jedes Listenfeld mit so vielen Beispielen wie Positionen, keine verwaisten Verweise, in der Konsole nur das bekannte ServiceWorker-Rauschen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -283,6 +283,32 @@ def route_aus_verlauf(
|
||||
GNSS_TOLERANZ_KM = 1.0
|
||||
|
||||
|
||||
def zaehlerstrecke(
|
||||
punkte: list[Verlaufspunkt],
|
||||
start: datetime.datetime,
|
||||
ende: datetime.datetime,
|
||||
) -> float | None:
|
||||
"""Die im Fenster [start, ende] gefahrene Strecke aus einem laufenden
|
||||
Kilometerzaehler.
|
||||
|
||||
Der Anker ist der letzte Datensatz AM ODER VOR `start`, nicht der erste
|
||||
danach: der Zaehlerstand zu Fahrtbeginn ist der zuletzt gemeldete - dieselbe
|
||||
Ueberlegung wie bei wert_bei(). Ohne ihn fehlt die Strecke zwischen dem
|
||||
Beginn und dem ersten Datensatz danach.
|
||||
|
||||
WARUM DIESE FUNKTION EXISTIERT: Livepfad und Rueckblick haben dieselbe
|
||||
Fahrt unterschiedlich gemessen. Das Screening las den Verlauf ueber
|
||||
verlauf_lesen(), das den Stand ZU BEGINN des Fensters mitliefert; der
|
||||
Rueckblick schnitt sein Fenster streng heraus und verlor genau diesen
|
||||
Punkt. Am 01.09.2026 an der echten Fahrt nachgemessen: 6,896 km gegen
|
||||
6,816 km fuer denselben Zeitraum. Das ist die Doppelbewertung, die dieses
|
||||
Projekt bei UNPLAUSIBLE_KMH und MINDESTDAUER_S schon zweimal ausgeraeumt
|
||||
hat - jetzt schneiden beide Wege durch dieselbe Funktion."""
|
||||
davor = [p for p in punkte if p[0] <= start]
|
||||
im_fenster = [p for p in punkte if start < p[0] <= ende]
|
||||
return strecke_aus_zaehler((davor[-1:] if davor else []) + im_fenster)
|
||||
|
||||
|
||||
def strecke_waehlen(
|
||||
grob: float | None, fein: float | None
|
||||
) -> tuple[float | None, bool]:
|
||||
|
||||
Reference in New Issue
Block a user