Files
audi-app/.claude/commands/stand.md
T
tobias 2bf1691fb8 Zentrale Stelle fuer den aktuellen Stand: OFFEN.md und /stand
Ansage des Eigentuemers: ueber eine zentrale Datei bzw. einen zentralen Aufruf
muss immer klar sein, was aktuell zu tun ist.

OFFEN.md ist diese Datei. Sie nennt den Zustand, nicht die Geschichte, und
teilt sich die Arbeit mit den vorhandenen: AGENTS.md beantwortet WARUM etwas so
ist, APPLE_DEV_BACKLOG.md was davon Xcode oder das Portal braucht, OFFEN.md WAS
JETZT zu tun ist. Jeder Punkt sagt auch, was konkret zu tun ist - nicht nur,
dass etwas offen ist.

Gegliedert nach Zustaendigkeit statt nach Thema: was auf den Eigentuemer wartet
(Xcode-Lauf, Gitea-Token DM180, steuer.faellig), was eine Entscheidung braucht
(Uebersicht-Box Versicherung), was eine Sitzung bauen kann (PDF-Ablage,
Notizfeld, Dokumentendrift), was gemeldet aber nicht reproduzierbar ist, und
was bewusst so bleibt - letzteres, damit bekannte Grenzen nicht als Fehler
wiederkommen.

/stand (.claude/commands/stand.md) ist der zentrale Aufruf. Er misst den
mechanischen Teil selbst - Repo-Gleichstand, Manifest gegen OTA-Buendel samt
sha256, Fassung der ausgelieferten .ipa, ob die eigenen Plugins darin
registriert sind, und welche nativen Commits sich seit ihr angesammelt haben -
und liest OFFEN.md dazu. Dieser Teil kann deshalb nicht veralten. Probelauf
ausgefuehrt: er meldet korrekt 2026.9.6.5, Buendel passend, .ipa auf
2026.9.4.17 ohne die beiden eigenen Plugins, zwei native Commits wartend.

Verankert in CLAUDE.md (wird beim Sitzungsstart geladen) und als Punkt 0 der
Leseordnung in AGENTS.md.
2026-09-07 12:04:48 +02:00

3.1 KiB

description
description
Zeigt den aktuellen Stand von DM360 - was zu tun ist, und ob Repo, Versionen und ausgelieferte App zusammenpassen.

Zeige den aktuellen Stand dieses Projekts. Zwei Teile: den gemessenen (unten selbst nachrechnen, nie aus dem Gedächtnis) und den gepflegten (aus OFFEN.md).

1. Messen

Führe genau diesen Block aus:

R=$(git rev-parse --show-toplevel) && cd "$R"
echo "== Repository =="
echo "  Zweig $(git branch --show-current) | HEAD $(git rev-parse --short HEAD) | origin $(git rev-parse --short @{u} 2>/dev/null || echo '?')"
printf "  Arbeitsbaum: "; [ -z "$(git status --porcelain)" ] && echo sauber || git status --short
echo "== Versionen =="
python - <<'PY'
import json, hashlib, pathlib, zipfile, plistlib, re
b = "custom_components/audi_dashboard/"
m = json.load(open(b + "manifest.json"))["version"]
print(f"  Integration   {m}")
try:
    j = json.load(open(b + "frontend/app/bundle.json"))
    z = pathlib.Path(b + "frontend/app/bundle.zip").read_bytes()
    ok = j["version"] == m and hashlib.sha256(z).hexdigest() == j["sha256"] and len(z) == j["bytes"]
    print(f"  OTA-Buendel   {j['version']}   {'passt' if ok else 'PASST NICHT - npm run ota faellig'}")
except Exception as e:
    print("  OTA-Buendel   nicht lesbar:", e)
try:
    zf = zipfile.ZipFile("companion-app/auslieferung/App.ipa")
    n = zf.namelist()
    p = plistlib.loads(zf.read([x for x in n if re.match(r"Payload/[^/]+\.app/Info\.plist$", x)][0]))
    print(f"  .ipa auf dem Telefon  {p.get('CFBundleShortVersionString')}")
    c = [x for x in n if re.match(r"Payload/[^/]+\.app/capacitor\.config\.json$", x)]
    if c:
        L = json.loads(zf.read(c[0])).get("packageClassList", [])
        fehlt = [k for k in ("BelegZwischenablagePlugin", "KalenderTerminPlugin") if k not in L]
        print("  eigene Plugins registriert:", "ja" if not fehlt else "NEIN - " + ", ".join(fehlt))
except Exception as e:
    print("  .ipa nicht lesbar:", e)
PY
echo "== Wartet auf einen Xcode-Lauf =="
B=$(git log --format=%H -1 -- companion-app/auslieferung/App.ipa)
N=$(git log --oneline "$B..HEAD" -- companion-app/native/ companion-app/scripts/ios-*.sh companion-app/scripts/ios-*.mjs companion-app/capacitor.config.ts)
[ -z "$N" ] && echo "  keine nativen Aenderungen seit der ausgelieferten .ipa" || echo "$N" | sed 's/^/  /'

2. Lesen

Lies danach OFFEN.md. Steht dort etwas unter „Wartet auf einen Xcode-Lauf", oder meldet die Messung nicht registrierte Plugins, lies zusaetzlich APPLE_DEV_BACKLOG.md.

3. Berichten

Kurz und in dieser Reihenfolge:

  1. Stimmt der mechanische Stand? Nur melden, was nicht passt - Repo nicht synchron, Buendel-Version abweichend, Pluginliste unvollstaendig, native Aenderungen aufgelaufen. Passt alles, genuegt ein Satz.
  2. Was wartet auf den Eigentuemer (Abschnitt 1 und 2 von OFFEN.md).
  3. Was eine Sitzung bauen koennte (Abschnitt 3), mit einer Empfehlung.

Nenne die Punkte aus OFFEN.md, statt sie neu herzuleiten - und wenn dir beim Messen etwas auffaellt, das dort fehlt, sag es und trage es nach.

Starte nichts von selbst. Ein Xcode-Lauf ist immer die Handlung des Eigentuemers (Apple-Regel in AGENTS.md).