Explorer
/tmp/restic-stage/reports-reference/content-extraction-separate-app-plan-20260702.md
← Zurück ↓ Download
# Content Extraction — Plan für eigenständige App — 2026-07-02

**Status: Planungsdokument. Keine Code-, DB-, UI- oder Serviceänderung wurde in diesem Schritt durchgeführt.**

## Vorgeschichte
Content Extraction wurde zunächst versehentlich als Same-App-Erweiterung in YouTube Research eingebaut (Fundus-Minimalversion, siehe `fundus-tab-entfernt-version-20260702.md` und `content-extraction-erster-umsetzungsschritt-20260702.md`). Der Same-App-Ansatz wurde live zurückgebaut. Dieser Bericht plant den korrekten Weg: Content Extraction als eigenständige App außerhalb von `/opt/struktur/youtube-research`.

---

## 1. Zielarchitektur

Eigenständiger App-Bereich, vollständig getrennt vom YouTube-Research-Prozess, -Code und -Deployment:

```
/opt/struktur/content-extraction/
├── app.py                  # eigene FastAPI-App, eigener Prozess
├── db.py                   # eigene DB-Zugriffsschicht
├── content_extraction.db   # eigene SQLite-DB (oder eigene, klar benannte Tabellen)
├── templates/
│   └── index.html          # eigene UI, kein Anhängsel an YouTube-Research-Templates
├── static/
├── venv/                   # eigenes virtualenv, keine gemeinsame Nutzung
└── backups/
```

Kernprinzip: eigener Prozess, eigener Port, eigene Datenhaltung, eigenes Deployment — nichts wird in den YouTube-Research-Prozess (`app.py`, `db.py`, `templates/index.html`, `knowledge.db`) eingebaut oder von dort mitgeladen.

---

## 2. Abgrenzung

| Bereich | Zuständigkeit |
|---|---|
| **YouTube Research** | Videos finden, erfassen, Metadaten speichern, Transkripte beschaffen, technische Videodatenbank (`knowledge.db`) pflegen. Bleibt reine Quellen-/Such-App. |
| **Content Extraction** | Inhalte bewerten, strukturieren, clustern, Nachahmungskandidaten erkennen, Projektbezug herstellen, Entscheidungs-/Auswertungssammlungen erzeugen. Eigenständiger Wissensverwertungsbereich. |
| **Fundus** | Kein Produktname, kein UI-Ziel. Bleibt der bereits eingefrorene technische Zwischenstand innerhalb YouTube Research (Tab entfernt, Routen/Tabellen unangetastet, siehe vorherige Berichte). Wird nicht reaktiviert und nicht in Content Extraction "umbenannt" — Content Extraction ist ein Neuaufbau, keine Fortführung von Fundus. |

Harte Regel: Content Extraction wird **nicht** in YouTube Research eingebaut (kein gemeinsamer Prozess, kein gemeinsames Template, keine gemeinsame DB-Datei).

---

## 3. Schnittstellen

- **YouTube Research als Datenquelle** — lesender Zugriff auf `knowledge.db` (read-only DB-Connection oder schlanke HTTP-API auf YouTube-Research-Seite, noch zu entscheiden) für Video-Metadaten, Transkript-Status, Artefaktpfade.
- **Obsidian-Artefakte** — lesender Zugriff auf `/opt/obsidian-vault/` (Markdown-Artefakte der 628 kuratierten Videos).
- **Graphiti `/facts` und `/search`** — bestehender Service `graphiti-service` (Docker, intern Port 8000, extern `127.0.0.1:8644`) liefert Entity-Fakten und Volltextsuche über den importierten Wissensbestand.
- **Hermes-Agentenlogik** — Scout (lokal) / ggf. Dottore für Bewertungs-, Cluster- oder Vorschlagslogik; Anbindung über bestehende Runner-Infrastruktur (`/opt/struktur/runners/`) statt direkter Prozesskopplung.
- **Spätere Content-Matrix** — noch nicht spezifiziert; Content Extraction sollte sein Datenmodell so auslegen, dass eine spätere Content-Matrix (Kanal × Format × Thema o.ä.) darauf aufbauen kann, ohne Migration des MVP-Datenmodells.

Alle Schnittstellen sind **lesend** aus Sicht von Content Extraction gegenüber YouTube Research — keine Schreibrückkopplung in `knowledge.db` im MVP.

---

## 4. MVP-Vorschlag (genau ein minimaler erster Schritt)

**Read-only Sichtungs- und Bewertungs-Tool, keine Automatisierung, keine Migration.**

Umfang:
1. **Read-only Import aus YouTube Research**: periodischer oder manuell angestoßener Read-Only-Query gegen `knowledge.db` (oder Kopie/Export davon), der Video-Metadaten + Obsidian-Artefaktpfad in die eigene `content_extraction.db` spiegelt (nur Anzeige-relevante Felder, keine Rückschreibung).
2. **Anzeige extrahierbarer Inhalte**: einfache Listen-/Detailansicht der gespiegelten Videos mit Transkript-/Artefakt-Link.
3. **Manuelle Bewertung**: Nutzer (Carlo) vergibt manuell Bewertungsfelder (z.B. Nachahmbarkeit, Status) — analog zum bereits geplanten `fundus_items`-Schema aus der vorherigen Planung, aber in eigener DB unter neuem Namen (z.B. `extraction_items`), nicht als Fortführung der `fundus_*`-Tabellen in YouTube Research.
4. **Keine automatische Migration**: bestehende `fundus_collections`/`fundus_items`-Daten in YouTube Research werden NICHT automatisch übernommen. Ein manueller, separat freizugebender Übernahmeschritt wäre ein späterer, eigener Auftrag.
5. **Keine Änderung an YouTube Research**: kein Schreibzugriff, keine neue Route, kein neues Feld dort.

Explizit **nicht** im MVP: Graphiti-Anbindung, Hermes-Bewertungslogik, Content-Matrix, automatisches Clustering — das sind spätere Ausbaustufen.

---

## 5. Pfadvorschlag (Vorschlag, nicht umgesetzt)

| Punkt | Vorschlag |
|---|---|
| **App-Pfad** | `/opt/struktur/content-extraction/` |
| **Report-Pfad** | `/opt/struktur/reports/content-extraction-*.md` (gleiche Konvention wie bisherige Berichte) |
| **Backup-Regel** | Vor jeder Codeänderung Backup nach `/opt/struktur/content-extraction/backups/<datei>.<YYYYMMDD-HHMMSS>.bak`, analog zum bei YouTube Research etablierten Muster (`backups/fundus-tab-removal/`, `backups/fundus/`) |
| **Service-Name-Vorschlag** | `content-extraction.service` (systemd unit, analog zu `youtube-research.service`) — **noch nicht angelegt** |
| **Port-Vorschlag** | `127.0.0.1:8100` — aktuell frei (belegte Ports auf dem VPS geprüft: u.a. 8000 YouTube Research, 8644 Graphiti-Service, 8010/8011/8651/8652/8645/8650 anderweitig belegt; 8100 ist frei) — **noch nicht gebunden** |
| **Reverse-Proxy-Vorschlag** | Eigene Subdomain `content-extraction.agentsolutions-mallorca.com`, nginx-Config analog zu `/etc/nginx/sites-available/youtube.agentsolutions-mallorca.com` (proxy_pass auf `127.0.0.1:8100`, eigenes Let's-Encrypt-Zertifikat) — **noch nicht angelegt** |

Alle fünf Punkte sind reine Empfehlungen für einen späteren, separat freizugebenden Umsetzungsauftrag. In diesem Schritt wurde nichts davon angelegt oder gebunden.

---

## 6. Ausdrücklich nicht getan (Abbruchregeln eingehalten)
- Keine produktiven Änderungen.
- Keine neue App erstellt (`/opt/struktur/content-extraction/` existiert nicht).
- Keine systemd-Unit-Datei angelegt.
- Keine Nginx-Config angelegt oder geändert.
- Keine Datei in `/opt/struktur/youtube-research/` angefasst.
- Keine DB-Migration durchgeführt.