Files
BSN-Chatsystem/BSN-LIVESYSTEM-PLAN.md
T

5.6 KiB

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)

# 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:

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:

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)

# 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)

# 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