|
| 1 | +# Vorhaben: Doku, Memory und Code beisammenhalten |
| 2 | + |
| 3 | +> **Übergabe für eine neue Session — Stand 2026-09-18.** |
| 4 | +> Teil 1 und 2 sind erledigt: Prüfungen für die Tabellen des Repos und ein |
| 5 | +> pre-commit-Hook. Offen sind **Teil 3** (Memory verschlanken) und **Teil 4** |
| 6 | +> (Abschluss-Skill). Beides ist mit dem Owner abgesprochen, die Einzelheiten |
| 7 | +> entscheidet er je Punkt in der neuen Session. |
| 8 | +> **Ergebnis: offen.** |
| 9 | +
|
| 10 | +## Worum es geht |
| 11 | + |
| 12 | +Dieses Projekt wird vollständig von Claude bearbeitet. Zwischen zwei Sessions |
| 13 | +bleibt nur, was im Repo oder im Memory steht — was keine Prüfung erzwingt, |
| 14 | +hängt am Daran-Denken. Das ging in Kleinigkeiten immer wieder schief. Die |
| 15 | +Durchsicht vom 2026-09-18 hat drei Ursachen gefunden: |
| 16 | + |
| 17 | +1. **Derselbe Sachverhalt steht an mehreren Stellen** — in `src/version.h`, |
| 18 | + README, einem Vorhaben, einer Zuordnungstabelle und im Memory. Jede Kopie |
| 19 | + ist eine Stelle, die man vergessen kann. |
| 20 | +2. **Geprüft wurde nur ein Teil**, und ein Teil davon nur auf Zuruf. |
| 21 | +3. **Doku-Commits liefen ohne jede Prüfung** direkt auf `main`; aufgefallen |
| 22 | + wäre ein Fehler frühestens in der CI nach dem Push. |
| 23 | + |
| 24 | +## Erledigt am 2026-09-18 (Teil 1 und 2) |
| 25 | + |
| 26 | +Merges `a48e6a6`, `1095408` und `88a8044` auf `main`. |
| 27 | + |
| 28 | +* [`test/doku_zuordnung_test.py`](test/doku_zuordnung_test.py) — |
| 29 | + `Byte-Zuordnung.md` gegen den Code, dazu `set_top_zuordnung.py --pruefen`. |
| 30 | +* `set_top_zuordnung.py --pruefen` prüft jetzt auch die Topic-Listen in |
| 31 | + Abschnitt 3 von `SET-TOP-Zuordnung.md` und die Zahlen im Text. Anlass: Die |
| 32 | + sieben Installer-Topics aus 3.19.0 fehlten dort drei Wochen unbemerkt. |
| 33 | +* [`test/repo_konsistenz_test.py`](test/repo_konsistenz_test.py) — README |
| 34 | + „Aufbau“, die Werkzeugtabelle in `test/README.md`, `MQTT-Topics.md` gegen den |
| 35 | + Code, die Pfade in `CLAUDE.md` und jeder relative Link. Fand beim Einführen |
| 36 | + 14 Lücken, alle berichtigt. |
| 37 | +* `test/hosttests.sh --schnell` fährt nur die Python-Prüfungen (< 1 s); die |
| 38 | + Vollständigkeitsprüfung erfasst jetzt auch `*_test.py`. |
| 39 | +* [`.githooks/pre-commit`](.githooks/pre-commit) ruft `--schnell` vor jedem |
| 40 | + Commit. **Einmal je Klon aktivieren:** `git config core.hooksPath .githooks` |
| 41 | + — im Arbeitsverzeichnis des Owners ist das seit 2026-09-18 gesetzt. |
| 42 | + |
| 43 | +**Was diese Prüfungen nicht abdecken:** Bedeutungstexte (Befunde, |
| 44 | +Begründungen, Fußnoten), das Memory (liegt außerhalb des Repos) und ob der |
| 45 | +Kopf eines Vorhabens das aktuelle Ergebnis nennt. Darum geht es in Teil 3 |
| 46 | +und 4. |
| 47 | + |
| 48 | +## Teil 3 — Memory verschlanken |
| 49 | + |
| 50 | +### Lage (2026-09-18) |
| 51 | + |
| 52 | +* 43 Memory-Dateien, zusammen rund 25 000 Wörter. `MEMORY.md` hat 44 Zeilen und |
| 53 | + wird in jeder Session geladen. |
| 54 | +* **`projektstand-heishamon` allein hat rund 10 500 Wörter**, darin acht |
| 55 | + übereinandergestapelte Absätze „AKTUELLER STAND“ von 3.11.0 bis 3.22.0. Das ist |
| 56 | + ein zweiter Changelog neben `src/version.h` — genau die Doppelung aus Ursache 1. |
| 57 | +* Acht Memories nennen sich selbst „erledigt“ oder „abgeschlossen“ — Kandidaten |
| 58 | + für ein Archiv. |
| 59 | +* Der **zweistufige Index** (`INDEX_*.md` je Thema, `ARCHIV.md` für Erledigtes, |
| 60 | + in `MEMORY.md` nur Grundregeln und Verzeichnis) ist in der globalen |
| 61 | + Arbeitsanweisung des Owners beschrieben und wird von seinem `memory-lint` (V2) |
| 62 | + unterstützt — dieses Projekt nutzt ihn noch nicht. |
| 63 | +* Eine Memory verweist auf zwei Logdateien unter `test/`, die es nicht mehr gibt. |
| 64 | + |
| 65 | +### Ziel |
| 66 | + |
| 67 | +* **Im Memory steht nur noch, wie Claude arbeitet** — Messkniffe, Kalibrierung, |
| 68 | + Entscheidungsgewohnheiten des Owners. **Fakten stehen im Repo.** So zieht |
| 69 | + die globale Arbeitsanweisung des Owners die Grenze, sinngemäß: Was ein Mensch |
| 70 | + bei der Übergabe braucht, gehört ins Repo; ins Memory kommt nur, was steuert, |
| 71 | + wie Claude arbeitet — kein Fakt an beiden Stellen. |
| 72 | +* **Der Stand der Boards gehört ins Repo**: welche Version auf welchem der vier |
| 73 | + Boards läuft, welcher Rückfall bereitliegt. Das braucht auch die Familie bei |
| 74 | + einer Übergabe. Naheliegender Ort ist `Ablauf-Backup-Boards.md` (dort stehen |
| 75 | + die Adressen der Boards bereits); der Owner entscheidet. |
| 76 | +* `MEMORY.md` enthält nur noch Grundregeln, die jede Session braucht, und das |
| 77 | + Verzeichnis der Themen-Indizes. |
| 78 | + |
| 79 | +### Vorgehen |
| 80 | + |
| 81 | +1. **Bestandsaufnahme vorlegen:** eine Tabelle aller Memories — Name, Typ, |
| 82 | + Umfang, Vorschlag (behalten / kürzen / ins Repo / ins Archiv / löschen) mit |
| 83 | + Begründung. **Dem Owner vorlegen und je Memory entscheiden lassen**, nicht als |
| 84 | + Paket. Ein Vorschlag ist kein Entscheid und wird auch nicht so notiert. |
| 85 | +2. **`projektstand-heishamon` zuerst:** auf den aktuellen Stand und die offenen |
| 86 | + Punkte kürzen. Alles Geschichtliche steht in `src/version.h`, in den |
| 87 | + Vorhaben-Dateien oder im Changelog der Releases; vor dem Löschen eines Absatzes |
| 88 | + stichprobenartig nachsehen, dass er dort wirklich steht. Was nirgends steht und |
| 89 | + ein Mensch braucht, kommt ins Repo. |
| 90 | +3. **Themen-Indizes anlegen** und die Zeiger aus `MEMORY.md` dorthin umziehen; |
| 91 | + Erledigtes nach `ARCHIV.md`. Die Regeln setzt `memory-lint` durch — er blockiert |
| 92 | + bei Schemafehlern, also Zeile für Zeile umziehen, nicht alles auf einmal. |
| 93 | +4. **Tote Verweise bereinigen** (die zwei Logdateien). |
| 94 | +5. **Vorschlag an den Owner, nicht umsetzen:** `memory-lint` könnte zusätzlich |
| 95 | + melden, wenn eine Memory auf eine Datei im Repo zeigt, die es nicht gibt. Das |
| 96 | + Werkzeug gehört dem Owner und läuft in allen seinen Projekten. |
| 97 | + |
| 98 | +### Vorsicht |
| 99 | + |
| 100 | +* **Das Repo ist öffentlich, das Memory nicht.** Manche Memories tragen den |
| 101 | + ausdrücklichen Vermerk, ihren Inhalt nicht öffentlich zu dokumentieren. Vor |
| 102 | + jedem Umzug ins Repo je Punkt prüfen, ob er öffentlich sein darf; im Zweifel |
| 103 | + den Owner fragen. |
| 104 | +* `doku-intern/` gilt weiter: nachschlagen ja, zitieren nie — auch nicht beim |
| 105 | + Umformulieren einer Memory. |
| 106 | +* Passwörter und Ports gehören weiterhin nur in `platformio_user_env.ini`. |
| 107 | + |
| 108 | +### Abnahme |
| 109 | + |
| 110 | +* `projektstand-heishamon` enthält nur noch den aktuellen Stand und offene Punkte |
| 111 | + (Richtwert: unter 1 000 Wörtern). |
| 112 | +* Stichprobe: Zu fünf gelöschten Fakten findet sich die Stelle im Repo. |
| 113 | +* `memory-lint` grün, `MEMORY.md` nur Grundregeln und Verzeichnis. |
| 114 | + |
| 115 | +## Teil 4 — Abschluss-Skill `/abschluss` |
| 116 | + |
| 117 | +### Zweck |
| 118 | + |
| 119 | +Ein fester Handgriff am Ende jeder Session statt „daran denken“. Er lohnt erst |
| 120 | +nach Teil 3 — vorher prüft er gegen ein Memory, das selbst nicht stimmt. |
| 121 | + |
| 122 | +### Inhalt (Vorschlag, mit dem Owner abstimmen) |
| 123 | + |
| 124 | +1. **Prüfen:** `./test/hosttests.sh --schnell`, bei Änderungen in `src/` der volle |
| 125 | + Lauf. `git status`, ungepushte Commits, offene Branches melden. |
| 126 | +2. **Memory abgleichen:** Welche Memories berühren die Änderungen dieser Session |
| 127 | + (Suchbegriffe aus dem Diff)? Stimmen deren Angaben noch? Neue Erkenntnis: ins |
| 128 | + Repo (braucht ein Mensch) oder ins Memory (steuert Claude)? |
| 129 | +3. **Vorhaben-Köpfe:** Nennt jede heute bearbeitete Datei `Vorhaben-*`, |
| 130 | + `Auftrag-*`, `Arbeitsplan-*` oben das aktuelle Ergebnis? |
| 131 | +4. **Abschlussmeldung** nach der globalen Regel des Owners: was geändert wurde, |
| 132 | + warum, und was offen ist — drei bis fünf Sätze. |
| 133 | + |
| 134 | +### Form |
| 135 | + |
| 136 | +`.claude/skills/abschluss/SKILL.md`, aufgebaut wie `/pruefen-vor-merge`: nur |
| 137 | +lesen, prüfen und melden; pushen nur auf Auftrag. Eintrag in `CLAUDE.md` unter |
| 138 | +„Wo was steht“. |
| 139 | + |
| 140 | +### Abnahme |
| 141 | + |
| 142 | +Einmal am Ende der Session laufen lassen, die Teil 3 abschließt; dabei gefundene |
| 143 | +Abweichungen berichtigen. |
| 144 | + |
| 145 | +## Nebenbefund: das Ergebnis im Kopf der Vorhaben |
| 146 | + |
| 147 | +`CLAUDE.md` sagt über die Vorhaben- und Auftragsdateien: „Ergebnis steht jeweils |
| 148 | +im Kopf“. Zwei weichen ab: |
| 149 | + |
| 150 | +* [`Arbeitsplan-KNX-Vorderhaus.md`](Arbeitsplan-KNX-Vorderhaus.md) führt oben noch |
| 151 | + „Ergebnis: offen“; das tatsächliche Ergebnis („ausgerollt“) steht drei Absätze |
| 152 | + tiefer. |
| 153 | +* [`Vorhaben-Nur-ESP32-Pfad.md`](Vorhaben-Nur-ESP32-Pfad.md) nennt im Kopf nur den |
| 154 | + Planungsstand vom 2026-08-25, obwohl 3.16.0 umgesetzt und ausgerollt ist. |
| 155 | + |
| 156 | +**Vorschlag für den Owner:** eine feste Zeile `**Ergebnis:** …` direkt unter der |
| 157 | +Überschrift jeder solchen Datei. Dann kann `repo_konsistenz_test.py` prüfen, dass |
| 158 | +sie vorhanden ist — ob sie stimmt, prüft der Abschluss-Skill (Teil 4, Schritt 3). |
| 159 | + |
| 160 | +## Regeln für die Session |
| 161 | + |
| 162 | +* Anrede in Du-Form, Deutsch. Optionen nummeriert und mit einer markierten |
| 163 | + Empfehlung vorlegen, Punkte **einzeln** entscheiden lassen. |
| 164 | +* Die harten Regeln aus [`CLAUDE.md`](CLAUDE.md) gelten. Doku-Änderungen gehen |
| 165 | + direkt auf `main` (der Hook prüft sie); Änderungen an Tests und Skripten auf |
| 166 | + einem Branch mit Rettungsanker, wie am 2026-09-18. |
| 167 | +* Kein Zugriff auf die Anlage nötig. |
| 168 | +* Pushen nur auf Auftrag, und ohne `--follow-tags` — die Rettungsanker bleiben |
| 169 | + lokal. |
| 170 | +* Zum Schluss den Kopf dieser Datei auf das Ergebnis setzen. |
0 commit comments