Files
creator3/LEKTIONEN.md
2026-07-24 11:23:18 +02:00

8.3 KiB
Raw Permalink Blame History

Lektionen-Herkunft creator3

Basis: ../creator2/LEKTIONEN.md (83 bezahlte Lektionen aus creator/creator2). Übernommen als Anforderungen: 1-6, 10, 12-37, 40, 42-49, 52-83 + die vier Meta-Regeln. Entfallen (CLI-/PDF-/uni-spezifisch): 7-9, 11, 38-39, 41, 51. Lektion 50 (API statt CLI) ist die Gründungsentscheidung von creator3.

Neue Lektionen aus der creator2-Analyse (2026-07-22)

  1. Budget default AN — creator2s „hartes" Budget war per Default 0=aus und in allen Echtläufen abgeschaltet. creator3: RUN_BUDGET_TOKENS=10M Default (config.py), Prüfung VOR und NACH jedem Call (llm.py).
  2. Gates überall hart, nicht nur beim Korpus — creator2 gatete nur E0; E1-E4 stiegen bei Stillstand trotzdem auf. creator3: jede Stufe hat ein Gate-Knoten, rot ohne Fortschritt (Fingerprint 2× identisch) → PAUSE (engine.py _gate_abschluss).
  3. Dopplung inhaltlich prüfen, nicht nur Marker — creator2 garantierte nur Marker-Einmaligkeit. creator3: Satzpaar-Jaccard über Section-Grenzen + Panel „redundant vs. didaktisch gewollt" (redundanz.py), Fix ersetzt durch Ein-Satz-Refresher + Anker-Link.
  4. Akronym↔Langform explizit als Dedup-Kanal — Lektion 28 war in creator2 nie umgesetzt; Cosinus/Jaccard sehen „HTTP"↔„Hypertext Transfer Protocol" nicht (dedup.py _kanal, textkit.py ist_akronym_von).
  5. Nach der Soll-Zuordnung einmal nachdeduplizieren — der Gleicher-Soll-Punkt-Kanal kann erst feuern, wenn soll_ids gesetzt sind; Dedup vor Zuordnung allein übersieht Synonym-Paare (inventar.gate).
  6. Engine denkt in Topics, nicht in Runs — Tasks/Gates sind topic-scoped; ein neuer Run auf fertigem Topic ist ein No-Op (Resume-Test: 0 Events).

Lektionen aus Echtlauf 1 (Pomodoro, 2026-07-22: 353 Soll-Punkte, 2789 Atome,

5,4M Tokens für ein Mini-Thema)

  1. Soll-Band ist Pflicht, nicht Deko — ohne Ziel ≈ √Kandidaten bestätigt der Konsens jeden Mikro-Punkt mit 2 Blog-Belegen; alles danach skaliert mit (korpus.soll_konsens: Band + 2. Faltungs-Pass).
  2. Websuche braucht Deckel UND Relevanz-Urteil — 36 Queries × 8 Treffer luden 195 Quellen inkl. App-Werbelisten (128 Atome!). Jetzt: QUELLEN_MAX=24, Wikipedia zuerst, Kurz-Judge filtert Listen/Shops (suche._relevanz_filter).
  3. Extraktion belegnah, nicht flächendeckend — ganze Quellen × 2 Reader ergab 1135 Atome ohne Soll-Bezug. Jetzt: nur ±4k-Fenster um Soll-Belege; Quellen ohne Beleg liefern keine Atome (korpus.gate).
  4. Vollständigkeit braucht einen Gegenspieler: Verdichtung — Ziel ist das minimale Abdeckungs-Set („Entfernen eines Atoms erzeugt eine Lücke"). Sammeln allein produziert Splitter (582 Atome, 51k-Wörter-Guide). Jetzt: Verdichtungs-Knoten je Soll-Punkt (Panel-Schnitt, Fusion vererbt Anker — Abdeckung bleibt), Granularitäts-Regel im Extraktor, Beleg-Abdeckung als Kennzahl. Writer-Input als Prosa statt Feldern (TITEL:-Leak, 41 Sections).
  5. Befunde brauchen Identität über Runden — llm_pruefung fügte denselben Befund jede Runde als neue Zeile ein; die Eskalations-Kette (geklaert-Flag) startete endlos von vorn. Jetzt: Dedupe über (art, item, detail-Kern), finale Zustände (freispruch/eskaliert) blocken Wiedereintrag UND Live-Checks (guide.befund_merken). Und: Beifang-Atome ohne Soll-Bezug werden nach der Zuordnung verworfen — sonst 90 Ballast-Atome → 8 Sammelziele → 32 Bausteine.
  6. Verweis heißt Prosa, nicht Link — „Verweis statt Wiederholung" mit Anker-Links erzeugte Sprung-Zwang und Link-Flut (Gutachten: Leser will linear lesen). Jetzt: Rückbezug = Halbsatz ohne Link; det-Checks link_im_text/atom_echo/h_ebene erzwingen es; Fettzeilen-Echo (Atom-Input wörtlich + Paraphrase) war die Haupt-Dopplungsquelle.
  7. Abdeckung heißt Beleg-Stellen, nicht Punkte — ein Atom je Soll-Punkt genügte formal, ließ aber Facetten aus (Namensherkunft fehlte trotz 7 Belegen). Jetzt: Facetten-Gate — jede Beleg-Stelle braucht ein Atom im ±4k-Umkreis, sonst gezielte Fenster-Nachextraktion (Cap 2, dann eskaliert). Wikipedia läuft über die Action-API statt robots-blockierter HTML-Seiten.
  8. Redundanz braucht Phrasen- und Zahlen-Kanäle — Satz-Jaccard 0,6 übersah identische Phrasen in längeren Sätzen („Ich melde mich in 20 Minuten" 3×) und dieselbe Studie in Paraphrase (a20≈a78). Jetzt: 5-Wort-Shingle-Kanal (redundanz.py), Zahlen+Eigennamen-Signatur als Dedup-Kanal (dedup.py), Urteil „enthalten" merged Teilmengen-Atome, Ziel-Dedup fängt synonyme Lernziele („einordnen"/„verorten" → Doppel-Bausteine → Writer-Echos).
  9. Kuratierte Quelle = 1 Beleg genügt — das ≥2-Belege-Band schützte vor Blog-Halluzination, warf aber Einzelquellen-Facetten weg (Overflow- Pomodoros nur in Wikipedia). Jetzt: Wikipedia-Beleg bestätigt allein (SOLL_MIN_BELEGE_WIKI); Wikipedia wird geseedet statt ersucht und läuft MIT durch den Relevanz-Judge („Pasta"/„Xinjiang" wurden geladen).
  10. Takt statt Breite — die Parallel-Drossel (12 gleichzeitig) begrenzte das Falsche: Rate-Limits zählen Starts pro Minute, nicht offene Verbindungen (0×429 in 5k Calls). Jetzt: 1 Call-Start je TAKT_SEKUNDEN (llm._slot), Knoten-Klassen bündeln kurze Aufgaben (lang=1, mittel=3, kurz=10 Tasks je Call, engine._buendel_claimen + Ergebnis.teil_status).
  11. Bündel-Item-Retry statt Verwerfen — fehlt ein Item in einer Bündel-Antwort, geht NUR sein Task auf „neu" (versuch+1, dann sichtbar „fehler"); Skills erzwingen je Item einen Block (OK/LEER/NICHTS als explizites Nichts). Dedup: fehlende Paar-Urteile → EIN Nach-Call, danach parse-Befund statt stiller „verwandt"-Kante. Stille None-Pfade (kapitel_intro, lernziele, bausteine, anker_fix, luecke) sind jetzt Raise → Task-Retry. Stille Fehler sind NIE erlaubt.
  12. robots.txt raus für privates Lesen — der höfliche Bot-Check kostete AlpineJS 10/21 Quellen inkl. offizieller Doku; ein Browser fragt auch nicht. Privat, ~20 Seiten/Lauf, Domain-Bremse bleibt; Browser-UA (laden.py), Wikipedia weiter über die Action-API.
  13. Inhalt beurteilen, nicht Titel — der Titel-Judge behielt Udemy-Kurse („klingt lehrend") und konnte Paywalls nicht sehen. Jetzt: viele Quellen laden, DANN ein Kurz-Urteil auf dem echten Text (quellen-urteil, status=aussortiert). Einfacher UND treffsicherer.
  14. Vollständigkeit stoppt hart — sie ist DAS Kernziel; ohne sie ist der Rest wertlos. Läufe pausieren mit sprechendem Grund statt Mini-Guide: kein Wikipedia geladen, < QUELLEN_MIN nützliche Quellen, > 50 % Atome als Beifang verworfen (korpus.gate/inventar.gate, LaufPause).
  15. Messlatte darf nicht aus dem eigenen Korpus schrumpfen — „100 % Abdeckung" maß nur das bestätigte Soll; die ≥2-Quellen-Regel hatte es vorher auf 6 Punkte geschrumpft (34 echte Facetten verworfen). Regel raus: 1 wörtlicher Beleg bestätigt (Zitat-Gate schützt), Dedup/ Verdichtung/Prüfungen fangen Überschuss hinten ab.
  16. Struktur-Splitter deterministisch verhindern — das MIN-Band stand nur im Prompt; 30/32 Sections hatten <4 Atome, ein Ziel wurde zu 8 „Teil"-Sections. Jetzt erzwingt _min_erzwingen das Band, der Ziel-Dedup vergleicht Inhaltswort-Kerne (Floskeln raus — Ganz-Satz-Jaccard kam nie über 0.36), der Redundanz-Vorfilter hat einen Zahlen+Namen-Kanal (Ariga 3×, Wort-Jaccard 0.21), wortgleiche Paare sind nie „didaktisch gewollt", und ein Lektorat-Knoten liest einmal den GANZEN Guide.
  17. Sonderregeln sind Schulden — 5-Agenten-Audit fand 40+ Spezialfälle: Wikipedia übersprang das Inhalts-Urteil (lud „Kosovo" ungeprüft), Deutsch steckte in Stemmer/Regexes/Floskel-Listen/Output-Literalen, Knoten-Namen klebten in config/engine, vier Leere-Marker-Erfindungen, Fakes hingen an Prompt-Prosa. Jetzt: JEDE Quelle wird beurteilt (Seed = nur Deckel-Umgehung); Sprache = config.SPRACHE (Stemmer, Negationen, Locale, TEXTE); pipeline.yaml ist die einzige Wahrheit für Skills/Timeouts/ Runden-Caps; backend/arten.py bündelt Status-Listen; EIN Leere-Marker (LEER), EIN Nichts-Wert (KEINER), skills/README.md ist der Vertrag. Boilerplate wird gemessen (Ziel-Floskeln), nicht gelistet.