|
|
|
@@ -10,8 +10,9 @@ fuer den Zugangs-Token; dazu Debug-Mode, eine Version-Kachel, das Knopfpaar nach
|
|
|
|
|
HIG und Bilder ohne Verzoegerung; dazu eine Musterseite, die die App ohne Token
|
|
|
|
|
und ohne Netz rendert; dazu der QR-Code aus einem gespeicherten Bild, ein stiller
|
|
|
|
|
Debug-Knopf und der HA-Zugang bei den Zugaengen; der Cache-Brecher der Bilder haengt
|
|
|
|
|
jetzt am Foto statt am App-Start, `2026.9.4.14`,
|
|
|
|
|
Abschnitte CC bis CI. Davor: Geraetezeit statt Ankunftszeit - die Wurzel hinter der 3-km-Fahrt:
|
|
|
|
|
jetzt am Foto statt am App-Start; dazu ein Audit mit zwei Befunden in der
|
|
|
|
|
Wisch-Zeile und der Auswahlliste der App, `2026.9.4.15`,
|
|
|
|
|
Abschnitte CC bis CJ. Davor: Geraetezeit statt Ankunftszeit - die Wurzel hinter der 3-km-Fahrt:
|
|
|
|
|
das Fahrtfenster stand in Geraetezeit, der Verlauf war nach Ankunftszeit sortiert. Dazu die neun
|
|
|
|
|
Paritaetsbefunde und die verunreinigte Batteriehistorie, `2026.9.4.1`, Abschnitt CB. Davor: Der Regler stellt den Schlaf-Timeout des Dongles, flespi lesend und
|
|
|
|
|
schreibend, die eigene Warteschlange wieder entfallen, `2026.9.3.10`, Abschnitt BZ. Davor: Zugaenge: die Dienste-Token aus App und Panel bedienbar, der Wert kommt nie
|
|
|
|
@@ -10166,3 +10167,108 @@ Dazu 6 Regressionstests (`src/screens/bilder.test.ts`): Zeitstempel statt
|
|
|
|
|
Startzeit, gleich bleibend ohne Aenderung, wechselnd bei Aenderung, `0` fuer
|
|
|
|
|
ein fehlendes Foto, Rueckfall ohne Staende, und der gemerkte Stand ueber einen
|
|
|
|
|
Neustart.
|
|
|
|
|
|
|
|
|
|
## CJ. Audit vom 04.09.2026: zwei echte Befunde, beide in der App (2026.9.4.15)
|
|
|
|
|
|
|
|
|
|
Auftrag des Eigentuemers: Gleichlauf pruefen, Zwischenablage und
|
|
|
|
|
Teilen-Erweiterung beurteilen, App und Panel auf Funktion und Fehler abklopfen.
|
|
|
|
|
|
|
|
|
|
### Was sauber ist
|
|
|
|
|
|
|
|
|
|
29 Backend-Dateien `py_compile`, beide Frontend-Dateien als **Modul** geparst
|
|
|
|
|
(Abschnitt AQ), `tsc --noEmit`, 221 Tests, `vite build`. Tabellen in beide
|
|
|
|
|
Richtungen abgeglichen, ohne Abweichung:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Dienste | 28 in `const.py`, 28 registriert, 28 in `services.yaml`, 28 Klarnamen |
|
|
|
|
|
| Sensorrollen | 27 im Katalog, 27 in der Dataclass, jede mit Beispielnamen, beide Listenfelder mit vier |
|
|
|
|
|
| Routen | Panel-Unterseiten und App-Titel decken sich; nur in der App: die fuenf Reiterwurzeln und `live` (LiveFahrt, ohne Panel-Gegenstueck, dokumentiert) |
|
|
|
|
|
|
|
|
|
|
**Panel live durchgelaufen**, 47 Seitenaufrufe (fuenf Reiter, alle 17
|
|
|
|
|
Einzelfahrten, alle 16 Einzelbelege, jede Unterseite): **kein einziger
|
|
|
|
|
Konsolenfehler**, keine unbehandelte Ablehnung. In der App dasselbe ueber die
|
|
|
|
|
angemeldete Sitzung, ebenfalls fehlerfrei.
|
|
|
|
|
|
|
|
|
|
**Textgleich zwischen Panel und App** (Vergleich am gerenderten Text): der
|
|
|
|
|
Fahrzeugstatus Zeichen fuer Zeichen, die Raeder-Seite bis auf den
|
|
|
|
|
Loeschknopf - und genau der war der Befund (unten). Die Einstellungen fuehren
|
|
|
|
|
in beiden dieselben acht Abschnitte in derselben Reihenfolge.
|
|
|
|
|
|
|
|
|
|
**Bestandspruefung** (18 Fahrten, 16 Tankvorgaenge, 17 Batterietage): keine
|
|
|
|
|
0-km-Fahrt, keine negative Strecke, keine doppelte Kennung, keine
|
|
|
|
|
Ueberschneidung, kein Ende vor dem Beginn, alle Spannungen in 8-16 V, der
|
|
|
|
|
Verlauf sortiert. Einziger Befund sind die drei bekannten Altbelege mit
|
|
|
|
|
`odometer_km` als Zeichenkette (`"50250"`, Abschnitt CA) - der Lesepfad faengt
|
|
|
|
|
sie ueber `als_kilometerstand()` ab.
|
|
|
|
|
|
|
|
|
|
### Befund 1: die Wisch-Zeile der App hatte zwei Absicherungen nicht
|
|
|
|
|
|
|
|
|
|
`WischLoeschen` (Raeder-Archiv, gebaut am 02.09.2026) ist der juengere
|
|
|
|
|
Zwilling von `SwipeRow` im Design-System - und hat dessen beide Korrekturen
|
|
|
|
|
nie bekommen:
|
|
|
|
|
|
|
|
|
|
* **Der rote Loeschknopf lag dauerhaft sichtbar unter der Zeile.** Genau daran
|
|
|
|
|
hatte das Panel am 16.08.2026 den Haarlinien-Fehler: Zeilenhoehen sind
|
|
|
|
|
gebrochen, die Kante faellt nicht auf das Pixelraster, und das Rot blitzt als
|
|
|
|
|
duenner Rahmen um jede Zeile durch. Panel und Design-System halten ihn
|
|
|
|
|
deshalb `visibility: hidden`, bis wirklich gewischt wird.
|
|
|
|
|
* **Der Zeileninhalt war mit `var(--tile)` gemalt** - dem durchscheinenden
|
|
|
|
|
Kachelton. Die Zeile liegt aber auf einer Kachel: zweimal derselbe Schleier
|
|
|
|
|
ergibt im Nachtmodus einen sichtbar helleren Streifen, und das Rot darunter
|
|
|
|
|
scheint durch. Das ist die Regel aus Abschnitt AP, wortgleich schon einmal
|
|
|
|
|
aufgetreten.
|
|
|
|
|
|
|
|
|
|
Beides behoben (`.dm-wisch--zeigt`, `--tile-deckend`), live im Nachtmodus
|
|
|
|
|
nachgemessen: Knopf `hidden`, Zeile `rgb(23,27,33)` (deckend), und „Loeschen"
|
|
|
|
|
steht nicht mehr im Text der Seite - wie im Panel.
|
|
|
|
|
|
|
|
|
|
### Befund 2: die aufgeklappte Auswahlliste konnte durchscheinen
|
|
|
|
|
|
|
|
|
|
`.dm-auswahl option` stand auf `var(--tile)`. Die Liste eines `<select>` malt
|
|
|
|
|
der Browser selbst, ausserhalb der Seite - ein durchscheinender Wert laesst
|
|
|
|
|
dort den hellen Untergrund des Systems durch. Im Panel steht aus genau diesem
|
|
|
|
|
Grund seit dem 16.08.2026 `--canvas` (`.feld select option`, mit
|
|
|
|
|
ausdruecklichem Kommentar). Jetzt auch in der App.
|
|
|
|
|
|
|
|
|
|
**Geprueft und NICHT geaendert:** `.dm-standort-leer` malt ebenfalls `--tile`,
|
|
|
|
|
aber `.standort-leer` im Panel tut dasselbe - beide gleich, also kein
|
|
|
|
|
Gleichlauf-Befund. Eine Aenderung waere hier eine Gestaltungsfrage fuer beide
|
|
|
|
|
Seiten, keine Korrektur einer Abweichung.
|
|
|
|
|
|
|
|
|
|
### Zwischenablage und Teilen-Erweiterung: der Stand vor dem naechsten Xcode-Lauf
|
|
|
|
|
|
|
|
|
|
Die **ausgelieferte** `App.ipa` (Stand `2026.9.4.5`, Commit `d819f2e`)
|
|
|
|
|
entpackt und gelesen. Alles daran ist richtig - bis auf den einen Punkt, der
|
|
|
|
|
sie unbrauchbar macht:
|
|
|
|
|
|
|
|
|
|
| | |
|
|
|
|
|
|---|---|
|
|
|
|
|
| Erweiterung `DataMetric360Share.appex` | echtes Programm, 110.320 Bytes |
|
|
|
|
|
| `BelegZwischenablagePlugin` / `KalenderTerminPlugin` | beide im App-Programm, samt `pdfHolen` und `terminAnlegen` |
|
|
|
|
|
| App-Gruppe `group.app.datametric360` | in **beiden** Bereitstellungsprofilen |
|
|
|
|
|
| Standort- und beide Kalender-Schluessel | vorhanden |
|
|
|
|
|
| URL-Schema `datametric360` | vorhanden |
|
|
|
|
|
| Aktivierungsregel | Anhang oder Datei, je einer - das Teilen-Blatt zeigt die App also an |
|
|
|
|
|
| **`CFBundleVersion` der Erweiterung** | **fehlt** - genau der Grund, aus dem iOS die Installation ablehnt (Abschnitt CD) |
|
|
|
|
|
| `NSCameraUsageDescription` | fehlt - der Scanner kam erst danach |
|
|
|
|
|
|
|
|
|
|
Beides ist im Skript laengst behoben und wirkt beim naechsten Lauf:
|
|
|
|
|
`ios-signieren.sh` schreibt eine echte Build-Nummer in **beide** Buendel,
|
|
|
|
|
**bricht ab**, wenn einem davon eine brauchbare fehlt, und setzt den
|
|
|
|
|
Kamera-Schluessel.
|
|
|
|
|
|
|
|
|
|
Der Rest der Verdrahtung ist stimmig gelesen: beide Swift-Erweiterungen
|
|
|
|
|
erfuellen `CAPBridgedPlugin` mit `identifier`/`jsName`/`pluginMethods`, die
|
|
|
|
|
Namen decken sich mit `registerPlugin("BelegZwischenablage")` bzw.
|
|
|
|
|
`("KalenderTermin")` und den Methodennamen auf der TS-Seite, und
|
|
|
|
|
`ios-teilen-einrichten.mjs` kopiert beide Dateien und haengt sie an die
|
|
|
|
|
Sources-Phase des App-Ziels (mit Idempotenz-Pruefung), setzt die Entitlements
|
|
|
|
|
auf beiden Zielen.
|
|
|
|
|
|
|
|
|
|
**Was das nicht heisst:** dass es auf dem Geraet laeuft. Swift wird hier nicht
|
|
|
|
|
uebersetzt, und die Lehre aus Abschnitt AK gilt unveraendert - vier von fuenf
|
|
|
|
|
Fehlern der nativen Huelle haben einen erfolgreichen Archivlauf erzeugt und
|
|
|
|
|
sind erst am fertigen `.ipa` aufgefallen. Nach dem naechsten Lauf gehoert
|
|
|
|
|
deshalb geprueft: `CFBundleVersion` in beiden Buendeln, `NSCameraUsageDescription`
|
|
|
|
|
in der App, beide Plugin-Namen im Programm.
|
|
|
|
|