# Implementierungsnachweis — 05.09.2026 Change: `ereigniszustellung-und-hostgrenzen`, Ausgangscommit `57d6386`. Alle zwölf Implementierungs-/Abnahmetasks einschließlich der fünf [Verifikationsbefunde](review.md) 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](../../../../docs/tbvm-design.md#ausführungsmodell--unterbrechbarkeit), Checks und Benchmarks unten. | Die neuen VM-Regressionen liegen in [crates/tb-vm/tests/events.rs](../../../../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 V1–V5 sind geschlossen. Der [aktualisierte Report](review.md) 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.