Files
TerminalBasic/openspec/changes/archive/2026-09-05-ereigniszustellung-und-hostgrenzen/verification.md

6.6 KiB
Raw Blame History

Implementierungsnachweis — 05.09.2026

Change: ereigniszustellung-und-hostgrenzen, Ausgangscommit 57d6386. Alle zwölf Implementierungs-/Abnahmetasks einschließlich der fünf Verifikationsbefunde sind abgeschlossen. Die vier betroffenen Hauptspezifikationen sind synchronisiert; der Change wurde am 05.09.2026 archiviert.

Befunde und Umsetzung

Befund / Tasks Umsetzung Ausführbarer Nachweis
F04 / 1.1 SIGNAL(1) und SIGNAL(2) werden im gemeinsamen RtState-Eingang gemeldet; nur ungetrapptes SIGINT wird Abbruch. Zusätzlich erkennt der Parser SIGNAL(n) ON/OFF/STOP. VM-Test beide_signale_werden_zugestellt_und_beginnen_in_quellreihenfolge einschließlich ungültiger konstanter/dynamischer Kennungen; Runtime-Tests für STOP/OFF beider Quellen und SIGINT ohne Trap.
F05 / 1.1 ON verbraucht die Taste; STOP merkt den Trap einmal und belässt die Eingabe auch nach erneutem ON lesbar. Die Markierung bleibt beim Dialogaufruf erhalten. VM-Test key_on_off_stop_gelten_fuer_alle_konsoleneingaben: drei Zustände × INKEY$, INPUT, LINE INPUT, INPUT$. Runtime-Test mit drei STOP-Tasten; VM-Regression für verbleibende Dialogeingaben.
F06 / 1.2, 2.1 Eine Eingabequeue für Tasten/Maus bis zur Annahme. Forms-Eingaben und ihre Handler werden geordnet verarbeitet; erster Handler-Statement-Eintritt geschützt, gleiche Forms-Prozedur nicht rekursiv zugestellt. VM-Tests für aM, Ma, aMbTM einschließlich KEY-Trap; Fokusfolge LlGg; explizites DOEVENTS ergibt arbr; UNLOAD im eigenen Handler ergibt ur.
F07 / 2.1 Gemeinsame Zustellung; separate Menüsperre in Traps ohne Änderung der ON/OFF/STOP-Zustände. Bereits wartende Forms-Timer bleiben gesperrt, Menübedienung kann fortfahren. VM-Menütest über gewöhnliche Zuweisung, DOEVENTS, SLEEP und LINE INPUT: Zähler bleibt 1, nach Esc werden UEVENT und Forms-Timer nachgeholt, Ergebnis 111.
F08 / 2.2 Host besitzt Zeit und Deadline-Warten; keine Instant-/Sleep-/Yield-Rückfallebene in der VM. Auch Forms-SLEEP, modales Warten und sichtbare Forms nach Programmende nutzen den Host. Zeitabfragen nur bei tatsächlichem Zeitbedarf. Host, der jede unerwartete Uhrabfrage/Warteoperation ablehnt; eingefrorene Uhr über reale 10 ms mit zwei identischen Hostdeadlines; Forms-Timer beendet SLEEP 60 bei Hostzeit 100 ms. Bestehender klassischer SLEEP-/TIMER-Test.
F18 / 1.1 BackTab wird als TAB mit SHIFT normalisiert, auch wenn crossterm kein separates SHIFT-Flag liefert. Terminal-Mapper-Test backtab_ist_tab_mit_shift_auch_ohne_modifier; bestehende Forms-Tests für Rückwärtstab, übersprungene Controls und Access-Keys.
F20 / 2.3 tb-ui ist standardmäßig terminalfrei; terminal aktiviert Backendmodule und optionale Dependencies. CLI aktiviert dieses Feature ausdrücklich. Separater Workspace tests/terminalfrei: FRM laden/kompilieren, Forms ausführen, CaptureHost-Ausgabe KM prüfen. Normaler Dependency-Graph: 16 Pakete, keines davon crossterm, ratatui oder signal-hook. CLI-Kompilation und CLI-Prozesstests erfolgreich.
3.1 Zwei kleine geordnete Ereignisprogramme mit ausdrücklich festgelegten Ausgaben ergänzt. eingabe-taste-maus.frm → KM; eingabe-maus-taste.frm → MK. Beide laufen zweimal im bestehenden Korpusharness. Keine bestehende .out-Datei verändert.
3.2 Zeit-, Zustell-, Eingabequeue- und Backend-Verträge einschließlich Einbetter-Migration dokumentiert. VM-Design, Checks und Benchmarks unten.

Die neuen VM-Regressionen liegen in crates/tb-vm/tests/events.rs. Bestehende Trap-Rückkehr-, GOSUB-, Fehler-/RESUME-, BYREF- und Modalitätstests wurden im vollständigen Workspace-Testlauf mit ausgeführt.

Behebung der Verifikationsbefunde

V1V5 sind geschlossen. Der aktualisierte Report ordnet jede Korrektur den ursprünglichen Beobachtungen und ihren Regressionen zu. Die 25 Tests in events.rs decken nun auch fortsetzbare Eingabe samt Teiltext, Ausdrucksoperanden, BYREF, verschachtelten Handlern, STOP/CONT, Timer, Fehler-Unwinding und RETURN label ab. Objektaufrufe bewahren die Fokusfolge, Menüschluss gibt Traps sofort frei, beide Formularschleifen arbeiten Eingaben vor EOF ab und die klassische KEY-/UEVENT-Priorität bleibt erhalten.

Ausgeführte Prüfungen

  • cargo test --workspace: 419 bestanden, 0 fehlgeschlagen, 1 ignoriert. Ignoriert bleibt ausschließlich erzeuge_sollausgaben; keine automatische Neuaufzeichnung von Golden Files.
  • Separater Treiber der ursprünglichen review-probes.rs: 6 bestanden, 0 fehlgeschlagen.
  • cargo clippy -p tb-runtime -p tb-ui -p tb-vm -p tb-cli --all-targets --all-features -- -D warnings: erfolgreich, ohne Warnungen.
  • cargo fmt --all -- --check und Formatprüfung des separaten Einbetters: erfolgreich.
  • cargo run --manifest-path tests/terminalfrei/Cargo.toml --offline: erfolgreich, Terminalfreier FRM-/VM-Lauf: KM.
  • cargo tree --manifest-path tests/terminalfrei/Cargo.toml --offline --edges normal --prefix none --format '{p}': mit expliziter Prüfung auf ausgeschlossene Terminalpakete, erfolgreich.
  • openspec validate ereigniszustellung-und-hostgrenzen --strict: erfolgreich.
  • git diff --check: erfolgreich.

Release-Benchmarks

cargo bench -p tb-vm --bench compile --bench vm, auf diesem Rechner:

Last Ergebnis
Compile: 508 Zeilen 0,83 ms, Budget 50 ms eingehalten
Compile: 49.760 Zeilen in 20 Modulen 58 ms, Budget 1.000 ms eingehalten
INTEGER: 10 Mio. Iterationen 1.048 ms, 9,5 Mio. Iterationen/s
DOUBLE: 5 Mio. Iterationen 504 ms, 9,9 Mio. Iterationen/s
SUB/BYREF: 1 Mio. Aufrufe 123 ms, 8,2 Mio. Aufrufe/s
String-Funktionen: 200.000 Runden 99 ms, 2,0 Mio. Runden/s

Der Compile-Projektbenchmark übersetzt 20 Module einzeln; er prüft keinen Mehrmodul-Linker. Die VM-Zahlen sind lokale Durchsatzmessungen, keine zugesicherte Performance auf anderer Hardware.

Synchronisation und Archivierung

Neun bestehende Requirements in vier Hauptspezifikationen wurden um elf Szenarien ergänzt; alle bisherigen Szenarien bleiben erhalten. Vollständiger Abgleich aller Delta-Requirements erfolgreich; openspec validate --specs --strict: 15 bestanden, 0 fehlgeschlagen.

Grenzen

Terminaleingaben wurden über den Mapper und vorbereitete Hostereignisse geprüft. Kein interaktiver Terminal-/Fremdprogrammvergleich und keine Windows-/Linux-Ausführung. Der neue Vertrag verlangt von Einbettern eine Implementierung von Host::warten; CaptureHost modelliert eine endliche Ereignisquelle und explizites virtuelles Fortschreiten bis zur Deadline.