Atalaia

Diese Seite wurde von einem KI-Modell übersetzt und noch nicht geprüft. Spielst du auf Deutsch? Hilf uns beim Prüfen: docs/translations im GitHub-Repository.

Roadmap

Sechs Phasen, jede mit einem echten Feldtest als Abschluss: ihrem Gate. Die Software ist der Hardware voraus: Die Phasen 1 bis 3 sind in Software fertig (echte Boards spielen auf dem Labortisch ganze Spiele, und die iOS-App hat ihre Checkliste auf einem iPhone bestanden); die Phasen 4 und 5 sind in Software gebaut. Die Gates warten auf gebaute Boxen, Feldtests, einen echten Server und den Registry-Schlüssel des Projekts.

Wie die Teile miteinander sprechen: die Architekturdiagramme →

  1. Fertig

    0 · Grundlagen

    Gemeinsamer Kern, Lua-Sandbox, Skirmesh-RF-Codec und Browser-Simulator. Gate erreicht.

    Was fertig ist

    • Gemeinsamer Kern, die Spiellogik, die jede Plattform ausführt.
    • Lua-Sandbox, in der die Skripte der Spielmodi laufen.
    • Skirmesh-RF-Codec, das Format der Funknachrichten.
    • Browser-Simulator, der Domination und Bombe spielt.

    Gate: Der Simulator spielt Domination und Bombe aus Lua-Skripten. Erreicht.

  2. Software fertig

    1 · Eine Box

    Firmware der Field Box und ein Bauhandbuch; auf dem Labortisch spielt ein echtes Board ganze Spiele, inzwischen mit Display, Tastenfeld und Tastern an losen Kabeln (Foto und Clip auf der Bauseite). Es fehlt noch eine zusammengebaute Box.

    Was fertig ist

    • ESP32-Firmware der Field Box mit Presets auf dem Gerät, lauffähig in einem Emulator.
    • Der kleine Bildschirm der Box zeigt Haltebalken, Punkte und Haltezeit, in vier Sprachen.
    • Ein Bauhandbuch mit Schaltplänen.
    • Das erste Board (Heltec V4.3, 20. Oktober 2026) auf dem Labortisch: Es startet, schaltet den Funk ein, liest seine Knöpfe und spielt ganze Spiele, Bombe eingeschlossen (scharf machen, entschärfen, ablaufende Zeit), auf seinem kleinen Bildschirm.
    • Die Spielzeit-Leiste: Läuft ein Spiel mit Zeitlimit, zeigt ein Streifen am unteren Rand des kleinen Displays, wie viel davon übrig ist, und das OLED zeigt eine Uhr. In Software, noch nicht an einem echten Display gesehen.
    • Das Setup, das ein Szenario an die Boxen schickt, wird erneut gesendet, bis jede Box es bestätigt, und die Box sendet diese Bestätigung jetzt. Nur in Software und Host-Tests, nicht auf einem echten Board.
    • Feld wechseln im Admin-Menü der Box verschiebt eine angemeldete Box über ihren Code auf ein anderes Feld. Nur Host-Tests, nicht auf einem echten Board.
    • Kein Logo des Feldes mehr auf der Box: Sie zeigt den Atalaia-Turm als Startbild, eine Datei, die Bauende beim Bauen ersetzen können (Release-Images tragen immer den Turm, und der Release-Build prüft das). Der Logo-Download war es, der der Box auf dem Labortisch den Speicher ausgehen ließ. Eine Box, die ein altes Logo behalten hat, entfernt es beim ersten Start (Host-Tests).
    • Eine größere Partitionstabelle: die beiden Firmware-Slots der Box sind je 4 MB groß (das Image füllte 93 % von 2 MB), Einstellungen und Schlüssel bleiben, wo sie waren. Nur in Host-Tests und Builds, auf keinem Board geflasht. Eine Box mit der alten Tabelle braucht einmal ein Flashen per USB; danach gehen Over-the-Air-Updates wie bisher.
    • Die Field Box als iBeacon: Vom Beitritt bis zum Spielende sendet eine Box ein Bluetooth-Beacon (alle 500 ms, nie während ihr WLAN in Gebrauch ist), sodass ein Handy in ihrer Nähe Spielende auf einer Etage oder in einem Raum verorten kann. Die Kennung des Feldes wird aus seinem Beitrittsschlüssel abgeleitet, und die Spielleitung kann die Boxen als Beacons abschalten, je Feld oder je Box. Der interne Speicher der Box wurde überarbeitet, nachdem er auf dem Labortisch beim Beitritt zu einem Spiel ausging (das WLAN scheiterte, dann folgte ein Watchdog-Reset): Auf dem Labortisch gemessen sind beim Start 241 KB frei und im Spiel mit eingeschaltetem Beacon mindestens 102 KB, und die CI lässt den Build scheitern, wenn das Budget zu stark schrumpft. Noch nicht geprüft, ob ein Handy das Beacon einer echten Box hört.
    • Nach der Ablehnung oder dem Scheitern eines Updates oder eines Modus-Abrufs kehrt der Bildschirm der Box nach 8 Sekunden zum Bildschirm des Zustands zurück (auf dem Labortisch blieb eine Ablehnung stehen, bis jemand hinsah). Nur Host-Tests.
    • Die Befehle der seriellen Konsole, die einer Box den Beitrittsschlüssel geben oder ein Update starten (@joinkey, @update), verlangen in einem Release-Build die Admin-PIN und lehnen ab, solange keine gesetzt ist; ein Bench-Build lässt sie für die Bench-Skripte offen. Nur Host-Tests, nicht auf einem echten Board.
    • Der erste Labortisch-Aufbau der Field Box (31. Oktober 2026): ein Heltec-V4-Board mit dem 2,8-Zoll-TFT, dem OLED, einem 4×3-Tastenfeld und Team-Tastern, an losen Kabeln und ohne Gehäuse, spielt Domination mit dem Controller vom Labortisch. Es gibt ein Foto und einen Clip.
    • Der große Bildschirm entspricht jetzt dem kleinen: Haltebalken, die ab der Eroberung hochzählende Haltezeit und die Punkte jedes Teams in einer Ecke, in Domination, Master und Satelliten (Titel MASTER / SATELLIT; der Master zeigt die Team-Summe), Progressive Domination und VIP / Payload. Auf dem Labortisch bei Domination gesehen (Clip auf der Bauseite); die anderen drei Modi nur in Referenzbildern der Firmware und in Tests.
    • Der große Bildschirm zeigt beim Start einen Startbildschirm mit dem Turm und der Firmware-Version wie der kleine, statt bis zum ersten Spielbildschirm leer zu bleiben. Host-Tests und ein Referenzbild, bisher nicht auf mehr als dem ersten Labortisch-Board geprüft.
    • Ein wackeliger I2C-Bus startet eine Box nicht mehr neu: Tastenfeld, kleiner Bildschirm, NFC-Leser und Akku-Messchip nutzen den neueren ESP-IDF-Treiber mit Zeitlimits, Bus-Reset und einem Backoff, der ein ausfallendes Teil beiseitelegt; ein defektes Tastenfeld liest sich als keine Taste, und das Spiel läuft weiter. Ein Neustart meldet jetzt seinen wirklichen Grund (Spannung, Unterspannung, Software, Absturz, Watchdog) statt immer "Spannung", und die Spielleitungs-Konsole sagt "Eine Box ist abgestürzt und neu gestartet". Auf dem Labortisch gefunden: Ein Tastenfeld mit schlechten Lötstellen startete ein Board in drei Minuten sechsmal neu. Nur Host-Tests; der Labortisch-Test der Korrektur steht aus.
    • Ein Bildschirmtext, der nicht passt, wird beim Prüfen eines Modus abgelehnt, und ein Text, der sich nicht zeichnen lässt, zeigt "?" statt leer zu bleiben (ein langer Text in vier Sprachen wurde auf einer Box bisher kommentarlos leer). Tests auf einem Computer.
    • Eine Anzahl von eins steht im Singular ("1 Punkt", nicht "1 Punkte") auf den Bildschirmen der Box, in der App, in der Spielleitungs-Konsole und auf den Personalseiten. Tests in Software.

    Als Nächstes, und worauf es wartet

    • Eine gebaute Box, die ein zweistündiges Club-Spiel ohne Neustart durchhält.
    • Die Zeitleiste an einem echten Display sehen.
    • Das erneute Senden des Setups und Feld wechseln auf einem echten Board ausprobieren.
    • Das Beacon einer Field Box mit einem echten Handy hören und das WLAN beim Spielbeitritt mit dem neuen Speicherbudget starten.
    • Die neue Partitionstabelle auf einem echten Board flashen (einmal per USB, ohne Löschen, bei einer Box mit der alten).
    • Ein gehärtetes Release-Image (Flash-Verschlüsselung, Secure Boot): nur als Plan aufgeschrieben, nichts gebaut und auf keinem Board ausprobiert.
    • Die I2C-Fehlerbehandlung auf einem Board mit schlecht angeschlossenem Tastenfeld ausprobieren, dazu den Startbildschirm und die neuen Bildschirme auf mehr als dem ersten Labortisch-Board.

    Gate: Eine Box läuft ein zweistündiges Club-Spiel ohne Neustart. Offen, bis eine gebaute Box das schafft.

  3. Software fertig

    2 · Feldnetzwerk

    Skirmesh-RF über LoRa, Feld-Controller, API, GM-Konsole und ein Modus-Paket, in Software getestet; auf dem Labortisch spielen echte Boards ganze Spiele mit dem Controller über Funk, und was der Labortisch gezeigt hat, ist in Software behoben. Es warten 5 gebaute Boxen auf einem Feld.

    Was fertig ist

    • Das verschlüsselte Funkprotokoll Skirmesh-RF und das USB-Funkmodem.
    • Der Feld-Controller mit seiner API.
    • Die Konsole der Orga, mit Anzeigetafel.
    • Der Beitritt zu einem Spiel per NFC-Karte oder QR-Code.
    • Die Firmware der Boxen im Gespräch mit dem Controller.
    • Ein Modus-Paket: Hold-All Domination (Punkte nur, solange man alle Boxen hält), Last Stand (ein Countdown bis zur Niederlage, solange man nur eine von dreien hält), Codes pro Team zum Scharfmachen bei Bombe und der Codes-Modifikator (Codes am Tastenfeld, die Punkte, Hinweise oder Freischaltungen bringen, wobei die Spielleitung erfährt, wer sie benutzt hat).
    • Alles im Simulator, im Emulator und auf einem Computer getestet, ganze Spiele inklusive; auf dem Labortisch spielen echte Boards ganze Spiele mit dem Controller über Funk: Einladungen, Eroberungen, Koppeln per Code, Updates per Funk, ein fehlender Modus nachgeladen.
    • Die Boxen hören vor dem Senden: Eine Box prüft, ob der Kanal frei ist, bevor sie sendet, damit weniger Nachrichten kollidieren. Im Simulator empfängt ein Feld mit 20 Boxen 89 % der Updates statt 65 %.
    • Die Spielleitung kann auch bei Domination den Besitzer einer Box setzen oder freigeben, wie in den anderen Modi.
    • Der Controller kann seine eigenen Funkframes einzeln und mit Abstand senden. Gebaut, und aus, bis der Feldtest entscheidet.
    • Der Pi-Controller lässt ein Firmware-Update sofort scheitern, wenn das Funkmodul das Angebot ablehnt.
    • Eine eingerichtete Box kann zurück in die WLAN-Einrichtung, über einen Menüeintrag hinter der Admin-PIN oder einen Befehl an der USB-Konsole. Die Einrichtungsseite gibt es auf Englisch, Portugiesisch, Deutsch und Traditionellem Chinesisch, und Handys öffnen sie von selbst.
    • Der Tab Spiel der Konsole zeigt einen QR-Code der Anzeigetafel für Spielende.
    • Szenarien können auf Deutsch und Traditionell Chinesisch sein, die Namen ihrer Ziele eingeschlossen.
    • Sabotage, ein neuer Modus: Bombe in Runden, bis die Spielzeit abläuft. Die Angreifenden machen scharf, die Verteidigenden entschärfen; eine Explosion ist ein Punkt für die Angreifenden, eine Entschärfung ein Punkt für die Verteidigenden, dann ruht die Box und die nächste Runde beginnt. Das Team mit mehr Punkten gewinnt, bei Gleichstand gibt es ein Unentschieden. Im Simulator und in Tests und unter den Voreinstellungen der Field Box; noch nicht auf einem echten Board.
    • Der kleine Bildschirm des USB-Funkmodems spricht Portugiesisch, Englisch, Deutsch und Traditionelles Chinesisch, wie der der Box. Nur Host-Tests, nicht auf einem echten Board.
    • Die Formulare der GM-Konsole behalten, was die Spielleitung getippt hat, bis es gespeichert ist: Ein Check-in oder die Uhr der Konsole setzt die gespeicherten Werte nicht mehr zurück.
    • Ein Wechsel des Feldkanals lässt die freien Boxen nicht mehr zurück: Der Controller sagt ihnen, wohin er gegangen ist (eine neue versiegelte Funknachricht, MOVE, dreimal auf dem alten Kanal gesendet), und Boxen suchen kann die letzten vier Kanäle nach Boxen absuchen, die sie verpasst haben. Auf dem Labortisch gefunden, wo ein Funkscan den Kanal verschob und eine untätige Box nichts mehr hörte. In beiden Controllern, im Simulator und im Code der Box gebaut; die Prüfung auf zwei Boards steht noch aus.
    • Ein Start, eine Pause oder ein Fortsetzen erreicht die Boxen in etwa einer Sekunde, nicht in bis zu 30: Der Controller wiederholt den Zustand als TIME-Nachricht 1, 2,5, 5 und 10 Sekunden später (auf dem Labortisch erfuhr eine Box 21 Sekunden zu spät von einem Start). Die Prüfung auf zwei Boards steht noch aus. Im Sendezeitmodell kosten die Wiederholungen, MOVE und ein Absuchen den Controller in einer typischen Stunde im Standard-Teilband etwa 2 Sekunden Sendezeit.
    • Die GM-Konsole sagt, was ein Kanalwechsel mit den freien Boxen macht (wie viele der drei MOVE gesendet sind, dann dass der Controller umgezogen ist), und die Einstellungen haben eine Schaltfläche Boxen suchen, die das Ergebnis eines Absuchens zeigt. Ein Absuchen ist je Stunde begrenzt in Teilbändern unter 10 % Tastverhältnis (5 % des Budgets des Teilbands), und die Konsole sagt es, wenn sie ablehnt und wann das nächste möglich ist. In Software, in beiden Controllern.
    • Der projizierte Punktestand folgt einer Eroberung: Zwischen zwei STATE-Nachrichten einer Box zählt der Controller weiter für das Team, das ein Eroberungsereignis nannte, bis zum nächsten STATE der Box. Auf dem Labortisch scheiterte die Projektion, wenn gleich nach einer Eroberung ein STATE verloren ging; mit dieser Änderung bestand dieselbe Einstellung auf dem Labortisch, und eine Box-Strafe wurde dort ebenfalls geprüft.
    • Das Spielende einer Box beendet das Spiel: In einem Modus ohne Feldlogik auf dem Controller (das Zeitlimit von Sabotage, Bombe) beendet das erste game.end einer Box des Spiels es, mit dem Sieger der Box oder als Unentschieden. In Bombe / Rush beendet eine Explosion jetzt das Spiel, und das Team, das die Bombe scharf gemacht hat, gewinnt; eine Entschärfung nicht. Auf dem Labortisch mit Sabotage gefunden, und die Explosion der Bombe wurde dort ebenfalls geprüft.
    • Ein aufgezeichneter Funkbefehl lässt sich nicht mehr später wieder einspielen: jeder Empfänger (die Box, das USB-Modem und beide Controller) führt ein Replay-Fenster pro Sender, und eine Box lehnt Start, Pause, Fortsetzen, Ende oder TIME ab, wenn sie älter sind als der zuletzt angewendete. Eine Box, die ihren Epochenspeicher verloren hat, würfelt eine neue Epoche aus, statt Nonces wiederzuverwenden. Auf der Funkstrecke ändert sich nichts: ältere Boxen funktionieren weiter, bleiben aber bis zum Update angreifbar. Im Simulator und auf einem Computer getestet, mit gemeinsamen Vektoren in C, Python und Dart; auf echten Boards wurde noch kein Funk-Replay ausprobiert.
    • Ein zweiter Verlust des Epochenspeichers kann keine niedrigere Epoche mehr ziehen: Eine Box, der Pi und der Handy-Controller merken sich die höchste Epoche, die sie je benutzt haben, getrennt vom Eintrag pro Schlüssel, und die Ziehung beginnt darüber; ein Controller, der in einem Spiel schon gesendet hat, wird nie wieder unter seiner alten Node-ID eingeladen (er bekommt eine neue); und ein WLAN-Prop bekommt jetzt die CMD-Nachricht, die die Epoche eines Controllers nennt, und reicht sie an seinen Pod weiter (in beiden Controllern). RFC 0001, Änderung 25. Im Simulator und auf einem Computer getestet; nicht auf echten Boards ausprobiert.
    • Die Härtung der Feld-Controller aus dem Sicherheits-Review: Größenlimits für Anfragen, GM- und Spieler-Token über reines HTTP abgelehnt, wenn HTTPS an ist (die Konsole öffnet sich unter https://<Controller>:8443/console/), das MQTT des Feldes über TLS (Port 8883; das einfache 1883 nur auf dem Loopback des Pi), TLS für den Personal-ATAK-Feed, HSTS, eine gehärtete Dienst-Unit auf dem Pi und ein Widerruf signierter Modi, der geschlossen ausfällt (eine fehlende oder unlesbare Liste installiert nichts; ein Controller ohne Netz nutzt die letzte Liste 30 Tage lang). Auf einem Computer getestet, nicht auf einem echten Pi oder Handy auf einem Feld.
    • Eine Box, die ihren Epochenspeicher verloren hat und deshalb mit einer zufälligen hohen Epoche zurückkam, wird wiedergefunden: Ein Empfänger, der ein HELLO oder TIME nicht öffnen kann, durchsucht den Rest des Epochenbereichs (ein Abschnitt pro Suche, im bestehenden Budget), und ein Controller, der so eine Box hört, nennt den anderen ihre Epoche in einer neuen CMD-Nachricht, die eine Epoche nur erhöhen kann. Ein fortgesetztes Spiel ohne Eintrag startet ebenfalls mit einer zufälligen Controller-Epoche, damit sich keine Nonce wiederholt. Ältere Boxen ignorieren die neue Nachricht. Im Simulator und auf einem Computer getestet; nicht auf echten Boards ausprobiert.
    • Das rand() eines Modus wird aus dem Schlüssel des Spiels sowie aus Spiel-Seed und Node-ID gesetzt; was die API Spielenden zeigt, verrät es also nicht mehr (die Codes des Hacking-Terminals, die Teams der Zielfenster), und der Spiel-Seed wird Spielenden und der Anzeigetafel nicht mehr gezeigt. Dasselbe Spiel läuft identisch ab, aber ein vor dieser Änderung aufgezeichnetes Spiel ergibt andere Zufallswerte: Boxen nicht mitten im Spiel aktualisieren. Gemeinsame Testvektoren in C, Python und Dart; nicht auf Boards ausprobiert.
    • Die Lua-Sandbox hat die Lücken geschlossen, die eine Prüfung mit einem Speicherprüfer fand: Die Tabellenfunktionen, Coroutinen und lange Ketten von Callbacks werden gemessen, die C-Stacktiefe ist für den ESP32 begrenzt, und eine Node-ID oder ein Timer außerhalb des Bereichs läuft nicht mehr über. Die Stack-Werte sind berechnet, noch nicht auf einem Board gemessen.
    • Der Antennengewinn ist eine Build-Option (--antenna-dbi, 0 bis 20 dBi, standardmäßig 2): Eine Box mit stärkerer Antenne senkt ihre leitungsgebundene Leistung um diesen Gewinn, abgerundet, damit die abgestrahlte Leistung im Limit des Teilbands bleibt. Nur Host-Tests.
    • Der Zugangscode des Live-Streams steht nicht mehr in der Webadresse: Die Konsole schickt ihn in einem Header, die App in einem Authorization-Header, und die Logs der Controller und des Site-Servers schwärzen Code-Werte in Adressen (die alte Adresse funktioniert noch für eine Übergangszeit). Ein Feld, dessen Logs weitergegeben wurden, sollte seine GM- und Lese-Codes ändern.
    • Team-Ergebnisse ohne Spieler-IDs werden auch auf beiden Controllern 365 Tage aufbewahrt (der Spielverlauf 90 Tage); die Spielleitung kann sie nur lesen. Auf einem Computer getestet.
    • Eine einzige Anleitung zum Einrichten des Funkmodems, von den Teilen bis zu einer Box, die einem Spiel beitritt: fertige Version oder selbst bauen, Flashen unter Windows, Linux und macOS, der Port, die Prüfungen und eine Fehlertabelle (Set up the radio modem, Englisch). Auf dem Labortisch ausprobiert, mit dem Controller in Docker unter WSL2; nicht auf einem Raspberry Pi oder macOS und nicht auf einem Feld.
    • Ein Controller, der seinen Epochen-Speicher verloren hat, zieht die neue Epoche aus der unteren Hälfte des Platzes über seiner Untergrenze, mit einem Abstand (einem größeren, wenn seine Epochen-Datei fehlt); so können wiederholte Verluste, vierzehn und mehr hintereinander, den Bereich nicht aufbrauchen. Es begann als wackeliger Test und war ein Produktfehler. Tests auf einem Computer; die Ziehung der Field Box selbst folgt noch.

    Als Nächstes, und worauf es wartet

    • Die Funk-Boards und 5 gebaute Boxen für den Feldtest.
    • Ein Feldtest mit 20 Boxen, mit und ohne Hören vor dem Senden.
    • Ob das Takten des Controllers an geht, entschieden nach dem Feldtest mit 20 Boxen.
    • Auf zwei Boards prüfen, dass ein Kanalwechsel eine untätige Box behält und ein Start sie in etwa einer Sekunde erreicht (das Runbook ist geschrieben).
    • Das Replay-Fenster und die gehärteten Controller auf echten Boards und einem echten Pi ausprobieren (ein aufgezeichneter Befehl, auf dem Prüfstand wieder eingespielt).
    • Den Epochenspeicher einer Box auf zwei Labor-Boards löschen und prüfen, dass sie wiedergefunden wird, zweimal hintereinander und mit einem wieder aufgenommenen früheren Leiter-Controller (das Runbook ist geschrieben).

    Gate: 5 Boxen auf einem CQB-Gelände und einem Outdoor-Feld, keine verlorene Einnahme. Offen.

  4. Software fertig

    3 · Android und Spielende

    Android-Props, der I/O-Pod, die Spieler-App und die Modi, die Handys brauchen: in Software fertig, iOS eingeschlossen (auf einem iPhone geprüft). Der Feldtest wartet auf echte Handys und Pods.

    Was fertig ist

    • Die App für Spielende, Marshals und die Spielleitung, auf Portugiesisch und Englisch, für Android und iOS (die iOS-Version hat ihre Checkliste auf einem iPhone bestanden).
    • Ein Android-Handy arbeitet als Box, mit jedem Modus und den eigenen Bildschirmen des Modus, und tritt einem Spiel per QR-Code, NFC-Karte oder Text bei.
    • Das Handy als Feld-Controller, in Software fertig und wartend auf ein echtes Handy: Es führt das Spiel und die Dienste des Felds allein aus.
    • Der I/O-Pod: Firmware, die einem Handy die Knöpfe, das Tastenfeld, die Lichter, die Sirene, den NFC-Leser und den LoRa-Funk eines Heltec-Boards leiht.
    • Modi mit Handys und Tags: Kill Confirmed, Respawn und Leben, Check-in, das Medic-Kit und Money Factory.
    Alles übrige, was fertig ist, nach Thema

    Modi und Bildschirme

    • Kill Confirmed, Respawn und Leben und Check-in lesen signierte NFC-Tags der Spielenden.
    • Das Medic-Kit: Wer getroffen wurde, scannt den eigenen Tag und hält einen Knopf, um geheilt zu werden, mit einer begrenzten Zahl an Heilungen.
    • Money Factory: Fabriken machen Geld, solange ein Team sie hält; wer spielt, sammelt es mit dem eigenen Tag ein und zahlt es an einer anderen Box ein, und der Controller merkt sich, was jede Person trägt.
    • Modus-Bildschirme in YAML beschrieben, von Field Box und App gleich gezeichnet.

    Spielende und Marshals

    • Spielende checken am Feld ein, indem sie einen gedruckten Aushang scannen (kein Konto, kein Internet), geben an, welche Repliken sie nutzen, und sehen, ob sie den Chrono bestanden haben.
    • Chrono beim Check-in: Energie, Limits pro Klasse, Stichproben, Messwerte von Marshal signiert. Marshals arbeiten die Liste „Repliken zum Chronen“ ab, und ihre signierten Messwerte markieren jede Replik als bestanden oder abgelehnt; sie haben auch das Replik-Register und die Tags der Spielenden.
    • Spielende können während eines Spiels ihre Position teilen, und der Controller entscheidet, wer sie sieht.
    • Ein Feld oder Club mit eigenem Controller kann sein Logo, Hintergrundbild und seine Farbe in der App, auf der Anzeigetafel und auf dem Aushang zeigen und seinen Teams Namen und Wappen geben.
    • Die Konsole der Orga meldet, wenn sich der Check-in-Aushang nach dem Druck geändert hat.
    • Die Marshal- und Chrono-Bildschirme sagen, was die App wirklich tut, und die Limitlisten sind übersetzt.
    • Die App hält mehr ihrer Geheimnisse mit dem Android Keystore versiegelt: den Schlüssel des Site-Servers, die Geheimnisse der Spieler und die Anmeldung am Site-Server.
    • Die NFC-Tags der Spielenden werden vom Feld-Controller signiert und von der Konsole der Orga, dem Handy-Controller oder der Marshal-App geschrieben. Marshals halten dafür den Feldschlüssel nicht mehr.
    • Replik-Labels: Die App zeigt, teilt oder druckt den QR-Aufkleber jeder Replik, und die Konsole druckt sie für alle, die eingecheckt sind. Die Warteschlange der Marshals scannt sie.
    • Positionen in Gebäuden: Die Spielleitung setzt BLE-Beacons auf den Plan, und ein Handy, das eines hört, meldet seinen Raum statt GPS. Unter Android in Software und mit Attrappen, nicht mit echten Beacons ausprobiert. Auf einem iPhone leistet ein Plugin über Apples CoreLocation dasselbe, solange die App im Vordergrund ist (sonst GPS und die letzte Etage); es ist gebaut und kompiliert in der CI, und auf einem iPhone ist es nicht ausprobiert.
    • Die App folgt einem Spiel über den QR-Code der Anzeigetafel, auch wenn der Handy-Controller HTTPS mit seiner eigenen Feld-CA anbietet. In Software, nicht an einem echten Handy ausprobiert.
    • Spielende sagen, auf welcher Ebene sie sind, und sehen den Feldplan mit den Positionen, die sie sehen dürfen.
    • Spielverlauf in der App: die Spiele, an denen jemand teilgenommen hat, das neueste zuerst.
    • Anmeldung mit Google, Microsoft, Apple oder einem Passkey in der App, mit einem Kontobildschirm. Android und, in Swift, auch iOS (der Browser der Social-Anmeldung als ASWebAuthenticationSession, Passkeys über Apples Plattform-Zugangsdaten; Passkeys unter iOS sind beim Bauen optional zuzuschalten und brauchen das kostenpflichtige Apple-Programm). Der iOS-Teil wird in der CI kompiliert und ist auf einem iPhone nicht ausgeführt worden; die Anmeldung der App ist auf einem echten Handy nicht ausprobiert (die Seite des Site-Servers wurde mit Google und Microsoft ausprobiert, siehe Phase 4).
    • Der Feldplan des Spielers kann das Raster des Feldes und die eigene Zelle des Spielers zeigen.
    • Schiedsrichter können beim Registrieren einen NFC-Sticker an eine Replik binden.
    • Das Handy eines Marshals behält den Beitrittsschlüssel des Feldes nicht mehr: nur ein Prop (seine Beitrittskarte) und der Handy-Controller tun das, und ein Update löscht ihn vom Handy eines Marshals.
    • Scoreboard-Links, die die eigene CA des Feldes festlegen, werden pro Feld gemerkt und vergessen, wenn sich die CA ändert.
    • Solange ein laufendes Spiel in der Spielendenansicht offen ist, hält ein Android-Vordergrunddienst mit einer Benachrichtigung die App am Laufen, damit das Vibrieren auch bei geschlossener App oder ausgeschaltetem Bildschirm kommt. Nicht auf iOS. Nicht auf einem echten Handy probiert.
    • Die Field Boxen zählen als Beacons: Eine platzierte Box registriert sich als Beacon neben denen der Spielleitung, und ein Handy, das schon teilt, übernimmt Änderungen am Verzeichnis während des Spiels. In Software, nicht mit einem Handy und einer echten Box ausprobiert.
    • Die Datenschutzerklärung in der App: eine Aufforderung Lesen und bestätigen, wenn dem Konto zuletzt eine andere Version gezeigt wurde, die Erklärung in der Sprache der App, nichts wird blockiert. Die App kann ein Konto anlegen (mit Passwort oder per Social Login), nachdem sie den Hinweis gezeigt hat, mit dem Feld „Ich bin 16 oder älter“; Jüngere checken am Spielfeld ohne Konto ein. Eine Registrierung per Social Login trägt die Version der Erklärung, die die Person sah, und eine Anmeldung funktioniert weiter mit einem älteren selbst betriebenen Server. Der Chrono-Link zwischen den Feldern eines gehosteten Hubs (ein Einmalcode) erscheint nur im gehosteten Modus. In Software.
    • Die Kartenprüfung beim Check-in: Prüft das Feld die Mitgliedschaft, bleibt ein Check-in offen, bis eine Marshal-Person oder die GM mit der echten Karte in der Hand „Karte gesehen, stimmt“ ankreuzt; die Mitgliedsnummer wird dann auf dem Controller gelöscht (Ergebnis und Ablaufdatum bleiben), und ohne Karte lässt sich jemand trotzdem durchwinken, mit Begründung im Protokoll und nie mit der Nummer. In der Konsole, in der Marshal-Warteschlange der App und in beiden Controllern. Nur Software.
    • Das Teilen der Position ist beim Check-in eine eigene, nicht vorangekreuzte Wahl (in der App und beim Handeintrag der Konsole), mit der Angabe, wer sie sieht; Ablehnen verhindert weder den Check-in noch das Spiel, und jede Person kann sie jederzeit ein- oder ausschalten. Ohne sie lehnt der Controller die Positionen ab. Nur Software.
    • Das Sicherheits-Review der App: Eine angeheftete Feld-CA ist genau ein Zertifikat, kein App-weites unverschlüsseltes HTTP auf Android (nur Loopback, der Host des Emulators, 192.168.4.1 und atalaia.local), eine Release-APK, die nie aus Versehen mit dem Debug-Schlüssel signiert wird, und ein Ticket der Social-Anmeldung, das an die App-Instanz gebunden ist. Auf einem echten Handy nicht ausprobiert; den Signaturschlüssel für Releases muss der Maintainer noch erzeugen.
    • Die Ereignisliste und der Spielverlauf der Spielenden lassen Routine-Ereignisse ohne Text für Spielende weg (eine Box, die ihr Setup bestätigt, Nodes online oder offline, Tag-Scans, Treffer auf Ziele), statt rohe Typnamen zu zeigen.

    Android-Props und I/O-Pod

    • Ein Android-Prop nimmt am Spiel des Controllers über das WLAN des Felds teil, oder über seinen Funk mit einem I/O-Pod.
    • Die Firmware des Pods leiht dem Handy per USB oder Bluetooth die Team-Knöpfe, das Tastenfeld, die Lichter, die Sirene, den NFC-Leser, den Gehäuseschalter und den LoRa-Funk eines Heltec-Boards.
    • Die App verbindet sich mit einem verlorenen I/O-Pod von selbst wieder. Nicht mit einem echten Pod ausprobiert.
    • Android-Props holen signierte Modus-Pakete von ihrem Controller, wie die Boxen. In Software.
    • Die GM-Konsole kann die Einstellungen eines I/O-Pods per Funk schicken: die Farben der vier Knöpfe, die Helligkeit des LED-Rings, die Lautstärke und ob der Gehäuseschalter meldet. Der Pod prüft den Befehl wie jeden anderen, speichert die Einstellungen in seinem Flash und antwortet; der Controller sendet ihn erneut, bis er eine Antwort hört. Vorher wurden sie beim Bauen der Firmware festgelegt. In Software und gegen den Code des Pods auf einem Computer, nicht mit einem echten Pod probiert.
    • Die Strafe einer Box eines Android-Props erreicht den Controller jetzt, über die WLAN-Verbindung und die Funkverbindung. In Software.

    Das Handy als Feld-Controller

    • Die Spiel-Engine, mit field.lua eines Modus auf dem gemeinsamen Kern, einem MQTT-Broker und einem Positionsfilter; die REST-API, der Live-Stream und die MQTT-Topics; Spiele über einen Neustart hinweg; Beitritts-Payloads.
    • Android-Props in seinem WLAN, ein I/O-Pod als sein Funk, der Check-in am Feld mit Spieler-Tokens, die Liste „Repliken zum Chronen“ und die Positionen der Spielenden. Geprüft mit denselben Vertragsfällen wie der Pi-Controller und ausgeführt mit dem Code von Pod und Field Box auf einem Computer.
    • Sein Bildschirm: die Rolle auf dem Startbildschirm der App, auch bei ausgeschaltetem Bildschirm weiterlaufend, die GM-Konsole aus der App ausgeliefert und HTTPS mit einer Feld-CA, die auf dem Handy erzeugt wird.
    • Der Feldplan (ein Plan pro Ebene, seine Kartenposition, Kartenobjekte mit der Feldgrenze, das aus einer Karte geladene Feld, sodass die Warnung beim Verlassen der Grenze dort auch funktioniert) und der Funkkanal, mit der Suche nach einem ruhigen Kanal über den I/O-Pod.
    • Die Boxen über Funk: versiegelte Einladungen ins nächste Spiel; das Spielende, den Boxen mitgeteilt, auch wenn das Handy ohne den Spielschlüssel neu gestartet wurde; neue Boxen, aufgenommen über den Code, den sie zeigen, oder über eine Feldkarte, die das Handy per NFC schreibt; Firmware-Updates zwischen den Spielen, über den I/O-Pod oder das USB-Funkmodem des Pi, und das Handy sagt, warum, wenn sein Funk sie nicht tragen kann.
    • Presets, Modus-Uploads und signierte Modus-Pakete, an Boxen geschickt, denen sie fehlen; auf dem Handy kompilierte Szenarien; Rollenpakete in einem Spiel; Teamnamen und Wappen.
    • Auch alles Übrige, was der Pi kann: Failover (ein Handy und ein Pi können gegenseitig ihre Reserve sein), der Sync mit dem Site-Server (Spiele, Logs und Punkte gehen raus, wenn Internet da ist; Anmeldelisten, Branding und Szenario-Bibliothek kommen von dort), die Remote-Spielleitung und der ATAK-Feed.
    • Die Konsole der Orga passt auf ein Handy: Check-in- und Marshal-Tabellen stapeln sich, ohne seitliches Scrollen.
    • Der eigene Bildschirm des Handy-Controllers importiert eine Anmeldeliste (eine CSV- oder JSON-Datei, gewählt mit der Dateiauswahl von Android), ganz ohne GM-Konsole.
    • Ein Bereitschafts-Controller übernimmt die Beacon-Einstellungen der Boxen (den Feldschalter, die abgeschalteten Boxen, die Räume) und die Plätze der Boxen aus seinem Beitritt, sodass Handys nach einem Failover dasselbe Beacon-Verzeichnis bekommen; eine Konsole, die auf dem Bereitschafts-Controller schon offen ist, verschiebt die Marker der Boxen sofort, ohne Neuladen. In Software, in beiden Controllern; die Verschiebung der Marker ist in einem Headless-Browser getestet.
    • Der Handy-Controller zieht mit der Sicherheitsprüfung des Pi-Controllers gleich: Der Widerruf signierter Modi schlägt sicher fehl (mit einer Untergrenze je Modus und einer Altersgrenze für ein Handy ohne Netz, beides im Bildschirm Modus-Pakete), und der ATAK-Feed für die Spielleitung läuft über TLS mit einer festgelegten Zertifizierungsstelle. In Software getestet; nicht auf einem Handy im Feld.

    iOS

    • Das Projekt liegt im Repository, die CI baut es auf einem Mac, und es lief schon auf einem iPhone.
    • Am 26.10.2026 bestand seine Checkliste auf dem Gerät auf einem iPhone: 12 automatische Prüfungen und, von Hand, QR-Scannen mit der Kamera, Check-in mit dem Aushang des Felds über HTTPS, Positionsfreigabe bei sichtbarer App, die Warnung beim Verlassen der Grenze mit ihrer Vibration und atalaia://-Links.
    • Beacons in Gebäuden: ein Swift-Plugin über CoreLocation, auf denselben Kanälen wie unter Android, braucht nur die Ortungserlaubnis und funktioniert, solange die App im Vordergrund ist. Es kompiliert in der CI; auf einem iPhone ist es noch nicht gelaufen.

    Als Nächstes, und worauf es wartet

    • Der Feldtest mit echten Handys und Pods (Planphase G) wartet auf die Hardware. Bisher lief die App auf Android-Emulatoren und auf einem iPhone gegen den Controller auf dem Labortisch, und die Pod-Firmware nur als ihr eigener Code auf einem Computer.
    • Das Handy als Feld-Controller wartet auf ein echtes Handy.
    • Unter iOS braucht NFC ein kostenpflichtiges Apple-Konto; der Prop und das Handy als Feld-Controller bleiben nur für Android.
    • Das Beacon-Plugin auf einem iPhone ausprobieren (auf einem Mac gebaut) und die Beacons mit echten, auch unter Android.
    • Die Website-Anmeldung unter iOS (Browser der Social-Anmeldung und Passkeys) auf einem iPhone ausprobieren.
    • QR-Code der Anzeigetafel, Ebenenwahl, Spielverlauf und die Wiederverbindung zum Pod an einem echten Handy und Pod ausprobieren.
    • Die Anmeldung der App auf einem echten Handy ausprobieren.
    • Die Kartenprüfung, die Positionswahl beim Check-in, die angeheftete CA und die Kontoerstellung der App auf einem Feld und mit echten Handys ausprobieren.

    Gate: Ein Spiel mischt ESP32- und Android-Props ohne Probleme.

  5. Software fertig

    4 · Site-Server und erweitertes Spiel

    Site-Server, Spielplanung und Anmeldung, eigene Szenarien, erweiterte Modi, ATAK. Alle Software-Schritte sind gebaut; die Anmeldung mit Google und Microsoft wurde auf einem Testserver echt ausprobiert. Es fehlen ein echter Server, die Go-live-Bedingungen des Hosted-Modus und die Tests auf Hardware.

    Was fertig ist

    • Erweiterte Modi: Master und Satelliten, das Hacking-Terminal, VIP / Payload und die Logik von Zielfenster.
    • Eigene Szenarien: ihre Laufzeit auf dem Feld-Controller, ein Compiler für YAML-Szenarien, ein Editor in der GM-Konsole und die Ziele in der App.
    • Der ATAK-Feed: Boxen und Zonen auf ATAK-Karten, auf dem Feld und, über den Site-Server, für Staff außerhalb.
    • Der Site-Server: Konten mit Zwei-Faktor-Codes, Rechte an persönlichen Daten, Controller-Sync, Chrono-Register, Spielverlauf und Szenario-Bibliothek.
    • Spielplanung und Anmeldung, mit öffentlichen Feldseiten, Kalender-Feeds und Club-Profilen.
    • Hosted-Modus: viele Felder auf einem Server, jedes vom anderen getrennt, mit seinem Deployment.
    Alles übrige, was fertig ist, nach Thema

    Modi

    • Master und Satelliten: Satelliten, die man mit dem Master hält, erhöhen seine Punkte; wechselt der Master den Besitzer, werden sie frei.
    • Das Hacking-Terminal: ein Rätsel am Tastenfeld, das einen Code verrät oder das Terminal erobert.
    • VIP / Payload: Ein Team eskortiert seinen VIP oder ein Handy mit GPS zu einer Extraktionszone; Checkpoint-Boxen punkten, solange sie gehalten werden; Positionen bleiben auf dem Feld-Controller und dem Handy.
    • Die Regeln von Zielfenster: Ein Treffer, während das Ziel die Farbe eines Teams zeigt, punktet für dieses Team. Das Ziel-Addon ist noch nicht gebaut.
    • Geo-Funktionen im Kern: Entfernungen und Zonen für jedes Skript, auf jeder Plattform identisch.

    Eigene Szenarien

    • Die Laufzeit: Ein Szenario läuft auf dem Feld-Controller und sagt den Boxen des eingebauten Ziele-Pakets, was sie sind (ein Punkt zum Erobern, ein Code, Tags oder Karten zum Scannen, ein Bombenplatz); sie melden, das Szenario punktet.
    • Der Compiler: ein YAML-Szenario mit sieben Zieltypen, mit Abhängigkeiten, Enthüllungen und Zeitfenstern, geprüft mit jedem Problem verortet und erklärt, und von der Kommandozeile kompiliert.
    • In der GM-Konsole: ein Editor, der jedes Problem auflistet, während die Orga tippt, und das Szenario installiert; die Boxen bekommen die Namen des Szenarios beim Beitritt.
    • In der App: Spielende sehen die Ziele, die für sie gedacht sind, mit Namen und Stand, ein verstecktes erst nach der Enthüllung; jeder Squad kann seine eigene Kette haben, ein Ziel nach dem anderen, dem ganzen Squad oder nur dem Squad-Lead gesagt.

    ATAK und die Feldkarte

    • Der ATAK-Feed: Boxen und Zonen auf ATAK-Karten über das Feld-WLAN, in den Farben ihrer Besitzer, platziert, indem man zwei Ecken des Feldbilds ihre Kartenposition gibt.
    • Die Spielleitung markiert Sicherheitszonen, Respawn und HQ jedes Teams, den Parkplatz, Erste Hilfe und Ziele auf dem Plan des Felds, als Pin, Kreis oder Fläche, jedes für alle, für ein Team oder nur für die Orga sichtbar, in der Konsole und auf ATAK.
    • Das Feld lässt sich aus einer Karte laden: Die Spielleitung findet es von ihrem Standort oder über einen Ortsnamen und zeichnet seinen Umriss auf OpenStreetMap, und der Browser zeichnet das Feldbild aus den Daten von OpenStreetMap über den offenen Luftbildern des Landes (das portugiesische Festland, Spanien, Frankreich samt Übersee, die Niederlande, Belgien, Luxemburg, die Schweiz, Liechtenstein, elf deutsche Länder, Polen und Tschechien). Der Umriss wird zur Feldgrenze, das Außen abgedunkelt.
    • Die Handys der Spielenden warnen mit einem Banner und einer Vibration, wenn sie die Grenze verlassen, mit ihrem eigenen GPS, ohne etwas zu senden.
    • Spielerpositionen gehen nie an alle, nur an Staff-Geräte, wenn das Feld es einschaltet. Staff außerhalb des Felds bekommt dasselbe über den Site-Server, über eine verschlüsselte Verbindung mit einem Zertifikat pro Gerät, das das Feld ausstellt und sofort widerrufen kann; Positionen gehen nur an Zertifikate von Spielleitung oder Marshals.
    • Mehrstöckige Felder in der Konsole: ein Grundriss pro Ebene und jede Box auf ihrer Ebene.
    • Noch nicht mit einem echten ATAK-Handy ausprobiert, auch nicht auf einem echten Feld.
    • Eine Box, die Progressive Domination zur aktiven gemacht hat, sagt das auf ATAK.
    • Die Feldkarten-Seite läuft auch auf dem Handy als Feld-Controller.
    • ATAK zeigt Spielende in Gebäuden am Ort ihres Beacons, mit dem Raum in den Bemerkungen.
    • Das Raster in ATAK und eine druckbare Rasterkarte.
    • Der Remote-GM sieht die Positionen der Spieler, wenn sie sie teilen.
    • ATAK-Gerätezertifikate gelten 90 Tage (vorher 7), und die ATAK-Seite für die Mitarbeitenden warnt, wenn eines in 14 Tagen abläuft.
    • Das Feld kann das Laden von Karten in der Konsole abschalten (Einstellungen, Kartenabruf): dann erreicht „Feld aus einer Karte laden“ weder OpenStreetMap noch Overpass, Nominatim oder die Luftbilder. Standardmäßig an.

    Site-Server, Konten und Daten

    • Sein Gerüst: Datenbank, Migrationen und ein Health-Check, in einem eigenen Container.
    • Konten: Passwörter, Zwei-Faktor-Codes Pflicht für Orga und Marshals, Sitzungen und Rollen pro Feld.
    • Rechte an persönlichen Daten: Auskunft, Export, Berichtigung, Löschung, Einwilligungsnachweise und eine tägliche Löschung nach Aufbewahrungsfrist.
    • Controller-Sync: Feld-Controller schieben ihre Spiele, Logs und Punkte, offline zuerst und gefahrlos wiederholbar. Noch nicht über eine echte 4G-Verbindung.
    • Das Chrono-Register: signierte Messwerte geprüft und so gespeichert, wie sie signiert wurden, nur öffentliche Schlüssel, Austausch zwischen Feldern mit Einwilligung. Noch nicht mit einem echten Chronographen.
    • reset-totp: Der Betreiber setzt den Zwei-Faktor-Code eines Kontos zurück, das seinen Authenticator verloren hat.
    • Feld-Controller holen die Chrono-Messwerte anderer Felder für die Spielenden auf ihrer Liste, nur mit der Einwilligung jeder Person. Sie halten sie getrennt von den eigenen Messwerten und bewerten sie nie.
    • Die Controller holen die Einstellungen und das Erscheinungsbild des Felds vom Site-Server, und eine Änderung kommt sofort beim Pi und beim Handy-Controller an. In Software.
    • Anmeldung mit Google, Microsoft oder Apple und mit Passkeys. Passwörter sind optional; das Personal braucht weiterhin einen zweiten Faktor. Google und Microsoft wurden auf dem Testserver (tests.atalaia-project.link) mit den echten Anbietern ausprobiert; Apple noch nicht.
    • Eine Kontoseite für das Personal, auf der jede Person ihre eigenen Anmeldungen verwaltet: Passkeys, verknüpfte Konten, Passwort und Zwei-Faktor-Code.
    • Änderungen an Szenarien, Presets und Terminen erreichen die Controller sofort.
    • Wie lange ein Feld Daten behält, ist eine Einstellung des Feldes: Spielverlauf und Chrono-Einträge haben je eine Aufbewahrungsdauer, einzustellen am Controller, in der GM-Konsole oder auf der Einstellungsseite des Site-Servers: der Spielverlauf standardmäßig 90 Tage (Teamergebnisse ohne Spieler-IDs 365), Chrono-Einträge 365. Die tägliche Bereinigung löscht ein beendetes Spiel dieses Alters, nie bevor der Site-Server alles davon hat. Das ungenutzte Aufbewahrungsfeld pro Konto ist weg.
    • Die Löschung einer Person an einem Feld-Controller erreicht den Site-Server mit der nächsten Synchronisierung von selbst (nie mit einem Namen) und löscht dort auch die Chrono-Einträge dieser Person.
    • Vorlagen für den Datenschutzhinweis, den Auftragsverarbeitungsvertrag und die Bedingungen für die Freigabe zwischen Feldern, auf Portugiesisch und Englisch (der Vertrag auch auf pt-PT), dazu eine Vorlage für die Datenschutz-Folgenabschätzung: Sie geben die Positionen wieder, die der Anwalt oder die Anwältin des Maintainers am 30. Oktober 2026 gebilligt hat (Konten auf Vertragsbasis mit Mindestalter 16, die Mitgliedskarte beim Check-in geprüft und die Nummer gelöscht, Verstöße aufgrund berechtigter Interessen, Positionsfreigabe per Einwilligung, kein Datenschutzbeauftragter). Weiterhin Vorlagen, die jedes Feld ausfüllt, keine Rechtsberatung für ein bestimmtes Feld.
    • Der Site-Server veröffentlicht den Datenschutzhinweis, den der Betrieb ihm gibt, als Seite und über die API in vier Sprachen und zeigt ihn den Konten erneut, wenn sich seine Version ändert (ein Konto beruht auf dem Vertrag, nicht auf einer Einwilligung). Nichts wird gesperrt: Export und Löschung bleiben möglich. Auf einem Computer getestet.
    • Ein Social-Login-Konto wählt seinen Benutzernamen auf der Kontoseite gleich nach dem Anlegen (überspringbar; der Name des Anbieters nur, wenn die Person es verlangt). Jedes Konto kann sich mit seiner eigenen Anmeldemethode umbenennen, und zwei Konten einer Person lassen sich zusammenführen, wenn die Person beide nachgewiesen hat (nie in ein Konto mit Personalrolle hinein oder aus ihm heraus). Der Fehler bei fehlender Einwilligung erscheint am Kontrollkästchen. Auf einem Computer getestet; der Schritt Benutzername und das Zusammenführen sind auf dem Testserver noch auszuprobieren.
    • Eine Registrierung per Social Login hält die Version der Datenschutzerklärung fest, die die Person tatsächlich sah: Der Server lehnt eine veraltete ab und prüft vor dem Anlegen des Kontos noch einmal. Auf einem Computer getestet.
    • Die tägliche Aufbewahrungsbereinigung löscht auch anonymisierte Konten (was eine Löschung oder ein Zusammenführen hinterlässt), sobald nichts mehr auf sie verweist. Auf einem Computer getestet.
    • Wer die Anmeldung eines Kontos ändert, braucht einen zweiten Faktor: Passkeys hinzufügen, umbenennen oder entfernen, Zwei-Faktor-Codes einrichten oder abschalten, das Passwort ändern, eine Social-Anmeldung verknüpfen und ein Zusammenführen bestätigen werden abgelehnt, wenn die Sitzung keinen TOTP- oder Passkey-Schritt durchlaufen hat (eine Social-Anmeldung allein zählt nicht); ein Zusammenführen bringt nie Passkeys in ein Personalkonto. Die Kontoseite des Personals und die App fragen zuerst diesen Schritt ab. Auf einem Computer getestet, nicht bei den echten Anbietern.
    • Das eigene Sicherheits-Review des Site-Servers: Anfragekörper begrenzt (413 ab 1 MiB, 4 MiB bei Uploads), dieselbe Antwort auf „kein solches Konto“ und auf eine abgelehnte Rollenvergabe, der Feld-Export mit nur den Audit-Zeilen des Feldes, der Schalter der öffentlichen Seite in der Feldsuche der App beachtet, eine Pflicht-URL, der Aussteller einer Social-Anmeldung zusammen mit ihrem Subjekt gespeichert, HTTP-Anfragen hinter einem Proxy auf HTTPS umgeleitet und ein Health-Check, der nur ok sagt. Zum Teil auf dem Preview-Server gefunden.
    • Konten beruhen auf dem Vertrag, nicht auf einer Einwilligung: Bei der Anmeldung wird festgehalten, welche Version des Datenschutzhinweises gezeigt wurde, mit einem Kästchen „Ich bin 16 oder älter“ (auf der Personalseite und in der App); ein Geburtsdatum wird nicht gespeichert; ohne veröffentlichten Hinweis ist die Registrierung geschlossen. Alte Einwilligungen wurden zu Hinweis-Einträgen. Auf einem Computer getestet.
    • Der Code des Datenschutz-Reviews: Die Netzwerkadresse eines Audit-Eintrags wird nach 180 Tagen gelöscht (einstellbar); ein Konto, das 24 Monate nicht benutzt wurde, bekommt eine Warnung und wird 30 Tage später anonymisiert; die Löschung einer Person oder eine zurückgezogene Chrono-Einwilligung erreicht die Controller anderer Felder, die ihre Kopien verwerfen; Löschungen bleiben als Hashes in einem Verzeichnis außerhalb der Datenbank und werden nach einer Wiederherstellung erneut angewendet; eine neue Personalseite markiert Wiederholungstäter nur als Hinweis (eine einfache Verwarnung zählt nie), und eine Sperre endet standardmäßig nach 12 Monaten; der Spielverlauf bleibt 90 Tage mit Spieler-IDs erhalten, die Teamergebnisse ohne sie 365. Auf einem Computer getestet.
    • Ein Feld nimmt die Bedingungen für die Freigabe zwischen Feldern an (die Administration, auf der Einstellungsseite), bevor es Chrono-Einträge teilt; Version, Datum und Konto werden festgehalten, und ändern sich die Bedingungen, ruht die Freigabe, bis sie angenommen sind. Das Feld ist Verantwortlicher für die Daten seiner Spielenden, der Hub-Betreiber sein Auftragsverarbeiter, und die Felder, die teilen, sind nur für diesen Schritt gemeinsam Verantwortliche. Auf einem Computer getestet.
    • Wer den Server betreibt, kann über die Kommandozeile ein Passwort für ein bestehendes Konto setzen (set-password, zweimal ohne Echo abgefragt, nie in der Kommandozeile): der Ausweg für ein Staff-Konto ohne zweiten Faktor, das seine Anmeldemethoden deshalb nicht über die Seite ändern kann.

    Spiele, Clubs und Staff-Seiten

    • Spielplanung, mit einer öffentlichen Seite pro Feld und offenen iCalendar- und JSON-Feeds seiner Spiele (ohne persönliche Daten).
    • Die Anmeldung zu diesen Spielen, mit vorab angegebenen Repliken und einem Check-in-Ticket: Der Feld-Controller holt die Liste und meldet, wer gekommen ist. Anmeldung aus der App; Import einer Anmeldeliste (CSV oder JSON), die von einer anderen Plattform exportiert wurde.
    • Club-Profile: Name, Farbe, Logo und Wappen, Mitglieder, eine öffentliche Seite, standardmäßig aus, mit Melde-Knopf und Moderation. Branding und gespeicherte Teams eines Felds werden mit seinen Controllern synchronisiert, sodass das Wappen eines Clubs jedes Feld erreicht, das sein Team gespeichert hat.
    • Spielverlauf: Punkteverlauf und Ereignislog jedes Spiels; Spielende und Zuschauende sehen ein laufendes Spiel eine Minute verzögert, ohne Geheimnisse oder Spieler-IDs. Eine öffentliche Anzeigetafel pro Feld (standardmäßig aus).
    • Die Szenario-Bibliothek des Felds mit ihren Spiel-Presets, so geprüft, wie der Feld-Controller sie prüft, und von jedem Controller des Felds installiert, einer Reserve eingeschlossen.
    • Webseiten für das Staff des Felds, auf Portugiesisch und Englisch und auf dem Handy: Anmeldung mit dem Zwei-Faktor-Code, Spielverlauf, Szenario-Bibliothek (jedes Problem vor dem Speichern gezeigt, Revisionen und Presets), Gerätezustand sowie Live-Ansicht und Befehle der Remote-Spielleitung. Im Headless-Browser getestet, noch nicht auf einem echten Server.
    • Controller entfernen ein Szenario oder Preset, das der Site-Server archiviert oder gelöscht hat, außer ein Spiel nutzt es noch.
    • Staff-Seiten für den Spielplan: Spiele auflisten, anlegen, bearbeiten, veröffentlichen und absagen, mit Zeiten in der Zeitzone des Felds.
    • Staff-Seiten für die Anmeldungen: wer sich angemeldet hat, Name, Team oder Verbandsnummer ändern, eine Anmeldung zurückziehen sowie CSV-Export und -Import.
    • Eine druckbare Spieltagsliste, mit der Angabe, wann ein Controller sie zuletzt geholt hat.
    • Staff-Aktionen an einer Anmeldung: bezahlt oder nicht bezahlt (der Server nimmt kein Geld an), nicht erschienen, in ein anderes Spiel verschieben, wiederherstellen, die Repliken bearbeiten. Im Headless-Browser getestet, nicht auf einem echten Server.
    • Seiten für das Personal zu Rollen, Sync-Schlüsseln, Erscheinungsbild, Clubs, Plattform-Verknüpfungen, Firmware und Verwaltung.
    • Die Seite des Remote-GM aktualisiert sich live, ohne Neuladen.
    • Die Mitgliedschaft in einem Verband wird bei der Anmeldung und beim Check-in geprüft: APDs bei Spielfeldern in Portugal, anderswo jeder Verein oder Verband.
    • Eine Seite für das Personal mit den Einstellungen des Spielfelds: öffentliche Seite, Check-in-Regeln, Mitgliedschaft, Chrono-Freigabe und Land.
    • Chrono-Einträge zeigen, wie weit eine Replik über dem Limit lag, und markieren Wiederholungstäter.
    • Eine Seite für das Personal des Feldes mit dem Datenexport und dem Verbrauch der Kontingente.
    • Punkteverläufe in Spielzeit.
    • Die Seite eines Clubs listet die Felder auf, auf denen er spielt, auch die Seite für die Mitarbeitenden.
    • Der Controller importiert eine Anmelde-CSV selbst, ganz ohne Site-Server.
    • Die Konsole warnt, wenn ein Name Buchstaben hat, die die Boxen nicht zeichnen können: Teamnamen, der Name des Spiels, der eines Szenarios und die seiner Ziele.
    • Anmeldelisten tragen die Verbands-ID und das Ablaufdatum der Mitgliedschaft als optionale Spalten, und der Export der Anmeldungen lässt sich unverändert wieder importieren.

    Boxen und das Feld

    • Gerätezustand: Akku, Verbindung und Firmware jeder Box aus dem, was die Controller senden; der Feld-Controller meldet eine Box, die verstummt oder zurückkommt, und einen niedrigen Akkustand, den eine Box mit Akku-Anzeige auch selbst meldet. Noch nicht auf echten Boards.
    • Ein Firmware-Katalog, der nur mit einem vertrauenswürdigen Schlüssel signierte Releases auflistet, und Firmware-Updates per Funk für die Field Box: Die Spielleitung lädt ein signiertes Release in den Feld-Controller hoch und aktualisiert die Boxen zwischen den Spielen, nie während eines; jede Box lädt es über das Feld-WLAN, prüft die Signatur mit Schlüsseln, die in ihre Firmware eingebaut sind, installiert es in ihrem freien Slot und kehrt zur alten Firmware zurück, wenn die neue nicht startet. In Software, noch nicht auf einem echten Board.
    • Boxen ins Feld aufnehmen mit einer NFC-Feldkarte, dem USB-Kabel des Controllers oder dem 6-stelligen Code, den die Box zeigt, gekoppelt über Funk. In Software, noch nicht auf einem echten Board.
    • Boxen per Funk ins nächste Spiel einladen, ohne Karte oder QR-Code (der Beitritt reist verschlüsselt unter einem aus dem Feld-Beitrittsschlüssel abgeleiteten Schlüssel), und ein Start, der wartet, bis jede Rolle eine Box hat, außer die Spielleitung wählt „Trotzdem starten“. Auf zwei Labortisch-Boards mit dem Feld-Controller getestet.
    • Boxen, die in jedem neuen Spiel gehört werden (der Nonce-Zähler des Funks ist jetzt pro Spiel, eine Korrektur vom Labortisch), und Box-Bildschirme, die dem Spiel folgen (Bereit, Warten, Neutral), in der Sprache des Felds, Englisch oder Portugiesisch. Auf zwei Labortisch-Boards getestet.
    • Ein mitten im Spiel neu gestarteter Controller nimmt das Spiel wieder auf; einer, der den Spielschlüssel verloren hat, sagt seinen Boxen über das Feld-Funknetz trotzdem, dass das Spiel vorbei ist; falsche Admin-PINs warten immer länger, über Neustarts hinweg gezählt, ohne Standard-PIN auf einer echten Box. In Software, noch nicht auf den Labortisch-Boards.
    • Die Remote-Spielleitung: Eine Orga mit der GM-Rolle, per Zwei-Faktor-Code angemeldet, sieht das laufende Spiel und startet, pausiert, setzt fort oder beendet es, oder schickt eine Nachricht oder einen Modus-Befehl, über eine Verbindung, die der Feld-Controller selbst öffnet, nur wenn das Feld es einschaltet, jeder Befehl auf beiden Seiten protokolliert.
    • Der Tab Controller der Konsole listet den Zustand der Remote-Spielleitung und jeden Befehl, den sie bekam.

    Deployment und Hosted-Modus

    • Das Deployment: HTTPS über Caddy mit automatischem Zertifikat, ein Setup-Skript, das alle Geheimnisse erzeugt, verschlüsselte tägliche Backups und eine Wiederherstellung in eine frische Datenbank. In Docker auf einem Computer getestet, nicht auf einem echten Server mit echter Domain.
    • Hosted-Modus: ein Server für viele Felder, jedes in einem eigenen Datenbankschema unter eigener Adresse, mit Row-Level-Security darunter, sodass kein Feld je die Daten eines anderen sieht, und die Befehle der Betreiber, um die Daten eines Felds zu exportieren oder zu löschen. Gegen PostgreSQL in Docker getestet.
    • Sein Deployment: ein Setup-Skript, das die Datenbankrollen des Hubs anlegt, jedes Feld unter eigener Adresse mit einem Zertifikat, das nur der Name eines aktiven Felds bekommen kann, und verschlüsselte Backups, wiederhergestellt mit jedem Feld getrennt von den anderen. In Docker getestet, nicht auf einem echten Hosted-Server mit echter Domain.
    • Gehosteter Modus: ein Kontingent pro Feld, ein Datenexport, den die Verwaltung eines Felds herunterladen kann, und die offenen Verbindungen eines gelöschten Felds werden sofort geschlossen.
    • Hosted-Modus: ein Speicherkontingent und eigene Domains pro Feld.
    • Hosted-Modus: Jedes Feld hat eine eigene Datenbankrolle, so dass eine SQL-Injection nicht mehr auf die Daten eines anderen Feldes umschalten kann, indem sie die Einstellung ändert, die die Zeilensicherheit nutzte. Eine Lücke, die eine zweite SQL-Anweisung braucht, bleibt offen und ist dokumentiert. Gegen PostgreSQL in Docker getestet.
    • Hosted-Modus: Felder, die Chrono-Einträge teilen, tun das jetzt auch zwischen den Feldern eines Hubs, über eine schreibgeschützte Ansicht, die eine Einwilligung braucht; eine Person verknüpft ihre Konten bei zwei Feldern mit einem Einmalcode, und nichts wird über E-Mail oder Namen zugeordnet. Gegen PostgreSQL in Docker getestet.
    • Eine schreibgeschützte Live-Demo für den Vorschau-Server: Der echte Feld-Controller mit drei simulierten Field Boxen spielt endlos Spiele, abwechselnd auf einem offenen Feld und in einem erfundenen dreistöckigen Gebäude (ein Plan je Etage, fünfzehn Beacons, zwölf simulierte Spielende: sechs per Beacon verortet, fünf per GPS mit gewählter Etage, eine Person unsicher), und Besuchende sehen die GM-Konsole, die Anzeigetafel und eine Spielendenansicht, ohne etwas ändern zu können und ohne personenbezogene Daten. Seit dem 29. Oktober 2026 online unter demo.atalaia-project.link; ihre Spielendenansicht wird in einem Headless-Browser getestet.
    • Hosted-Modus: ein einziger Rückruf der Social-Anmeldung für den ganzen Hub (optional): Der Betreiber trägt pro Anbieter eine Weiterleitungsadresse ein; der Hub signiert den Zustand, prüft das Feld in seinem Register und übergibt an den eigenen Rückruf des Feldes. In Docker getestet, nicht bei den echten Anbietern.
    • Eine Go-live-Checkliste für den Betreiber: sechs Bedingungen, bevor irgendein Feld den Hosted-Modus bekommt (ein unterschriebener Auftragsverarbeitungsvertrag pro Feld, die Freigabebedingungen, jeder Unterauftragsverarbeiter im Anhang und in der EU, ein ausgefüllter Datenschutzhinweis, die eigenen Unterlagen des Betreibers, wenn er eine natürliche Person ist, und ein Nachweis auf einem echten Server).
    • Der Preview-Server (tests.atalaia-project.link) läuft seit dem 30. Oktober mit all dem und hat einen eigenen Datenschutzhinweis (Version preview-2026-10-31: Konten auf Vertragsbasis, 16 oder älter, kein Datenschutzbeauftragter).
    • Der Preview-Server installiert seine Datenschutzerklärung bei jedem Start und Update selbst (und hält an, wenn die Dateien einer Version fehlen), die Live-Demo sendet HSTS, und ein Wegwerf-Teststack (ein gehosteter Hub, ein falscher Login-Anbieter und ein Feld-Controller, nur auf 127.0.0.1) lässt einen autorisierten Sicherheitstest gegen den heutigen Code laufen.

    Als Nächstes, und worauf es wartet

    • Ein echter Server mit Domain.
    • Die Go-live-Bedingungen des Hosted-Modus (ein unterschriebener Auftragsverarbeitungsvertrag pro Feld, die Freigabebedingungen, ein ausgefüllter Hinweis) und jedes Feld, das seinen eigenen Hinweis und seine Folgenabschätzung ausfüllt. Der Anwalt oder die Anwältin des Maintainers hat die rechtlichen Positionen am 30. Oktober 2026 gebilligt; der Hosted-Modus wird weiterhin nicht angeboten. Nichts von der Sicherheits-, Funk- und Rechtsarbeit vom 30. Oktober wurde auf einem echten Board oder Handy ausprobiert: Es läuft in Software und auf dem Preview-Server.
    • Die Tests auf Hardware: echte Boards, ein echtes ATAK-Handy, eine echte 4G-Verbindung, ein echter Chronograph.
    • Das Ziel-Addon, auf das die Regeln von Zielfenster warten.
    • Die Anmeldung mit Apple beim echten Anbieter sowie den Schritt Benutzername und das Zusammenführen von Konten auf dem Testserver ausprobieren.
    • jogarairsoft.pt: Der Maintainer hat ihnen am 28. Oktober 2026 geschrieben und eine Integration vorgeschlagen (ihre Events, Teams und APDs zu uns; unser Spiele-Feed, Feldprofile, öffentliche Clubs und Ergebnisse zu ihnen). Wir warten auf ihre Antwort; nichts ist zugesagt.

    Gate: Ein Wochenend-Milsim läuft von Anfang bis Ende auf Atalaia.

  6. Software fertig

    5 · Community

    Visueller Modus-Editor, signierte Modus-Pakete, die Modus-Registry als Vorlage, Deutsch und traditionelles Chinesisch, Bauanleitungen. Alle Software-Schritte sind gebaut.

    Was fertig ist

    • Der visuelle Modus-Editor: eine Seite des Simulators, auf der ein Modus aus Blöcken zusammengesetzt wird (was passiert, wenn ein Team den Knopf hält, Timer, Punkte, Bildschirme und Töne, Zonen auf der Karte, GM-Befehle, mehrere Rollen, die Einstellungen, die die Spielleitung ändern kann, und die Logik des Feld-Controllers über mehrere Boxen). Er schreibt die Lua-Skripte und das Manifest des Modus während du arbeitest, auf Portugiesisch und Englisch, läuft offline, und ein Knopf probiert den Modus sofort im Simulator aus. Seine drei Beispiele bestehen dieselben Tests wie die handgeschriebenen Modi.
    • Signierte Modus-Pakete: ein Archiv, signiert wie ein Firmware-Release. Der Editor erstellt das Paket des Modus selbst und zeigt, was der Modus-Schlüssel signieren wird, und den Befehl dazu; signiert wird weiterhin offline auf dem eigenen Computer.
    • Der Feld-Controller installiert signierte Modi nur mit seinen eigenen vertrauenswürdigen Schlüsseln und zeigt, wer jeden signiert hat und ob das Projekt ihn geprüft hat.
    • Eine Reihe von Sandbox-Ausbruchsversuchen läuft bei jeder Änderung; sie hat zwei Wege geschlossen, auf denen ein Skript sein Zeitlimit überziehen konnte.
    • Fehlende Modi senden in der GM-Konsole: Eine Box, der der Modus eines Spiels fehlt, holt das signierte Paket über das Feld-WLAN vom Feld-Controller, nur zwischen den Spielen, während das Spiel auf sie wartet; sie prüft es mit Schlüsseln, die in ihre Firmware eingebaut sind, und behält es. Auf einem Computer getestet, nicht auf einer echten Box.
    • Szenarien aus Blöcken in der GM-Konsole: die Boxen, die Ziele und wer sie sieht, wann sie sich öffnen, was sie erfüllt und was sie bringen, mit Maus, Touch oder Tastatur, sogar auf dem Handy. Der Feld-Controller prüft und installiert sie, als wären sie von Hand geschrieben.
    • Die Modus-Registry, als Vorlage bereit: Ein Pull-Request mit einem signierten Modus wird automatisch geprüft (seine Signatur, dass sein Quelltext das Signierte ist, seine Lizenz, seine Tests im Simulator), und ein vom Projekt geprüfter Modus bekommt das Verifiziert-Siegel, die eigene Signatur des Projekts, die ihn erst zu den Boxen lässt. Wie man einen Modus einreicht, die Prüfliste, Schlüssel und Moderation sind aufgeschrieben.
    • Deutsch und traditionelles Chinesisch (wie in Taiwan geschrieben) auf dieser Seite, in der GM-Konsole, im Modus-Editor, in der App, auf den Bildschirmen der Field Box, in den eingebauten Modi und auf den Seiten des Site-Servers: KI-Entwürfe, noch nicht von Spielenden geprüft, die diese Sprachen sprechen.
    • Das Repository der Registry gibt es (angelegt am 26. Oktober 2026), und seine Seite listet die Modi, noch ohne Einträge.
    • Bauanleitungen für Satellit, I/O-Pod und Ziel-Addon, als Text. Noch keine Box wurde danach gebaut.
    • Benutzerhandbücher für Spielende, Spielleitung, Marshals und Field-Box-Betreibende, auf Englisch und Portugiesisch.
    • Bauanleitungen mit einer Pin-Tabelle für jede Platine, eine Firmware-Anleitung (eine veröffentlichte Version herunterladen oder selbst bauen) und eine Anleitung zum Einrichten des Controllers, auf Englisch und Portugiesisch.
    • Die Web-Ansicht des Simulators hat jede Eingabe, die ein Modus nutzt: Tags, Tastenfeld, Treffer und GM-Befehle, mit Download des Ereignisprotokolls.
    • Die Szenario-Blöcke der GM-Konsole haben eine Sprachliste mit allen vier Sprachen.
    • Die Modus-Schlüssel des Projekts: ein offline gehaltener Root-Schlüssel und ein Schlüssel, mit dem die Registry das Verifiziert-Abzeichen signiert. Boxen, App und Controller vertrauen standardmäßig beiden.
    • Die Firmware-Anleitung und die Bauhandbücher erklären das eine Flashen per USB, das eine Box mit der alten Partitionstabelle braucht, und dass Einstellungen und Schlüssel es überleben.
    • Die Härtung von CI und Release aus dem Sicherheits-Review: jede Action per Commit festgeschrieben, das Build-Image per Digest, jede pip-Installation aus einer Datei mit Hashes, der Signatur-Job in einer geschützten Umgebung, die einen Tag außerhalb von main ablehnt, und wöchentliche Abhängigkeits-Updates. Der Maintainer muss die geschützte Umgebung noch anlegen und die Signatur-Secrets dorthin verschieben (die Schritte sind aufgeschrieben).
    • Lua-Zeichenmuster und string.rep werden in der Sandbox gezählt (ein feindliches Muster konnte eine Box bis zum Watchdog hängen lassen), das Überspringen verschachtelter CBOR-Daten ist tiefenbegrenzt, und die CBOR-Decoder haben Tests mit feindlichen Eingaben.

    Als Nächstes, und worauf es wartet

    • Die Prüfung des Deutschen und des Chinesischen: Wenn du auf Deutsch oder Chinesisch spielst, hilf uns beim Prüfen. Übersetzungen in andere Sprachen beginnen in docs/translations (auf Englisch und Portugiesisch).
    • Die Hardware: die Träger-Platine (eine fertige Leiterplatte, die den Bau erleichtert) nach den ersten gebauten Boxen, Fotos echter Builds, Community-Inhalte von einem Feld.

    Fortlaufend nach dem ersten Release.