ab20fa5d15ece02e264970aa5cecb47c3fee7377
Der Handler in durchlauf() fing den Fehler einer Quelle ab, damit sie nicht den ganzen Durchlauf killt, liess die abgebrochene Postgres-Transaktion aber stehen. Das notiere() unmittelbar danach lief in genau diese Transaktion und warf InFailedSqlTransaction - ungefangen, also war der Prozess tot. Doppelt aergerlich: der eigentliche Fehler stand nur in `fehler` und wurde weder protokolliert noch ausgegeben, weil beides erst nach dem notiere() kommt. Im Journal blieb allein die Folgewirkung sichtbar. Beide Senken bekommen rollback(), der Fehlerpfad ruft es auf, und notiere() selbst laeuft in einem eigenen try - ein fehlgeschlagenes Protokoll ist ein Grund fuer eine Meldung, nicht fuer einen Abbruch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013vHZCwcCJnz4LKNgvT4bxv
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%