GEO: Anti-AI-Lint-Skript im Build (Vokabel-Blacklist + Struktur-Patterns) #10
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hintergrund
Guideline:
docs/geo-seo-guideline.md(Section 3.6).AI-generierte Texte haben charakteristische Muster (Vokabel-Cluster, Struktur-Schablonen), die Google's Helpful Content Update und LLM-Citation-Algorithmen abwerten. Beispiele:
Vokabel-Cluster:
Struktur-Schablonen:
Aufgabe
1. Lint-Skript in build pipeline
Neues Bash/Python-Skript:
tools/anti-ai-lint.sh(oderlint-ai-patterns.pymit uv).sites/*/index.html(rendered outputbuild/<domain>/index.html)tools/anti-ai-blacklist.yaml(zentral pflegbar):2. Severity & Build-Verhalten
severity: warn— Build geht durch, Warnung im Log.severity: fail— Build bricht ab.3. Integration
build.shruft Lint-Skript am Ende auf (nach allen sites built).build.sh --skip-lintfür Notfall-Builds.4. False-Positive-Handling
Satire-Sites benutzen vielleicht absichtlich AI-Speak (Wortspiele wie kAInco, kIlemma). Whitelist via
# anti-ai-allow: <pattern>-Kommentar im HTML, oder per-site override in site.yaml.QA
Folge-Aktion
Nach Merge: bestehende Treffer auf den 59 Sites bewerten und säubern (separates Issue oder im selben Sweep).
Priorität
p2 — Hygienevorrichtung, schützt vor künftigem AI-Slop. Greifen aber nur, wenn neue Sites gebaut werden.
Anti-AI-Text-Lint integriert
Branch:
mai/artemis/issue-10-anti-ai-lintCommit: https://mgit.msbls.de/m/onepager/commit/fdac496
Geliefert
tools/anti-ai-lint.py— Python-Linter (stdlib + yq subprocess). Strippt HTML viahtml.parser, prüft Vokabel-Substrings (DE+EN, case-insensitive) und Regex-Patterns gegen sichtbaren Text. Eine Meldung pro Treffer pro Datei, Snippet + Zeilennummer.--jsonfür strukturierten Report,--quietfür Fail-only.tools/anti-ai-blacklist.yaml— Vokabel-Cluster ausdocs/geo-seo-guideline.md§3.6 plus drei Regex-Patterns (em-dash-3-bullet,not-only-but-also,as-an-ai). Phrasen-Fingerprints sindfail, Einzel-Buzzwordswarn.tools/test-anti-ai-lint.sh— Self-Test mit synthetischer AI-Fixture: prüft Erkennung, Whitelist-Suppression, Exit-Codes.build.sh— Lint läuft als Schritt 4/4.--skip-lintfür Notfälle.Dockerfile—python3zur Builder-Stage hinzugefügt (kein Effekt aufs Caddy-Image).README.md+docs/geo-seo-guideline.mdaktualisiert.Whitelist-Mechanismen
<!-- anti-ai-allow: revolutionär, em-dash-3-bullet -->site.yaml:Initial-Lauf auf 59 Sites (Bestandsaufnahme)
Beide Treffer sind erklärbar:
<!-- anti-ai-allow: revolutionär -->).Build geht durch, kein hard-fail wie geplant.
Tests
Vier Test-Cases — synthetische AI-Fixture wird komplett erkannt, Whitelists unterdrücken Vocab- und Pattern-Hits,
fail-Severity triggert weiterhin Exit 1, neutraler Text exitet 0.Nicht selbst nach main gemerged
Branch ist gepusht, wartet auf Review + Merge durch head.
Folge-Aktionen