No description
  • JavaScript 40.7%
  • Python 29.9%
  • HTML 27.5%
  • Shell 1.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Fabian Gillmann 63dd7d4ee5
All checks were successful
tests / Node-Suiten + Soak (push) Successful in 36s
tests / Browser-Suiten (Playwright) (push) Successful in 4m21s
Doku: Befund 26 ist abgearbeitet – der Halo antwortet aus der Quelle des Griffs
2026-09-09 00:22:08 +02:00
.forgejo/workflows CI: Forgejo-Workflow tests.yml – Node-Suiten und Browser-Suiten blockierend, browser_flow berichtend; run-all.sh mit SKIP_NODE/FLOW_REPORT 2026-09-04 00:44:29 +02:00
docs Doku: CI-Runbook docs/ci.md – Workflow-Verifikation (Dispatch, Lauf-/Log-Beobachtung), Runner-Runbook (dind-Begründung, Gesundheit, Fehlerbilder, Wiederherstellung); Verweise aus AGENTS.md, README, tests/README 2026-09-04 01:25:33 +02:00
issues Doku: Befund 26 ist abgearbeitet – der Halo antwortet aus der Quelle des Griffs 2026-09-09 00:22:08 +02:00
tests Reichweiten-Halo fragt dieselbe Quelle wie der Griff: CORE.reachability (#26) 2026-09-09 00:21:24 +02:00
.gitignore Replace AGENTS.md with a present-tense guide, archive the original spec 2026-08-29 11:48:50 +02:00
AGENTS.md Reichweiten-Halo fragt dieselbe Quelle wie der Griff: CORE.reachability (#26) 2026-09-09 00:21:24 +02:00
index.html Reichweiten-Halo fragt dieselbe Quelle wie der Griff: CORE.reachability (#26) 2026-09-09 00:21:24 +02:00
README.md Doku: CI-Runbook docs/ci.md – Workflow-Verifikation (Dispatch, Lauf-/Log-Beobachtung), Runner-Runbook (dind-Begründung, Gesundheit, Fehlerbilder, Wiederherstellung); Verweise aus AGENTS.md, README, tests/README 2026-09-04 01:25:33 +02:00

Pulse Sprint

Ein Auto-Runner im Stil einer lebenden Kreidezeichnung auf dunkler Tafel: eine Datei index.html, prozedurale Canvas-Grafik mit Linien statt Flächen, alle Sounds prozedural über die Web Audio API. Läuft offline, ohne Installation, ohne Build, ohne Netzwerk.

Starten

  • Doppelklick auf index.html, oder
  • statischer Server, z. B. python3 -m http.server 8000 → http://localhost:8000

Es gibt nichts zu installieren und nichts zu bauen. Das Spiel lädt keine externen Ressourcen (keine Fonts, Bilder, Sounds, CDNs, kein fetch) und funktioniert vollständig offline.

Was das Spiel ist

Der Läufer rennt automatisch, das Tempo steigt mit der Strecke. Gespielt wird im Wechsel aus Sprung, Rolle und Schwung an Haken; der Fokus-Zeitmodus bremst die Zeit für genaue Eingaben. Der Lauf endet mit dem ersten Aufprall.

  • Zehn Sektoren mit eigenem Look und eigener Mischung an Hindernismustern: Morgenlicht, Cyan-Schaltkreis, Violetter Tunnel, Neonregen, Orange-Industrie, Tiefraum, Kristallfeld, Digitale Ruinen, Sonnensturm, Puls-Kern. Ab Sektor 11 läuft der Endlosmodus weiter (das HUD zeigt es dauerhaft an).
  • Wertung: Punkte durch Ausweichmanöver, Schwünge und Fragmente; eine Grube, die nur überschwungen wird, zählt als Saubere Linie. Dazu Strecke und Bestleistung.
  • Bestleistungen und Einstellungen liegen ausschließlich im localStorage (Schlüssel pulseSprintSaveV1) und immer in try/catch – blockierter oder beschädigter Speicher bricht das Spiel nicht.
  • Jedes Levelmuster ist verifiziert: die Generierung legt ein Muster erst, wenn der eingebaute Solver es mit echten Eingabestrategien durchkommt – inklusive Zeitfenstern für Sprung und Seilhaltezeit. Es gibt kein unmögliches Muster.

Steuerung

Taste Aktion
Leertaste / ↑ Springen (halten = höher und weiter, im Aufstieg loslassen = kürzer) · in der Luft: erreichbaren Haken greifen · am Seil entscheidet die Haltezeit
S / ↓ Rollen (halten = länger, loslassen = Ende) · hängend: loslassen
E / K Haken greifen oder loslassen (explizit)
W Beim Schwingen das Seil holen
F / Shift Fokus-Zeitlupe
P / Esc Pause · zurück aus Einstellungen und Hilfe
R Runde neu starten
M Ton an / aus
Leertaste / Enter im Menü Hauptaktion des Bildschirms: starten, fortsetzen, nochmal spielen, zurück
Maus / Touch Linke Hälfte: Sprung/Haken · rechte Hälfte: Rollen/loslassen · Haken direkt anklicken = genau diesen greifen

Die vollständige Tabelle steht im Spiel hinter dem Knopf Steuerung.

Barrierefreiheit

Vollständige Bedienung per Tastatur, aria-label an allen Knöpfen, Game-Over-Meldungen über aria-live, Touch-Ziele ≥ 44 CSS-Pixel, keine Information nur über Farbe, prefers-reduced-motion reduziert Wackeln, Partikel, Parallax und Tintenschweif.

Projektstruktur

Ort Inhalt
index.html das Produkt: Spiel, Simulation, Renderer, Sound – handgeschrieben, ein Dokument
AGENTS.md verbindliche Leitlinie für Coding-Agenten (Regeln, Invarianten, Testkommandos)
tests/ runnable Testsuiten: Node ohne Browser, Playwright-Suiten gegen den echten Loop
docs/ historisches Lastenheft (spec-pulse-sprint-v1.md, kein Arbeitsauftrag)
issues/ dokumentierte Befunde mit Messprotokoll und Abarbeitungsstand

Tests

./tests/run-all.sh              # alles: Node-Suiten, Soak, Browser-Suiten
./tests/run-all.sh 1            # Soak auf 1 Minute verkürzt
node tests/issue2.mjs           # eine Node-Suite (braucht keinen Browser)
python3 tests/browser_smoke.py  # eine Browser-Suite (braucht Playwright + Chromium)

Die Node-Suiten extrahieren die Simulation über die __CORE_START__-Marker aus dem Dokument und laufen ohne Browser. Die Browser-Suiten bauen eine Testseite mit Zustands-Bridge (tests/testpage.py) und messen das echte Spiel im echten requestAnimationFrame-Loop – das ausgelieferte index.html selbst enthält bewusst keinen Hook und keine window-Zuweisung.

Dieselbe Suite läuft als CI auf Forgejo Actions (Push auf main, workflow_dispatch, nächtlicher Cron mit vollem 5-Minuten-Soak) – wie man den Workflow verifiziert und den Runner wiederhergestellt, steht im Runbook docs/ci.md.

Änderungen beitragen

Bitte vorher AGENTS.md lesen: es regelt, was unverrückbar bleibt (eine Datei, kein Build, keine Netzwerkzugriffe, Barrierefreiheit, Artstyle) und wie Änderungen ablaufen (erst Tests laufen lassen, dann ändern, dann erneut laufen lassen; Physik- und Balancing-Zahlen nur in CORE.K als einziger Quelle). Fehler und Befunde werden im Forgejo-Tracker geführt: https://git.g1ll1.com/gilli/pulse-sprint.