# Implementierungsnachweis — 05.09.2026 Change: `forms-zustand-und-bedienung`, Ausgangscommit `644a862`. Alle sieben Tasks sind abgeschlossen; V1, V2 und V3 sind behoben. Die erneute [Verifikation](review.md) bestätigt beide Requirements und alle acht Szenarien ohne offene Befunde. Beide Delta-Requirements wurden am 05.09.2026 mit der Hauptspec synchronisiert und vollständig abgeglichen; anschließend wurde der Change unter `2026-09-05-forms-zustand-und-bedienung` archiviert. ## Umsetzung und Nachweise | Task / Befund | Umsetzung | Ausführbarer Nachweis | | --- | --- | --- | | 1.1 / F12 | −1 ist bei leerer und gefüllter Liste zulässig. Einfügen/Entfernen verschiebt die Auswahl mit ihrem Eintrag; Entfernen der Auswahl hebt sie auf. Textabfrage und Combo-Anzeige verwenden denselben Auswahlzustand, editierbarer Text bleibt erhalten. | `listenauswahl_bleibt_beim_einfuegen_und_entfernen_konsistent`: ListBox und alle drei ComboBox-Stile, jeweils sortiert/unsortiert, Grenzen, Auswahl, List/Text/Count und Darstellung. Korpus `listenauswahl.frm`. | | 2.1 / F13 | Aktivierungszeit wird über die Hostuhr erfasst. Interval-Zuweisung setzt die aktive Phase zurück; unverändertes Enabled lässt sie weiterlaufen. Reset/Deaktivierung entfernt wartende Ereignisse einschließlich Arrayindex 0. Verstecken/Entladen beendet die Phase. | `timer_neustart_verwirft_alte_fristen_und_ereignisse`; VM-Test `spaete_timeraktivierung_nutzt_hostzeit_auch_ueber_control_parameter` für direkte/dynamische Property-Zuweisung und Enabled; bei 1000 ms aktiviert, bei 1099 ms still, bei 1100 ms einmal zugestellt. | | 2.1 | Intervalländerung im eigenen Handler verwirft bereits fällige Altintervalle. | `intervallaenderung_im_handler_verwirft_bereits_faellige_altintervalle`: erster Handler bei 100 ms, Änderung bei 450 ms, neue erste Frist bei 650 ms, dann Interval = 0. | | 2.2 | Durchgehend aktive Timer behalten die Nachholregel. Gleichzeitige Timer werden nach Name, Arrayelemente nach numerischem Index geordnet. | `timerarrays_holen_nur_aktive_zeit_nach_und_sortieren_nach_name_und_index`: zwei Ereignisse pro Timer nach 250 ms aktiver Zeit, identische Wiederholung, gezielte Deaktivierung/Entladung und Neustart nach HIDE/SHOW. Bestehende Menüsperr-/Timer-Reihenfolgetests. | | 3.1 | Zwei Formular-Korpusfälle mit ausdrücklich festgelegten Sollausgaben und ergänzte [Forms-Referenz](../../../../docs/forms-referenz.md). | `listenauswahl.frm`: −1, verschobene Auswahl und erhaltener Combo-Text. `timer-aktivierung.frm`: Aktivierung bei 1000 ms, Ereignis beendet SLEEP bei 1100 ms. Beide im normalen Korpus zweimal ausgeführt. | | 3.2 | Beide vollständigen Delta-Requirements mit acht Szenarien wurden nach erfolgreicher Abnahme in die Hauptspec übernommen. | OpenSpec-Validierung und Diff-Prüfung erfolgreich. | Das Terminalbeispiel `tb-ui/examples/spike.rs` benötigt jetzt ausdrücklich das Feature `terminal`. Damit funktioniert auch der vorgeschriebene Einzelaufruf `cargo test -p tb-ui` ohne die Feature-Vereinigung des Workspace. `tb-ui` nutzt für die Zellenbreite jetzt dieselbe bereits im Workspace vorhandene Bibliothek `unicode-width` wie `tb-runtime`; kein zusätzliches Bibliothekspaket wurde eingeführt. ## Behebung der Verifikationsbefunde V1, V2 und V3 sind geschlossen. Die gemeinsame stabile Sortierung erhält die Auswahl über ursprüngliche Eintragsindizes, auch bei Duplikaten. Laufzeit- und initiale Property-Zugriffe verwenden denselben Pfad. Die Simple-ComboBox nutzt den Listenrenderer der ListBox einschließlich Auswahlmarkierung und Begrenzung auf den verfügbaren Raum, einschließlich Mindestbreite und Mindesthöhe 1. Der gemeinsame Listenrenderer begrenzt Rahmen vor dem frühen Rücksprung für schmale Controls. `fit` berücksichtigt die Zellenbreite und ersetzt Steuerzeichen; `TextScreen::print_line` verhindert Umbruch und Scrollen bei Forms-Ausgaben am Bildschirmrand. BASIC-PRINT behält seinen bisherigen Zeichenpfad mit Umbruch und Scrollen. Die neuen Modell-/Bildschirmtests heißen `sorted_wechsel_erhaelt_auch_die_auswahl_zwischen_duplikaten` und `simple_combo_zeichnet_listeninhalt_auswahl_und_begrenzung`. Die drei ursprünglichen Review-Proben bestehen unverändert in ihren Erwartungen. Der Korpus prüft nachträgliches Sorted bei unveränderter Sollausgabe. `listenrenderer_haelt_zellgrenzen_auch_an_bildschirmraendern_ein` prüft 3.360 Kombinationen: ListBox, alle drei Combo-Stile, DirListBox, FileListBox, DriveListBox; Basis- und dynamische Arrayelemente; Breiten 1/2/3/6/15/254, Höhen 1/2/3/5/254; normale, randnahe und außerhalb liegende Positionen; leere und gefüllte Listen mit breiten Zeichen und CR/LF. Alle Zellen außerhalb des Controlrechtecks werden einschließlich Farben und Fortsetzungsmarkierung mit dem Ausgangsbild verglichen. Der Test schlug vor der Korrektur fehl und besteht danach. `ui_zeile_bleibt_am_rand_ohne_umbruch_oder_scrollen` sichert zusätzlich den rechten/unteren Bildschirmrand und einen eigenen VIEW-PRINT-Bereich ab. ## Ausgeführte Prüfungen Nach Behebung erneut ausgeführt: - `cargo test --workspace`: **428 bestanden, 0 fehlgeschlagen, 1 ignoriert**. - Separater Treiber für `review-probes.rs`: **4 bestanden, 0 fehlgeschlagen**; die Erwartungen der ursprünglichen Mindestmaßprobe wurden nicht abgeschwächt. - `cargo clippy -p tb-ui -p tb-vm -p tb-runtime --all-targets --all-features -- -D warnings`: erfolgreich. - Format-, OpenSpec- und Diff-Prüfung: erfolgreich. Die vorherige Implementierungsabnahme umfasste zusätzlich folgende Einzelaufrufe: - `cargo test -p tb-ui`: 42 bestanden. - `cargo test -p tb-vm`: 149 bestanden, darunter 27 Ereignisregressionen. - Abschließend beide Pakete zusammen: `cargo test -p tb-ui -p tb-vm`, 191 bestanden, 0 fehlgeschlagen. - `cargo test -p tb-cli --test compat`: 16 bestanden, 1 bewusst ignoriert (`erzeuge_sollausgaben`). Keine bestehenden Golden Files verändert oder neu aufgezeichnet. - `cargo clippy -p tb-ui -p tb-vm --all-targets --all-features -- -D warnings`: erfolgreich, ohne Warnungen. - `cargo fmt --all -- --check`: erfolgreich. - `openspec validate forms-zustand-und-bedienung --strict`: erfolgreich. - `git diff --check`: erfolgreich. ## Grenzen Die neuen Nachweise prüfen den vereinbarten Vertrag mit virtueller Hostzeit. Kein neuer interaktiver VBDOS-/Terminalvergleich und keine Windows-/Linux- Ausführung. Bestehende Zeichenbilder bleiben unverändert; ihr Combo-Test wählt den darzustellenden Eintrag nun ausdrücklich aus. Einbetter mit direktem Forms-Modellzugriff müssen neue Timerphasen durch `sync_timers` mit ihrer Hostzeit beginnen lassen; die VM übernimmt das selbst.