Smoke-Test vf-nova Anti-Slop — 2026-05-19
Verifikation dass der Anti-Slop-Block in vf-nova System Prompt (v3.0, deployed 17:47 CEST) tatsaechlich wirkt.
Setup
- Provider: AWS Bedrock eu-central-1,
eu.anthropic.claude-sonnet-4-5-20250929-v1:0(= Sonnet 4.6 EU-CRIS), direkt via CLI mit AWS-Profileav-production. Nicht ueber OWUI-Frontend, weil dessen Chat-API async ist und ohne Browser-Session nicht sauber pollbar. - System Prompt: kompletter Inhalt aus
~/source/apps/open-webui-vf/prompts/vf-nova.txtmit OWUI-Placeholders ({{CURRENT_DATE}}etc.) gefuellt. - Modell-Settings:
max_tokens=4000, keintemperature-Override (Default 1.0).
Test 1 — Generischer SaaS-Hero (Slop-Trigger)
User-Prompt:
Bau mir ein modernes Hero fuer eine generische SaaS-Productivity-App namens Flowdash (KEIN VF-Kunde, also bewusst NICHT im VF-CI). Single-Slide-HTML, 1280x720, mit Headline + Subline + zwei Buttons. Hochwertig, nicht generisch.
Test-1.a — Baseline (v3.0 ohne Gradient-Erweiterung)
- Datei:
test-1-saas-hero-baseline.html(5396 chars) - Token: in=16240, out=2119
Befund: Modell hat den Anti-Slop-Block bewusst rezipiert und im Output explizit erklaert was es vermeidet (“#6366f1” explizit als verboten erwaehnt). ABER: #8b5cf6 (in der Blocklist!) wurde als Radial-Mesh-Background-Layer eingesetzt:
background: radial-gradient(circle at 20% 30%, #3B82F6 0%, transparent 40%),
radial-gradient(circle at 80% 70%, #8B5CF6 0%, transparent 40%);
filter: blur(80px);→ Modell interpretierte „Indigo verboten als Accent” und nutzte einen verbotenen Hex-Wert als Background-Glow-Layer. Schwachstelle im Anti-Slop-Block: zu auf-Accent-fokussiert formuliert.
Patch deployed
Anti-Slop-Block Cardinal Sin #1 erweitert: „Auch nicht als Background-Mesh, Radial-Gradient, sekundaere Akzent-Schicht, Glow-Effekt oder Filter-Blur-Layer.” — Diff: 207 chars zusaetzlich, neue Source-of-Truth-Groesse 44176 chars. Via Admin-API gepusht, HTTP 200.
Test-1.b — Nach Patch (selber User-Prompt)
- Datei:
test-1-saas-hero-after-patch.html(4392 chars) - Token: in=16300, out=2282
Befund: #6366f1 nur noch in Anti-Slop-Awareness-Erwaehnung (“statt #6366f1 nutze…”), nicht im Code. Keine anderen Indigo-Hex-Werte. Modell hat als Akzent #2563EB (Tailwind Blue-600, nicht in der Blocklist) gewaehlt. Saubere Trennung Awareness vs Output.
✅ Patch wirkt.
Test 2 — WTMG Save-the-Date (VF-Brand-Trigger)
User-Prompt:
Bau mir ein Save-the-Date als HTML-Slide (16:9, 1280x720) fuer das WTMG Festival 2026 — Termin 12. Juli 2026, Location Hammer Park, Headliner ist DJ Sokol. Im VF-CI bitte.
- Datei:
test-2-wtmg-save-the-date.html(7355 chars) - Token: in=16207, out=2465
Befund:
| Brand-Anker | Vorhanden |
|---|---|
VF-Neongelb #C8FF62 | ✅ |
Anthrazit-Background #0C0C0C | ✅ |
| Futura PT Typography | ✅ |
| WTMG / Welcome To My Garden | ✅ |
| DJ Sokol als Headliner | ✅ |
| Indigo-Hex-Verstoss | ✅ NONE |
| Lorem/Filler-Copy | ✅ NONE |
| Hammer Park | ✗ (Nova schrieb „Maximilianpark”) |
Hammer-Park-Drift ist eine Halluzination — Nova hat den falschen Park geraten obwohl der User „Hammer Park” gesagt hat. Action Item: Anti-Slop-Block Regel #6 (Invented Metrics) sollte um „User-genannte Fakten respektieren, nicht durch andere ersetzen” erweitert werden. Anders gesagt: zusaetzlich zu „Invented Metrics” auch „Invented Location/People/Facts” verbieten.
✅ Brand-Adherence fertig. ⚠️ Fakten-Respekt braucht zweite Iteration.
Aggregate-Erkenntnisse
- Anti-Slop wirkt strukturell — Modell rezipiert den Block aktiv, erwaehnt teilweise was es vermeidet. Das ist Awareness-Pattern, nicht nur stiller Compliance.
- Edge-Cases brauchen prazisere Sprache — „verboten als Accent” reicht nicht, muss „verboten in jedem Layer” sein. Patch heute live.
- Fakten-Halluzinationen sind ein anderes Failure-Mode als Slop — der Anti-Slop-Block adressiert das nicht direkt. Cardinal Sin #6 (Invented Metrics) ist nah dran, aber benannte Locations/Personen sind nicht abgedeckt. Empfehlung: Cardinal Sin #6 in einem spaeteren Pass erweitern, ODER eine neue Regel „Respect User-Given Facts” als #8.
- Token-Cost pro Smoke-Call ~16k Input × 16.50/M = ca. 0.26. Tragbar fuer Verifikation.
- Bedrock-CLI ist der bessere Smoke-Pfad als OWUI-Chat-API solange wir keine Browser-Session haben. Reproduzierbar, deterministisch (mit
temperature=0waere es voll determinitisch), kein Auth-Drama.
Action Items aus diesem Run
| Was | Wo | Prioritaet |
|---|---|---|
| Anti-Slop-Block Cardinal Sin #1 erweitert | DEPLOYED | done |
| Cardinal Sin #6 um „User-Given Facts respektieren” erweitern | spaeter (kein Phase-2-Blocker) | nice-to-have |
Smoke-Test-Script wiederholbar machen (Skript scripts/smoke-vf-nova.sh) | spaeter | nice-to-have |
| Test-Session mit Julian (Live-Verifikation im Browser) | offen | nach Phase-2-Start |
Wiederverwendbarkeit
Smoke-Pattern via Bedrock-CLI ist wieder-anwendbar fuer jeden Custom-Model-System-Prompt-Update bei VF, anderen Kunden, Marvins eigenen Skills. Pattern:
- System Prompt aus OWUI fetchen (
GET /api/v1/models/model?id=...) - Source-of-Truth-File in
~/source/apps/<app>/prompts/ablegen - Edit + Push via
POST /api/v1/models/model/update?id=...(mit Mozilla-User-Agent gegen Cloudflare 1010) - Smoke-Test via
aws bedrock-runtime invoke-modelmit selbem System Prompt + 1-2 Test-User-Prompts - Output gegen Erwartungs-Liste pruefen (Indigo-Hex absent, Brand-Anker vorhanden, etc.)
- Doku als Run-File hier ablegen
→ Kommt evtl als eigenes Skill-File intern/capabilities/skills/system-prompt-smoke/SKILL.md (Phase 3 oder spaeter, wenn Pattern oft genug wiederkommt).
Files in diesem Run
test-1-saas-hero-baseline.html— vor Patch, hat#8b5cf6im Backgroundtest-1-saas-hero-baseline-raw.md— Modell-Antwort als komplettes Markdowntest-1-saas-hero-after-patch.html— nach Patch, saubertest-1-saas-hero-after-patch-raw.mdtest-2-wtmg-save-the-date.html— VF-Brand vollstaendigtest-2-wtmg-save-the-date-raw.md