6.6 KiB
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
V1–V5 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ßlicherzeuge_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 -- --checkund 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.