# Session-Prompt — F-02 `POST /shorten` (befülltes Beispiel) ``` Modell: Sonnet Du arbeitest in /pfad/zu/DemoLinks auf einem neuen Branch `feat/api` (von `main`). ## Aufgabe Implementiere den Endpoint `POST /shorten`: nimmt `{ "url": "" }`, erzeugt einen kurzen Code, speichert (Code → URL) über die Storage-Schicht (F-01) und gibt `{ "code": "" }` zurück. AUSSERHALB des Scopes: Rate-Limiting (das ist F-04), Analytik (F-03), Auth. ## Details Referenz-Implementierung (Port): `reference/flask_shortener.py` Zeilen 20–58 (golden oracle — gleiche Code-Erzeugung, gleiche Kollisionsbehandlung). Storage-API: `src/storage/store.py` (`put(key, value)` / `get(key)`). ## Akzeptanzkriterien - [ ] Gleiche Eingabe → gleicher Code wie die Referenz (golden-value-Test). - [ ] Kollision wird erkannt und neu gewürfelt (Test mit erzwungener Kollision). - [ ] Ungültige URL → 400 mit klarer Meldung. - [ ] Tests grün: `pytest tests/test_api.py` ## Nicht anfassen `src/storage/` (Owner: worker-a) und `src/analytics/` (Owner: theorist). Nur `src/api/` + `tests/test_api.py`. ## Commit & Push - `feat(api): add POST /shorten endpoint` - Trailer: `Co-Authored-By: Claude Sonnet 4.6 ` - Push nach `origin`, PR öffnen (Base `main`). ## Abschluss 1. `manifests/requirements.md` R-0002 → `done`. 2. `STATE.md`: F-02 nach „In Progress", dann Handoff für Review. 3. Session-Log aus `sessions/TEMPLATE.md`. 4. `bash scripts/gate-session-hygiene.sh` und `bash scripts/gate-ownership.sh`. 5. PR-URL + Testzahl reporten. Danach: Review-Gate (Opus). ```