Zum Inhalt springen
LiveAudit
MITZum Stand
In Entwicklung · Rust + WASM · MIT

Prüfen, wo die Seite
wirklich läuft

LiveAudit ist ein eingebetteter Accessibility-Inspector: ein Script-Tag auf der eigenen Seite, Befunde direkt am betroffenen Element statt in einem externen Report. Der gemeinsame Regelkern ist veröffentlicht, die Browser-Anbindung entsteht gerade.

4
Zustände statt Score
17
Regeln im Kern
22 KB
WASM, gzip
finding.json
{
  "rule_id": "images/alt-suspicious",
  "outcome": "review",
  "severity": "medium",
  "message": "Der Alt-Text „foto1.jpg" beschreibt
              das Bild vermutlich nicht.",
  "location": { "node": "1843" },
  "wcag": ["1.1.1"]
}
a11y-report 0.1.0gemeinsamer JSON-Vertrag

Stand der Umsetzung (18.09.2026)

Konzept

Architektur entschieden

Drei Schichten: TypeScript sammelt den DOM, Rust wertet aus, TypeScript zeigt an. Entscheidungen und Grenzen sind im Repository dokumentiert.

Messung

Tragfähigkeit belegt

Fünf reale Dokumente von 1.244 bis 723.613 Knoten gemessen. Der Übergang nach WASM kostet 0,5 ms bei 31.000 Knoten — der Engpass liegt woanders.

Kern

a11y-core veröffentlicht

Vier Crates auf crates.io: a11y-report, a11y-dom, accname, a11y-rules. Derselbe Regelbestand bedient Build-Zeit, CI und die laufende Seite.

Browser

Collector und WASM-Anbindung

Der DOM der laufenden Seite wird einmal in den WASM-Speicher überführt, danach wertet Rust aus. Prototyp gemessen, Produktionsfassung offen.

Anzeige

Inspector-Layer

Rahmen, Marker und Seitenleiste über der Seite — ohne den geprüften Teilbaum zu verändern.

Erweitert

Kontrast, Fokus, Live-Modus

Prüfungen, die Rendering-Daten oder echte Interaktion brauchen: Kontrast, Tabreihenfolge, Zielgrößen, veränderlicher DOM.

01 — Warum eingebettet

Ein Report sagt was.
Die Seite zeigt wo.

Klassische Prüfwerkzeuge erzeugen eine Liste, die neben der Seite liegt. Wer sie abarbeitet, sucht jedes Mal das gemeinte Element. LiveAudit dreht das um: Der Befund sitzt am Element, auf der Seite, im echten Zustand nach allen Skripten und Einbindungen.

Konzept und Entscheidungen →
  1. 01Läuft auf der Seite selbst — kein Nachbau, kein zweiter Renderer
  2. 02Verändert den geprüften Teilbaum nicht: keine Attribute, keine Inline-Styles
  3. 03Prüft und repariert nicht — ausdrücklich kein Accessibility-Overlay
  4. 04Für Entwickelnde gedacht, nicht als Ersatz für manuelle Prüfung
02 — Vier Zustände, kein Score

Ein Prozentwert verschleiert,
was man wissen will

FAIL

Automatisch festgestellt. Die Regel konnte das Problem eindeutig belegen — ein alt fehlt, eine ID kommt doppelt vor.

REVIEW

Heuristisch vermutet. Ein Alt-Text ist vorhanden, sieht aber nach einem Dateinamen aus. Braucht menschliche Bestätigung.

PASS

Bestanden. Wird intern geführt, aber standardmäßig nicht angezeigt — sonst geht der eigentliche Befund unter.

UNTESTED

Automatisiert nicht beurteilbar. Erzeugt einen Punkt auf der manuellen Prüfliste statt eines Urteils, das keines ist.

03 — Der entscheidende Unterschied

„Lief nicht" ist nicht
„bestanden"

Ausführungsvermerk je Regela11y-report · RuleRun
Regeln gelaufen
13
nicht prüfbar
4
stillschweigend übergangen
0
Jede Regel hinterlässt genau einen Vermerk — auch wenn sie nicht laufen konnte.

Eine Kontrastprüfung ohne Rendering-Zugriff liest sich in den meisten Werkzeugen wie eine bestandene Prüfung. LiveAudit hält getrennt fest, ob eine Regel überhaupt laufen konnte, und warum nicht.

04 — Gemeinsamer JSON-Vertrag

Derselbe Befund,
egal woher er kommt

finding.jsonBefund
{
  "rule_id": "images/alt-suspicious",
  "outcome": "review",
  "severity": "medium",
  "message": "Der Alt-Text „foto1.jpg" beschreibt
              das Bild vermutlich nicht.",
  "location": { "node": "1843" },
  "wcag": ["1.1.1"]
}
rule-run.jsonnicht prüfbar
{
  "rule_id": "contrast/text",
  "not_run": "capability_missing",
  "reason": "Host liefert keine Rendering-Werte"
}
05 — Ein Regelbestand, drei Oberflächen

Dieselben Regelkennungen
vom Build bis in die Seite

Ein Befund heißt im Build, in der CI und im Browser gleich. Das ist der eigentliche Grund für den Rust-Kern — nicht Geschwindigkeit.

  1. Build-Zeit

    astro-post-audit

    Liest das erzeugte HTML nach jedem astro build. Struktur und Semantik, kein Browser.

  2. CI und Crawl

    auditmysite

    Steuert Chrome fern und nutzt dessen nativen Accessibility-Tree. Zusätzlich Rendering und Interaktion.

  3. Laufende Seite

    LiveAudit

    Sitzt in der Seite selbst. Kann Ereignisse real auslösen und veränderlichen DOM beobachten.

06 — Was das Werkzeug nicht kann

Automatisierung endet
an einer klaren Stelle

Diese Bereiche sind nicht zuverlässig automatisierbar. LiveAudit meldet sie als UNTESTED mit einer Prüfliste, statt ein Urteil zu behaupten.

Screenreader-Erfahrung

Ein technisch korrektes Dokument kann sich trotzdem schlecht bedienen lassen.

Inhaltliche Qualität

Ob ein Alt-Text das Bild angemessen beschreibt oder ein Linktext im Kontext trägt, entscheidet ein Mensch.

Lesereihenfolge

Die technische Tabreihenfolge ist bestimmbar. Ob sie inhaltlich sinnvoll ist, nicht.

Komplexe Widgets

ARIA-Syntax ist prüfbar. Ob sich ein Widget für Screenreader sinnvoll verhält, zeigt erst der Test damit.

07 — Der Kern ist öffentlich

Nutzbar, auch ohne
das fertige Werkzeug

a11y-rulesRegeln
use a11y_dom::Arena;
use a11y_rules::run;

let report = run(&dokument);

// Gefunden: Bild ohne Alternativtext.
assert!(report.findings.iter()
    .any(|f| f.rule_id == "images/alt-missing"));

// Nicht beurteilt: Regeln, für die dieser Host
// keine Rolle und keinen Namen liefert.
assert_eq!(report.summary.rules_not_run, 4);
accnameAccessible Name
use accname::{name, IdIndex};

// <span id="l">Vorname</span>
// <input aria-labelledby="l">

let ids = IdIndex::build(dokument.root());
assert_eq!(name(feld, &ids).as_deref(), Some("Vorname"));
Gemessen am 18.09.2026, Chromium, Median aus fünf Läufen
0,5 ms
Übergang nach WASM
bei 31.000 Knoten
79 ms
DOM-Durchlauf
bei 31.000 Knoten
22 KB
WASM-Umfang
gzip
723.613
Knoten im größten
gemessenen Dokument
Messung nachvollziehenMessaufbau, Korpus und Auswertung liegen im Repository. Der Korpus besteht aus öffentlich abrufbaren Seiten und lässt sich mit den dokumentierten Befehlen neu beschaffen.spike/ERGEBNIS.md →
09 — Häufige Fragen

Was LiveAudit ist
und was nicht

Ist das ein Accessibility-Overlay?

Nein. Overlay-Anbieter versprechen, eine Seite per JavaScript zu reparieren. LiveAudit prüft und verändert nichts an der Seite — es zeigt Befunde in einer eigenen Schicht darüber an.

Kann ich es heute schon einsetzen?

Noch nicht. Der gemeinsame Regelkern ist als Rust-Crates veröffentlicht und nutzbar; die Browser-Anbindung und die Anzeige entstehen gerade. Der Stand oben zeigt, was fertig ist.

Was unterscheidet es von einer Browser-Erweiterung?

Eine Erweiterung muss jede prüfende Person installieren. LiveAudit bindet der Seitenbetreiber selbst ein — damit funktioniert es auch in einer Vorschau, auf Staging oder in einem Redaktionssystem, ohne dass jemand etwas installiert.

Ersetzt das eine manuelle Prüfung?

Nein, und es tut auch nicht so. Was sich nicht zuverlässig automatisieren lässt, wird als `UNTESTED` ausgewiesen und landet auf einer Prüfliste statt in einer Bestanden-Statistik.

Warum Rust und WASM?

Damit derselbe Regelbestand im Build, in der CI und im Browser läuft und Befunde überall gleich heißen. Die Messung hat gezeigt, dass Geschwindigkeit dafür nicht das Argument ist — die Wiederverwendung ist es.

Entwicklung offen mitverfolgen

Konzept, Architekturentscheidungen, Messungen und der veröffentlichte Kern liegen öffentlich. MIT-Lizenz.