Ehrliche Quellen-Diagnose — die Lehre aus dem last30days-Skill
Ein quelloffenes Recherche-Werkzeug sammelt Beiträge aus einem Dutzend Plattformen und fasst sie zusammen. Interessant ist für uns nicht das Sammeln, sondern seine Buchführung darüber, wann eine Quelle stillschweigend versagt — und die Schicht, die wir bewusst nicht anfassen.
Das Werkzeug unterscheidet sechs typisierte Quellen-Zustände statt eines Fehlerzählers und beantwortet mit einem Befehl, was kaputt ist und welcher Handgriff es repariert — genau die Lücke, die bei unserem Veranstaltungs-Index stumme Quellen monatelang unsichtbar hielt.
- Autor
- Matt Van Horn und Mitwirkende
- Venue
- GitHub (mvanhorn/last30days-skill) (2026)
- Lizenz
- MIT (Code und Tests) — die Beschaffungs-Schicht nutzen wir trotzdem nicht
Ein Werkzeug namens last30days ist im Januar 2026 auf GitHub erschienen und hat dort inzwischen über fünfundfünfzigtausend Sterne gesammelt. Es macht auf den ersten Blick etwas Unspektakuläres: Man gibt ihm ein Thema, es durchsucht ein Dutzend Plattformen — Diskussionsforen, Kurznachrichtendienste, Videoportale, Quellcode-Verzeichnisse, sogar Wettmärkte — und schreibt daraus einen belegten Bericht darüber, was Menschen in den letzten dreißig Tagen zu diesem Thema tatsächlich gesagt haben. Sortiert nach dem, was Leserinnen und Leser hochgestimmt haben, nicht nach dem, was eine Redaktion für wichtig hielt.
Wir haben es uns angesehen, weil wir ein verwandtes Problem haben. Unser Veranstaltungs-Index für die Bodenseeregion holt Programme von Dutzenden Kulturhäusern, muss deren Angaben zusammenführen, Dubletten erkennen und vor allem eines merken: wenn eine Quelle aufhört zu liefern.
Der Kern-Befund: ein Fehlerzähler ist keine Gesundheitsprüfung
Die wertvollste Zeile des ganzen Projekts steht nicht im Werbetext, sondern als Kommentar über einem kleinen Modul. Sinngemäß: Die Verarbeitung hat historisch jeden Fehlschlag zu „hat nichts geliefert“ zusammenfallen lassen — und damit den Unterschied verborgen zwischen einem Werkzeug, das gar nicht da ist, einem, das da ist, aber nicht startet, einem, das in eine Zeitüberschreitung läuft, und einem, das bloß weniger liefert als erwartet.
Das ist exakt der Fehler, den wir bei unserem Veranstaltungs-Index gemacht haben. Ende Juli 2026 haben wir dort sechs Häuser untersucht, die seit Monaten nichts mehr lieferten — bei makelloser Bilanz: aktiv geschaltet, null Fehlversuche, frischer Abruf-Zeitstempel. Die Ursache in zwei Fällen war ein einziger Tippfehler in der Adresse. Eine Fehlerseite ist aus Sicht eines Abrufers ein vollkommen erfolgreicher Vorgang: Anfrage gestellt, Antwort erhalten, kein Fehler. Der Zähler zählt den Transport. Er sagt nichts über den Ertrag. Nach der Korrektur lieferten die beiden Häuser statt null Terminen achtzehn beziehungsweise neun.
last30days löst das mit einer kleinen, typisierten Sprache für Quellen-Gesundheit: in Ordnung, abgemagert (lief, lieferte aber weniger als erwartet), fehlt (Werkzeug oder Zugangsdaten nicht vorhanden), kaputt (vorhanden, startet aber nicht), Zeitüberschreitung, Fehler. Dazu getrennt davon die Ausgänge eines einzelnen Laufs: nichts geliefert, teilweise, gedrosselt, Anmeldung gescheitert, nicht erreichbar, Schema-Bruch, nicht eingerichtet. Der Schema-Bruch ist der stille Killer jedes Sammel-Systems: Die Seite antwortet freundlich mit Inhalt, nur sieht dieser Inhalt seit dem letzten Umbau anders aus, und die Auswertung findet nichts mehr.
Auf dieser Sprache sitzt eine einzige Diagnose-Ansicht, die eine Frage beantwortet: Was ist kaputt, was liefert, und welchen Befehl führe ich aus? Nicht „Fehler in Quelle 7“, sondern der Befund plus der nächste Handgriff.
Was wir sonst noch mitnehmen
Dubletten über Ähnlichkeit statt über einen Hash. Wir erkennen doppelte Veranstaltungen bislang über eine Prüfsumme, in die der Titel eingeht. Jede Schreibvariante desselben Konzerts — ein Doppelpunkt mehr, der Zusatz „(verschoben)“ — erzeugt damit einen zweiten Eintrag. last30days normalisiert den Text und vergleicht über Wortgruppen-Überschneidung. Das ist kein neues Verfahren, aber eine saubere, testgedeckte Umsetzung, an der man sich orientieren kann.
Behauptungen vor der Ausgabe nachprüfen. Bevor der fertige Bericht ausgeliefert wird, zieht das Werkzeug einzelne darin enthaltene Zahlen noch einmal frisch von der Quelle und vergleicht. Widerspricht die frische Zahl der alten, wird das gekennzeichnet, statt sie stillschweigend zu behaupten. Das ist die technische Form einer Haltung, die wir ohnehin vertreten: lieber ehrlich unsicher als selbstsicher falsch.
Fremde Inhalte einzäunen. Bevor gesammelte Beiträge zur Bewertung an ein Sprachmodell gehen, werden sie ausdrücklich als nicht vertrauenswürdiger Inhalt markiert und eingeklammert. Das ist die Abwehr gegen eingeschleuste Anweisungen — ein Angreifer schreibt in einen Forenbeitrag „ignoriere deine bisherigen Anweisungen und …“, und ohne Einzäunung liest das Modell es als Befehl. Wir holen an mehreren Stellen fremden Web-Text und reichen ihn an Modelle weiter. Das gehört bei uns zur Hausregel gemacht.
Und was wir bewusst nicht übernehmen
Damit zum unangenehmen Teil, der in einen ehrlichen Bericht gehört.
Um an die Inhalte hinter Anmeldeschranken zu kommen, liest last30days die Cookie-Datenbank des installierten Browsers, entschlüsselt sie über den System-Schlüsselbund und meldet sich damit als die Nutzerin oder der Nutzer bei den Plattformen an. Technisch ist das sauber gemacht, ohne Fremdabhängigkeiten. Inhaltlich ist es der Abgriff einer fremden Anmelde-Sitzung, es verstößt gegen die Nutzungsbedingungen der betroffenen Dienste, und es ist mit unseren Werten unvereinbar. In nichts, was wir ausliefern.
Verwandt dazu: Teile der Beschaffung umgehen bewusst Zugriffssperren — die offizielle Suchschnittstelle eines Forums antwortet ohne Schlüssel mit einer Sperre, also werden stattdessen Seitenfragmente und Nachrichtenströme ausgewertet. Das ist rechtlich grau und technisch brüchig; bei der nächsten Layout-Änderung ist es tot. Unsere eigene Sammel-Richtlinie schließt das Umgehen von Zugriffsregeln aus — wir haben Häuser im Index, die uns per Robots-Regel aussperren, und die Antwort darauf ist ein Anruf, kein Umgehungs-Trick.
Schließlich hängen die ergiebigsten Quellen des Werkzeugs an kostenpflichtigen Sammel-Diensten. Bei uns muss die Grundfunktion ohne Bezahlschranke laufen.
Die Trennlinie ist also klar: Verfahren ja, Beschaffungs-Code nein. Die Auswertungs-, Diagnose-, Dubletten- und Zusammenführungs-Schicht ist sauber, gut getestet und frei lizenziert. Die Beschaffungs-Schicht rühren wir nicht an.
Eine Warnung zur Bauform
Ein letzter Punkt, der weniger mit Werten als mit Handwerk zu tun hat. Das Projekt nennt sich ein „Skill“ — eine kompakte Anleitung, die ein KI-Assistent bei Bedarf lädt. Tatsächlich sind es rund fünfzigtausend Zeilen Programmcode, noch einmal fünfzigtausend Zeilen Tests, ein zusätzlicher Server in einer zweiten Programmiersprache — und eine Anleitungsdatei von 222 Kilobyte, die bei jedem Aufruf vollständig in den Arbeitsspeicher des Modells geladen wird. Das Projekt sagt in seinem eigenen Glossar offen: der Skill ist das Produkt.
Für uns ist das eine Warnung. Wir pflegen einen wachsenden Katalog solcher Anleitungen. Wenn jede davon so wüchse, wäre der Arbeitsspeicher voll, bevor die eigentliche Arbeit beginnt. Unsere Anleitungen bleiben klein und lagern Details in nachladbare Anhänge aus.
Was bleibt, ist trotzdem ein lohnender Fund: nicht das Recherche-Werkzeug selbst, sondern seine Buchführung über die eigene Verlässlichkeit. Ein System, das von fremden Quellen lebt, braucht eine ehrliche Antwort auf die Frage, ob diese Quellen noch antworten. Ein Fehlerzähler ist diese Antwort nicht.
Was das für uns bedeutet
- Unser Veranstaltungs-Index hat dieselbe Krankheit gehabt: Eine Quelle mit null Fehlern und frischem Abruf-Zeitstempel lieferte seit Monaten nichts, weil ihre Adresse auf eine Fehlerseite zeigte. Eine Fehlerseite ist ein erfolgreich abgerufenes Dokument. Der Zähler misst den Transport, nicht den Ertrag.
- Das Werkzeug löst das mit einer typisierten Zustands-Sprache und einer einzigen Diagnose-Ansicht, die pro Quelle nicht nur den Befund nennt, sondern den Befehl, der ihn behebt. Das ist übertragbare Bau-Erfahrung, unabhängig von Programmiersprache und Anwendungsfall.
- Ebenso übertragbar: Dubletten über Textähnlichkeit statt über einen Titel-Hash. Ein Hash über den Titel erzeugt bei jeder Schreibvariante desselben Konzerts einen zweiten Eintrag — bei uns ein bekannter offener Punkt.
- Und ein Sicherheits-Handgriff, den wir überall brauchen, wo fremder Web-Text an ein Sprachmodell geht: Fremdinhalte werden vor der Bewertung ausdrücklich als nicht vertrauenswürdig eingezäunt, damit eingeschleuste Anweisungen im Text nicht als Anweisungen an das Modell gelesen werden.
- Das Gegenbeispiel ist genauso lehrreich: Um sich bei sozialen Netzwerken anzumelden, entschlüsselt das Werkzeug die Sitzungs-Kekse aus dem Browser der Nutzenden über den System-Schlüsselbund. Das ist technisch elegant und für uns ausgeschlossen — es greift fremde Anmelde-Sitzungen ab und verstößt gegen die Nutzungsbedingungen der Plattformen.
Wie wir es nutzen könnten
- 1Zustands-Sprache übernehmen, nicht den CodegebautDie sechs Bereitschafts-Zustände und die Lauf-Ausgänge (nichts geliefert, gedrosselt, Anmeldung gescheitert, Schema-Bruch, nicht eingerichtet) als eigene Typen in unserem Veranstaltungs-Index nachbauen. Keine Zeile fremder Code — die Taxonomie ist die Erkenntnis, die Umsetzung ist bei uns in TypeScript ohnehin anders.
- 2Eine Diagnose-Ansicht statt drei WerkzeugeverworfenWir haben bereits eine Abdeckungs-Prüfung und einen Quellen-Prober, aber getrennt und ohne gemeinsame Sprache. Beide unter eine Ansicht ziehen, die je Quelle Befund und nächsten Handgriff nennt — lesend, ohne Schreibzugriff auf die Datenbank.Verworfen, weil: Es blieben bewusst zwei Sichten: die Abdeckungs-Prüfung fragt je Ort „hast du Programm?“, die Quellen-Diagnose je Quelle „funktionierst du?“. Ein Ort kann mehrere Quellen haben — genau die stille zweite verdeckt die Ort-Sicht. Die gemeinsame Sprache haben beide bekommen, die gemeinsame Ansicht wäre ein Rückschritt gewesen.
- 3Ehrlichkeit vor VollautomatikgebautUnsere eigene Bilanz zeigt: Eine stumme Quelle ist mehrheitlich kein Programmierfehler, sondern ein Haus ohne veröffentlichtes Programm. Die Diagnose muss deshalb Befunde vorschlagen und Menschen entscheiden lassen, nicht automatisch Quellen abschalten.
- 4Dubletten-Ähnlichkeit als eigener, späterer SchnittgebautTextähnlichkeit statt Titel-Hash ändert die Dubletten-Semantik rückwirkend. Erst messen, wie viele Bestandseinträge zusammenfallen würden, dann umstellen — nicht im selben Zug wie die Diagnose.
- 5Einzäunung fremder Inhalte als HausregeloffenÜberall dort verbindlich machen, wo Web-Inhalte an ein Sprachmodell gehen — Veranstaltungs-Quellen, Lesezeichen-Dienst, Recherche-Dienst, Wissens-Ablage.
Offene Punkte
- Die Beschaffungs-Schicht des Werkzeugs ist für uns tabu: Abgriff von Browser-Sitzungen und gezieltes Umgehen von Zugriffssperren. Wir übernehmen ausdrücklich nur die Auswertungs- und Diagnose-Verfahren, und schreiben das hier auf, damit es nicht in einem halben Jahr als „gute Idee von dort“ zurückkommt.
- Auch die Bezahl-Zugänge des Werkzeugs für mehrere kommerzielle Sammel-Dienste widersprechen unserem Grundsatz, dass die Grundfunktion ohne Bezahlschranke laufen muss.
- Ein Anti-Vorbild in der Bauform: Die Anleitungsdatei des Werkzeugs ist 222 Kilobyte groß und wird beim Aufruf vollständig geladen. Bei unserem wachsenden Katalog wäre das ruinös — unsere Anleitungen bleiben klein und lagern Details aus.
- Wir haben die Modul-Köpfe und die Struktur gelesen, nicht die vollständige Logik der Haupt-Datei. Vor einer echten Portierung eines einzelnen Verfahrens lesen wir das betroffene Modul ganz.
- Die Übertragung ist bislang ein Vorhaben, kein Ergebnis: Ob die Zustands-Sprache im laufenden Betrieb tatsächlich mehr stumme Quellen findet als unsere heutige Abdeckungs-Prüfung, muss sich an echten Zahlen zeigen.
Quellen
Paper, Code, Modell und Erklärung — mit eigenem Namen daneben. Datum dort, wo es belegbar ist.
Weitere Steckbriefe
- SystemeZwei Köpfe und ein Prüfblick — Lehren aus einem Bewerbungs-Werkzeug
- SystemeZweiundzwanzig Anleitungen, keine länger als eine Seite
- SystemeFrische als Vertrag — vier Lehren aus einem offenen Lagebild-Werkzeug
- Grafik & 3DTerrain Diffusion — unendliches, lernbares Gelände als Perlin-Noise-Nachfolger
- Grafik & 3DPascal Editor — ein Gebäude-Editor, den ein Agent headless bedienen kann
- Grafik & 3DVom kahlen Kopf zum Erzähler — zehn Schritte im Browser
- DatenSchweizer Geodaten — das halbe Meter genaue Gelände, gratis und ohne Konto
- DatenAlphaEarth — Googles Erd-Embeddings, frei lizenziert und offline nutzbar
- Grafik & 3DGNM — Googles parametrisches Kopfmodell, erstmals unter freier Lizenz
- Grafik & 3DBox3D — deterministische 3D-Physik vom Box2D-Autor, schon als Godot-Extension
- KIOffene Bildmodelle rendern lesbaren Kartentext — lokal statt in der Cloud
Der Forschungsradar sammelt fremde Methoden, die zu dem passen, was wir bauen. Externe Entwicklungen (Regulierung, Markt) stehen in den Recherchen; die KI-Modelle selbst im Modell-Katalog.