Audit: Wisch-Zeile und Auswahlliste der App nachgezogen
Gleichlauf, Funktion und Fehler geprueft. Sauber: 28/28 Dienste ueber const/Registrierung/services.yaml/Klarnamen, 27/27 Sensorrollen, Routen deckungsgleich, 47 Panel-Seiten live ohne einen Konsolenfehler, App ebenso, Fahrzeugstatus textgleich, Bestand ohne Befund ausser den drei bekannten Altbelegen mit odometer_km als Zeichenkette. Zwei echte Befunde, beide in der App und beide dort, wo ein juengerer Zwilling die Korrekturen des aelteren nie bekommen hat: WischLoeschen (Raeder-Archiv) liess den roten Loeschknopf dauerhaft sichtbar unter der Zeile stehen - genau der Haarlinien-Fehler, den das Panel am 16.08.2026 mit visibility:hidden behoben hat - und malte den Zeileninhalt mit dem durchscheinenden --tile auf eine Kachel, wodurch im Nachtmodus der Streifen heller wird und das Rot durchscheint (Regel aus Abschnitt AP). Beides behoben und im Nachtmodus nachgemessen. .dm-auswahl option stand auf --tile; die aufgeklappte Liste eines <select> malt der Browser ausserhalb der Seite, ein durchscheinender Wert laesst dort den hellen Systemgrund durch. Im Panel steht dafuer seit dem 16.08.2026 --canvas. Zur ausgelieferten .ipa: entpackt und gelesen - Erweiterung mit echtem Programm, beide Plugins samt Methoden im App-Programm, App-Gruppe in beiden Profilen, Kalender- und Standortschluessel da. Fehlt nur die CFBundleVersion der Erweiterung (der Grund fuer die abgelehnte Installation) und der Kamera-Schluessel - beides im Skript behoben und wirksam beim naechsten Xcode-Lauf. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
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
|
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
|
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`,
|
jetzt am Foto statt am App-Start; dazu ein Audit mit zwei Befunden in der
|
||||||
Abschnitte CC bis CI. Davor: Geraetezeit statt Ankunftszeit - die Wurzel hinter der 3-km-Fahrt:
|
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
|
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
|
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
|
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
|
Startzeit, gleich bleibend ohne Aenderung, wechselnd bei Aenderung, `0` fuer
|
||||||
ein fehlendes Foto, Rueckfall ohne Staende, und der gemerkte Stand ueber einen
|
ein fehlendes Foto, Rueckfall ohne Staende, und der gemerkte Stand ueber einen
|
||||||
Neustart.
|
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.
|
||||||
|
|||||||
@@ -399,8 +399,15 @@ export function WischLoeschen({
|
|||||||
setzeZug(null)
|
setzeZug(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sichtbar erst, wenn wirklich gewischt wird. Ohne das liegt der rote
|
||||||
|
// Knopf dauerhaft unter der Zeile - und weil Zeilenhoehen gebrochen sind,
|
||||||
|
// blitzt er als Haarlinie um jede Zeile durch. Genau dieser Fehler war im
|
||||||
|
// Panel schon einmal da (16.08.2026) und ist dort mit derselben
|
||||||
|
// visibility-Regel behoben; SwipeRow im Design-System fuehrt sie ebenfalls.
|
||||||
|
const zeigt = offen || zug !== null
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="dm-wisch">
|
<div className={"dm-wisch" + (zeigt ? " dm-wisch--zeigt" : "")}>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="dm-wisch__loeschen"
|
className="dm-wisch__loeschen"
|
||||||
|
|||||||
@@ -101,9 +101,13 @@ input[type="date"].dm-eingabe {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Deckend, NICHT --tile: die aufgeklappte 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 --canvas (.feld select option). */
|
||||||
.dm-auswahl option {
|
.dm-auswahl option {
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
background: var(--tile);
|
background: var(--canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* `.notiz` im Panel: --ios-fill statt --tile-2, 12px Radius, 14px Abstand
|
/* `.notiz` im Panel: --ios-fill statt --tile-2, 12px Radius, 14px Abstand
|
||||||
@@ -382,12 +386,15 @@ input[type="date"].dm-eingabe {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Unsichtbar, solange nicht gewischt wird - siehe WischLoeschen und
|
||||||
|
.ads-swipe-delete im Design-System. */
|
||||||
.dm-wisch__loeschen {
|
.dm-wisch__loeschen {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 88px;
|
width: 88px;
|
||||||
|
visibility: hidden;
|
||||||
border: 0;
|
border: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: var(--bad);
|
background: var(--bad);
|
||||||
@@ -397,9 +404,18 @@ input[type="date"].dm-eingabe {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dm-wisch--zeigt .dm-wisch__loeschen {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
.dm-wisch__inhalt {
|
.dm-wisch__inhalt {
|
||||||
position: relative;
|
position: relative;
|
||||||
background: var(--tile);
|
/* Deckend, NICHT --tile: die Zeile liegt auf einer Kachel, und die ist
|
||||||
|
im Nachtmodus selbst nur ein durchscheinender Schleier - zweimal
|
||||||
|
gemalt wird der Streifen heller als die Kachel um ihn herum, und der
|
||||||
|
rote Knopf darunter scheint durch. Dieselbe Regel wie bei
|
||||||
|
.ads-swipe-content und .swipe-content im Panel (Abschnitt AP). */
|
||||||
|
background: var(--tile-deckend, var(--canvas));
|
||||||
touch-action: pan-y;
|
touch-action: pan-y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":"2026.9.4.14","sha256":"38298c65ce8557c805efd30f56e6978ea60857321ae008efd647cddd7b1b50d5","bytes":321436,"gebaut":"2026-09-04T11:28:44Z"}
|
{"version":"2026.9.4.15","sha256":"383f37e9e04d9514c4b254a3848368e3e5f46daab1434ab05b7551696c9d6c1f","bytes":321463,"gebaut":"2026-09-04T11:48:21Z"}
|
||||||
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"domain": "audi_dashboard",
|
"domain": "audi_dashboard",
|
||||||
"name": "Audi Dashboard",
|
"name": "Audi Dashboard",
|
||||||
"version": "2026.9.4.14",
|
"version": "2026.9.4.15",
|
||||||
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
|
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
|
||||||
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
|
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
|
||||||
"codeowners": [
|
"codeowners": [
|
||||||
|
|||||||
Reference in New Issue
Block a user