chore: reset repo to clean template state
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:
2026-06-04 09:51:50 +02:00
parent 07ea8e82c3
commit 61ce330fdf
20 changed files with 12 additions and 526 deletions

View File

@@ -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.

View File

@@ -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` |
| — | — | — | — |

View File

@@ -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)_

View File

@@ -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.

View File

@@ -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.

View File

@@ -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).

View File

@@ -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).

View File

@@ -1,2 +1 @@
date,sessions,rework_commits,total_commits
2026-06-03,0,0,0
1 date sessions rework_commits total_commits
2026-06-03 0 0 0

View File

@@ -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.
```

View File

@@ -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>`
```

View File

@@ -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>`
```

View File

@@ -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>`
```

View File

@@ -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`.
```

View File

@@ -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>`
```

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.