Akteure im Container, Kontakt im User-Agent

Das Abbild traegt jetzt spaCy und de_core_news_lg 3.8.0 mit fester Version
sowie den Wikidata-Spiegel. Es waechst dadurch von 1,28 auf 2,12 GB. Das
Modell liegt im Abbild statt im Cache-Volume: 568 MB, die sich nie aendern,
und der erste Lauf auf Prod soll nicht an einem Download haengen.

Gemessen: ein Slot-Lauf im Container erzeugt bitgleich dieselbe Nutzlast wie
die Workstation - 3407 Codings, 0 Abweichungen, gleiche coder_version.

Der User-Agent fuer die WDQS traegt jetzt die Impressumsadresse des
Projekts, wie es die Nutzungsrichtlinie erbittet.

NOTES.md haelt fest, woher die Zeichenkette "None" kommt: bei leerer
<description> faellt der Poller auf content:encoded zurueck, und die ZEIT
liefert dort einen Anker, dessen Text "None" lautet. Phase 1 schreibt
getreu mit, der Fehler ist stromaufwaerts. Am Live-Feed reproduziert,
8 von 15 Items.

Der Prod-Cluster-Dump ist per .gitignore ausgeschlossen - er enthaelt die
Rollen samt Passworthashes, auch die von gitea und hedgedoc.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NupWEBPzsyohVPG47HsTz8
This commit is contained in:
irrlicht
2026-09-08 08:31:46 +02:00
co-authored by Claude Opus 5
parent 7e4c31912c
commit 1ce7610e55
2 changed files with 43 additions and 4 deletions
+38
View File
@@ -412,3 +412,41 @@ Wahl.
Bei Stapelgröße 64, 7 und 1 sowie rückwärts durchlaufen liefert
`de_core_news_lg` für 400 Items identische Spannen. Der Kunstgriff mit der
festen Tokenlänge, den die Embeddings brauchen, ist hier nicht nötig.
## Woher `None` wirklich kommt
Reproduziert am Live-Feed, nicht erschlossen: bei Items mit leerer
`<description>` fällt der Poller korrekt auf `content:encoded` zurück, und
dort liefert die ZEIT
```
<a href="https://www.zeit.de/news/..."><img ...>None</a>
```
Der Ankertext *ist* die Zeichenkette `None` — ein Renderfehler im CMS der
ZEIT. `klartext()` entfernt die Tags, und übrig bleibt `None`. Phase 1
schreibt also getreu mit; der Fehler ist stromaufwärts.
Am 8. September 2026 betraf das 8 von 15 Items im Feed. Im Prod-Bestand:
| Tag | `None` / zeit-Items |
|---|---|
| 2026-09-04 | 12 / 20 |
| 2026-09-05 | 83 / 136 |
| 2026-09-06 | 187 / 262 |
| 2026-09-07 | 305 / 400 |
| 2026-09-08 | 67 / 79 |
Gleichbleibend rund 70 bis 85 Prozent — der Fehler läuft weiter.
## Container mit spaCy
Das Abbild wächst durch `de_core_news_lg` von 1,28 auf 2,12 GB. Das Modell
liegt im Abbild, nicht im Cache-Volume: 568 MB, die sich nie ändern, und der
erste Lauf auf Prod soll nicht an einem Download hängen.
Gemessen, nicht behauptet: ein Slot-Lauf im Container (Debian trixie,
Python 3.13) erzeugt für die Akteure bitgleich dieselbe Nutzlast wie die
Workstation (Fedora, Python 3.14) — 3407 Codings, 0 Abweichungen, gleiche
`coder_version`.
+5 -4
View File
@@ -32,11 +32,12 @@ import urllib.request
VERZEICHNIS = pathlib.Path(__file__).parent / "lexikon"
ENDPUNKT = "https://query.wikidata.org/sparql"
# Die Nutzungsrichtlinie der WDQS bittet um einen sprechenden User-Agent.
# Eine Kontaktangabe gehoert hier hinein, sobald eine vereinbart ist -
# bis dahin steht nur der Name des Projekts da, keine fremde Adresse.
# Die Nutzungsrichtlinie der WDQS bittet um einen sprechenden User-Agent mit
# Kontaktangabe. Hier steht die Impressumsadresse des Projekts - eine
# oeffentliche Adresse, die genau dafuer da ist.
KENNUNG = os.environ.get(
"WDQS_USER_AGENT", "wurzelwerk-p2/0.1 (Datenjournalismus-Pipeline Wurzelwerkt)"
"WDQS_USER_AGENT",
"wurzelwerk-p2/0.1 (Datenjournalismus-Pipeline Wurzelwerkt; stress@bnd.wtf)",
)
# Pause zwischen zwei Abfragen. Die WDQS erlaubt mehr, aber wir haben es