498366251489d4c3799b751e35bf64e149f6a4cc
Der 2-Stunden-Takt verlor ganze Artikel. Ein RSS-Feed ist ein Fenster, kein Archiv: ist das Fenster kuerzer als der Poll-Abstand, fallen Eintraege zwischen zwei Abrufen heraus und sind nicht nachholbar. Gemessen am 2026-09-04 haelt zeit.de 0,6 h vor, spiegel und welt rund 5 h; von der Zeit sah man etwa jeden dritten Artikel. Der bedingte GET macht haeufiges Pollen billig, ein unveraenderter Abruf ist ein 304 ohne Body. Zweitens schrieb der Upsert Aenderungen nicht fort. Redaktionen aendern Ueberschriften nach der Veroeffentlichung; bei gleicher GUID lief das in ein `on conflict do nothing` und blieb unsichtbar. raw_items haelt jetzt den aktuellen Stand und zaehlt Revisionen, raw_item_versionen haelt jede Fassung einschliesslich der ersten. Erkannt wird das ueber einen Inhalts-Hash aus Titel, Teaser und URL. Die Migration zieht Bestandsdaten nach. Die SQL-Hashformel ist zeichengleich zu poller.inhalt_hash(), geprueft an 814 migrierten Items: null Scheinrevisionen beim ersten Lauf danach. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ZAdZb3EifGb9nvQ5Zp2TE
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).
Languages
Python
63.9%
PLpgSQL
35.1%
Dockerfile
1%