Parity-Regel: Uebersicht-Service-Block in companion-app portiert
Nutzer stellte klar: Panel und companion-app sollen immer denselben
funktionalen Stand haben, auch wenn eine Anfrage nur das Panel nennt -
das ist reiner Testkomfort (Docker-Instanz laesst sich am schnellsten
ansehen), keine Scope-Entscheidung. Regel als verbindlicher Absatz in
AGENTS.md verankert, direkt unter der bestehenden Maintenance-Regel.
Erste Anwendung im selben Zug: die eben im Panel gebaute
"Naechster Service"-Kachel nach companion-app/ portiert.
- daten/service.ts: neues naechsterService() als Gegenstueck zu
naechsterTermin() im Panel - waehlt ueber Oelwechsel-/Inspektions-
Prognose und die von Hand gepflegte Hauptuntersuchung hinweg den
zeitlich naechsten Termin. bisText() liefert denselben Artikel wie
ART_BIS im Panel ("bis zum Oelwechsel" / "bis zur Inspektion").
- screens/Uebersicht.tsx: die bisherigen Kacheln "Reichweite"/
"Kilometerstand" nebeneinander plus eine separate "Service"-Kachel
mit Werteliste weichen einer Reichweiten-Kachel plus einer
Service-Kachel mit .dm-serviceblock (Knopf, nur der obere Teil) und
.dm-servicezeile (reine Anzeige) darunter - dieselbe Control/Content-
Trennung wie im Panel.
- stile/screens.css: .dm-serviceblock/.dm-servicezeile ergaenzt.
Tests: 4 neue in service.test.ts (naechsterService waehlt das frueher
faellige Datum, nimmt die Hauptuntersuchung auf, liefert nichts ohne
Servicebuch/HU, bisText-Artikel je Art), 1 neuer in screens.test.tsx,
der mit einem vi.fn() als geheZu wirklich belegt, dass ein Klick auf
den Serviceblock navigiert und ein Klick auf die Kilometerstand-Zeile
es nicht tut - dafuer bekam zeige() in screens.test.tsx erst einen
injizierbaren geheZu-Parameter (vorher hart auf () => {} verdrahtet).
npm run typecheck sauber, npm run test 100/100 (von 95), npm run build
erfolgreich.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -58,6 +58,18 @@ the linked documents — this file points, it does not duplicate.
|
||||
> adjust the status table, bump the "Last updated" date). This file must always be written in
|
||||
> **English**, even though the rest of the project is German.
|
||||
|
||||
> **Parity rule (binding, stated by the owner 2026-08-17):** the HA panel
|
||||
> (`homeassistant/www/audi-dashboard-app.js`) and the companion app (`companion-app/`) must
|
||||
> **always be at the same functional state**. When a request names only the panel, that is *not* a
|
||||
> scoping decision — the owner simply tests there because the Docker instance makes it quick to see.
|
||||
> Port every user-visible change to both in the **same session**, and say so in the report. The two
|
||||
> are independent implementations (vanilla JS + shadow DOM vs. React + `@audi-dash/ui`), so a port
|
||||
> is a re-implementation, not a copy: keep the *behaviour and wording* identical, let each side use
|
||||
> its own idiom, and skip only what genuinely cannot apply (documented per case — e.g. panel-only
|
||||
> CSS bugs, or HA-panel-only concepts like the entity Setup menu). If a port is impossible or
|
||||
> unreasonably large, say so explicitly instead of leaving it silently undone. This rule exists
|
||||
> because the two had already drifted six days apart once (see section A).
|
||||
|
||||
**How this file is loaded:** Claude Code does not read `AGENTS.md` natively; the root `CLAUDE.md`
|
||||
imports it via `@AGENTS.md` (official recommended pattern). Other agents (Codex, Cursor, Copilot)
|
||||
read `AGENTS.md` directly. Edit content here, not in `CLAUDE.md`.
|
||||
@@ -1459,11 +1471,29 @@ wraps the web app for iPhone; a PWA home-screen install is the accepted intermed
|
||||
jede Odometer-Aktualisierung verschiebt sie), das Tagesdatum also mehr Genauigkeit verspricht,
|
||||
als der Wert hat. Live geprüft bei 375px und 1280px: Block und Wertezeile fluchten mit der
|
||||
Kachelkante (16→359 bzw. 564→1236), Chevron bündig rechts, Tippfläche 88px hoch, keine neuen
|
||||
Konsolenfehler. Deployed als Version `1787006000`, synchron in `installationspaket/`.
|
||||
Entwurf und Begründung als Artefakt: „Zwei Kacheln, drei Antworten“.
|
||||
**Noch offen:** die Änderung existiert nur im Panel, nicht in `companion-app/` — dort steht
|
||||
die Übersicht weiter mit dem alten Aufbau (siehe den Drift-Eintrag weiter oben; die beiden
|
||||
Codebasen laufen sonst wieder auseinander).
|
||||
Konsolenfehler. Deployed als Version `1787007000` (zwischenzeitlich auf Nutzerwunsch von
|
||||
`.tile.flat` auf eine normale `.tile` mit Hintergrund umgestellt — `.serviceblock:active
|
||||
{opacity:.55}` als Tipp-Rückmeldung ergänzt, da der übliche `.tilebtn`-Hintergrundwechsel
|
||||
hier nicht geht), synchron in `installationspaket/`. Entwurf und Begründung als Artefakt:
|
||||
„Zwei Kacheln, drei Antworten“.
|
||||
- [x] **Parity rule eingeführt (2026-08-17):** der Nutzer stellte klar, dass Panel und
|
||||
`companion-app/` immer denselben funktionalen Stand haben sollen — auch wenn eine Anfrage nur
|
||||
das Panel nennt, das ist reiner Testkomfort (Docker-Instanz), keine Scope-Entscheidung. Regel
|
||||
als verbindlicher Absatz direkt unter der Maintenance-Regel oben in dieser Datei verankert.
|
||||
Als erste Anwendung sofort im selben Zug die Übersicht-Neugestaltung von oben nach
|
||||
`companion-app/` portiert (siehe `Uebersicht.tsx`): `naechsterService()` in `daten/service.ts`
|
||||
neu — Gegenstück zu `naechsterTermin()` im Panel, wählt über Ölwechsel-/Inspektions-Prognose
|
||||
und die von Hand gepflegte Hauptuntersuchung hinweg den zeitlich nächsten Termin, `bisText()`
|
||||
liefert denselben Artikel wie `ART_BIS` im Panel. Die beiden bisherigen Kacheln
|
||||
"Reichweite"/"Kilometerstand" nebeneinander plus eine separate "Service"-Kachel mit
|
||||
Werteliste wichen einer Reichweiten-Kachel plus einer Service-Kachel mit `.dm-serviceblock`
|
||||
(Knopf, nur der obere Teil) und `.dm-servicezeile` (reine Anzeige) darunter — dieselbe
|
||||
Control/Content-Trennung wie im Panel. `npm run typecheck` blieb sauber, `npm run test` auf
|
||||
100/100 (von 95 — vier neue Tests für `naechsterService()`/`bisText()` in `service.test.ts`,
|
||||
einer in `screens.test.tsx`, der mit einem `vi.fn()` als `geheZu` wirklich belegt, dass ein
|
||||
Klick auf den Serviceblock navigiert und ein Klick auf die Kilometerstand-Zeile es nicht tut
|
||||
— dafür musste `zeige()` in `screens.test.tsx` erst einen injizierbaren `geheZu`-Parameter
|
||||
bekommen, vorher war er hart auf `() => {}` verdrahtet), `npm run build` erfolgreich.
|
||||
- [ ] 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