2026-08-05
Warum das Protokoll so geschnitten ist
Jedes Feld in HISCORE ist eine Entscheidung, und vier davon waren zuerst falsch. Hier steht die Begründung für die Form, samt dem, was wir zurückgenommen haben. Die Definition selbst steht woanders.
Künstlich erzeugt
Kennzeichnung nach Artikel 50 der KI-Verordnung (EU) 2024/1689.
Text. Gebändigt von eurem ergebenen Geschmacksmeister und KI-Drachenreiter Jamji Jamaramji.
McGrinsey Living Intelligence SystemsLI: Lebendige Intelligenz aller Art. McGrinsey integriert herkömmliche Intelligenz und neuartige Intelligenz zu lebendigen Intelligenzsystemen. Diese symbiotischen Systeme aus maschineller und menschlicher Intelligenz arbeiten gemeinsam an der Bereitstellung hochwertigster Erkenntnisdestillate für alle Intelligenzen.
Von KI und Menschen gemacht, mit Liebe.
Dieser Text ist nicht die Definition. Die steht auf der Standardseite, mit jedem Feld, seinem Reifegrad und einer Chronik, und in hiscore.txt, also dasselbe für eine Maschine geschrieben, ohne ein Wort Begründung.
Hier steht die Begründung. Warum das Ding so aussieht, welche Entscheidungen erzwungen waren, und welche vier wir öffentlich zurücknehmen mussten.
Drei Felder, weil am vierten die Protokolle sterben
game, player, score. Alles andere ist optional.
Das ist kein Minimalismus als Geschmacksfrage. Es ist der einzige Hebel, der die Verbreitung zuverlässig entscheidet. Die Geschichte der Protokolle sagt jedes Mal dasselbe: die Kosten der ersten korrekten Umsetzung schlagen Vollständigkeit, Eleganz und Gremien zusammen. RSS hat Atom genau daran geschlagen. WS-* war vollständiger als alles, was es ersetzt hat, und ist verschwunden.
Der Test für jedes vorgeschlagene Feld war deshalb: funktioniert ein Spiel, das es weglässt, trotzdem? Wenn ja, ist es optional. Wenn nein, kommt es nicht rein.
Die optionalen Felder sind alle ein einziger Gedanke
Es gibt genau einen Grund für die optionalen Felder: zwei Zahlen, die nicht vergleichbar sind, dürfen nicht in derselben Spalte landen.
modeist Inhalt. Welt 2, schwer, als Magier gespielt.rulesist eine Einschränkung, die die Wertung ändert. Ohne Gegenstände, Turnierregeln.unitunddirsagen, was die Zahl ist und welches Ende gewinnt. Eine Zeit ist kein Punktestand, und bei einer Zeit ist der kleinere Wert besser.
Zusammen mit game bilden sie den Vergleichsschlüssel: game + mode + rules + unit + dir. Zwei Werte werden genau dann gegeneinander gewertet, wenn alle fünf übereinstimmen. Dieser Satz fehlte bis Fassung 1.0, und ein Gegenleser hat zu Recht danach gefragt. Fünf Felder beeinflussen die Vergleichbarkeit, zurück kommt ein einziger Platz, also muss die Regel dastehen, sonst rät jeder Umsetzer anders.
Die vier, die wir falsch hatten
Lohnt auch für jemanden, der das nie einbaut, weil es die Fehler sind, zu denen diese Bauform einlädt.
Wir haben behauptet, ein Name lasse sich reservieren. Der Entwurf versprach, zwanzig Leute könnten RONAN heißen, unterschieden durch den Nachnamen. Der Code sperrte den Namen, sobald der erste RONAN ihn beanspruchte, es konnte also genau einen geben, und der Nachname war Deko. Das Geheimnis wählt jetzt aus, welche Identität du bist, statt den Namen zu sperren. Gäste unter demselben Namen funktionieren weiter, was von Anfang an so hätte sein müssen.
Wir haben unterschriebene Werte unfälschbar genannt. Sind sie nicht. Eine Ed25519-Unterschrift beweist, dass ein Wert vom Server des Spiels kam. Über die Zahl sagt sie nichts: ein Server, der unterschreibt was ein Browser ihm reicht, unterschreibt bereitwillig auch eine Lüge. Die Beschriftung beschreibt den Weg, nicht die Wahrheit, und sagt das jetzt auch.
Wir haben gesagt, Wartezeit lasse sich nicht parallelisieren. Doch. Ein Angreifer öffnet zehntausend Sitzungen und wartet in allen gleichzeitig. Die engere Aussage hält und reicht: du kannst eine Sitzung nicht schneller altern lassen als die Uhr.
Wir haben unterschriebene Werte nach Absenderadresse gebremst. Die kommen aber vom Server des Spiels, also teilen sich alle Spieler eine Adresse. Ein Spiel mit dreißig gleichzeitigen Leuten wäre bei einundzwanzig Werten je Minute gestorben. Unterschriebener Verkehr wird jetzt je Spiel gebremst.
Keinen dieser vier haben wir selbst gefunden. Sie kamen von Gegenlesern, und das ist das Argument dafür, eine Spezifikation zu veröffentlichen, bevor sie fertig ist, statt danach.
Die Sichtbarkeit absichern, nicht das Schreiben
Ein Endpunkt, der von jedem unter jedem Namen Schreibzugriffe annimmt, ist genau das, woran Trackback gestorben ist. Die übliche Lösung, ein Konto, hat die Kosten verkehrt herum: eine echte Hürde für den ehrlichen Entwickler, gar keine für einen Spammer mit Skript.
Also sitzt die Schranke woanders. Anmelden ist umsonst und sofort. Gesehen zu werden kostet etwas.
- Der Nachweis ist eine Seite, die du ohnehin hast. Ein einmaliges Token muss unter einer Adresse auftauchen, die dein Spiel wirklich ausliefert. Ein Spammer muss je erfundenem Spiel etwas Echtes veröffentlichen. Du musstest ohnehin.
- Deine eigene Liste lebt in der Sekunde der Freischaltung. Verlink sie, teste sie, häng sie in dein Spiel.
- Die öffentliche Übersicht nicht. Ein Spiel kommt dorthin, wenn drei verschiedene Leute einen Wert geschickt haben. Bis dahin trägt es
noindex, eine Kennung zu holen bringt also exakt null Aufmerksamkeit.
Spam will gesehen werden. Ein ehrlicher Entwickler will, dass es läuft. Das lässt sich trennen, also haben wir es getrennt, und die Schranke sitzt auf dem, worauf es niemand Ehrlicher eilig hat.
Zwei Stufen, weil die Hälfte der Spiele kein Geheimnis halten kann
Ein Spiel, das nur aus Dateien besteht, hochgeladen bei itch.io oder auf GitHub Pages, hat keine Laufzeit, in der ein privater Schlüssel wohnen könnte. Alles, was der Browser weiß, weiß ein Fälscher. Dort gibt es keine Authentifizierung und kann keine geben.
Ein Spiel mit Server kann mehr. Also gibt es zwei Stufen, und der Agent, der einbaut, entscheidet welche er liefern kann, indem er das Projekt liest. Der Mensch kopiert weiterhin eine Zeile.
Diese Entscheidung gehört dem Agenten aus einem praktischen Grund: ein Entwickler, den man „offen oder unterschrieben?" fragt, wählt falsch, weil die Antwort vom Auslieferungsziel abhängt und nicht von einer Vorliebe.
Die Herkunftsstufe setzen wir, nie der Absender
Jeder Wert trägt mit, wie er hereinkam: submitted, signed, measured, imported, verified. Der Server entscheidet, immer.
Ein Absender, der seinen eigenen Wert als geprüft beschriften kann, hat keine Vertrauensstufe, sondern ein Textfeld. Das ist der ganze Grund, warum das Feld auf unserer Seite der Linie liegt.
Und die Beschriftung ist die ehrliche Hälfte eines Problems, das niemand gelöst hat. Werte aus dem Browser sind fälschbar. Wir bremsen, wir markieren unmögliche Läufe und absurde Zahlen, und wir können einen Schwall in Minuten zurücknehmen, mit Protokoll darüber was passiert ist. Das ist Milderung, und es stärker zu nennen wäre die erste Lüge in einem System, dessen einzige Währung das Nichtlügen ist.
Was offen ist
replay steht im Feldverzeichnis und existiert nicht. Eine anklickbare Aufzeichnung neben einem Rekord wäre der Moment, in dem eine Bestenliste aufhört, eine Tabelle zu sein. Ein Format zu erfinden, bevor es jemand braucht, ist aber der sichere Weg zu einem Format, das niemand benutzt.
Es gibt keine Föderation. Wenn ein zweiter Sammler auftaucht, beschreibt hier nichts, wie sich die beiden abgleichen. Schick an beide, sie sind billig.
Und Namen sind keine Identitäten im starken Sinn. Ein Geheimnis wählt aus, welche Identität du bist; verlierst du es, nimmst du einen neuen Nachnamen. Ein Konto macht das wiederherstellbar, und ein Konto ist zum Spielen und Melden nie nötig.
Wenn du ein Spiel hast, ist nichts davon dein Problem: kopier hiscore.txt in deinen Coding-Agenten, das kostet dich fünf Sekunden. Diese Seite ist für die, die vorher wissen wollen, warum es so geschnitten ist, bevor sie darauf bauen. Das ist ein vernünftiger Wunsch.
Übernimm es, gabel es ab, oder bau etwas Besseres. Der Punkt ist, dass es einen Standard gibt.