278 lines
18 KiB
Markdown
278 lines
18 KiB
Markdown
---
|
||
name: journalistic-article-writing
|
||
description: "Research and write fact-based journalistic articles with linked sources, output as HTML for brettspiel-news.de. Zero-hallucination standard: every factual claim must be verifiable."
|
||
---
|
||
<!--
|
||
HTML-Template für brettspiel-news.de Artikel (Stand: 28.06.2026)
|
||
================================================================
|
||
⛔ NACH DIESER SESSION GELERNTE FEHLER — NIEMALS:
|
||
❌ <style>-Tag im Artikel → zerstört Joomla-Layout. KEINE AUSNAHME. Der Article-Server (port 8890) liefert eigene Vorschau-Styles im Response-HTML — Artikel-Dateien bleiben style-frei. Wer Vorschau-Styles will, patcht den Server, nicht die Artikel.
|
||
❌ <style>-Tag im Artikel → zerstört Joomla-Layout. KEINE AUSNAHME. Der Article-Server (port 8890) liefert eigene Vorschau-Styles im Response-HTML — Artikel-Dateien bleiben style-frei. Wer Vorschau-Styles will, patcht den Server, nicht die Artikel.
|
||
❌ max-width oder margin:auto auf article → zerstört Joomla-Spalten
|
||
❌ Inline-Styles → bsn-CSS-Klassen verwenden (Custom CSS im Joomla-Template)
|
||
❌ Dark Mode ignorieren! `.vorbestell-box`, `.bsn-facts`, `.bsn-infobox` haben `background:#fff` — ohne `[data-bs-theme="dark"]`-Override leuchten die weißen Boxen im Dark Mode. → references/bsn-dark-mode.css (in Astroid Custom CSS einfügen, dann Cache leeren)
|
||
❌ <h1> im Body → Joomla rendert Überschrift selbst aus <title>-Tag
|
||
❌ <p class="bsn-dachzeile"> → nicht erwünscht (Daniel: "hat nichts im Artikel zu suchen")
|
||
❌ "Auf einen Blick"-Infobox ohne echte Fakten → sinnfrei, weglassen
|
||
❌ Rote Akzentfarbe → IMMER #20228A (BSN-Blau)
|
||
❌ Read-More an beliebiger Stelle → NUR nach Lead-Absatz, nirgendwo sonst!
|
||
❌ Blockquote mit Inline-Style → Joomla styled <blockquote> selbst
|
||
❌ CSS in Artikeln → zentral im Joomla-Template (Astroid → Custom CSS)
|
||
❌ "| Brettspiel-Magazin" im <title>
|
||
❌ "Weitere Informationen sowie Bildmaterial zum Download gibt es direkt bei…"
|
||
❌ Abkürzungen ohne Erklärung bei Erstverwendung
|
||
❌ Artikel selbst schreiben → Basti delegiert an Sub-Agenten (CvD, nicht Autor)
|
||
❌ Sub-Agenten delegieren OHNE diesen Skill zu laden → Fehlen Meta-Tags, Read-More, target=_blank, korrektes CSS → Artikel unbrauchbar
|
||
❌ Nach Delegation KEIN QC (verify_article.sh) → 4 von 6 Artikeln ohne Meta-Tags am 28.06.2026 publiziert
|
||
❌ Artikel beginnt direkt mit <body> — KEIN <head>, keine <meta>-Tags → verify_article.sh FAIL (29.06.2026)
|
||
❌ Affiliate-Box weglassen bei Spielen im Handel → Pflicht!
|
||
❌ VG-Wort-Pixel im Artikel → macht Basti beim Publishing
|
||
❌ KEINE Tags (<meta name="bsn-tags">) → 3-5 präzise Tags sind PFLICHT (Daniel, 03.07.2026)
|
||
❌ Mehr als 5 Tags → nicht wahllos, sondern treffend (max. 5)
|
||
❌ VG-Wort-Pixel im Artikel (wird von Basti beim Publishing nachgerüstet!)
|
||
❌ CvD schreibt selbst Artikel → Basti DELEGIERT an Sub-Agenten (Standardmodus). Ausnahme: Wenn Basti direkt sagt „Schreibe einen Artikel über X", schreibt Basti selbst — ohne Sub-Agenten. Siehe redaktion-bsn Skill, Abschnitt „Zwei Modi".
|
||
❌ Alte affiliate-box oder <div style="border:...dotted"> → verify_article.sh CHECK 14 lehnt ab (10.07.)
|
||
❌ vorbestell-box / bsn-facts mit Inline-style="" → verify_article.sh CHECK 12+13 lehnen ab (10.07.)
|
||
❌ Artikel abschließen ohne fix_article_format.py + verify_article.sh → unreleased blockieren (10.07.)
|
||
|
||
🚨 QC-PIPELINE (10.07.2026 — WAS SERDICHT):
|
||
1. Artikel schreiben → HTML im Workspace speichern
|
||
2. python3 fix_article_format.py <artikel.html> ← Inline-Styles strippen
|
||
3. bash verify_article.sh <artikel.html> ← 15 Checks (inkl. CSS-Compliance)
|
||
4. Bei FAIL: NICHT publizieren, Fehler beheben, zurück zu Schritt 2
|
||
Sub-Agenten MÜSSEN Schritte 2+3 selbst ausführen, bevor sie "fertig" melden!
|
||
❌ Shop-Marketing-Text ungeprüft übernehmen! „VIP-exklusiv" auf Spiele-Offensive-Seiten ist oft Marketing — der Deal kann für ALLE verfügbar sein (10.07. Marajoara #15539). NIE „VIP-exklusiv" in Artikel schreiben, ohne dass Daniel es bestätigt.
|
||
❌ FAKTEN ERFINDEN! Sub-Agenten halluzinieren Verlage (30.06.: „Spielworxx" statt Devir), Designer, Quellen-URLs und Awards („Kennerspiel des Jahres 2000" — gab's erst ab 2011). JEDE Behauptung über Verlag, Designer, Award, Spielerzahl, Preis oder URL MUSS per BGG XML API + Primärquelle verifiziert werden. Niemals aus Trainingswissen raten.
|
||
❌ BGG-Suche mit generischen Kurznamen („Moustache", „Panorama", „Cities") → matchen falsche Spiele (Wargame statt Legespiel, falsche Edition). Bei mehrdeutigen Titeln Suche MIT Verlag oder Erscheinungsjahr einschränken: `search?query=SPIELNAME+VERLAG`. Wenn BGG-Cover nicht eindeutig zuzuordnen: Fantasywelt-Produktbild als Fallback, NICHT raten!
|
||
❌ <br> nach <hr id="system-readmore" /> → erzeugt zwei Trennlinien im Joomla-Editor (Daniel, 30.06.2026). IMMER `<hr id="system-readmore" />` OHNE nachfolgendes `<br>`.
|
||
❌ <br> nach <hr id="system-readmore" /> → erzeugt zwei Trennlinien im Joomla-Editor (Daniel, 30.06.2026). IMMER `<hr id="system-readmore" />` OHNE nachfolgendes `<br>`.
|
||
❌ `hr#system-readmore` als CSS-Selektor im `<style>`-Block des Artikels → verify_article.sh zählt den CSS-Selektor als Read-More-Instanz mit → False Positive „Read-More: N (muss 1)". Im CSS stattdessen `article hr` oder `hr` verwenden (06.07.2026).
|
||
❌ <title>-Tag im <article>-Body → erscheint doppelt im Joomla-Editor. <title> NUR im <head>. Im Body <h2> für die Titel-Zeile verwenden (nicht <h1> — Joomla rendert selbst ein <h1> aus dem <title>-Tag, ein zweites <h1> im Body führt zu doppelten Überschriften). <h2> wird von verify_article.sh akzeptiert.
|
||
❌ <dl>/<dt>/<dd> in Artikel-Inhalten → Joomla-Template-CSS-Resets überschreiben das Layout. Stattdessen: <div class="bsn-facts__row"><span class="bsn-facts__label">…</span><span class="bsn-facts__value">…</span></div> (04.07.2026: 21 Artikel zeigten „DesignerName" ohne Trennung)
|
||
❌ CSS mit europäischem Komma (font-size:1,2rem) → zerstört CSS-Rendering. CSS MUSS Punkte als Dezimaltrenner (1.2rem, 0.5rem). Preise im Text DÜRFEN europäisches Komma (1,99 €).
|
||
❌ ★ (U+2605) in BGG-Badges → verify_article.sh flaggt es als Emoji. Statt „BGG ★8.1" → „BGG 8.1" schreiben.
|
||
❌ `hr#system-readmore` als CSS-Selektor im `<style>`-Tag → verify_article.sh zählt CSS-Referenzen als Read-More-Instanzen → False Positive (06.07.). Im CSS immer `article hr` oder `.article hr` verwenden, NIE `system-readmore` in Selektoren.
|
||
❌ Umlaut-False-Positives blind „korrigieren"! verify_article.sh meldet manchmal „verdächtige Wörter", die KORREKT sind — z.B. „saubere" (normales deutsches Wort), „Trucker" (aus „Galaxy Trucker"), Eigennamen, englische Begriffe. Wenn fix_umlauts.py False-Positives meldet: Wörter in die WHITELIST des Skripts aufnehmen (scripts/fix_umlauts.py), NICHT den Artikeltext verändern. Siehe scripts/fix_umlauts.py → WHITELIST-Dict.
|
||
|
||
✅ VERFÜGBARE bsn-KLASSEN:
|
||
.bsn-meta — Datum/Lesezeit
|
||
.bsn-facts — Spiel-Fakten (Quick-Fact-Kacheln + Detailliste + Mechanik-Pills)
|
||
.vorbestell-box — Vorbestell-Box (Split-Layout: Info links, CTA rechts)
|
||
.bsn-gamecard — Einzelne Spiel-Vorstellung (mit Desktop-Hover-Lift-Effekt)
|
||
.bsn-quellen — Quellen-Block
|
||
.bsn-recherche — Recherchestand-Zeile
|
||
<blockquote> — Clean, Joomla styled selbst
|
||
Dark Mode: alle bsn-Klassen via @media (prefers-color-scheme: dark) + body.dark-Fallback
|
||
⛔ NICHT MEHR VERWENDEN: .bsn-infobox, .bsn-table (abgelöst durch .bsn-facts, 04.07.2026)
|
||
|
||
📂 REFERENZEN:
|
||
references/bsn-dark-mode.css — Dark-Mode-CSS für Vorbestell-Box, bsn-facts & Inline-Hintergründe
|
||
references/sunday-cross-shop-deal-listing.md — Sonntags-Cross-Shop-Deal-Listing-Format (04.07.)
|
||
references/article-pitfalls-2026-06.md — Fallstricke
|
||
references/article-server-infrastructure.md — Server-Betriebsregeln
|
||
references/editorial-rules-2026-06-24.md — Redaktionelle Regeln
|
||
references/delegation-qc-workflow.md — Delegations- & QC-Prozedur
|
||
references/bgg-monatsrueckblick-format.md — BGG-Monatsrückblick-Format
|
||
references/vorbestell-box-pattern.md — Vorbestell-Box: Split-Layout, Position (04.07.)
|
||
references/bsn-dark-mode-vorbestell.css — Dark-Mode-CSS für Vorbestell-Box & bsn-facts (09.07., in Astroid Custom CSS einpflegen)
|
||
references/reddit-community-article-pattern.md — Reddit-Community-Artikel: Recherche & Schreibmuster (08.07.)
|
||
scripts/bsn_facts_migrate.py — Migration: bsn-infobox → bsn-facts
|
||
|
||
📐 STRUKTUR (Joomla + Server-Preview):
|
||
<title> im <head> = Überschrift
|
||
<p class="meta">TAG. MONAT JAHR</p> DIREKT nach <body> — PFLICHT für Server-Listing!
|
||
<p class="dachzeile">Kurzzusammenfassung</p> — PFLICHT für Server-Preview
|
||
<article> → <title>TITEL</title> — PFLICHT für Server-Preview
|
||
Lead-Absatz → <hr id="system-readmore" /> → Rest
|
||
Details: references/server-article-structure.md
|
||
|
||
⛔ Sub-Agenten: KEIN VG-Wort-Pixel einbauen! Wird von Basti nachgerüstet.
|
||
⛔ Basti DELEGIERT Schreibarbeit — schreibt NICHT selbst Artikel!
|
||
|
||
🚨 LOKALISIERUNGS-PFLICHT (08.07.2026): Bei JEDEM Spiel-Artikel MUSS die
|
||
deutsche Ausgabe recherchiert werden. BGG boardgameversion checken (nicht nur
|
||
Hauptspiel). Verlag, Release-Datum und Preis der dt. Version nennen. Wenn keine
|
||
dt. Ausgabe existiert, das transparent machen ("bisher keine dt. Ausgabe angekündigt").
|
||
NIEMALS nur die englische Version beschreiben ohne den deutschen Markt zu erwähnen.
|
||
Absatz 1 → vorbestell-box → <hr id="system-readmore"> → bsn-facts → Rest
|
||
Die vorbestell-box steht NACH dem ersten Inhalts-Absatz und VOR dem Read-More.
|
||
|
||
🚨 <h2>-TITEL IM BODY (03.07.2026): Das <h2> mit dem Artikel-Titel im Body wird
|
||
vom Gatekeeper beim Publish automatisch gestrippt, da Joomla den Titel selbst
|
||
rendert. Schreibt ruhig ein <h2> — es dient dem Article-Server als Preview,
|
||
aber im Joomla-Editor erscheint es NICHT (keine doppelte Überschrift mehr).
|
||
|
||
🚨 PUBLISH NUR DURCH BASTI (04.07.2026)! Sub-Agenten schreiben NUR HTML in den Workspace.
|
||
NIEMALS publish_gatekeeper.py, NIEMALS curl, NIEMALS Joomla-API direkt aufrufen!
|
||
Endprodukt ist IMMER eine HTML-Datei im Workspace. Basti prüft und publiziert.
|
||
Nach </article> MUSS ein Prompt-Block für die Titelbild-Generierung folgen:
|
||
|
||
<!-- NANO-BANANA-PROMPT
|
||
Erstelle ein Titelbild für brettspiel-news.de basierend auf dem Cover von SPIELNAME:
|
||
- 16:9, 1920×1080, 72 DPI
|
||
- Stil: Editorial/Magazin, warme Beleuchtung
|
||
- Das Cover liegt auf einem Holzspieltisch, umgeben von Spielmaterial
|
||
- Titel des Spiels gut lesbar
|
||
- Keine störenden Elemente im Hintergrund
|
||
- Farbpalette: an Cover-Farben orientiert
|
||
-->
|
||
|
||
Dieser Prompt wird NIE veröffentlicht. Er dient ausschließlich der Bildgenerierung.
|
||
⛔ Prompt-Blöcke (Nano-Banana) NACH </article> platzieren, nicht innerhalb!
|
||
⛔ Nano-Banana-Prompt NACH </html> → verify_article.sh FAIL („Letzte Zeile ist nicht </html>"). Prompt MUSS zwischen </article> und </body></html> stehen, nicht danach! (08.07.2026)
|
||
|
||
🏷️ TAGS (PFLICHT — Daniel, 03.07.2026):
|
||
|
||
💬 COMMUNITY-ARTIKEL (Spieletreffs, Vereine, Einladungen — 10.07.2026):
|
||
Warm, persönlich, einladend. Kein Presse-Deutsch. „Du"-Stil. Konkrete
|
||
Szenen statt abstrakter Beschreibungen („Omas Streuselkuchen neben
|
||
selbstgemachter Quiche" statt „ein Buffet mit Speisen"). Die Leserin soll
|
||
das Gefühl haben, sie könne einfach reinkommen und würde willkommen sein.
|
||
Keine Vereinsmeierei, keine Beitrittsaufforderung — Gastfreundschaft first.
|
||
Daniel hat diesen Stil als „Volltreffer" bewertet.
|
||
3-5 präzise Tags in <meta name="bsn-tags" content="...">. Nicht wahllos!
|
||
|
||
Verfügbare Tags (Joomla-ID → Name):
|
||
2=Deckbauspiel 3=Strategie 4=Solospiel 5=Kartenspiel 6=Crowdfunding
|
||
7=Branche 8=Kooperativ 10=Eurogame 11=Tableaubau 12=2-4 Spieler
|
||
13=Wirtschaftsspiel 14=2-5 Spieler 15=Area Control 16=2 Spieler
|
||
17=Abenteuer 18=Erkunden 19=Labyrinth 20=Bluffen 21=Würfelspiel
|
||
22=Echtzeit
|
||
|
||
Tag-Regeln pro Artikeltyp:
|
||
- Crowdfunding-Artikel: Crowdfunding, +Mechaniken des Spiels
|
||
- Branchen-News (M&A, Entlassungen): Branche, +Kontext
|
||
- Spiel-Review/Preview: Mechaniken (Deckbauspiel, Area Control,…), Spielerzahl
|
||
- Vorbestell-News: Mechaniken (Strategie, Würfelspiel,…), Spielerzahl-Tag, ggf. Solospiel
|
||
- Deal-Artikel: Strategie/Kartenspiel, Crowdfunding NUR bei Kickstarter-Deals
|
||
- BGG-Analyse/Community: Branche, ggf. Strategie
|
||
- Kurioses (City of Six Moons): 1-2 passende Tags (z.B. Strategie, Kartenspiel)
|
||
|
||
📦 VORBESTELL-NEWS (Artikeltyp — rev. 04.07.2026):
|
||
Vorbestell-Hinweis-Box NACH dem ersten Absatz, VOR <hr id="system-readmore">:
|
||
- Position: Absatz 1 → Box → Read-More → Fact-Box → Rest
|
||
- CSS-Klasse: class="vorbestell-box" (Pflicht für Verifikation)
|
||
- Inhalt: Preis, Release-Datum, Vorbestell-Link, Affiliate-Disclosure
|
||
- Sprache des Spiels explizit nennen („Deutsche Ausgabe", „Englische Ausgabe — nicht lokalisiert")
|
||
- Beispiel: siehe references/vorbestell-box-pattern.md (rev. 04.07.2026)
|
||
|
||
<!-- bsn-meta:... --> KOMMENTAR:
|
||
DIREKT nach <p class="meta">, gleiche Zeile oder nächste. Format:
|
||
<!-- bsn-meta:TAG. MONAT JAHR -->
|
||
Dient dem Artikel-Index-Server zur Extraktion des Datums.
|
||
-->
|
||
<!DOCTYPE html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="description" content="KURZBESCHREIBUNG (1-2 Sätze)">
|
||
<meta name="keywords" content="KEYWORD1, KEYWORD2, KEYWORD3">
|
||
<meta name="bsn-tags" content="TAG1, TAG2, TAG3">
|
||
<title>ARTIKEL_TITEL</title>
|
||
</head>
|
||
<body>
|
||
|
||
<p class="meta">TAG. MONAT JAHR</p>
|
||
<!-- bsn-meta:TAG. MONAT JAHR -->
|
||
|
||
<p class="dachzeile">DACHZEILE — KERNAUSSAGE IN EINEM SATZ</p>
|
||
|
||
<article>
|
||
|
||
<!-- TITEL wird von Joomla aus dem <title>-Tag gerendert — KEIN <h2> mit Titeltext im Body! -->
|
||
<!-- Stattdessen direkt mit Lead-Paragraph beginnen -->
|
||
|
||
<p>LEAD_PARAGRAPH</p>
|
||
|
||
<!-- Vorbestell-Box: NACH Lead, VOR Read-More. KEINE Inline-Styles! -->
|
||
<div class="vorbestell-box">
|
||
<div class="vorbestell-box__info">
|
||
<span class="vorbestell-box__badge">Vorbestellung</span>
|
||
<p class="vorbestell-box__title">SPIELNAME</p>
|
||
<ul class="vorbestell-box__meta">
|
||
<li><i class="fa-regular fa-calendar" aria-hidden="true"></i> Erscheint am DATUM</li>
|
||
<li><i class="fa-solid fa-language" aria-hidden="true"></i> SPRACHINFO</li>
|
||
<li><i class="fa-solid fa-store" aria-hidden="true"></i> SHOPNAME</li>
|
||
</ul>
|
||
</div>
|
||
<div class="vorbestell-box__panel">
|
||
<div class="vorbestell-box__price">PREIS €</div>
|
||
<a class="vorbestell-box__btn" href="AFFILIATE-URL" target="_blank" rel="sponsored noopener">Jetzt vorbestellen</a>
|
||
<span class="vorbestell-box__disclosure">Affiliate-Link · Werbung</span>
|
||
</div>
|
||
</div>
|
||
|
||
<hr id="system-readmore" />
|
||
|
||
<!-- Fakten-Box: Quick-Fact-Kacheln + Detailliste + Mechanik-Pills -->
|
||
<div class="bsn-facts">
|
||
<div class="bsn-facts__header">
|
||
<p class="bsn-facts__title">SPIELNAME — Fakten</p>
|
||
</div>
|
||
<div class="bsn-facts__grid">
|
||
<div class="bsn-facts__tile">
|
||
<i class="fa-solid fa-users" aria-hidden="true"></i>
|
||
<div class="bsn-facts__tile-value">N–N</div>
|
||
<div class="bsn-facts__tile-label">Personen</div>
|
||
</div>
|
||
<div class="bsn-facts__tile">
|
||
<i class="fa-solid fa-user-check" aria-hidden="true"></i>
|
||
<div class="bsn-facts__tile-value">ab N</div>
|
||
<div class="bsn-facts__tile-label">Alter</div>
|
||
</div>
|
||
<div class="bsn-facts__tile">
|
||
<i class="fa-regular fa-clock" aria-hidden="true"></i>
|
||
<div class="bsn-facts__tile-value">ca. N min</div>
|
||
<div class="bsn-facts__tile-label">Spieldauer</div>
|
||
</div>
|
||
<div class="bsn-facts__tile">
|
||
<i class="fa-solid fa-star" aria-hidden="true"></i>
|
||
<div class="bsn-facts__tile-value">N,N / 10</div>
|
||
<div class="bsn-facts__tile-label">BGG · N Stimmen</div>
|
||
</div>
|
||
</div>
|
||
<div class="bsn-facts__list">
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Designer</span><span class="bsn-facts__value">NAME</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Illustration</span><span class="bsn-facts__value">NAME</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Verlag</span><span class="bsn-facts__value">NAME</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">BGG Weight</span><span class="bsn-facts__value">N,N / 5</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Sprache</span><span class="bsn-facts__value">SPRACHE</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Preis</span><span class="bsn-facts__value">PREIS (SHOP)</span></div>
|
||
<div class="bsn-facts__row"><span class="bsn-facts__label">Release</span><span class="bsn-facts__value">DATUM</span></div>
|
||
</div>
|
||
<div class="bsn-facts__tags">
|
||
<span class="bsn-facts__tags-label">Mechaniken</span>
|
||
<span class="bsn-facts__tag">MECHANIK-1</span>
|
||
<span class="bsn-facts__tag">MECHANIK-2</span>
|
||
<span class="bsn-facts__tag">MECHANIK-3</span>
|
||
</div>
|
||
</div>
|
||
|
||
<h2>ABSCHNITT_EINS</h2>
|
||
<p>INHALT</p>
|
||
|
||
<blockquote>
|
||
<p>ZITAT_IMMER_AUF_DEUTSCH</p>
|
||
</blockquote>
|
||
|
||
<h2>ABSCHNITT_ZWEI</h2>
|
||
<p>INHALT</p>
|
||
|
||
<!-- Optional: Spiel-Vorstellung -->
|
||
<div class="bsn-gamecard">
|
||
<h3>SPIELNAME</h3>
|
||
<p class="game-meta">Verlag · Autor · Spielerzahl</p>
|
||
<p>BESCHREIBUNG</p>
|
||
</div>
|
||
|
||
<span style="font-size:1.17em;font-weight:bold;display:block;margin:1em 0;"><strong>Quellen</strong></span>
|
||
<ol>
|
||
<li><a href="VOLLE_URL" target="_blank">QUELLENNAME</a> — Beschreibung (Datum)</li>
|
||
</ol>
|
||
|
||
<p class="bsn-recherche"><em>Recherchestand: DATUM</em></p>
|
||
|
||
</article>
|
||
</body>
|
||
</html> |