6.5 KiB
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 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. | 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.