adminandClaude Opus 5 5a9bbe6e92 Rohe Feed-Antworten ablegen und Parser erweitern
Der Abruf warf bisher fast alles weg, was im XML stand. Neu ausgewertet
werden Kategorien (<category>, dc:subject, Atom-term), content:encoded
zusaetzlich zur kurzen description, Medien-URLs aus enclosure und Media
RSS, Verweise aus dem Teaser-HTML und die Position im Feed beim ersten
Sehen. Die Kategorien sind fuer Stufe 2 der wertvollste Posten: vom
Verlag selbst vergebene Themenlabel, brauchbar als Vorfilter und als
Prompt-Kontext. Gemessen an zwoelf Quellen tragen 189 von 814 Items
Kategorien, 315 einen laengeren Volltext, 430 Medien.

Ausserdem landen die rohen Antwortbytes gezippt in feed_abrufe,
dedupliziert ueber ihren sha256. Der Parser wird sich weiter aendern;
nur mit den Rohbytes laesst sich eine Verbesserung rueckwirkend auf die
Historie anwenden - dieselbe Ueberlegung wie bei der Trennung von
raw_items und codings. Kompression rund 22 %, etwa 20 kB je Abruf.

Items ohne Titel werden weiter uebersprungen, jetzt aber gezaehlt.

Bestandszeilen bekommen die neuen Felder beim naechsten Lauf nachgetragen,
ohne als Revision zu zaehlen; der Inhalts-Hash bleibt dafuer auf
Titel/Teaser/URL beschraenkt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ZAdZb3EifGb9nvQ5Zp2TE
2026-09-05 18:21:06 +02:00

swp-01-ingest — Wurzelwerk

Stufe 0/1 der Wurzelwerk-Pipeline (Stinkwurzpresse, SWP): Quellenregister und Roh-Erfassung (RSS-Poller, Senken Postgres oder gzip-JSONL). Details zu Betrieb, Verhalten und offenen Punkten stehen in NOTES.md.

Deploy (Server mit Postgres + Podman/Quadlet)

# 1. Schema einspielen
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f schema.sql

# 2. Image bauen
podman build -t localhost/wurzelwerk-ingest:latest .

# 3. Konfiguration ablegen
mkdir -p ~/.config/wurzelwerk
cp ingest.env.example ~/.config/wurzelwerk/ingest.env
cp sources.toml       ~/.config/wurzelwerk/sources.toml
chmod 600 ~/.config/wurzelwerk/ingest.env
$EDITOR ~/.config/wurzelwerk/ingest.env

# 4. Quadlet installieren
mkdir -p ~/.config/containers/systemd
cp wurzelwerk-ingest.container wurzelwerk.network ~/.config/containers/systemd/
systemctl --user daemon-reload
systemctl --user start wurzelwerk-ingest
journalctl --user -u wurzelwerk-ingest -f

# Damit der Dienst ohne offene Sitzung weiterlaeuft:
loginctl enable-linger "$USER"

sources.toml ist eingehaengt, nicht ins Image gebacken: eine neue Quelle ist ein systemctl --user restart wurzelwerk-ingest, kein Neubau.

Deploy (Zweitgeraet ohne Postgres/Container, z. B. als Schatten-Ingest)

Fuer ein schlankes Zweitsystem ohne Postgres und ohne Container genuegt Python 3.11+ mit den Paketen aus requirements.txt:

python3 poller.py --sink jsonl:/pfad/zu/deinem/ablageordner

Als systemd --user-Unit mit Restart=always einrichten (siehe wurzelwerk-robots.service / .timer fuer den woechentlichen Robots-Check).

S
Description
Phase one of the SWP pipeline
Readme
108 KiB
Languages
Python 63.9%
PLpgSQL 35.1%
Dockerfile 1%