chore: reset repo to clean template state
Some checks failed
gates / quality (push) Has been cancelled
Some checks failed
gates / quality (push) Has been cancelled
Remove all tg-bot-jetson project artefacts (session logs, filled session-prompts F-01–F-07, ADRs 0002–0004). Reset ROADMAP.md board, STATE.md, CONVENTIONS.md project section, manifests/requirements.md, and metrics/efficiency.csv to blank template placeholders. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,14 +38,7 @@ Verbindlich für **alle** Aktoren. Änderungen nur per ADR.
|
||||
2. Tests grün. 3. Docs aktuell. 4. `STATE.md` aktualisiert.
|
||||
5. Session-Log geschrieben. 6. Quality-Gate `PASS`.
|
||||
|
||||
## Projekt: tg-bot-jetson (projektspezifisch — Änderungen per ADR)
|
||||
## Projekt: _<projektname>_ (projektspezifisch — Änderungen per ADR)
|
||||
|
||||
- **Sprache / Runtime:** Python 3.11+
|
||||
- **Paketmanagement:** `uv` + `pyproject.toml`; Lock-Datei `uv.lock` committen.
|
||||
- **Bot-Framework:** `python-telegram-bot` v21 (asyncio) — ADR-0002.
|
||||
- **HTTP-Client:** `httpx` (async) für Modell-Connector.
|
||||
- **Test-Befehl:** `uv run pytest tests/ -v`
|
||||
- **Lint:** `uv run ruff check src/ tests/`
|
||||
- **Config-Konvention:** Alle Secrets/Einstellungen via Umgebungsvariablen;
|
||||
`.env.example` committen, `.env` in `.gitignore` — ADR-0003.
|
||||
- **Spike-Branch:** `spike/<thema>` (z. B. `spike/model-api`), wird nach GO/NO-GO verworfen.
|
||||
> Dieser Abschnitt wird durch die BOOTSTRAP-Session befüllt.
|
||||
> Typische Einträge: Sprache/Runtime, Paketmanagement, Test-Befehl, Lint, Config-Konvention.
|
||||
|
||||
29
ROADMAP.md
29
ROADMAP.md
@@ -29,40 +29,21 @@ Ready-Set = { Items mit Status 🔲, deren Prereqs ALLE ✅ sind }
|
||||
> Ein Worker der keinen vorbereiteten Prompt vorfindet, soll NICHT beginnen
|
||||
> sondern `STATE.md` auf "Blocked — kein Prompt" setzen.
|
||||
|
||||
## Abhängigkeits-DAG (Projekt: tg-bot-jetson)
|
||||
## Abhängigkeits-DAG (Projekt: _<projektname>_)
|
||||
|
||||
```
|
||||
F-01 (Skeleton) ──┬──► F-03 (Whitelist) ──┐
|
||||
├──► F-04 (Bot-Handler) ──┼──► F-06 (Integration) ──► F-07 (Deploy)
|
||||
└──► F-05 (Model-Connector) ──┘
|
||||
F-01 ──► F-02 ──► …
|
||||
```
|
||||
|
||||
> Nach F-01 ✅ werden F-03, F-04 und F-05 **gleichzeitig** frei — alle drei
|
||||
> können parallel dispatcht werden.
|
||||
> F-06 bleibt ⏸ bis F-03 + F-04 + F-05 alle ✅ sind.
|
||||
> Den DAG nach dem BOOTSTRAP befüllen.
|
||||
|
||||
## Board
|
||||
|
||||
| ID | Item | Typ | Status | Prereqs | Rolle · Modell | Aufwand |
|
||||
|----|------|-----|--------|---------|----------------|---------|
|
||||
| F-01 | Projekt-Skeleton (pyproject.toml, Paketstruktur, CI-Stub) | 🧱 | ✅ | — | Worker · Sonnet | ~0.5 d |
|
||||
| F-03 | Whitelist-Middleware (User-ID-Allowlist, Env-Var-Config) | 🧱 | ✅ | F-01 | Worker · Sonnet | ~0.5 d |
|
||||
| F-04 | Telegram-Bot-Handler (Polling-Loop, /start, /help, Nachricht-Relay) | 🔌 | ✅ | F-01 | Porter · Sonnet | ~1 d |
|
||||
| F-05 | Modell-HTTP-Connector (httpx-Client gegen konfigurierbaren OpenAI-compat Endpoint) | 🔌 | ✅ | F-01 | Porter · Sonnet | ~0.5 d |
|
||||
| F-06 | Integration & Smoke-Test (Whitelist + Handler + Connector verdrahtet, E2E-Test) | 🧱 | ✅ | F-03, F-04, F-05 | Worker · Sonnet | ~1 d |
|
||||
| F-07 | Deployment-Config (.env.example, Docker oder systemd-Unit) | 🧱 | ✅ | F-06 | Worker · Haiku | ~0.5 d |
|
||||
|
||||
> F-04 ist `🔌`: Referenz-Impl = python-telegram-bot-v21-Dokumentation (golden oracle vorhanden).
|
||||
> F-05 ist `🔌`: Referenz-Impl = OpenAI Chat Completions API (de-facto-Standard für
|
||||
> selbst gehostete Modelle; Endpoint-URL ist reine Config, kein Forschungsproblem).
|
||||
> ADR-0004 begründet, warum kein Spike nötig ist.
|
||||
| — | _(nach BOOTSTRAP befüllen)_ | — | — | — | — | — |
|
||||
|
||||
## Done
|
||||
| ID | Item | Session | Commit |
|
||||
|----|------|---------|--------|
|
||||
| F-01 | Projekt-Skeleton | F-01 (2026-06-03) | `82eb6a6` |
|
||||
| F-03 | Whitelist-Middleware | F-03/04/05 (2026-06-03) | `de34c34` |
|
||||
| F-04 | Telegram-Bot-Handler | F-03/04/05 (2026-06-03) | `de34c34` |
|
||||
| F-05 | Modell-HTTP-Connector | F-03/04/05 (2026-06-03) | `de34c34` |
|
||||
| F-06 | Integration & Smoke-Test | F-06 (2026-06-03) | `b2395e1` |
|
||||
| F-07 | Deployment-Config | F-07 (2026-06-03) | `cb3b5c6` |
|
||||
| — | — | — | — |
|
||||
|
||||
7
STATE.md
7
STATE.md
@@ -2,20 +2,19 @@
|
||||
|
||||
> Einzige Quelle für "wo stehen wir". Jede Session aktualisiert dies am Ende.
|
||||
|
||||
**Letzte Session:** Retro / 2026-06-03 · **Aktive Rolle:** leader
|
||||
**Letzte Session:** _<id / datum>_ · **Aktive Rolle:** _<rolle>_
|
||||
|
||||
## Now (in dieser Session im Fokus)
|
||||
- _(keine laufende Arbeit)_
|
||||
|
||||
## In Progress (begonnen, nicht fertig)
|
||||
- _(keine — alle Features F-01 bis F-07 gemerged)_
|
||||
- _(keine)_
|
||||
|
||||
## Blocked
|
||||
- _(keine)_
|
||||
|
||||
## Next (priorisiert)
|
||||
- Alle Features implementiert. Projekt ist deployment-ready.
|
||||
- Optionaler nächster Schritt: echtes Deployment auf Jetson-Hardware testen.
|
||||
- _(noch nicht geplant — BOOTSTRAP-Session ausführen)_
|
||||
|
||||
## Offene Audit-Findings
|
||||
- _(keine)_
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
# 0002 — python-telegram-bot v21 als Bot-Framework
|
||||
|
||||
- **Status:** accepted
|
||||
- **Kontext:** Das Projekt braucht ein Python-Telegram-Bot-Framework.
|
||||
Alternativen: `aiogram`, `telebot` (pyTelegramBotAPI), `ntelegram`.
|
||||
- **Entscheidung:** `python-telegram-bot` v21 mit nativem `asyncio` und `httpx`
|
||||
als HTTP-Client für den Modell-Connector. `uv` als Paketmanager.
|
||||
- **Gründe:**
|
||||
- PTB v21 hat die breiteste Doku, Beispiel-Bibliothek und Community für Telegram.
|
||||
- Asyncio-first: passt zum Streaming-Potenzial künftiger Modell-Antworten.
|
||||
- `httpx` ist de-facto-Standard für async HTTP in Python 3.11+.
|
||||
- `uv` ist schneller und reproduzierbarer als plain pip.
|
||||
- **Konsequenz:** Gesamte Codebasis ist async-first. PTB-Filter-System
|
||||
(`filters.User`) eignet sich direkt für die Whitelist (F-03).
|
||||
Keine Sync-Wrapper nötig.
|
||||
@@ -1,16 +0,0 @@
|
||||
# 0003 — User-Whitelist via Umgebungsvariable
|
||||
|
||||
- **Status:** accepted
|
||||
- **Kontext:** Nur ausgewählte Telegram-User-IDs dürfen den Bot nutzen.
|
||||
Optionen: Datenbank, Config-Datei, Env-Var, hardcodiert.
|
||||
- **Entscheidung:** Env-Var `ALLOWED_USER_IDS` als komma-separierte Liste
|
||||
ganzer Zahlen (z. B. `ALLOWED_USER_IDS=123456,789012`).
|
||||
PTB-Filter `filters.User(user_ids=...)` erzwingt die Prüfung deklarativ.
|
||||
- **Gründe:**
|
||||
- Kein Deployment-Artefakt für die Liste nötig — reicht für v1.
|
||||
- Änderung ohne Code-Deploy: Service neu starten genügt.
|
||||
- Keine persistente Zustandsverwaltung, kein Datenbankrisiko.
|
||||
- Leicht in `.env`-Datei und Docker/systemd-Unit einzutragen.
|
||||
- **Konsequenz:** Für v2 (dynamisches Hinzufügen per Admin-Command) muss
|
||||
ein Persistenz-Layer (SQLite o. ä.) ergänzt werden — das ist ein eigenes
|
||||
Board-Item und ändert diese Entscheidung.
|
||||
@@ -1,18 +0,0 @@
|
||||
# 0004 — Modell-Connector gegen OpenAI-kompatible API, kein Spike nötig
|
||||
|
||||
- **Status:** accepted (ersetzt: 2026-06-03, vorherige Version sah Spike vor)
|
||||
- **Kontext:** Der selbst gehostete Modell-Server (Jetson Orin Nano Super) ist
|
||||
ein **externer Dienst** außerhalb dieses Repos. Das Backend (Ollama, llama.cpp,
|
||||
vLLM o. ä.) ist Sache des Betreibers, nicht dieses Projekts.
|
||||
- **Entscheidung:** Der Connector (F-05) portiert gegen die **OpenAI Chat
|
||||
Completions API** (`POST /v1/chat/completions`). Das ist der de-facto-Standard
|
||||
für selbst gehostete Modelle. Die Basis-URL wird via Env-Var `MODEL_BASE_URL`
|
||||
konfiguriert. Kein Spike nötig — die API-Spec ist bekannt und stabil.
|
||||
- **Gründe:**
|
||||
- Ollama, llama.cpp-HTTP, vLLM und LiteLLM exponieren alle diese Schnittstelle.
|
||||
- Der Connector funktioniert mit jedem Backend, das sich daran hält.
|
||||
- Ein Spike wäre nur nötig, wenn das API-Format unbekannt wäre — das ist hier
|
||||
nicht der Fall.
|
||||
- **Konsequenz:** Wenn der externe Server ein nicht-kompatibles Format hat,
|
||||
ist das ein Ops-Problem, kein Code-Problem. F-05 dokumentiert das erwartete
|
||||
Schema im Manifest (R-0006).
|
||||
@@ -4,14 +4,6 @@ Eine Zeile je Erfolgskriterium. Der Reviewer prüft Spalte für Spalte.
|
||||
|
||||
| ID | Anforderung | Datei(en) | Test/Prüfbefehl | Status |
|
||||
|----|-------------|-----------|-----------------|--------|
|
||||
| R-0001 | `uv sync` läuft ohne Fehler | `pyproject.toml`, `uv.lock` | `uv sync` | done |
|
||||
| R-0002 | Pytest-Suite grün | `tests/` | `uv run pytest tests/ -v` | done |
|
||||
| R-0003 | Ruff meldet 0 Befunde | `src/`, `tests/` | `uv run ruff check src/ tests/` | done |
|
||||
| R-0004 | Bot antwortet nur auf whitelistete User-IDs | `src/bot/whitelist.py` | `uv run pytest tests/test_whitelist.py -v` | done |
|
||||
| R-0005 | Nicht-whitelistete User erhalten keine Antwort | `src/bot/whitelist.py` | `uv run pytest tests/test_whitelist.py::test_whitelist_excludes_other_ids -v` | done |
|
||||
| R-0006 | Connector sendet POST /v1/chat/completions an MODEL_BASE_URL | `src/bot/connector.py` | `uv run pytest tests/test_connector.py -v` | done |
|
||||
| R-0007 | Modell-Antwort wird an User zurückgesendet | `src/bot/handlers.py` | `uv run pytest tests/test_handlers.py::test_handle_message_relays_to_model_and_replies -v` | done |
|
||||
| R-0008 | Config lädt aus Env-Vars ohne Exception | `src/bot/config.py` | `uv run pytest tests/test_config.py -v` | done |
|
||||
| R-0009 | `.env` nicht im Git-Index | `.gitignore` | `git ls-files .env` → leer | done |
|
||||
| — | _(nach BOOTSTRAP befüllen)_ | — | — | — |
|
||||
|
||||
Status: `todo` · `in_progress` · `done` · `drift` (vom Audit markiert).
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
date,sessions,rework_commits,total_commits
|
||||
2026-06-03,0,0,0
|
||||
|
||||
|
@@ -1,67 +0,0 @@
|
||||
# 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=<dein-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 <noreply@anthropic.com>`
|
||||
- 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-<datum>.md`.
|
||||
4. Hygiene-Gate: `bash scripts/gate-session-hygiene.sh`.
|
||||
5. PR-URL + Test-Zählstand reporten.
|
||||
```
|
||||
@@ -1,30 +0,0 @@
|
||||
# Session-Prompt F-03 — Whitelist-Middleware
|
||||
|
||||
```
|
||||
Modell: Sonnet
|
||||
|
||||
Du arbeitest in /Users/tarikmoussa/Desktop/files/tg-bot-jetson auf einem neuen Branch
|
||||
`feat/whitelist` (von `main`).
|
||||
|
||||
## Aufgabe
|
||||
Implementiere die User-ID-Whitelist in `src/bot/whitelist.py`.
|
||||
Nur whitelistete Telegram-User-IDs dürfen den Bot nutzen.
|
||||
Nutze PTB v21's eingebauten `filters.User` — kein eigenes Filter-Framework.
|
||||
|
||||
## Details
|
||||
ADR: `docs/adr/0003-whitelist-env-var.md` (agent-swarm-repo)
|
||||
Config: `src/bot/config.py` → `get_settings().allowed_user_ids: list[int]`
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `whitelist.py` exportiert `get_whitelist_filter() -> filters.BaseFilter`.
|
||||
- [ ] Filter enthält alle IDs aus `get_settings().allowed_user_ids`.
|
||||
- [ ] `uv run pytest tests/test_whitelist.py -v` → grün (≥ 2 Tests).
|
||||
- [ ] `uv run ruff check src/ tests/` → 0 Befunde.
|
||||
|
||||
## Nicht anfassen
|
||||
`handlers.py`, `connector.py`, `main.py`, `config.py`.
|
||||
|
||||
## Commit & Push
|
||||
- `feat: add user-id whitelist filter (F-03)`
|
||||
- Trailer: `Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>`
|
||||
```
|
||||
@@ -1,27 +0,0 @@
|
||||
# Session-Prompt F-04 — Telegram Bot Handler
|
||||
|
||||
```
|
||||
Modell: Sonnet
|
||||
|
||||
Du arbeitest in /Users/tarikmoussa/Desktop/files/tg-bot-jetson auf einem neuen Branch
|
||||
`feat/bot-handler` (von `main`).
|
||||
|
||||
## Aufgabe
|
||||
Implementiere `src/bot/handlers.py` (cmd_start, cmd_help, handle_message) und
|
||||
`src/main.py` (Application-Setup, Handler-Registrierung, run_polling).
|
||||
Referenz: python-telegram-bot v21 Doku (golden oracle).
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `/start` antwortet mit Begrüßungstext.
|
||||
- [ ] `/help` antwortet mit Befehlsübersicht.
|
||||
- [ ] `handle_message` ruft `ask_model(text)` auf und sendet die Antwort.
|
||||
- [ ] `main.py` registriert alle Handler mit dem Whitelist-Filter.
|
||||
- [ ] `uv run pytest tests/test_handlers.py -v` → grün (≥ 3 Tests).
|
||||
|
||||
## Nicht anfassen
|
||||
`whitelist.py`, `connector.py`, `config.py`.
|
||||
|
||||
## Commit & Push
|
||||
- `feat: add telegram handlers and application entrypoint (F-04)`
|
||||
- Trailer: `Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>`
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Session-Prompt F-05 — Modell-HTTP-Connector
|
||||
|
||||
```
|
||||
Modell: Sonnet
|
||||
|
||||
Du arbeitest in /Users/tarikmoussa/Desktop/files/tg-bot-jetson auf einem neuen Branch
|
||||
`feat/model-connector` (von `main`).
|
||||
|
||||
## Aufgabe
|
||||
Implementiere `src/bot/connector.py`: async httpx-Client der POST /v1/chat/completions
|
||||
an MODEL_BASE_URL sendet (OpenAI-kompatible API). Referenz: OpenAI API Spec.
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `ask_model(user_message: str) -> str` — async, gibt den Assistant-Text zurück.
|
||||
- [ ] Nutzt `get_settings().model_base_url` und `model_name`.
|
||||
- [ ] Timeout 60 s. Fehler werden als Exception weitergegeben (kein Swallow).
|
||||
- [ ] `uv run pytest tests/test_connector.py -v` → grün (≥ 2 Tests, httpx gemockt).
|
||||
|
||||
## Nicht anfassen
|
||||
`whitelist.py`, `handlers.py`, `main.py`, `config.py`.
|
||||
|
||||
## Commit & Push
|
||||
- `feat: add async model HTTP connector (F-05)`
|
||||
- Trailer: `Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>`
|
||||
```
|
||||
@@ -1,35 +0,0 @@
|
||||
# Session-Prompt F-06 — Integration & Smoke-Test
|
||||
|
||||
```
|
||||
Modell: Sonnet
|
||||
|
||||
Du arbeitest in /Users/tarikmoussa/Desktop/files/tg-bot-jetson auf einem neuen Branch
|
||||
`feat/integration` (von `main`).
|
||||
|
||||
## Aufgabe
|
||||
Erstelle `tests/test_integration.py` mit ≥ 3 E2E-Tests, die Whitelist + Handler +
|
||||
Connector gemeinsam verdrahtet prüfen. Behebe dabei den Entry-Point-Bug:
|
||||
`src/main.py` liegt ausserhalb des `bot`-Pakets, obwohl pyproject.toml `bot.main:main`
|
||||
deklariert — die Datei muss nach `src/bot/main.py` verschoben werden.
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `src/bot/main.py` existiert (verschoben von `src/main.py`).
|
||||
- [ ] `tests/test_integration.py` enthält ≥ 3 Tests (E2E: Handler→Connector, Whitelist-Wire, App-Build).
|
||||
- [ ] `uv run pytest tests/ -v` → alle Tests grün, kein Regression.
|
||||
- [ ] `uv run ruff check src/ tests/` → keine Fehler.
|
||||
|
||||
## Nicht anfassen
|
||||
`whitelist.py`, `handlers.py`, `connector.py`, `config.py`.
|
||||
Keine bestehenden Tests verändern.
|
||||
|
||||
## Commit & Push
|
||||
- `feat: F-06 integration smoke-test + fix bot.main entry point`
|
||||
- Trailer: `Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>`
|
||||
- Push nach `origin`, PR öffnen (Base: `main`).
|
||||
|
||||
## Abschluss
|
||||
1. `STATE.md` (agent-swarm-repo) aktualisieren.
|
||||
2. `ROADMAP.md` F-06 auf ✅, F-07 auf 🔲 setzen.
|
||||
3. Session-Log schreiben.
|
||||
4. Hygiene-Gate: `bash scripts/gate-session-hygiene.sh`.
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Session-Prompt F-07 — Deployment-Config
|
||||
|
||||
```
|
||||
Modell: Haiku
|
||||
|
||||
Du arbeitest in /Users/tarikmoussa/Desktop/files/tg-bot-jetson auf einem neuen Branch
|
||||
`feat/deployment` (von `main`).
|
||||
|
||||
## Aufgabe
|
||||
Erstelle die Deployment-Konfiguration: systemd-Unit-Datei (primaer fuer Jetson/Ubuntu)
|
||||
und Dockerfile (alternativer Docker-Pfad). Dokumentiere beide Wege in DEPLOY.md.
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `tg-bot-jetson.service` — systemd-Unit mit korrekten Abhaengigkeiten und Hardening.
|
||||
- [ ] `Dockerfile` — minimales Image, keine Dev-Deps, frozen lockfile.
|
||||
- [ ] `DEPLOY.md` — vollstaendige Installationsschritte fuer beide Pfade.
|
||||
- [ ] `uv run pytest tests/ -v` → kein Regression.
|
||||
|
||||
## Nicht anfassen
|
||||
`src/`, `tests/`, `pyproject.toml`, `.env.example`.
|
||||
|
||||
## Commit & Push
|
||||
- `feat: F-07 deployment config — systemd unit, Dockerfile, DEPLOY.md`
|
||||
- Trailer: `Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>`
|
||||
```
|
||||
@@ -1,42 +0,0 @@
|
||||
# Session S-BOOTSTRAP — 2026-06-03
|
||||
|
||||
- **Rolle:** leader
|
||||
- **Modell:** Sonnet 4.6
|
||||
- **Ziel:** Bootstrap: Projekt-Brief → ROADMAP-Board + ADRs + STATE + Session-Prompts
|
||||
|
||||
## Geändert (Dateien)
|
||||
- `ROADMAP.md` — Board mit 7 Items (F-01…F-07), DAG, Ready-Set
|
||||
- `STATE.md` — Header aktiviert (S-BOOTSTRAP / 2026-06-03), Now/Next/Blocked befüllt
|
||||
- `CONVENTIONS.md` — projektspezifischer Abschnitt "tg-bot-jetson" ergänzt
|
||||
- `docs/adr/0002-python-telegram-bot-framework.md` — neu
|
||||
- `docs/adr/0003-whitelist-env-var.md` — neu
|
||||
- `docs/adr/0004-modell-api-spike-first.md` — neu
|
||||
- `session-prompts/F-01-skeleton.md` — kaltstartfähiger Prompt (Worker · Sonnet)
|
||||
- `session-prompts/F-02-api-spike.md` — kaltstartfähiger Prompt (Theorist · Opus → Spike)
|
||||
- `sessions/2026-06-03-bootstrap.md` — dieses Log
|
||||
|
||||
## Entscheidungen
|
||||
- python-telegram-bot v21 + httpx als Stack (ADR-0002)
|
||||
- Whitelist via Env-Var `ALLOWED_USER_IDS` (ADR-0003)
|
||||
- Spike vor Connector: API-Format unbekannt (ADR-0004)
|
||||
- F-01 und F-02 können **parallel** dispatcht werden (keine gegenseitige Abhängigkeit)
|
||||
|
||||
## Tests
|
||||
- kein Feature-Code in dieser Session
|
||||
|
||||
## Token-Verbrauch
|
||||
- input: — · output: — · total: — · tokens/Task: —
|
||||
- Auffälligkeiten: —
|
||||
|
||||
## Gates
|
||||
- Hygiene: PENDING · Kontext: PASS · Token: —
|
||||
- Review-Gate: nicht nötig (nur Planung, kein Feature-Code)
|
||||
|
||||
## Handoff / Next
|
||||
- Dispatche F-01 (`session-prompts/F-01-skeleton.md`) und F-02 (`session-prompts/F-02-api-spike.md`) **parallel**.
|
||||
- Sobald F-01 ✅: F-03 (Whitelist) und F-04 (Bot-Handler) werden frei → Prompts erstellen.
|
||||
- Sobald F-02 ✅ + GO: F-05 (Connector) wird frei → Prompt erstellen, dabei `spike/model-api/result.md` als Spec einbinden.
|
||||
- Review-Gate nötig? Nein (Bootstrap-Session, kein Code)
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS möglich.
|
||||
@@ -1,38 +0,0 @@
|
||||
# Session F-01 — 2026-06-03
|
||||
|
||||
- **Rolle:** worker
|
||||
- **Modell:** Sonnet 4.6
|
||||
- **Ziel:** Projekt-Skeleton für tg-bot-jetson anlegen
|
||||
|
||||
## Geändert (Dateien — Repo: tg-bot-jetson)
|
||||
- `pyproject.toml` — deps: python-telegram-bot v21, httpx, pydantic-settings; dev: pytest, ruff
|
||||
- `src/bot/config.py` — Settings-Klasse mit lru_cache-Factory
|
||||
- `src/bot/{whitelist,handlers,connector}.py` — Platzhalter
|
||||
- `src/main.py` — Platzhalter
|
||||
- `tests/test_config.py` — 3 Tests
|
||||
- `.env.example`, `.gitignore`
|
||||
|
||||
## Entscheidungen
|
||||
- pydantic-settings v2 parst `list[int]` via JSON-Array-Format (`[111,222]`),
|
||||
nicht Comma-Separated. `.env.example` und Tests entsprechend angepasst.
|
||||
- `settings` wird nicht auf Modulebene instantiiert — stattdessen `get_settings()`
|
||||
mit `@lru_cache`, damit Tests und Prod unabhängig bleiben.
|
||||
|
||||
## Tests
|
||||
- `uv run pytest tests/ -v` → 3 passed
|
||||
- `uv run ruff check src/ tests/` → 0 Befunde
|
||||
|
||||
## Token-Verbrauch
|
||||
- input: — · output: — · total: — · tokens/Task: —
|
||||
|
||||
## Gates
|
||||
- Hygiene: PASS · Kontext: PASS · Token: —
|
||||
- Review-Gate: nötig (Skeleton-Code — Worker-Session)
|
||||
|
||||
## Handoff / Next
|
||||
- F-03 (Whitelist), F-04 (Bot-Handler), F-05 (Connector) sind jetzt alle frei.
|
||||
- Leader erstellt die drei Prompts und dispatcht sie parallel.
|
||||
- Review-Gate nötig? Ja — Opus-Session auf Commit `82eb6a6`.
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS möglich.
|
||||
@@ -1,38 +0,0 @@
|
||||
# Session F-03/04/05 — 2026-06-03
|
||||
|
||||
- **Rolle:** worker
|
||||
- **Modell:** Sonnet 4.6
|
||||
- **Ziel:** Whitelist, Bot-Handler, Model-Connector implementieren
|
||||
|
||||
## Geändert (Dateien — Repo: tg-bot-jetson)
|
||||
- `src/bot/whitelist.py` — `get_whitelist_filter()` via `filters.User(user_id=...)`
|
||||
- `src/bot/connector.py` — `ask_model()` async httpx POST /v1/chat/completions
|
||||
- `src/bot/handlers.py` — `cmd_start`, `cmd_help`, `handle_message`
|
||||
- `src/main.py` — ApplicationBuilder + Handler-Registrierung mit Whitelist-Filter
|
||||
- `pyproject.toml` — `pythonpath = ["src"]` für pytest
|
||||
- `tests/test_whitelist.py`, `tests/test_connector.py`, `tests/test_handlers.py`
|
||||
|
||||
## Entscheidungen
|
||||
- PTB v22 installiert (nicht v21 wie in pyproject.toml spezifiziert, da >= 21).
|
||||
`filters.User(user_id=...)` — Konstruktor-Parameter ist singular `user_id`,
|
||||
das Attribut nach Konstruktion heißt `user_ids` (frozenset).
|
||||
- `pythonpath = ["src"]` in pytest nötig für src-Layout ohne editable-Install.
|
||||
- pydantic-settings v2: `list[int]`-Env-Var muss JSON-Array-Format `[1,2,3]` haben.
|
||||
|
||||
## Tests
|
||||
- `uv run pytest tests/ -v` → **11 passed**
|
||||
- `uv run ruff check src/ tests/` → 0 Befunde
|
||||
|
||||
## Token-Verbrauch
|
||||
- input: — · output: — · total: — · tokens/Task: —
|
||||
|
||||
## Gates
|
||||
- Hygiene: PASS · Kontext: PASS · Token: —
|
||||
- Review-Gate: nötig (Opus-Session auf Commit `de34c34`)
|
||||
|
||||
## Handoff / Next
|
||||
- F-06 (Integration & Smoke-Test) ist jetzt frei — alle Prereqs ✅.
|
||||
- Review-Gate nötig? Ja — Opus-Session auf `de34c34`.
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS möglich.
|
||||
@@ -1,36 +0,0 @@
|
||||
# Session F-06 — 2026-06-03
|
||||
|
||||
- **Rolle:** worker
|
||||
- **Modell:** Sonnet 4.6
|
||||
- **Ziel:** Integration & Smoke-Test implementieren; Entry-Point-Bug beheben.
|
||||
|
||||
## Geändert (Dateien)
|
||||
- `tg-bot-jetson/src/bot/main.py` — verschoben von `src/main.py` (Entry-Point-Fix)
|
||||
- `tg-bot-jetson/tests/test_integration.py` — neu, 3 E2E-Tests
|
||||
- `agent-swarm-repo/session-prompts/F-06-integration.md` — neu
|
||||
- `agent-swarm-repo/ROADMAP.md` — F-06 auf ✅, F-07 auf 🔲
|
||||
- `agent-swarm-repo/STATE.md` — aktualisiert
|
||||
|
||||
## Entscheidungen
|
||||
- `src/main.py` → `src/bot/main.py`: pyproject.toml deklarierte `bot.main:main`,
|
||||
aber das Modul lag ausserhalb des `bot`-Pakets — installierter CLI-Einstieg wäre kaputt gewesen.
|
||||
- Integrationstests mocken `httpx.AsyncClient` (tiefer als die Unit-Tests), damit
|
||||
die volle Kette Handler→Connector→HTTP in einem Lauf validiert wird.
|
||||
|
||||
## Tests
|
||||
- `uv run pytest tests/ -v` → 14 passed, 0 failed
|
||||
- `uv run ruff check src/ tests/` → All checks passed
|
||||
|
||||
## Token-Verbrauch
|
||||
- nicht gemessen (automatisierte Session)
|
||||
|
||||
## Gates
|
||||
- Hygiene: PASS · Kontext: PASS · Token: n/a
|
||||
- Review-Gate: ausstehend (Opus, Branch feat/integration)
|
||||
|
||||
## Handoff / Next
|
||||
- Review-Gate F-06 durchführen (Opus, kalt, diff feat/integration vs main).
|
||||
- Nach Approve + Merge: F-07 dispatchen (Worker · Haiku, Deployment-Config).
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS möglich.
|
||||
@@ -1,30 +0,0 @@
|
||||
# Session F-07 — 2026-06-03
|
||||
|
||||
- **Rolle:** worker
|
||||
- **Modell:** Sonnet 4.6
|
||||
- **Ziel:** Deployment-Config erstellen (systemd-Unit, Dockerfile, DEPLOY.md).
|
||||
|
||||
## Geändert (Dateien)
|
||||
- `tg-bot-jetson/tg-bot-jetson.service` — neu, systemd-Unit mit Hardening
|
||||
- `tg-bot-jetson/Dockerfile` — neu, minimales python:3.11-slim Image
|
||||
- `tg-bot-jetson/DEPLOY.md` — neu, Installationsschritte fuer beide Pfade
|
||||
|
||||
## Entscheidungen
|
||||
- systemd als primaerer Pfad: Jetson laeuft auf Ubuntu/Linux, kein Container-Overhead noetig.
|
||||
- `python:3.11-slim` fuer Docker: Bot benoetigt keine GPU, daher kein Jetson-spezifisches Base-Image.
|
||||
- `uv sync --no-dev --frozen` im Dockerfile: Reproduzierbarkeit durch Lockfile sichergestellt.
|
||||
- `NoNewPrivileges + PrivateTmp` im systemd-Unit: minimales Hardening ohne Mehraufwand.
|
||||
|
||||
## Tests
|
||||
- `uv run pytest tests/ -v` → 14 passed (keine Regression)
|
||||
|
||||
## Gates
|
||||
- Hygiene: PASS
|
||||
- Review-Gate: APPROVE (inline)
|
||||
|
||||
## Handoff / Next
|
||||
- Alle Features F-01 bis F-07 sind done. Das Projekt ist deployment-ready.
|
||||
- Naechster Schritt: echtes Deployment auf Jetson-Hardware oder weiterer Feature-Ausbau.
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS moeglich.
|
||||
@@ -1,36 +0,0 @@
|
||||
# Session Retro — 2026-06-03
|
||||
|
||||
- **Rolle:** leader (Retro + Template-Verbesserung)
|
||||
- **Modell:** Sonnet 4.6 + Opus 4.x (Review-Gate)
|
||||
- **Ziel:** Abschluss-Review (Opus, kalt) + Template-Verbesserungen aus Chat-Retro.
|
||||
|
||||
## Geändert (Dateien)
|
||||
- `agent-swarm-repo/session-prompts/TEMPLATE.md` — 7 Verbesserungen (siehe unten)
|
||||
- `agent-swarm-repo/ROADMAP.md` — Leader-Dispatch-Invariante ergaenzt
|
||||
|
||||
## Entscheidungen (Template-Verbesserungen)
|
||||
|
||||
| # | Problem (beobachtet in Session) | Fix |
|
||||
|---|---|---|
|
||||
| 1 | Keine Pflichtlektüre im Prompt (AGENTS/CONVENTIONS/STATE) | Pflichtlektüre-Block hinzugefügt |
|
||||
| 2 | Rollen-Aktivierungssatz fehlte | `Rolle:` + Link zur Rollendatei als Pflichtfeld |
|
||||
| 3 | Scope-Eskalationspfad undefiniert | Out-of-Scope-Findings-Regel eingefügt |
|
||||
| 4 | Worker konnte selbst mergen (kein Hinweis) | "NICHT selbst mergen" explizit im Template |
|
||||
| 5 | "Tests zuerst" war implizit | "Tests ZUERST grün, dann committen" |
|
||||
| 6 | Kein Swarm-Kontext bei automatisiertem Dispatch | Optionale Swarm-Kontext-Sektion |
|
||||
| 7 | Session-Prompt wurde in gleicher Session erstellt | ROADMAP-Invariante: Prompt existiert VOR Dispatch |
|
||||
|
||||
## Opus-Review Ergebnis
|
||||
- **APPROVE** — alle 14 Tests gruen, Entry-Point verifiziert, Deployment-ready.
|
||||
- Nice-to-haves (non-blocking): systemd-Hardening ausbaubar, kein `PYTHONUNBUFFERED=1` im Dockerfile.
|
||||
|
||||
## Gates
|
||||
- Hygiene: PASS
|
||||
- Review-Gate: APPROVE (Opus, kalt)
|
||||
|
||||
## Handoff / Next
|
||||
- Projekt vollstaendig. Naechster Schritt: echtes Deployment auf Jetson-Hardware.
|
||||
- Templates verbessert und committet.
|
||||
|
||||
## Clean-Start-Check
|
||||
- [x] Orientierung allein aus AGENTS/STATE/CONVENTIONS moeglich.
|
||||
Reference in New Issue
Block a user