irrlichtandClaude Opus 5 ab20fa5d15 Fehler einer Quelle nicht mehr die Transaktion mitreissen lassen
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
2026-09-06 12:51:13 +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%