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.
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
---
|
||||
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:
|
||||
|
||||
```bash
|
||||
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`).
|
||||
Reference in New Issue
Block a user