# 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.
