73 lines
2.9 KiB
Markdown
73 lines
2.9 KiB
Markdown
# Wurzelwerk — Phase 2: Aufbereitung
|
|
|
|
Reichert `raw_items` deterministisch an: Dubletten, Akteure, Orte, Tonalität,
|
|
Embeddings. Kein LLM, kein Sampling, keine Netzabfrage zur Laufzeit — das
|
|
Ergebnis hängt allein an der Eingabe und der `coder_version`.
|
|
|
|
Setzt das Ingest-Schema aus [swp-01-ingest](https://git.bnd.wtf/irrlicht/swp-01-ingest)
|
|
voraus und schreibt ausschließlich nach `codings`. `raw_items` bleibt unberührt.
|
|
|
|
Spezifikation: [`phase_02_spec.md`](phase_02_spec.md).
|
|
|
|
## Dateien
|
|
|
|
| Datei | Zweck |
|
|
|---|---|
|
|
| `phase_02_spec.md` | Spezifikation der fünf Module und ihrer Abnahmekriterien |
|
|
| `migrations/` | Schemaänderungen, aufsteigend anzuwenden |
|
|
| `db.py` | Auflösung von `DATABASE_URL`, Verbindung |
|
|
| `check_db.py` | Rauchtest: Anmeldung, Bestand, fehlende Voraussetzungen |
|
|
|
|
## Einrichtung
|
|
|
|
```sh
|
|
python3 -m venv .venv
|
|
.venv/bin/pip install -r requirements.txt
|
|
cp .env.example .env && chmod 600 .env && $EDITOR .env
|
|
.venv/bin/python check_db.py
|
|
```
|
|
|
|
## Migrationen
|
|
|
|
Aufsteigend anwenden, auf Dev und Prod dieselben Dateien in derselben
|
|
Reihenfolge. Welche schon liefen, steht in `schema_migrationen`:
|
|
|
|
```sh
|
|
psql "$ADMIN_DATABASE_URL" -v ON_ERROR_STOP=1 -f migrations/p2-000-migrationsbuch.sql
|
|
psql "$ADMIN_DATABASE_URL" -v ON_ERROR_STOP=1 -f migrations/p2-001-codings-mehrschichtig.sql
|
|
|
|
# Stand abfragen
|
|
psql "$DATABASE_URL" -c 'select name, angewandt_am from schema_migrationen order by name'
|
|
```
|
|
|
|
Die Zählung trägt das Präfix `p2-`, weil die Ingest-Migrationen eine eigene
|
|
haben und beide auf dieselbe Datenbank laufen.
|
|
|
|
**Migrationen brauchen einen anderen Zugang als der Betrieb.** Die Tabellen
|
|
gehören `postgres`, nicht `wurzelwerk`; `alter table` scheitert sonst mit
|
|
`must be owner of table codings`. Im Dev-Container:
|
|
|
|
```sh
|
|
podman exec -i postgres psql -U postgres -d wurzelwerk -v ON_ERROR_STOP=1 -f - < migrations/p2-001-codings-mehrschichtig.sql
|
|
```
|
|
|
|
Dass die Anwendungsrolle ihr eigenes Schema nicht besitzt, ist eine offene
|
|
Frage — entweder bleibt es so und Migrationen laufen als Administrator, oder
|
|
die Tabellen wechseln per `alter table … owner to wurzelwerk` den Besitzer.
|
|
|
|
## Voraussetzungen an die Datenbank
|
|
|
|
`pgvector` fehlt im Image `postgres:latest`: `select * from pg_available_extensions
|
|
where name = 'vector'` bleibt leer, `create extension vector` scheitert. Ohne
|
|
sie kein `item_embeddings`. Das ist ein Image-Tausch auf `pgvector/pgvector:pg18`,
|
|
keine Migration. Die vier übrigen Module laufen ohne.
|
|
|
|
## Grenzen des Datensatzes
|
|
|
|
Volltext liefert nur ein Teil der Quellen — Ingest liest RSS, und viele Häuser
|
|
geben dort keinen `content:encoded` heraus (Stand 7.9.2026: faz 311/489,
|
|
heise 174/196, aber derstandard, welt, dlf, taz, sz jeweils 0). Das ist keine
|
|
Lücke, die sich schließen lässt, sondern eine Eigenschaft der Quellen. Module
|
|
müssen auf Titel und Teaser allein tragfähig bleiben und dürfen die
|
|
Vergleichsbasis nicht davon abhängig machen, ob ein Item zufällig Volltext hat.
|