12 KiB
Verifizierung: Phase 5 – IDE-Rahmen
Stand: 2026-09-06. Basis: 687fc230ecf84963e517fa78033f0fdc86554744 plus
Implementierung dieses Changes. Geprüft wurden Proposal, Design, alle
Tasks, die Delta-Spec ide-oberflaeche und docs/ide-referenz.md gegen
Code, Ereignisfolgen, gerenderte TestBackend-Puffer und den Terminalprozess.
Ergebnis
| Dimension | Ergebnis |
|---|---|
| Vollständigkeit | 17/17 Tasks, 7/7 Anforderungen und 11/11 Szenarien abgedeckt |
| Korrektheit | Bedienung über echte crossterm-Ereignisse, Zustandsprüfungen und Ratatui-Puffer bestätigt |
| Kohärenz | Ein Terminalbesitzer, gemeinsamer Dispatcher, Dokumentmodell aus 01 und konkrete Auftrags-/Ergebnisübergabe |
| Offene Befunde | 0 CRITICAL, 0 WARNING, 0 SUGGESTION |
Die Verifizierung wurde nach den unten genannten Korrekturen wiederholt. Keine Prüfdimension wurde ausgelassen.
Anforderungen und Implementierung
Alle Pfade beziehen sich auf die Repository-Wurzel.
| Anforderung | Implementierung |
|---|---|
| Start und zwei Arbeitsmodi | crates/tb-ide/src/main.rs: tatsächlicher Terminal-/Renderloop; app.rs::App::new, show_document und render.rs::App::render: Untitled, rechtes Project Window, Begrüßung, Environment/Designer und Properties Bar ohne Designer-Statuszeile. |
| Einheitliche Menü- und Befehlsbedienung | commands.rs::menus und Command::feature_phase: beide vollständigen Menüsätze und Verfügbarkeit; app.rs::{handle,key,click,shortcut,execute,availability}: Modal → Menü → Fenster/Modus → globale Aktionen → Programmeingabe. render.rs verwendet dieselben Command-Werte für Statusklicks und Menüs, zeigt Mnemonics und deaktivierte Befehle mit Grund. |
| MDI-Fenster und Fokus | app.rs: Window, WindowKind, WindowState, cycle, arrange, rect, window_commands und Fensteraktionen; Dokumentansichten aus 01 bleiben gemeinsam. render.rs: Titel, Control-Menü-Box, Rahmen, Scrollbalken, Min-/Max-Buttons und Projektbuttons. |
| Farben und Statusanzeige | options.rs::Options und render.rs::{dos,expanded}: sieben UI-Elemente, DOS-Palette, Desktopzeichen und Tabweite; aktive Titel Weiß/Magenta, Code Blau, Status Schwarz/Cyan und Zeile/Spalte. Farben liegen ausschließlich im IDE-Zustand. |
| Beständige und validierte Optionen | options.rs::{config_path,Options::load,Options::validate,Options::save}; Dialoge in app.rs::submit. Versionierte benutzerbezogene Datei, Defaults/Diagnosen, unbekannte Schlüssel, explizites Save, absolute Pfade und Include-Suchpfade an das Dokumentmodell. Speicherung verwendet den geschützten Einzeldatei-Schreiber aus 01. |
| Terminalgröße und Wiederherstellung | app.rs::handle und render.rs::render behandeln Resize und die physische 80×25-Grenze; terminal.rs::TerminalGuard besitzt Raw Mode, Alternate Screen, Mausmodus und Cursor einschließlich teilweise fehlgeschlagener Initialisierung. |
| Vollständige Exportdialoge mit getrennter Erzeugung | export.rs: Artifact, ProjectStamp, ExportRequest, ExportStatus; app.rs::{submit,export_result} und render.rs bilden beide Dialoge samt Prüfung und Ergebnissen ab. documents.rs::Project::validate_export_target verwendet die vorhandenen Ziel-/Binärschutzprüfungen. Erzeugen bleibt im Produktionspfad mit Phase-6-Hinweis gesperrt. |
Nachweise je Spec-Szenario
Die genannten Oberflächentests stehen in crates/tb-ide/tests/app.rs.
Sie bedienen App::handle mit Tastatur-/Mausereignissen und rendern über
TestBackend; die Prüfung beschränkt sich nicht auf direkte Command-Aufrufe.
| Szenario | Nachweis |
|---|---|
| Erster Start | start_snapshot_and_reference_menus_have_all_commands: Untitled, Project-Titel, Begrüßung und Status im Puffer; unmittelbare Texteingabe. Menüfolge, Referenznamen und eindeutige Mnemonics geprüft. Zusätzlich tatsächlicher Start im Pseudoterminal. |
| Modusabhängige Funktionstaste | dispatcher_keeps_function_keys_and_copy_out_of_basic_input: F10 wechselt im Designer Menü/Properties; im pausierten Environment wird ProcedureStep ausgewählt. Die eigentliche Debuggeraktion ist gemäß Design bis Change 06 sichtbar deaktiviert. |
| Vollständige Eingabeverteilung | Derselbe Test prüft Ctrl+C/Copy, F11 und F12/Event Procedures ohne BASIC-Zustellung; mouse_focus_is_modal_and_program_abort_is_not_editor_copy prüft Ctrl+C und Maus bei laufendem Programm mit Output-Fokus sowie die Right-Mouse-Option. |
| Fenster wiederherstellen | windows_restore_geometry_and_resize_without_document_loss: zusätzliche Ansicht, Verschieben/Skalieren, Min-/Max-/Restore, Control-Menü, Fensterwechsel und Schließen ohne Dokumentverlust. Normalgeometrie bleibt erhalten; Fensteraktionen verändern keine Dokumentcursor. |
| Dialogfokus | modal_focus_and_dirty_project_cancel_preserve_document und mouse_focus_is_modal_and_program_abort_is_not_editor_copy: Tasten/Maus bleiben modal, Abbruch erhält aktives Fenster und Text; Save/Discard/Cancel folgen dem Dokumentvertrag. |
| Farben ändern | options_apply_persist_across_bases_and_preserve_unsaved_values_on_error: Titelhintergrund, Desktopzeichen und Tabweite werden im Display-Dialog geändert; Titelzelle im gerenderten Puffer geprüft. Runtime-Farben werden von dieser ausschließlich app-lokalen Palette nicht verändert. |
| Neustart mit Optionen | Derselbe Test speichert Optionen, startet App mit anderer Projektbasis und derselben Benutzerdatei und prüft identische Werte; Include-Fallback, Syntax-Default/Toggle, ungültige Konfiguration und schreibgeschützte Optionsdatei sind enthalten. config_path verwendet ausschließlich absolute Benutzerverzeichnisse und keine CWD-Konfigurationsdatei. |
| Verkleinern und zurück | windows_restore_geometry_and_resize_without_document_loss: 40×12 zeigt nur den Hinweis, danach 80×25 mit gleichem Fokus, unveränderten Dokumenten und begrenzten Fensterrechtecken. |
| Dialoge vor dem Erzeugungsbackend | export_dialogs_validate_and_render_all_results_without_creating_files: beide Make-Menüs, bearbeitete System-/Architektur-/Pfadfelder, sichtbare Erzeugen-Sperre. Zusätzlich wurden beide Dialoge im echten tb über Alt+R/E bzw. Alt+R/L geöffnet und mit Enter geprüft; keine Dateiausgabe. |
| Fehlerhafte Ausgabeangaben | Derselbe Exporttest prüft leeren Pfad, fehlendes Verzeichnis, .tbc, vorhandenes Ziel ohne Zustimmung und ausdrückliche Zustimmung; andere Felder bleiben erhalten. Das bestehende Ziel bleibt im Phase-5-Produktionspfad unverändert. |
| Ergebnisdarstellung über die vorbereitete Übergabe | Derselbe Exporttest übergibt Running, Success, Failed und Cancelled für denselben geprüften Auftrag; sichtbare Statusausgabe und unveränderte Projektidentität/-revision geprüft. Diese kontrollierten UI-Ergebnisse sind kein Nachweis nativer Erzeugung. |
Zusätzliche Integrationsnachweise:
file_picker_save_conflict_and_project_replacement_use_real_events: Dateiauswahl, externe Änderung, explizites Überschreiben, Abbruch der Dateiauswahl und Wechsel in ein Projekt in anderem Verzeichnis.exit_with_partial_save_retains_dialog_and_unsaved_documents: Fehler beim zweiten Mitglied hält den Dialog offen und verhindert Exit; erstes Mitglied ist gespeichert, zweites dirty, MAK unverändert; Wiederholung nach Beheben des Schreibschutzes beendet erfolgreich.status_and_project_buttons_use_the_keyboard_command_pathundclicking_project_members_and_dialog_choices_transfers_focus_and_applies_values: Statusklick, Form/Code-Buttons, Fokusübergabe bei Listenklick, Enter und anklickbare Dialogauswahl/-kästchen.designer_form_list_and_context_availability_match_the_active_window: Formularliste statt BAS-Liste im Designer, eindeutige freie Formnamen, Alt-Menüwechsel und deaktivierter Textimport ohne Codefenster.terminal::tests::terminal_cleanup_on_normal_error_and_partial_initialization: Guard-Cleanup bei Normalende, propagiertem Fehler und fehlgeschlagener Initialisierung; alle 14 Dokumentmodelltests aus 01 bleiben grün.
Behobene Befunde im Implementierungs- und Prüflauf
- Der Projekttitel wurde durch die Fensterbuttons überdeckt; das rechte Anfangsfenster bietet jetzt genügend Platz für Titel und Bedienelemente.
- Doppelte Menü-Mnemonics wurden eindeutig vergeben und im Test abgesichert; Mnemonics werden auch im aufgeklappten Menü unterstrichen dargestellt.
- Ctrl+F10 wird im Designer als Fensteraktion behandelt; F10 allein wechselt auch aus einem aktiven Menü zurück zur Properties Bar.
- Ctrl+C und Mausereignisse bei Programmfokus gelangen an die vorbereitete Programmeingabe; Editor-Copy und reservierte IDE-Tasten bleiben getrennt.
- Projektbuttons verwenden das gewählte Projektmitglied. Listenklicks aktivieren das Project Window, sodass Enter dort die gewählte Ansicht öffnet. Auswahlfelder und Kästchen reagieren auf Mausklicks.
- Die Designer-Fensterliste enthält ausschließlich Formulare; Textimport ist ohne Codefenster mit erkennbarem Grund deaktiviert. Neue Dokumente und Formulare vermeiden Namenskollisionen mit vorhandenen Dateien.
- Dialogtexte zeigen einen Cursor und scrollen bei langen Eingaben; die Dateiauswahl kehrt bei Abbruch zu den erhaltenen Eingaben zurück.
Der Test für einen leeren Exportpfad wurde zudem so korrigiert, dass er nach Ctrl+A tatsächlich Delete sendet; Auswahl allein löscht keinen Text. Keine Anforderung wurde dafür abgeschwächt und kein Test deaktiviert.
Ausgeführte Abschlussprüfungen
| Prüfung | Ergebnis |
|---|---|
cargo test --workspace nach den letzten Codekorrekturen |
514 bestanden, 0 fehlgeschlagen, 2 bereits ignorierte optionale Tests |
| IDE innerhalb dieses Laufs | 12 App-Tests, 1 Guard-Test und 14 Dokumenttests bestanden |
cargo fmt --all -- --check |
bestanden |
cargo clippy -p tb-ide --all-targets -- -D warnings |
bestanden |
cargo build -p tb-ide |
bestanden |
Echter target/debug/tb in einem isolierten Pseudoterminal |
Start, beide Make-Dialoge/Prüfen, Exit/Verwerfen, Exitcode 0; termios-Ausgangszustand wiederhergestellt; Cursor/Maus/Alternate-Screen zurückgesetzt, keine Dateien im temporären Arbeitsverzeichnis |
openspec validate --all --strict --json |
23/23 gültig: 16 Hauptspecs und 7 Changes |
git diff --check, Whitespace neuer Dateien und Dokumentverweise |
bestanden |
Die zwei unverändert ignorierten Tests erzeugen manuell Golden Files bzw. benötigen den zusätzlichen externen VBDOS-Referenzcheckout. Neue Tests verwenden absolute temporäre Pfade; der Pseudoterminalprozess hat ein eigenes temporäres Arbeitsverzeichnis. Kein globaler Rust-CWD-Wechsel und keine Benutzerkonfiguration wurden für die Prüfung verändert.
Übergabe und Phasengrenzen
docs/ide-bedienung.md enthält Bedienung, Defaults, Optionspfade,
Exportgrenze und eine vollständige Befehlsabdeckung mit Zuständigkeiten.
Editor 03, Ausführung 04, Designer-Fachwerkzeuge 05, Debugger 06 und Hilfe
07 bleiben entsprechend dem ausdrücklichen Design über benannte
Verfügbarkeitsgründe deaktiviert. Der Dispatcher wählt bereits ihre
Befehle, behauptet aber keine ausgeführte Fachfunktion.
Die UI nutzt vorhandenes ratatui/crossterm und das vorhandene
unicode-width-Workspace-Paket für Terminalzellen; keine neue Crate und
kein Plugin-/Widgetframework wurden eingeführt. FormFile, Quellenlader,
SavePlan und geschützte Datei-Ersetzung stammen aus 01. Native Formate,
Library-ABI und reale Erzeugungsanbindung bleiben bei den dafür vorgesehenen
Phase-6-Punkten in PLAN.md. Dies sind geplante Change-Grenzen und keine
offenen Befunde dieses Changes. Synchronisation, Archivierung und
Commit/Push sind nicht Teil dieser Implementierungsverifizierung.
Synchronisation und Archivierung
Am 2026-09-06 wurde die Hauptspec ide-oberflaeche mit allen sieben
Anforderungen und elf Szenarien synchronisiert. Der Vergleich mit der
Delta-Spec bestätigt vollständige Inhaltsgleichheit bei kanonischer
Hauptspec-Struktur. Vor der Archivierung bestanden 17/17 Hauptspecs die
strikte Validierung, danach 23/23 aktive Einträge (17 Hauptspecs und sechs
Changes). Die durch die Archivierung betroffenen Links in Folgechanges
und Phase-5-Übersicht wurden angepasst und auf vorhandene Ziele geprüft.