82 lines
7.9 KiB
Markdown
82 lines
7.9 KiB
Markdown
# Verification Report: phase-5-05-formular-designer
|
|
|
|
Stand: 2026-09-06. Geprüft wurden Proposal, Design, alle zwölf Tasks und alle
|
|
sechs Anforderungen samt Szenarien gegen den aktuellen Arbeitsstand.
|
|
|
|
## Ergebnis
|
|
|
|
| Dimension | Ergebnis |
|
|
| --- | --- |
|
|
| Completeness | 12/12 Aufgaben; 6/6 Anforderungen umgesetzt |
|
|
| Correctness | Alle sechs Spec-Szenarien durch ausführbare Prüfungen abgedeckt |
|
|
| Coherence | Gemeinsames FRM-Dokument, vorhandene Metadaten, FormsModel/TextScreen, gemeinsamer Prozedur- und Undo-Pfad |
|
|
| Offene Befunde | 0 CRITICAL, 0 WARNING, 0 SUGGESTION |
|
|
|
|
## Anforderungen und Szenarien
|
|
|
|
Die Designerprüfungen liegen in `crates/tb-ide/tests/designer.rs` und bedienen
|
|
die produktiven App-Aktionen sowie den realen Event-Dispatcher/Renderer.
|
|
|
|
| Anforderung / Scenario | Implementierung | Nachweis |
|
|
| --- | --- | --- |
|
|
| Designfläche und vollständige Toolbox / Jede Controlklasse | `designer::tools`, `design_place`, `preview`, `design_mouse`, `design_render`; `commands::menus` | `all_metadata_tools_persist_and_preview_matches_runtime_without_events`: alle 17 Toolboxvarianten, einschließlich VSpin/HSpin, Browserklassen und Timer, persistieren mit gleichen wirksamen Properties. Pixelvergleich mit FormsModel-Rendering; aktivierter 1-ms-Timer bleibt in der Vorschau ohne Deadline/Ereignis, Load-/Timer-Code wird nicht ausgeführt. `toolbox_double_click_tool_drag_grid_and_window_form_selection` prüft Doppelklick und Tools-Aufziehen. Menu wird durch die Menütests abgedeckt. |
|
|
| Auswahl und Geometrie / Container und Mehrfachauswahl | `design_select`, `design_geometry`, `design_resize`, `design_tab`, `design_mouse`; öffentliche Laufzeitgeometrie `FormsModel::rect` | `container_multiselect_keyboard_drag_resize_and_undo`: tatsächliche Framekoordinaten, Ctrl+Klick, Tab/Shift+Tab, 1-/5-Zellen-Bewegungen, Shift-Skalierung, Drag und gemeinsames Undo. `all_eight_handles_resize_transactionally_and_preserve_identity_after_structure_edits`: alle acht Handles, Ablehnung unzulässiger Geometrie und stabile IDs über Indexänderung, Löschen, Neuanlage und Undo. |
|
|
| Properties Bar und Bearbeitungsaktionen / Ungültige Eigenschaft | `design_property`, `design_value_focus`, `design_bar`, `design_copy/paste/delete`; `Project::edit_form/undo` | `property_bar_types_readonly_and_no_status_line`: Typen/Bereiche/readonly, F2/F10, sichtbare Geometrie, keine Statuszeile, Spin-Größenvertrag. Runtime-Setter validieren zusätzlich kontextabhängige Propertyregeln in einer isolierten Vorschau. `clipboard_children_arrays_and_delete_preserve_code`: Containerkinder, neue Namen, erhaltene Array-Indizes, Cut/Paste/Clear und vollständiges Undo. |
|
|
| Menüdesigner und Farbpalette / Menü mit Array und Untermenü | `design_action`, `design_submit`, `design_menu_move/commit`, `design_tool_render`; `forms::menu_shortcuts` | `menu_hierarchy_arrays_shortcuts_and_palette_use_events`: Access-Key, Separator, Index=0, Shortcut, Hierarchie/Reihenfolge, FRM-Roundtrip und Kompilierung; Fore-/BackColor-Auftrag. `menu_indent_outdent_rename_and_field_changes_have_one_undo`: Ebenenwechsel und eine Undo-Einheit für Name und Dialogfelder. `property_menu_buttons_palette_drag_and_modal_mouse_are_connected`: echte Property-/Menübuttons, Farbdrop und Modalität. |
|
|
| Dokumentkonsistenz und Umbenennen / Umbenennen mit Ereigniscode | `design_rename_with`; `ProjectCompiler::bound_form_references`; opt-in Referenzaufzeichnung im regulären Sema; `Project::commit_transaction/undo` | `bound_rename_across_documents_is_atomic_and_undo_restores_all`: Control, Handler und qualifizierte Verweise in anderen Modulen; Undo aus einer beteiligten Datei; Konflikt-/Syntaxabbruch ohne Teiländerung. `rename_preserves_shadowed_names_and_handles_form_aliases_and_include_calls`, `shared_include_ambiguity_aborts_rename_and_event_defaults_use_includes`, `imported_type_shadow_is_not_an_object_reference_during_rename`: Kommentare/Strings, gleichnamige Variablen, importierte UDT-Felder, Prototypen/Aufrufe, Formularalias und mehrdeutig gemeinsam genutzte Includes. Löschen erhält Code und meldet ungebundene Handler sichtbar. |
|
|
| Ereignisprozeduren und Moduswechsel / Ereignis zweimal öffnen | `design_event`, `event_parameters`, gemeinsames `App::new_procedure_text`; `show_document/design_enter` | `clipboard_children_arrays_and_delete_preserve_code` öffnet Array-Click zweimal ohne Duplikat. `event_array_signature_twice_and_shared_form_identity` prüft außerdem DragOver zweimal mit Index/CONTROL/SINGLE/INTEGER, gleiche Dokumentidentität, Cursor und Controlauswahl. `existing_default_typed_event_and_all_metadata_signatures_compile`: vorhandene DEFtype-Signatur und alle CommandButton-Events kompilieren. `events_with_the_same_name_are_local_to_their_form`: gleichnamige Ereignisse zweier Formulare bleiben getrennt. |
|
|
|
|
## Persistenz und Compilergrenze
|
|
|
|
- `binary_designer_import_requires_text_target_and_compiles` bearbeitet einen
|
|
echten Binärimport, verlangt ein separates Textziel, erhält die Originalbytes
|
|
und lädt das Ergebnis über den bestehenden Compilerpfad.
|
|
- `crates/tb-cli/tests/project.rs::designer_frm_is_accepted_by_the_standalone_cli_compiler`
|
|
erzeugt ein Formular samt Control-Array und Ereigniscode über App-Aktionen,
|
|
speichert es mit dem vorhandenen Writer, startet den echten `tbc build`-Prozess
|
|
und lädt das erzeugte TBC erneut. Die zusätzliche Abhängigkeit auf tb-ide
|
|
gilt ausschließlich für CLI-Tests; es gibt keine neue externe Bibliothek.
|
|
- Der FRM-Writer lässt explizite Defaultwerte weg. Die Roundtripprüfung
|
|
vergleicht Klassen, Namen, Hierarchie, explizite Array-Indizes und sämtliche
|
|
wirksamen Metadatenproperties, statt unterschiedliche interne Maps als
|
|
Formatfehler zu behandeln.
|
|
|
|
## Behobene Befunde während der Verifikation
|
|
|
|
- Acht Größenhandles einschließlich linker/oberer Kanten und zusammenfallender
|
|
Handles kleiner Controls werden korrekt aufgelöst.
|
|
- Designerzeichen erreichen den Quelltexteditor nicht. Property-/Menübuttons
|
|
sind im nichtmodalen Dispatcher angebunden; Dialoge sperren Hintergrundaktionen.
|
|
- Fenster-/Formwechsel aktualisieren die Designeridentität. Die ursprüngliche
|
|
Befehlsidentität beim Weiterschalten eines Fensters bleibt erhalten.
|
|
- Positions-/Größenanzeige bleibt rechts sichtbar, auch wenn Propertytext lang ist.
|
|
- Umbenennen nutzt die Importkontexte der tatsächlich übersetzten Module.
|
|
Synthetische Importprototypen ohne physische Quellposition werden nicht editiert.
|
|
Echte Prototypen und Prozeduraufrufe werden semantisch erfasst; keine globale
|
|
Bezeichnerersetzung beschädigt unabhängige Variablen/UDT-Felder.
|
|
- Ereigniserzeugung verwendet denselben includebewussten New-Sub-Pfad wie der
|
|
Editor. Vorhandene Formularalias-/DEFtype-Signaturen und gleichnamige Events
|
|
unterschiedlicher Formulare werden korrekt zugeordnet.
|
|
- Aktivierte Timer bleiben im Dokument erhalten, sind in der Vorschau aber
|
|
ausdrücklich deaktiviert. Es existiert dort keine VM oder Event-Pump.
|
|
|
|
- Der workspaceweite Clippy-Lauf fand die bereits vorhandene Shell-Hilfsfunktion
|
|
hinter dem Testmodul in `tb-runtime/src/host.rs`. Sie wurde unverändert vor
|
|
das Testmodul verschoben; das beseitigt die Ordnungswarnung ohne Verhaltensänderung.
|
|
|
|
## Abschlussprüfungen
|
|
|
|
- `cargo test --workspace`: 567 bestanden, 0 fehlgeschlagen, 2 bestehende
|
|
Ignore-Fälle (Golden-Output-Generator und externe VBDOS-Referenzsuite).
|
|
Darin: 17 Designer-Integrationstests und der zusätzliche echte CLI-Compilerpfad.
|
|
- `cargo clippy --workspace --all-targets -- -D warnings`: bestanden.
|
|
- `cargo fmt --all -- --check`: bestanden.
|
|
- `git diff --check`: bestanden.
|
|
- `openspec validate --all --strict`: 23/23 gültig. Vorhandene INFO-Hinweise
|
|
zur Länge von Requirement-Texten sind keine Validierungsfehler.
|
|
|
|
Keine angeforderte Prüfdimension wurde ausgelassen. Die Tests sind headless;
|
|
für diesen Change wurde keine interaktive GUI-/Emulatorsitzung benötigt.
|
|
Die gemeinsame Phase-5-Abnahme bleibt Aufgabe von Change 08. Der Change ist
|
|
vollständig umgesetzt und zur separaten Synchronisierung/Archivierung bereit.
|