mindnet/docs/dev_workflow.md

213 lines
6.8 KiB
Markdown
Raw Normal View History

2025-12-10 18:55:38 +01:00
# Mindnet v2.4 – Entwickler-Workflow
**Datei:** `docs/DEV_WORKFLOW.md`
**Stand:** 2025-12-10 (Aktualisiert: Inkl. Interview-Tests WP07)
2025-12-07 15:49:44 +01:00
Dieses Handbuch beschreibt den Entwicklungszyklus zwischen **Windows PC** (IDE), **Raspberry Pi** (Gitea) und **Beelink** (Runtime/Server).
---
## 1. Die Architektur
* **Windows 11 (VS Code):** Hier schreibst du Code. **Nie** direkt auf `main` arbeiten!
* **Raspberry Pi (Gitea):** Der Tresor. Speichert den Code und verwaltet Versionen.
2025-12-08 10:10:48 +01:00
* **Beelink (Runtime):** Hier läuft die Software. Wir nutzen **Systemd-Services**:
2025-12-10 10:26:44 +01:00
* **PROD:**
* API: `mindnet-prod` (Port 8001). Ordner: `~/mindnet`.
* UI: `mindnet-ui-prod` (Port 8501).
* **DEV:**
* API: `mindnet-dev` (Port 8002). Ordner: `~/mindnet_dev`.
* UI: `mindnet-ui-dev` (Port 8502).
2025-12-07 15:49:44 +01:00
---
## 2. Der Zyklus: Von der Idee zum Release
### Phase 1: Entwicklung (Windows / VS Code)
Hier erstellst du die neue Funktion in einer sicheren Umgebung.
2025-12-07 19:09:03 +01:00
1. **Basis aktualisieren (WICHTIG!):**
Bevor du startest, muss dein lokales `main` auf dem Stand des Servers sein.
* Klicke unten links auf den aktuellen Branch und wähle **`main`**.
* Klicke links im Menü "Source Control" auf die **drei Punkte (...)** -> **Pull** (oder das Synchronisieren-Symbol).
* *Erst jetzt hast du alle Dateien!*
2025-12-07 15:49:44 +01:00
2025-12-07 19:09:03 +01:00
2. **Branch erstellen:**
* Klicke wieder unten links auf `main`.
2025-12-07 18:53:13 +01:00
* Wähle `+ Create new branch...`.
2025-12-10 18:55:38 +01:00
* Gib den Namen ein: `feature/was-ich-tue` (z.B. `feature/wp07-interview`).
2025-12-07 15:49:44 +01:00
* Drücke **Enter**.
3. **Sicherheits-Check:**
2025-12-07 18:53:13 +01:00
* Steht unten links jetzt dein Feature-Branch? **Nur dann darfst du Code ändern!**
2025-12-07 15:49:44 +01:00
4. **Coden:**
2025-12-10 18:55:38 +01:00
* Nimm deine Änderungen vor (z.B. neue Schemas in `decision_engine.yaml`).
2025-12-07 15:49:44 +01:00
5. **Sichern & Hochladen:**
2025-12-07 18:53:13 +01:00
* **Source Control** Icon (Gabel-Symbol) -> Nachricht eingeben -> **Commit**.
* **Publish Branch** (oder "Sync Changes"), um den Branch zum Raspberry Pi (Gitea) zu senden.
2025-12-07 15:49:44 +01:00
---
### Phase 2: Testen (Beelink / `mindnet_dev`)
2025-12-07 18:53:13 +01:00
Hier prüfst du, ob dein neuer Code auf dem echten Server läuft.
2025-12-07 15:49:44 +01:00
1. **Einloggen:**
`ssh user@<BEELINK-IP>`
2. **In die Werkstatt gehen:**
`cd /home/llmadmin/mindnet_dev`
3. **Code holen:**
```bash
git fetch
2025-12-07 18:53:13 +01:00
# Tipp: 'git branch -r' zeigt alle verfügbaren Branches an
2025-12-10 18:55:38 +01:00
git checkout feature/wp07-interview
2025-12-07 15:49:44 +01:00
git pull
```
2025-12-08 10:10:48 +01:00
4. **Umgebung vorbereiten (bei Bedarf):**
2025-12-07 15:49:44 +01:00
```bash
source .venv/bin/activate
2025-12-07 18:53:13 +01:00
pip install -r requirements.txt # Nur nötig bei neuen Paketen
2025-12-07 15:49:44 +01:00
```
2025-12-08 10:10:48 +01:00
5. **Test-Server aktualisieren (WICHTIG):**
2025-12-10 10:26:44 +01:00
Der Code ist da, aber die Prozesse im RAM sind noch alt. Wir müssen die Services neustarten.
2025-12-07 18:53:13 +01:00
2025-12-08 10:10:48 +01:00
**Option A: Standard (Als Service laufen lassen)**
Ideal, wenn du nur testen willst, ob es läuft.
2025-12-07 15:49:44 +01:00
```bash
2025-12-10 18:55:38 +01:00
# 1. API neustarten (Backend)
2025-12-08 10:10:48 +01:00
sudo systemctl restart mindnet-dev
2025-12-10 18:55:38 +01:00
# 2. UI neustarten (Frontend)
2025-12-10 10:26:44 +01:00
sudo systemctl restart mindnet-ui-dev
2025-12-08 10:10:48 +01:00
# Logs prüfen (um Fehler zu sehen):
journalctl -u mindnet-dev -f
2025-12-10 10:26:44 +01:00
# Oder Frontend Logs:
journalctl -u mindnet-ui-dev -f
2025-12-08 10:10:48 +01:00
```
**Option B: Manuell Debuggen (Direct Output)**
Ideal, wenn du Print-Ausgaben direkt sehen willst oder der Service dauernd crasht.
```bash
2025-12-10 10:26:44 +01:00
# 1. Services stoppen (wichtig, sonst sind Ports 8002/8502 belegt!)
2025-12-08 10:10:48 +01:00
sudo systemctl stop mindnet-dev
2025-12-10 10:26:44 +01:00
sudo systemctl stop mindnet-ui-dev
2025-12-08 10:10:48 +01:00
2025-12-10 10:26:44 +01:00
# 2. Manuell starten (z.B. API)
2025-12-07 18:53:13 +01:00
uvicorn app.main:app --host 0.0.0.0 --port 8002 --env-file .env
2025-12-08 10:10:48 +01:00
# ... Testen ...
2025-12-10 10:26:44 +01:00
# 3. Wenn fertig: Services wieder anschalten (Optional)
2025-12-08 10:10:48 +01:00
# Strg+C drücken
sudo systemctl start mindnet-dev
2025-12-10 10:26:44 +01:00
sudo systemctl start mindnet-ui-dev
2025-12-07 15:49:44 +01:00
```
2025-12-10 18:55:38 +01:00
6. **Validieren (Smoke Tests):**
* **Browser:** Öffne `http://<IP>:8502` um die UI zu testen (Intent Badge prüfen!).
2025-12-10 10:26:44 +01:00
* **CLI:** Führe Testskripte in einem **zweiten Terminal** aus:
2025-12-10 18:55:38 +01:00
**Test A: Decision Engine**
```bash
python tests/test_wp06_decision.py -p 8002 -q "Soll ich Qdrant nutzen?"
# Erwartung: Intent DECISION
```
**Test B: Interview Modus (Neu!)**
2025-12-10 10:26:44 +01:00
```bash
2025-12-10 18:55:38 +01:00
python tests/test_wp06_decision.py -p 8002 -q "Ich will ein neues Projekt starten"
# Erwartung: Intent INTERVIEW, Output ist Markdown Codeblock
2025-12-10 10:26:44 +01:00
```
2025-12-07 15:49:44 +01:00
---
### Phase 3: Release (Gitea / Raspberry Pi)
2025-12-10 10:26:44 +01:00
Wenn der Test auf Port 8002 / 8502 erfolgreich war:
2025-12-07 15:49:44 +01:00
1. Öffne Gitea im Browser.
2025-12-07 18:53:13 +01:00
2. Erstelle einen **Pull Request** (Dein Branch -> `main`).
3. **Merge** den Pull Request.
2025-12-07 15:49:44 +01:00
---
### Phase 4: Deployment (Beelink / `mindnet`)
2025-12-10 10:26:44 +01:00
Jetzt bringen wir die Änderung in das Live-System (Port 8001 / 8501).
2025-12-07 15:49:44 +01:00
1. **Deploy-Agent (Automatisch):**
Wenn dein `deploy.yml` aktiv ist, passiert das jetzt von selbst!
2. **Manuell (Falls nötig):**
```bash
cd /home/llmadmin/mindnet
git pull origin main
2025-12-08 10:10:48 +01:00
2025-12-10 10:26:44 +01:00
# Dependencies updaten
source .venv/bin/activate
pip install -r requirements.txt
# Produktions-Services neustarten
2025-12-08 10:10:48 +01:00
sudo systemctl restart mindnet-prod
2025-12-10 10:26:44 +01:00
sudo systemctl restart mindnet-ui-prod
2025-12-08 10:10:48 +01:00
# Kurz prüfen, ob er läuft
sudo systemctl status mindnet-prod
2025-12-07 15:49:44 +01:00
```
---
2025-12-07 18:53:13 +01:00
### Phase 5: Aufräumen (Optional aber empfohlen)
Damit das Chaos nicht wächst, löschen wir den fertigen Branch.
1. **Gitea:** Im Pull Request auf "Delete Branch" klicken.
2. **Beelink (Dev):**
```bash
cd ~/mindnet_dev
git checkout main
git pull
2025-12-10 18:55:38 +01:00
git branch -d feature/wp07-interview
2025-12-07 18:53:13 +01:00
```
3. **VS Code:**
* Auf `main` wechseln.
2025-12-08 10:10:48 +01:00
* Sync drücken.
2025-12-07 18:53:13 +01:00
* `F1` -> `Git: Delete Branch` -> Branch auswählen.
---
2025-12-07 15:49:44 +01:00
## 3. Cheat Sheet: Die wichtigsten Befehle
| Wo? | Befehl | Was tut es? |
| :--- | :--- | :--- |
2025-12-07 19:09:03 +01:00
| **VS Code** | `Sync (auf main)` | **WICHTIG:** Holt neuesten Code vom Server. |
2025-12-08 10:10:48 +01:00
| **Beelink** | `git fetch` | Aktualisiert Liste der Remote-Branches. |
2025-12-10 10:26:44 +01:00
| **Beelink** | `sudo systemctl restart mindnet-dev` | **Neustart Dev-Backend (Port 8002).** |
| **Beelink** | `sudo systemctl restart mindnet-ui-dev` | **Neustart Dev-Frontend (Port 8502).** |
| **Beelink** | `journalctl -u mindnet-dev -f` | **Live-Logs Backend.** |
| **Beelink** | `journalctl -u mindnet-ui-dev -f` | **Live-Logs Frontend.** |
2025-12-07 15:49:44 +01:00
---
2025-12-07 19:09:03 +01:00
## 4. Troubleshooting
2025-12-07 15:49:44 +01:00
2025-12-10 18:55:38 +01:00
**"Read timed out (300s)" / 500 Error beim Interview**
* **Ursache:** Das LLM (Ollama) braucht für den One-Shot Draft länger als das Timeout erlaubt.
2025-12-09 17:11:03 +01:00
* **Lösung:**
2025-12-10 18:55:38 +01:00
1. Erhöhe in `.env` den Wert: `MINDNET_LLM_TIMEOUT=300.0`.
2025-12-10 10:26:44 +01:00
2. Starte die Server neu.
2025-12-09 17:11:03 +01:00
2025-12-10 10:26:44 +01:00
**"Port 8002 / 8502 already in use"**
* **Ursache:** Du willst `uvicorn` oder `streamlit` manuell starten, aber der Service läuft noch.
* **Lösung:** `sudo systemctl stop mindnet-dev` bzw. `mindnet-ui-dev`.
2025-12-08 10:10:48 +01:00
2025-12-09 17:11:03 +01:00
**"UnicodeDecodeError in .env"**
* **Ursache:** Umlaute oder Sonderzeichen in der `.env` Datei.
* **Lösung:** `.env` bereinigen (nur ASCII nutzen) und sicherstellen, dass sie UTF-8 ohne BOM ist.