# Session-Prompt F-01 — Projekt-Skeleton ``` Modell: Sonnet Du arbeitest in /Users/tarikmoussa/Desktop/files/agent-swarm-repo auf einem neuen Branch `feat/skeleton` (von `main`). ## Aufgabe Lege das Python-Projekt-Skeleton für den Telegram-Bot an: pyproject.toml, Paketstruktur unter `src/bot/`, leere Test-Dateien unter `tests/`, .env.example und .gitignore. Kein Feature-Code — nur die Projektstruktur, sodass `uv run pytest tests/ -v` mit 0 Tests grün durchläuft. Scope: NUR Datei- und Konfigurationsstruktur. Kein Bot-Code, kein HTTP-Code. ## Details Entscheidungen: `docs/adr/0002-python-telegram-bot-framework.md` Konventionen: `CONVENTIONS.md` (Abschnitt "Projekt: tg-bot-jetson") Gewünschte Verzeichnisstruktur: ``` src/ bot/ __init__.py config.py # pydantic-settings: BOT_TOKEN, ALLOWED_USER_IDS, MODEL_BASE_URL handlers.py # vorerst leer (Platzhalter) whitelist.py # vorerst leer (Platzhalter) connector.py # vorerst leer (Platzhalter) main.py # Einstiegspunkt (vorerst nur "pass") tests/ __init__.py test_config.py # vorerst leer pyproject.toml # [project] name="tg-bot-jetson", requires-python=">=3.11" # deps: python-telegram-bot>=21, httpx, pydantic-settings # [dev-deps]: pytest, ruff .env.example # BOT_TOKEN=, ALLOWED_USER_IDS=123456,789012 # MODEL_BASE_URL=http://192.168.x.x:11434 .gitignore # .env, __pycache__, .venv, uv.lock nicht (committen!) uv.lock # nach `uv sync` erzeugt und committen ``` ## Akzeptanzkriterien - [ ] `uv sync` läuft ohne Fehler. - [ ] `uv run pytest tests/ -v` läuft durch (0 Tests, kein Fehler). - [ ] `uv run ruff check src/ tests/` → 0 Befunde. - [ ] `src/bot/config.py` enthält eine Pydantic-Settings-Klasse mit BOT_TOKEN, ALLOWED_USER_IDS (list[int]), MODEL_BASE_URL. - [ ] `.env.example` vorhanden und aussagekräftig. - [ ] `.env` ist in `.gitignore`. ## Nicht anfassen Alles außer den oben genannten Pfaden. Kein Telegram-Handler-Code, kein HTTP-Client-Code, keine Whitelist-Logik. ## Commit & Push - Conventional Commit: `chore: scaffold tg-bot-jetson project skeleton` - Trailer: `Co-Authored-By: Claude Sonnet 4.6 ` - Push nach `origin feat/skeleton`, PR öffnen (Base: `main`). ## Abschluss 1. Manifest-Eintrag updaten: `manifests/requirements.md` → R-0001, Status `done`. 2. `STATE.md` aktualisieren: F-01 → In Progress → nach Merge: Next F-03 + F-04 frei. 3. Session-Log schreiben: `sessions/TEMPLATE.md` → `sessions/F-01-.md`. 4. Hygiene-Gate: `bash scripts/gate-session-hygiene.sh`. 5. PR-URL + Test-Zählstand reporten. ```