Phase 5: IDE-Rahmen implementieren, synchronisieren und archivieren
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
# 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_path` und
|
||||
`clicking_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.
|
||||
Reference in New Issue
Block a user