fix: QC-Ratings aus 7 älteren Artikeln entfernt (CHECK 10)
This commit is contained in:
@@ -0,0 +1,193 @@
|
||||
# BSN Live-System — Initialer Projektplan
|
||||
|
||||
> **Ziel:** Neuer Server, neues Projekt, alles von Tag 1 an richtig.
|
||||
> **Erstellt:** 21. Juni 2026 — basierend auf 3 Review-Runden + sys-1/2-Tests
|
||||
|
||||
---
|
||||
|
||||
## Phase 0 — Server einrichten (1h)
|
||||
|
||||
```bash
|
||||
# User anlegen
|
||||
sudo useradd -m -s /bin/bash cody
|
||||
sudo useradd -m -s /bin/bash basti
|
||||
sudo useradd -m -s /bin/bash alicia
|
||||
|
||||
# Sudo für alle
|
||||
echo "cody ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/cody
|
||||
echo "basti ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/basti
|
||||
echo "alicia ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/alicia
|
||||
|
||||
# SSH-Keys verteilen
|
||||
# (Public Keys von Cody, Basti, Alicia in authorized_keys)
|
||||
|
||||
# Basis-Tools
|
||||
sudo apt-get update && sudo apt-get install -y redis-server git python3-pip curl
|
||||
sudo systemctl enable --now redis-server
|
||||
|
||||
# Python-Toolchain
|
||||
pip install ruff mypy pre-commit pytest pytest-cov redis
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 — Projekt-Repo aufsetzen (30min)
|
||||
|
||||
In Gitea (`git.datenhimmel.work`):
|
||||
- Neues Repo `BSN-Community` anlegen
|
||||
- Gitea Actions Runner registrieren
|
||||
|
||||
Im Projekt-Root:
|
||||
|
||||
```bash
|
||||
git clone git@git.datenhimmel.work:danielkrause/BSN-Community.git
|
||||
cd BSN-Community
|
||||
```
|
||||
|
||||
**Dateien aus dem Prototypen kopieren:**
|
||||
|
||||
| Von (BSN-Chatsystem) | Nach (BSN-Community) | Grund |
|
||||
|---|---|---|
|
||||
| `.gitea/workflows/quality.yml` | `.gitea/workflows/quality.yml` | CI-Gate |
|
||||
| `CODING_STANDARDS.md` | `CODING_STANDARDS.md` | Regelwerk |
|
||||
| `queue_handler.py` | `src/queue_handler.py` | Queue-System |
|
||||
| `webhook_queue.py` | `src/webhook_queue.py` | Signatur-Prüfung |
|
||||
| `queue_worker.py` | `src/queue_worker.py` | Async Worker |
|
||||
| `pyproject.toml` (aus HTML §13) | `pyproject.toml` | Ruff + mypy + pytest Config |
|
||||
| `.pre-commit-config.yaml` (aus HTML §13) | `.pre-commit-config.yaml` | Pre-Commit Hooks |
|
||||
| `docs/bsn-coding-standards.html` | `docs/bsn-coding-standards.html` | IT-Bibel |
|
||||
|
||||
**Git initial:**
|
||||
```bash
|
||||
git add -A
|
||||
git commit -m "chore: Projekt-Setup mit CI-Gate, Queue, Coding-Standards"
|
||||
git push origin main
|
||||
# Gitea Actions prüft automatisch!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 — Hermes-Agenten einrichten (30min)
|
||||
|
||||
```bash
|
||||
# Cody-Profil (Entwickler)
|
||||
hermes profile create cody --clone-from default
|
||||
hermes config set agent.environment_hint "Du bist Cody, BSN-Entwickler. Befolge skill_view('bsn-coding-standards'). CI: .gitea/workflows/quality.yml" --profile cody
|
||||
|
||||
# Alicia-Profil (Content)
|
||||
hermes profile create alicia --clone-from default
|
||||
hermes config set agent.environment_hint "Du bist Alicia, BSN-Content-Managerin. System-Übersicht: read_file('ALICIA.md'). Befolge skill_view('bsn-coding-standards')." --profile alicia
|
||||
|
||||
# Basti-Profil (Redakteur)
|
||||
hermes profile create basti --clone-from default
|
||||
hermes config set agent.environment_hint "Du bist Basti, BSN-Redakteur. Befolge skill_view('bsn-coding-standards') bei Code-Arbeit." --profile basti
|
||||
```
|
||||
|
||||
**Skills installieren (pro Profil):**
|
||||
```
|
||||
skill_view('bsn-coding-standards') # Coding-Regeln
|
||||
skill_view('web-research') # Recherche
|
||||
skill_view('article-management') # Article Server (Alicia/Basti)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 3 — Flask-App-Struktur (1h)
|
||||
|
||||
Statt `app.py` (5599 Zeilen Monolith) → saubere Struktur:
|
||||
|
||||
```
|
||||
src/
|
||||
├── app.py # Flask-App-Factory + Config (< 100 Zeilen)
|
||||
├── routes/
|
||||
│ ├── __init__.py
|
||||
│ ├── whatsapp.py # WhatsApp Webhook (→ Queue)
|
||||
│ ├── telegram.py # Telegram Webhook (→ Queue)
|
||||
│ ├── admin.py # Admin-Dashboard
|
||||
│ └── api.py # Öffentliche API
|
||||
├── services/
|
||||
│ ├── __init__.py
|
||||
│ ├── intake.py # Message-Verarbeitung
|
||||
│ └── game_service.py # Spiele-Logik
|
||||
├── models/
|
||||
│ ├── __init__.py
|
||||
│ └── submission.py # DB-Modell
|
||||
├── queue/
|
||||
│ ├── __init__.py
|
||||
│ ├── handler.py # QueueHandler (von queue_handler.py)
|
||||
│ ├── webhook.py # Signatur + Intake (von webhook_queue.py)
|
||||
│ └── worker.py # Queue-Worker (von queue_worker.py)
|
||||
├── utils/
|
||||
│ ├── __init__.py
|
||||
│ └── validators.py
|
||||
tests/
|
||||
├── test_routes/
|
||||
├── test_services/
|
||||
├── test_queue/
|
||||
└── conftest.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 4 — Services starten (15min)
|
||||
|
||||
```bash
|
||||
# Flask-App (systemd)
|
||||
sudo tee /etc/systemd/system/bsn-chatbot.service << EOF
|
||||
[Unit]
|
||||
Description=BSN Chatbot
|
||||
After=network.target redis-server.service
|
||||
|
||||
[Service]
|
||||
User=cody
|
||||
WorkingDirectory=/home/cody/workspace/BSN-Community
|
||||
ExecStart=/home/cody/venv/bin/python src/app.py
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Queue-Worker (systemd)
|
||||
sudo tee /etc/systemd/system/bsn-worker.service << EOF
|
||||
[Unit]
|
||||
Description=BSN Queue Worker
|
||||
After=redis-server.service
|
||||
|
||||
[Service]
|
||||
User=cody
|
||||
WorkingDirectory=/home/cody/workspace/BSN-Community
|
||||
ExecStart=/home/cody/venv/bin/python src/queue/worker.py --poll 2 --batch 5
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now bsn-chatbot bsn-worker
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 5 — Monitoring (später)
|
||||
|
||||
- `structlog` für strukturiertes Logging
|
||||
- `GlitchTip` für Error-Tracking
|
||||
- `/admin/queue` Endpoint für Queue-Status
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checkliste: Ist alles drin?
|
||||
|
||||
- [ ] CI-Gate (Gitea Actions) prüft jeden Push
|
||||
- [ ] Pre-commit blockiert lokal
|
||||
- [ ] Coding-Standards-Skill in allen Profilen
|
||||
- [ ] Queue puffert Submissions (Tunnel down = nix verloren)
|
||||
- [ ] Signatur-Prüfung vor Enqueue
|
||||
- [ ] Dedup über message_id
|
||||
- [ ] Worker verarbeitet asynchron
|
||||
- [ ] Flask-Struktur sauber getrennt (Routes ≠ Services ≠ Models)
|
||||
- [ ] Alle Agenten (Cody, Basti, Alicia) haben environment_hint
|
||||
- [ ] Redis läuft als systemd-Service
|
||||
- [ ] Worker läuft als systemd-Service
|
||||
Reference in New Issue
Block a user