Forms-Zustand und Darstellung korrigieren und Change archivieren
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user