Design-Notiz: egui als Menschmaschine-Dashboard — warum kausal, wo die Intent-Grenze liegt

Version: v0.1
Stand: 22. September 2026
Status: WORKING NOTE — Werkzeugwahl + Architektur-Grenze, keine Runtime-Invariante
Ort: Ansible-Crumbforest / docs
Anlass: egui.rs gefunden nach der Tokio-Erkenntnis; „hier hĂ€tten wir kausale Elemente im Kern"
Bezug: DESIGN-SILENCE-ESKALATION-UND-OUTBOX (2026-09-22), Memory: manifest-rust-debian-ohne-gpu,
hoerspiel-auf-zero-terminal-first, was-nicht-antwortet-ist-nicht-da


1. Der Kern in einem Satz

egui ist immediate-mode: ui = f(state). Es gibt keinen retained widget tree, kein verstecktes
GUI-GedĂ€chtnis, das vom Zustand abdriften kann — jeder Frame wird aus dem aktuellen Zustand neu
gerechnet. Das ist deine Anti-Drift-Doktrin in Bildschirmform: der Bildschirm kann nicht ĂŒber den
Zustand lĂŒgen, weil er ihn nicht speichert, sondern rendert.
Wie --check --diff: die RealitÀt ist
das Gerenderte, nicht das Behauptete.

Ein Retained-GUI (Qt, Web-DOM) hĂ€lt einen zweiten Zustand neben der Wahrheit — und zwei ZustĂ€nde
driften. Genau die zweite AutoritÀt, die wir bei nginx-Zombie und Checkmk-:8000 weggerÀumt haben,
nur auf der Glasscheibe. egui hat sie strukturell nicht.

Dazu passt es ins #rust #core-Bild: pure Rust, native UND WASM aus einer Codebase, auf
glow/Software ohne GPU (Manifest: CPU-only an zwei GerÀteklassen). Nativ im Baumhaus, via
cdn.crumbforest.io/Proxy im Browser. Ein Dashboard, zwei Wege.

2. Die Grenze, die es zum Dashboard macht statt zur Waffe

Immediate-mode macht es verfĂŒhrerisch einfach, aus dem Fenster eine HandlungsautoritĂ€t zu machen:

if ui.button("Alarm quittieren").clicked() { state.alarm = false; }  // ← die Falle

FĂŒr die Menschmaschine gilt dieselbe Grenze wie beim Sensor:

Das Dashboard liest. Ein Klick erzeugt eine Absicht, nicht eine Wirkung.
Klick → Intent → Core deutet/ververtragt → Receipt/msg_id → neuer Zustand → nĂ€chster Frame zeigt ihn.
Nie Klick → Zustand direkt.

Dieselbe Form wie Sensor misst → Raum deutet → Policy → Wirkung. Die kausalen Elemente gehören
in den Kern (questions-server/Receipt), nicht in die egui-Event-Handler — auch wenn immediate-mode
sie dir in die Hand drĂŒckt. Der Frame emittiert die Passkante, der Core entscheidet, der ĂŒbernĂ€chste
Frame zeigt das Ergebnis. Das Dashboard bleibt Zeuge, wird nie TĂ€ter.

3. Höhe im Dashboard-Zoo — egui ist kein Silo, es ist die Entscheidungs-Schicht

Heute gibt es schon mehrere Read-Surfaces, jede fĂŒr ein Subsystem:

Dashboard Antwortet auf Art Höhe
Checkmk (seeds-Proxy) „ist die Maschine gesund?" retained, pollt Agents Infra-Gesundheit
ninja.sh „werde ich gerade beklopft?" Shell-Snapshot, flĂŒchtig, menschlich gelesen Infra-Security-Moment
Ollama-UI „lebt/antwortet das Modell?" Dienst-eigen Modell
SQL/processlist „was tut die DB jetzt?" Dienst-eigen Datenbank
egui-Menschmaschine „ist die Menschmaschine sicher? schweigt ein Baum? wer ist gezĂ€hlt?" immediate-mode, Intent-fĂ€hig Passkanten-Schicht

Die ersten vier sind Infra-/Dienst-Höhe — sie sehen Bytes, Ports, Requests, Queries. Das
egui-Dashboard ist eine andere Höhe: es rendert den Zustand aus der Silence-Eskalation und den
Passkanten — was ein Rauchmelder, eine processlist und ein Request-ZĂ€hler nicht modellieren.

Es ersetzt die anderen nicht und saugt sie nicht auf. Es darf ihre Signale als Karten lesen
(ein ninja-Befund „34.126.104.0/24 hĂ€mmert 401" wird eine warning-Karte), bleibt aber Read+Intent —
es dropt keine IP, es schlÀgt das Droppen als Passkante vor, ein Mensch entscheidet.

4. Was es rendert — der Silence-Zustand der zwei BĂ€ume

  • Zwei Heartbeats, Baum A (crumbforest/nullfeld) / Baum B (onezeromore): grĂŒn steht, grau
    UNKNOWN_LIFE_SAFETY, rot gefallen.
  • Eskalations-Queue OZM↔crumbforest: warning → Ticket → 1/2/3 min → CRITICAL, als lebende Liste.
  • Counts, offene Resonanz-Tickets, UNKNOWN-ZustĂ€nde — sichtbar, quittierbar als Intent.
  • optional: eingelesene Fremdsignale (Checkmk-Alarm, ninja-/24-Befund) als warning-Karten.

5. Zwei ehrliche Vorbehalte

  1. Repaint drosseln auf dem Zero. Immediate-mode spinnt per Default Richtung 60 fps. Auf einer
    Pi Zero event-driven zeichnen: ctx.request_repaint_after(
), nur neu rendern, wenn Heartbeat/
    Ticket sich Ă€ndert — sonst frisst das Fenster den Ruhestrom, den der Core braucht.
  2. Terminal-first bleibt primÀr. Die Barrierefreiheits-/mouseless-Linie
    (hoerspiel-auf-zero-terminal-first) heißt: das Dashboard ist ein Komplement fĂŒr Crew/Sysop,
    nicht der Ersatz fĂŒr den ASCII-/Terminal-Weg der KrĂŒmel. egui hat AccessKit fĂŒr Screenreader —
    gut — aber die KatzentĂŒr bleibt das Terminal.

Kurzform

egui ist die richtige Glasscheibe — weil immediate-mode/kausal, ohne zweite AutoritĂ€t.
Bedingung, die es wahr macht: die KausalitÀt bleibt im Kern, der Bildschirm emittiert Intents,
keine Wirkungen. Es ist kein weiteres Silo neben Checkmk/ninja/Ollama/SQL, sondern die Höhe darĂŒber:
wo der Mensch entscheidet. Zeuge, nie TĂ€ter.

rust #menschmaschine #kausal #niefertig

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com