ADR-0010: Turnierergebnisse dürfen vom eigenen Handy kommen¶
- Status: accepted
- Datum: 2026-09-01
- Betrifft: Turniere, Wertung, Messung
- Bezug: schreibt
0009-schnelles-turnier-wertet-pro-matchfort und ändert die Auswertung von Issue #7; ersetzt kein ADR
Kontext¶
Ein Turnierergebnis kann heute nur das freigeschaltete Gerät an der Platte
eintragen. docs/turnier-vor-ort.md nennt dafür einen Grund über Cookies: die
Kiosk-Freigabe gilt nur unter /kiosk, also kann eine Seite außerhalb davon
nicht wissen, dass sie am Tisch steht, und statt die Freigabe zu verbreitern
liegt die Eingabe dort, wo das Cookie ohnehin hinkommt.
Das beschreibt den Mechanismus richtig, ist aber die Folge einer früheren Entscheidung und nicht ihr Grund. Der Grund, der trägt, steht daneben: bei 28 Spielen wäre eine Bestätigung pro Match der halbe Abend. Kiosk-Eingaben zählen sofort, und deshalb liegt die Turniereingabe auf dem Pfad, der sofort wertet.
Diese Rechnung übersieht eine dritte Möglichkeit. Die Bestätigungen verschwinden nicht, wenn ein Spieler selbst einträgt — sie verteilen sich auf die Leute, die gerade gespielt haben, statt sich an einem Laptop zu stauen. Bei acht Spielern bestätigt jeder sieben Ergebnisse über einen Nachmittag, nicht 28 hintereinander.
Drei Beobachtungen, die den Anlass ausmachen:
Ein Turnier setzt heute einen Laptop voraus. Vier Leute mit Handys um eine Platte können keins spielen, obwohl der Spielplan auf jedem dieser Handys lesbar ist. Die einzige Sache, die man auf der Seite nicht tun kann, die einem sagt, gegen wen man als Nächstes spielt, ist zu sagen, wie es ausging.
Und die Voraussetzung ist strenger, als sie aussieht. Ohne
SP_KIOSK_TOKEN werden die /kiosk-Routen gar nicht erst gemountet — der
Kiosk existiert dann nicht, statt unfreigeschaltet zu existieren. Auf jedem
Deployment ohne diese Variable ließ sich ein Turnier also anlegen und lesen,
aber nie spielen. Nicht „unbequem ohne Laptop", sondern funktionslos.
Dieser Punkt kam aus PR #123, der dieselbe Änderung parallel vorgeschlagen
hat.
Die halb gebaute Variante existiert schon und führt in die Irre.
tournamentIDFrom liest ein tournament_id aus dem Formular, und der
Kommentar behauptet, das Feld sei "optional auf jedem Eingabepfad". Es wird
ausschließlich in internal/server/kiosk.go aufgerufen; POST /matches liest
es nie. Ein Spieler kann also gegen seinen Turniergegner spielen und eintragen
— das Ergebnis zählt für TTR und Rangliste und taucht in der Turniertabelle
nie auf. Von den drei möglichen Verhalten ist das das schlechteste, weil es
wie ein Fehler aussieht statt wie eine Absage.
Die Messung hängt an einem Nebeneffekt. Jede Turnierzeile trägt heute
entered_via = 'kiosk' und fällt damit aus task office:dod heraus. Das ist
gewollt — 28 Matches an einem Abend würden die Hürde aus Issue #7 dreifach
reißen und nichts zeigen —, aber es ist als Ausschluss nirgends formuliert. Er
gilt, weil das Formular an einer bestimmten Adresse liegt.
Entscheidung¶
Ein Spieler darf sein eigenes Turnierergebnis vom eigenen Gerät eintragen; der Gegner bestätigt es wie bei jedem anderen Match. Der Kiosk bleibt, was er ist, und bleibt der schnellere Weg.
Konkret:
POST /matcheswertettournament_idaus. Beide Spieler müssen im Feld des Turniers stehen — dieselbe Prüfung, diehandleTournamentRecordschon macht, denn ohne sie bucht der Endpunkt beliebige zwei Leute in fremde Turniere.- Der Modus kommt aus dem Turnier, nicht aus dem Formular. Das gilt am Kiosk bereits und gilt hier aus demselben Grund.
entered_viableibt'player'. Die Spalte sagt, wer getippt hat, und das bleibt wahr.- Die Turniertabelle zeigt ein eingetragenes, noch unbestätigtes Match als
wartend an. Sie kann das bereits —
TournamentRepository.Matchesliefert bewusst jeden Status —, aber "0 von 6 gewertet" darf dann nicht mehr die einzige Zahl auf der Seite sein. scripts/definition-of-done.sqlschließt Turniermatches übertournament_id is not nullaus, nicht mehr überentered_via. Das ist Teil dieser Entscheidung, kein Folgeticket.
Konsequenzen¶
Der Ausschluss aus der Messung wird ehrlich. Heute fallen Turnierspiele
heraus, weil das Formular an einer Adresse liegt, die entered_via = 'kiosk'
schreibt. Danach fallen sie heraus, weil sie zu einem Turnier gehören — was
der tatsächliche Grund ist. docs/turnier-vor-ort.md sagt schon heute, dass
ein Turnierabend nicht diese Messung ist; nach dieser Änderung steht das auch
in der Abfrage.
Ohne diese Änderung an der Abfrage ist die Entscheidung schädlich. Acht
Spieler, die ihre Ergebnisse selbst eintragen, produzieren 28 Zeilen mit
entered_via = 'player' an einem Tag. Die Definition of Done aus #7 wäre
bestanden und hätte nichts gezeigt: ein Spielplan ist genau die Erinnerung,
die die Messung ausschließen will. Die beiden Teile gehören deshalb in
dieselbe Änderung.
Die Reihenfolgeabhängigkeit aus ADR-0009 wird größer. Dort wurde akzeptiert, dass Turniermatches einzeln und sofort werten und das Ergebnis damit von der Eingabereihenfolge abhängt — bei einstelligen TTR-Verschiebungen über einen Nachmittag vertretbar. Mit Bestätigungen fällt die Wertung nicht mehr mit dem Spiel zusammen, sondern mit der Bestätigung, und die kann eine Stunde später kommen. Der Effekt bleibt derselbe Größenordnung, aber der Abstand zwischen "gespielt" und "gerechnet" wächst. Das ist der Preis, und er ist nicht null.
Ein Turnier kann jetzt halb sofort und halb wartend sein. Wer am Kiosk einträgt, wertet sofort; wer vom Handy einträgt, wartet. Dieselbe Tabelle zeigt beides. Das ist erklärbar, aber es ist ein Zustand mehr als heute, und die Seite muss ihn benennen statt ihn zu verschweigen.
Die Asymmetrie aus #90 bleibt bestehen. Am Kiosk kann weiterhin jeder sein eigenes Ergebnis ohne Bestätigung eintragen. Diese Entscheidung macht das nicht besser und nicht schlimmer; sie stellt nur daneben einen Weg, der bestätigt wird.
Drei Punkte, die die Umsetzung mitentschieden hat. Keiner davon braucht ein eigenes ADR, aber sie sollen nicht ungeschrieben bleiben:
- Ein bestrittenes Match (
disputed) steht im Spielplan als bestritten, nicht als wartet auf Bestätigung. Es zählt für nichts und wird das ohne eine Korrektur auch nicht — eine Bestätigung anzukündigen, die nicht kommt, wäre ein Versprechen. - Schließen bleibt jederzeit möglich, auch mit unbestätigten Ergebnissen. An der Wertung hängt nichts (ADR-0009), und ein Turnier, dessen letztes Match nie bestätigt wird, darf nicht ewig offen bleiben. Die betroffenen Ergebnisse bleiben ausstehend und können danach noch bestätigt werden.
- Nur die eigenen Paarungen. Wer eingeloggt ist, sieht ein Eingabefeld an den Spielen, in denen er selbst steht, und an keinem anderen. Für andere einzutragen ist das, wofür das Gerät an der Platte da ist: dort steht jemand daneben, und genau das ist bei einem Handy quer durch den Raum nicht prüfbar.
Der irreführende Kommentar an tournamentIDFrom — "optional auf jedem
Eingabepfad" für ein Feld, das nur ein Pfad las — ist damit nachträglich wahr
geworden und entsprechend korrigiert.
Verworfene Alternativen¶
Beim Kiosk bleiben. Das Billigste, und es hält die Messung ohne Änderung sauber. Verworfen, weil es die Voraussetzung Laptop festschreibt und die halb verdrahtete Stelle stehen lässt, die heute schon dazu führt, dass ein Turnierspiel als Feierabendspiel in der Rangliste landet, ohne dass jemand das wollte. Ein Weg, der nur deshalb nicht benutzt wird, weil er unfertig ist, ist kein Weg, den man verworfen hat.
Spieler-Eingabe ohne Bestätigung, wie am Kiosk. Wäre schneller und bräuchte keine Zustände in der Tabelle. Verworfen, weil es aus #90 — jeder kann sein eigenes Ergebnis ohne Gegenprüfung werten lassen — von einem bekannten Loch am Kiosk ein Merkmal der ganzen Anwendung machen würde. Der Kiosk kann sich das leisten, weil jemand danebensteht.
Spieler-Eingabe nur, wenn kein Kiosk freigeschaltet ist. Klingt nach dem Besten aus beidem. Verworfen, weil dann dieselbe Seite je nach einem Zustand, den der Betrachter nicht sehen kann, etwas anderes tut. Ein Formular, das manchmal da ist, ist schlechter als eins, das nie da ist.
Die Kiosk-Freigabe auf die ganze Anwendung ausweiten, damit
/tournaments/<id> sie sehen kann. Verworfen, weil Path=/kiosk die eine
Eigenschaft ist, die den Kiosk eingrenzbar macht: ein Gerät, das freigeschaltet
wurde, kann heute nur unter einer Adresse für andere handeln. ADR-0008 hängt
daran.