9.6 KiB
Plan: Vereinheitlichung aller Artikel-Cronjobs für brettspiel-news.de
Ziel: Alle 10 artikelproduzierenden Cronjobs liefern konsistent fehlerfreie HTML-Artikel ohne manuelle Nachkorrektur. Kein Job publiziert ohne Qualitätsnachweis nach Joomla.
Stand: 22. Juni 2026 | Autor: Basti (CvD Redaktion)
1. Bestandsaufnahme: Alle Artikel-Jobs
| # | Job-ID | Name | Zeit | Skills | Publiziert? | Probleme |
|---|---|---|---|---|---|---|
| 1 | 5399bf408bd1 |
Nächtlicher Deal-Artikel | täglich 03:00 | amazon-brettspiel-deals, deal-grafik-workflow | ✅ Joomla | Read-More doppelt, Bild manchmal falsch |
| 2 | a3a4e5236143 |
Amazon-Deals Montag | Mo 09:00 | amazon-brettspiel-deals | ✅ Joomla | Read-More doppelt |
| 3 | a506d9cea05d |
Amazon-Deals Donnerstag | Do 09:00 | amazon-brettspiel-deals | ✅ Joomla | Noch nie gelaufen |
| 4 | 5666a1b8ed83 |
Samstag: Alle Shops | Sa 09:00 | partner-shop-links, amazon-brettspiel-deals | ✅ Joomla | Noch nie gelaufen |
| 5 | ddfd96310e95 |
Sonntag: Kinderspiele | So 09:00 | amazon-brettspiel-deals | ✅ Joomla | Read-More doppelt |
| 6 | 2c158c141090 |
Sonntag: Crowdfunding | So 09:00 | web-research, journalistic-article-writing | ❌ Nur HTML | URLs geraten, alte Daten, kein Bild |
| 7 | 6e6eb5bd0cc8 |
BGA Weekly Update | Di 09:00 | bga-news-scraper, journalistic-article-writing | ✅ Joomla | Unbekannt |
| 8 | f3c583a4779f |
Fantasywelt Vorbest. (Fr) | Fr 07:00 | fantasywelt-neuheiten | ✅ Joomla | Unbekannt |
| 9 | 32839f09c412 |
Fantasywelt Neuheiten (Mi) | Mi 09:00 | fantasywelt-neuheiten | ❌ Telegram | Nur Stats |
| 10 | a35a31dbdf1c |
Fantasywelt Vorbest. Fr | Fr 09:00 | fantasywelt-neuheiten | ❌ Telegram | Nur Stats |
2. Wiederkehrende Fehler (systematisch)
🔴 KRITISCH: Doppelter Read-More-Break
Symptom: <hr id="system-readmore" /> gefolgt von <br> → Joomla zeigt zwei Trennlinien.
Ursache: Das HTML-Template oder der Prompt enthält ein <br> direkt nach dem Read-More.
Betroffene Jobs: 1, 2, 3, 4, 5, 6, 7
🔴 KRITISCH: Fremd-Content nach Artikel-Ende
Symptom: QC-Zeile, Meta-Notizen oder Prompt-Reste erscheinen unter dem Artikel.
Ursache: article_server.py strippt nicht alle internen Marker. Sub-Agenten schreiben Debug-Output in den Body.
Betroffene Jobs: Alle
🔴 KRITISCH: Bild-Format image_intro
Symptom: Bild wird nicht angezeigt, obwohl API "200" meldet.
Ursache: image_intro muss Format images/.../file.jpg#joomlaImage://local-images/Spiele/.../file.jpg haben. Absolute HTTPS-URLs werden von Joomla-Frontend ignoriert.
Betroffene Jobs: Alle die per API publizieren
🟠 MITTEL: Geratene/veraltete URLs
Symptom: Kampagnen-Links führen zu 404. Ursache: URLs werden aus Projektnamen konstruiert statt aus echten Quellen (GF-API, EBG-Scraping). Betroffene Jobs: 6 (Crowdfunding)
🟠 MITTEL: Umlaut-Verlust durch write_file
Symptom: ä→a, ö→o, ü→u, ß→ss.
Ursache: Encoding-Bug in write_file bei HTML-Dateien.
Betroffene Jobs: Alle die write_file nutzen
🟡 NIEDRIG: QC fehlt vor Joomla-Publish
Symptom: Fehlerhafte Artikel gehen live ohne menschliche Sichtung. Ursache: Jobs publizieren direkt, keine Quality-Gate. Betroffene Jobs: 1, 2, 3, 4, 5, 7, 8
3. Der einheitliche Standard
JEDER Artikel-Job MUSS ab sofort diese Checkliste erfüllen:
Phase A: Daten beschaffen
- A1: Nur aus verifizierten Quellen (APIs, Scraping mit wget+Firefox-UA)
- A2: URLs NIE raten — entweder aus API (
projectHomeUrl) oder Scraping - A3: Daten mit Zeitstempel speichern (für Debugging)
Phase B: Artikel schreiben
- B1: Template
templates/article.htmlaus journalistic-article-writing Skill - B2:
<hr id="system-readmore" />NACH Absatz 1 — KEIN<br>davor oder danach - B3:
<p class="meta">(NICHT<div>) — sonst kein Index-Eintrag - B4: Meta-Description + Keywords im
<head> - B5: Quellen-Überschrift:
<span style="text-decoration: underline;"><strong>Quellen</strong></span>(NICHT<h2>) - B6: KEINE Emojis, KEINE Icons
- B7: Genderneutral (Partizipien)
- B8: Spieletitel in
<strong> - B9: ALLE Links
target="_blank" - B10: KEINE Meta-Zeile im Body (Titel, Datum, Lesezeit)
Phase C: Umlaut-Korrektur
- C1:
python3 fix_umlauts.py artikel_*.html - C2: Manueller Zweitpass: Titel + erste 2 Absätze + Quellen prüfen
- C3:
grep -n 'a\b\|o\b\|u\b'auf verdächtige Wörter ohne Umlaut
Phase D: Read-More-Verifikation (NEU)
- D1:
grep -c 'system-readmore' artikel_*.html→ muss GENAU 1 sein - D2:
grep -A1 'system-readmore' artikel_*.html→ nächste Zeile darf KEIN<br>enthalten - D3: NACH dem Read-More: erstes Zeichen muss
<h2>oder<p>sein, nicht<br>
Phase E: Artikel-Ende-Verifikation (NEU)
- E1: Letzte 5 Zeilen prüfen: kein Debug-Output, keine Prompt-Reste
- E2: Artikel endet mit
</article>\n</body>\n</html>— nichts dahinter - E3: QC-Zeile MUSS in
<p class="qc">gewrappt sein (wird von article_server gestrippt)
Phase F: Bild (nur wenn publiziert wird)
- F1: Cover-Bild existiert unter
/home/hermes/workspace/media/ - F2: In
article_images.jsongemappt - F3:
image_introFormat:images/.../file.jpg#joomlaImage://local-images/Spiele/.../file.jpg - F4:
image_fulltextGLEICHES Format
Phase G: Delivery
- G1: NUR HTML in Workspace schreiben (
/home/hermes/workspace/artikel_*.html) - G2: KEIN Joomla-Publish ohne explizite Freigabe
- G3: Basti informieren: Dateiname, Kampagnen-Anzahl / Deal-Anzahl, Pfad
4. Umsetzungsplan (5 Schritte)
Schritt 1: Template fixen (sofort)
Datei: /home/hermes/.hermes/skills/creative/journalistic-article-writing/templates/article.html
Änderungen:
<hr id="system-readmore" />ohne folgendes<br>(Zeile prüfen + fixen)- QC-Zeile als
<p class="qc">markieren (wird von article_server gestrippt) - Letzte Zeile vor
</article>sicherstellen: kein Fremd-Content
Verifikation:
grep -A1 'system-readmore' templates/article.html
# Darf KEIN <br> in der Folgezeile zeigen
Schritt 2: article_server.py Stripping verbessern (heute)
Datei: /home/hermes/workspace/article_server.py
Änderungen:
- Funktion
_strip_internal_markers()extrahieren - Stripping-Reihenfolge: H1 → Meta-Zeile → QC-Zeile → Leerzeilen am Ende
- Test mit einem bekannten Problem-Artikel
Schritt 3: Alle Job-Prompts vereinheitlichen (heute)
Für JEDEN Artikel-Job den Prompt ergänzen um:
WICHTIGE REGELN (bei Nichtbeachtung wird Artikel verworfen):
- <hr id="system-readmore" /> NACH Absatz 1 — KEIN <br> davor oder danach
- KEINE Meta-Zeile im Body
- Letzte Zeile vor </article> ist der Quellen-Abschnitt — nichts danach
- QC-Hinweis NUR in <p class="qc"> (wird automatisch entfernt)
Schritt 4: Read-More-Verifikations-Script (heute)
Neu: /home/hermes/workspace/verify_article.sh
#!/bin/bash
# Verifies article HTML meets all standards
# Usage: ./verify_article.sh artikel_*.html
# Exit 0 = OK, Exit 1 = Fehler
FILE=$1
ERRORS=0
# Check 1: Exactly one read-more
COUNT=$(grep -c 'system-readmore' "$FILE")
if [ "$COUNT" != "1" ]; then
echo "❌ Read-More count: $COUNT (muss 1 sein)"
ERRORS=$((ERRORS+1))
fi
# Check 2: No <br> after read-more
if grep -A1 'system-readmore' "$FILE" | grep -q '<br>'; then
echo "❌ <br> nach Read-More gefunden"
ERRORS=$((ERRORS+1))
fi
# Check 3: Ends with </html>
if ! tail -1 "$FILE" | grep -q '</html>'; then
echo "❌ Datei endet nicht mit </html>"
ERRORS=$((ERRORS+1))
fi
# Check 4: Meta line is <p> not <div>
if grep -q '<div class="meta">' "$FILE"; then
echo "❌ <div class=\"meta\"> statt <p class=\"meta\">"
ERRORS=$((ERRORS+1))
fi
# Check 5: No emojis
if grep -qP '[\x{1F300}-\x{1F9FF}]' "$FILE"; then
echo "❌ Emojis gefunden"
ERRORS=$((ERRORS+1))
fi
[ $ERRORS -eq 0 ] && echo "✅ $FILE: Alle Checks bestanden"
exit $ERRORS
Schritt 5: Quality-Gate vor Joomla-Publish (diese Woche)
Workflow-Änderung:
- Job schreibt HTML → Workspace
verify_article.shläuft automatisch- Bei Fehler: Job meldet Fehler an Basti, KEIN Publish
- Bei Erfolg: Artikel auf Article-Server → Daniel reviewed → Daniel published
5. Job-für-Job-Änderungen
| Job | Prompt-Update | Kein Joomla | verify_article | Bild-Check |
|---|---|---|---|---|
| Nächtlicher Deal | ✅ | ❌ (läuft schon live) | ✅ | ✅ |
| Amazon Mo | ✅ | ❌ (läuft schon live) | ✅ | ✅ |
| Amazon Do | ✅ | ❌ | ✅ | ✅ |
| Samstag Shops | ✅ | ❌ | ✅ | ✅ |
| Kinderspiele So | ✅ | ❌ (läuft schon live) | ✅ | ✅ |
| Crowdfunding So | ✅ | ✅ (noch nicht live-reif) | ✅ | ✅ |
| BGA Di | ✅ | ❌ | ✅ | ✅ |
| Fantasywelt Fr | ✅ | ❌ | ✅ | ✅ |
| Fantasywelt Mi | ✅ | ❌ (nur Telegram) | N/A | N/A |
| Fantasywelt Fr 2 | ✅ | ❌ (nur Telegram) | N/A | N/A |
6. Erfolgskriterien
Ein Job gilt als „live-reif", wenn:
- 3 aufeinanderfolgende Läufe OHNE manuelle Korrektur
- Alle verify_article.sh-Checks bestanden
- Bild korrekt im Joomla-Frontend sichtbar
- Daniel bestätigt: „keine Korrekturen nötig"
Erst dann wird deliver von local/origin auf telegram + Joomla-Publish umgestellt.
7. Nächste Schritte (heute)
- Template fixen (Schritt 1) — 5 Min
- verify_article.sh erstellen (Schritt 4) — 10 Min
- article_server.py strippen verbessern (Schritt 2) — 15 Min
- Alle Job-Prompts patchen (Schritt 3) — 30 Min
- Crowdfunding-Job als Testfall — neu laufen lassen, verify_article.sh prüfen