Phase 5: IDE-Rahmen implementieren, synchronisieren und archivieren

This commit is contained in:
2026-09-06 16:28:16 +02:00
parent 687fc230ec
commit df85a4b7b2
27 changed files with 4215 additions and 34 deletions

View File

@@ -29,7 +29,7 @@ Besondere Risiken sind unverändert ausgeführte alte Kompilate nach einer Text
| Nr. | Change | Direkt benötigte Vorgänger | Ergebnis |
|---|---|---|---|
| 01 | [Projekt- und Dokumentmodell](proposal.md) | keine | Gemeinsame Lade-/Speicheraktionen, bearbeitete Quellen, MAK und Startup-Metadaten |
| 02 | [IDE-Rahmen](../../phase-5-02-ide-rahmen/proposal.md) | 01 | Terminalbesitz, Menüs, Fenster, Dialoge, Optionen und Eingabetestpfad |
| 02 | [IDE-Rahmen](../2026-09-06-phase-5-02-ide-rahmen/proposal.md) | 01 | Terminalbesitz, Menüs, Fenster, Dialoge, Optionen und Eingabetestpfad |
| 03 | [Editor und inkrementelle Übersetzung](../../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md) | 01, 02 | Vollständige Codebearbeitung, Diagnose und schneller aktueller Compile |
| 04 | [Ausführung und Output](../../phase-5-04-ausfuehrung-und-output/proposal.md) | 01, 02, 03 | Fortsetzbare VM-Sitzung, Reset, Ausgabe, Shell und Textdruck |
| 05 | [Formular-Designer](../../phase-5-05-formular-designer/proposal.md) | 01, 02, 03 | Visuelles Gestalten und konsistenter Ereigniscode |

View File

@@ -24,6 +24,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
crates/tb-ide/src/main.rs sowie IDE-interne App-, Fenster- und Dialogmodule; vorhandenes ratatui/crossterm und tb-ui-Rendering. Der BASIC-Tastenpfad bleibt von IDE-Kürzeln getrennt.
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md).
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.
**Gesamtplanung:** [Phase-5-Übersicht](../2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -1,28 +1,28 @@
## 1. Terminalrahmen und Befehle
- [ ] 1.1 Den tb-Platzhalter durch App-Zustand, Renderloop und einen Terminal-Guard ersetzen; headless Starttest zeigt Untitled-Code, Project Window und nicht blockierende Begrüßung, Guard-Test belegt Cleanup auch im Fehlerpfad.
- [ ] 1.2 Die zwei Menüsätze und Befehls-/Verfügbarkeitstabelle aus der Referenz erfassen; ein Tabellenabgleich bestätigt Reihenfolge, Mnemonics und vollständige Einträge.
- [ ] 1.3 Den Dispatcher für Alt/F11, Menüs, Dialoge, Fenster/Modi und spätere BASIC-Zustellung implementieren; Eventtests belegen Esc-Abbruch und eindeutige Verarbeitung von F2/F10/F11/F12/Ctrl+C.
- [ ] 1.4 Dialoggrundfunktionen für Auswahl, Texteingabe, Dateiwahl und Bestätigungen mit den Aktionen aus 01 verbinden; Eventtests belegen Fokusbindung, Abbrechen und Erhalt geänderter Dokumente.
- [x] 1.1 Den tb-Platzhalter durch App-Zustand, Renderloop und einen Terminal-Guard ersetzen; headless Starttest zeigt Untitled-Code, Project Window und nicht blockierende Begrüßung, Guard-Test belegt Cleanup auch im Fehlerpfad.
- [x] 1.2 Die zwei Menüsätze und Befehls-/Verfügbarkeitstabelle aus der Referenz erfassen; ein Tabellenabgleich bestätigt Reihenfolge, Mnemonics und vollständige Einträge.
- [x] 1.3 Den Dispatcher für Alt/F11, Menüs, Dialoge, Fenster/Modi und spätere BASIC-Zustellung implementieren; Eventtests belegen Esc-Abbruch und eindeutige Verarbeitung von F2/F10/F11/F12/Ctrl+C.
- [x] 1.4 Dialoggrundfunktionen für Auswahl, Texteingabe, Dateiwahl und Bestätigungen mit den Aktionen aus 01 verbinden; Eventtests belegen Fokusbindung, Abbrechen und Erhalt geänderter Dokumente.
## 2. Fensterverwaltung und Darstellung
- [ ] 2.1 Code-/Projekt- und Werkzeugfenster mit Control-Menü, Rahmen, Scrollbalken und eigener Geometrie implementieren; TestBackend-Snapshots prüfen Titelnummern, aktive Markierung und Projektschaltflächen.
- [ ] 2.2 New Window, Arrange All und sämtliche F6-/Ctrl-Fensterbefehle aus der Spec anbinden; eine Eingabefolge belegt Wechseln, Schließen, Bewegen, Größe, Minimieren, Maximieren und Wiederherstellen ohne Dokumentverlust.
- [ ] 2.3 Das referenzierte DOS-Farbschema und klickbare Statuskürzel mit Zeile/Spalte darstellen; Snapshots und Klicktests belegen Farben, Position und dieselbe Befehlswirkung wie die Tastatur.
- [ ] 2.4 Terminal-Resize und Mindestgröße 80×25 behandeln; Tests schrumpfen unter die Grenze und zurück und prüfen erreichbare Fenster, erhaltenen Fokus und Dokumente.
- [ ] 2.5 Den Designer-Modus mit Properties-Bar-Platz und ohne Statuszeile anbinden; ein Moduswechseltest erhält das Dokument und zeigt den richtigen Menüsatz.
- [x] 2.1 Code-/Projekt- und Werkzeugfenster mit Control-Menü, Rahmen, Scrollbalken und eigener Geometrie implementieren; TestBackend-Snapshots prüfen Titelnummern, aktive Markierung und Projektschaltflächen.
- [x] 2.2 New Window, Arrange All und sämtliche F6-/Ctrl-Fensterbefehle aus der Spec anbinden; eine Eingabefolge belegt Wechseln, Schließen, Bewegen, Größe, Minimieren, Maximieren und Wiederherstellen ohne Dokumentverlust.
- [x] 2.3 Das referenzierte DOS-Farbschema und klickbare Statuskürzel mit Zeile/Spalte darstellen; Snapshots und Klicktests belegen Farben, Position und dieselbe Befehlswirkung wie die Tastatur.
- [x] 2.4 Terminal-Resize und Mindestgröße 80×25 behandeln; Tests schrumpfen unter die Grenze und zurück und prüfen erreichbare Fenster, erhaltenen Fokus und Dokumente.
- [x] 2.5 Den Designer-Modus mit Properties-Bar-Platz und ohne Statuszeile anbinden; ein Moduswechseltest erhält das Dokument und zeigt den richtigen Menüsatz.
## 3. Native Exporte vorbereiten
- [ ] 3.1 Make EXE File und Make Library als vollständige Dialoge mit Zielsystem/-architektur und Ausgabepfad implementieren; Menü-/Tastaturtests öffnen beide Dialoge und bearbeiten alle Angaben.
- [ ] 3.2 Eingabeprüfung und Überschreibentscheidung an die geschützten Dateiaktionen aus 01 anbinden; Tests prüfen leere/ungültige Pfade, bestehende Ziele, Abbrechen und erhaltene übrige Angaben.
- [ ] 3.3 Konkrete Exportaufträge und Ergebnis-/Statusdarstellung vorbereiten, im Produktionspfad bis Phase 6 nur Erzeugen sperren; kontrollierte Rückmeldungen prüfen Laufend/Erfolg/Fehler/Abbruch und ein realer Phase-5-Aufruf erzeugt keine Datei oder falsche Erfolgsmeldung.
- [ ] 3.4 Export-UI, native Zielartefakte und die Phase-6-Backend-Grenze in der Bedienungsdokumentation festhalten; Abgleich mit den expliziten PLAN-Punkten bestätigt, dass TBC nicht als natives Executable oder Library angeboten wird.
- [x] 3.1 Make EXE File und Make Library als vollständige Dialoge mit Zielsystem/-architektur und Ausgabepfad implementieren; Menü-/Tastaturtests öffnen beide Dialoge und bearbeiten alle Angaben.
- [x] 3.2 Eingabeprüfung und Überschreibentscheidung an die geschützten Dateiaktionen aus 01 anbinden; Tests prüfen leere/ungültige Pfade, bestehende Ziele, Abbrechen und erhaltene übrige Angaben.
- [x] 3.3 Konkrete Exportaufträge und Ergebnis-/Statusdarstellung vorbereiten, im Produktionspfad bis Phase 6 nur Erzeugen sperren; kontrollierte Rückmeldungen prüfen Laufend/Erfolg/Fehler/Abbruch und ein realer Phase-5-Aufruf erzeugt keine Datei oder falsche Erfolgsmeldung.
- [x] 3.4 Export-UI, native Zielartefakte und die Phase-6-Backend-Grenze in der Bedienungsdokumentation festhalten; Abgleich mit den expliziten PLAN-Punkten bestätigt, dass TBC nicht als natives Executable oder Library angeboten wird.
## 4. Optionen und Integrationsübergabe
- [ ] 4.1 Display-, Pfad-, Rechtsklick- und Syntax-Checking-Dialoge implementieren und benutzerbezogen speichern; Tests prüfen geänderte Farben/Tabweite, Include-Fallback, Defaults und Neustart aus anderem Arbeitsverzeichnis.
- [ ] 4.2 Ungültige Konfiguration und nicht schreibbare Optionsdatei diagnostizieren; Tests erhalten bedienbare Defaults beziehungsweise ungespeicherte Einstellungen ohne falsche Erfolgsmeldung.
- [ ] 4.3 Den headless App-Testpfad für nachfolgende Changes verfügbar machen und Fachbefehle bis zu ihrer Umsetzung mit erklärter Verfügbarkeit versehen; die Abdeckungstabelle unterscheidet Rahmenaktion und noch ausstehende Featureaktion.
- [ ] 4.4 Bedienung und Referenzdefaults dokumentieren und alle Oberflächen-Spec-Szenarien in verification.md zuordnen; cargo test -p tb-ide und Formatprüfung müssen bestehen.
- [x] 4.1 Display-, Pfad-, Rechtsklick- und Syntax-Checking-Dialoge implementieren und benutzerbezogen speichern; Tests prüfen geänderte Farben/Tabweite, Include-Fallback, Defaults und Neustart aus anderem Arbeitsverzeichnis.
- [x] 4.2 Ungültige Konfiguration und nicht schreibbare Optionsdatei diagnostizieren; Tests erhalten bedienbare Defaults beziehungsweise ungespeicherte Einstellungen ohne falsche Erfolgsmeldung.
- [x] 4.3 Den headless App-Testpfad für nachfolgende Changes verfügbar machen und Fachbefehle bis zu ihrer Umsetzung mit erklärter Verfügbarkeit versehen; die Abdeckungstabelle unterscheidet Rahmenaktion und noch ausstehende Featureaktion.
- [x] 4.4 Bedienung und Referenzdefaults dokumentieren und alle Oberflächen-Spec-Szenarien in verification.md zuordnen; cargo test -p tb-ide und Formatprüfung müssen bestehen.

View File

@@ -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.

View File

@@ -23,6 +23,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
tb-ide-Editor, tb-frontend Lexer/Parser/Sema und tb-vm Projektcompiler/Linker; bestehende Compile-Budget-Tests und docs/tbvm-design.md. Kein zweiter BASIC-Parser und kein Optimizer.
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../phase-5-02-ide-rahmen/proposal.md).
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -23,6 +23,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
tb-ide-Sitzung, tb-vm/interp.rs, CLI-run_chain, tb-runtime/host.rs und builtins.rs sowie tb-ui/host.rs und screen.rs. Vorhandene Ereignisse, TextScreen und CLI-Ausführung bleiben die Grundlage.
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -23,6 +23,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
tb-ide-Designer, vorhandenes tb-ui::frm::FormFile, FormsModel und tb-frontend-Forms-Metadaten. Keine zweite FRM-Implementierung und keine Programmausführung als Designvorschau.
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -23,6 +23,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
tb-ide-Hilfe, docs/ und Paketierung von tb; nutzt Fensterverwaltung und Editor-Kontext. Kein Webdienst und keine eigene zweite Dokumentationssammlung.
**Abhängigkeiten:** [phase-5-02-ide-rahmen](../phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Abhängigkeiten:** [phase-5-02-ide-rahmen](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -24,6 +24,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
tb-ide-Integrationstests, vorhandene CLI-/VM-/Forms-Tests und Benchmarks, docs/ sowie PLAN.md. Featureimplementierung bleibt jeweils beim verantwortlichen Change; dieser Change schließt Integration und Nachweise.
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md), [phase-5-04-ausfuehrung-und-output](../phase-5-04-ausfuehrung-und-output/proposal.md), [phase-5-05-formular-designer](../phase-5-05-formular-designer/proposal.md), [phase-5-06-debugger-und-direktfenster](../phase-5-06-debugger-und-direktfenster/proposal.md), [phase-5-07-hilfesystem](../phase-5-07-hilfesystem/proposal.md).
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md), [phase-5-04-ausfuehrung-und-output](../phase-5-04-ausfuehrung-und-output/proposal.md), [phase-5-05-formular-designer](../phase-5-05-formular-designer/proposal.md), [phase-5-06-debugger-und-direktfenster](../phase-5-06-debugger-und-direktfenster/proposal.md), [phase-5-07-hilfesystem](../phase-5-07-hilfesystem/proposal.md).
**Gesamtplanung:** [Phase-5-Übersicht](../archive/2026-09-06-phase-5-01-projekt-und-dokumentmodell/phase-5-uebersicht.md). Die Nummern geben eine gültige Umsetzungsreihenfolge an; OpenSpec erzwingt Change-Abhängigkeiten nicht automatisch.

View File

@@ -0,0 +1,72 @@
# ide-oberflaeche Specification
## Purpose
Definiert den bedienbaren Terminalrahmen der IDE mit zwei Arbeitsmodi, gemeinsamen Befehlen, Fenstern, Dialogen und beständigen Benutzereinstellungen.
## Requirements
### Requirement: Start und zwei Arbeitsmodi
Die IDE SHALL mit Versions-/Copyright-Begrüßung und anschließend einem leeren Projekt mit Codefenster „[1] Untitled“ und rechts angeordnetem Project Window starten. Programmierumgebung und Designer SHALL im selben Prozess arbeiten. Die Umgebung SHALL File/Edit/View/Search/Run/Debug/Options/Window und rechts Help zeigen; der Designer File/Edit/View/Tools/Options/Window/Help. Der Designer SHALL eine Properties Bar statt einer Statuszeile besitzen.
#### Scenario: Erster Start
- **WHEN** die IDE ohne Projekt gestartet wird
- **THEN** ist das leere Codefenster direkt bedienbar und das Project Window sichtbar; die Begrüßung blockiert keine Eingabe
### Requirement: Einheitliche Menü- und Befehlsbedienung
Alle Befehle aus docs/ide-referenz.md SHALL im jeweils beschriebenen Menü erscheinen. Alt oder F11 SHALL die Menüleiste aktivieren, Mnemonics auswählen und Esc abbrechen; mit „…“ bezeichnete Befehle SHALL einen Dialog öffnen. Menü, Kürzel und anklickbarer Statushinweis SHALL dieselbe Aktion auslösen. Kontextuell unzulässige Befehle SHALL deaktiviert und ihr Grund erkennbar sein.
#### Scenario: Modusabhängige Funktionstaste
- **WHEN** F10 im Designer und danach im pausierten Programmiermodus gedrückt wird
- **THEN** wechselt es im Designer zwischen Menü- und Properties Bar und löst im Programmiermodus den Prozedurschritt aus
#### Scenario: Vollständige Eingabeverteilung
- **WHEN** Ctrl+C im Editor, F11 zur Menüaktivierung und F12 im Formularkontext gedrückt werden
- **THEN** werden Kopieren, Menüaktivierung und Event Procedures ausgelöst, ohne als BASIC-Abbruch oder verlorene Taste behandelt zu werden
### Requirement: MDI-Fenster und Fokus
Fenster SHALL Titelleiste, Control-Menü, Rahmen und bei Bedarf Scrollbalken erhalten. New Window SHALL eine zusätzliche Ansicht erzeugen; Arrange All SHALL geöffnete Fenster kacheln. F6/Ctrl+F6, Shift+F6, Ctrl+F4, Ctrl+F7/F8/F9/F10/F5 und Alt+Minus SHALL Wechseln, Schließen, Verschieben, Skalieren, Minimieren, Maximieren, Wiederherstellen und Control-Menü bedienen. Die Window-Liste SHALL das aktive Codefenster markieren. Projektbuttons Form/Code und Enter SHALL die entsprechende Ansicht öffnen.
#### Scenario: Fenster wiederherstellen
- **WHEN** ein Codefenster verschoben, skaliert, minimiert, maximiert und wiederhergestellt wird
- **THEN** bleiben Dokument, Cursor und vorherige Normalgeometrie erhalten und alle Bedienelemente erreichbar
#### Scenario: Dialogfokus
- **WHEN** ein modaler Dialog geöffnet und anschließend abgebrochen wird
- **THEN** empfängt nur der Dialog die Eingaben und danach erhält das vorher aktive Fenster den Fokus zurück
### Requirement: Farben und Statusanzeige
Die IDE SHALL das Farbschema aus docs/ide-referenz.md verwenden, insbesondere blaue Codefläche, weiße aktive Titel auf Magenta, graue Menüs und schwarze Statusschrift auf Cyan. Die Statuszeile SHALL kontextuelle klickbare Kürzel und Zeile/Spalte im Format 00001:001 zeigen. Display SHALL Vorder-/Hintergrund aus 16 Farben, Desktop-Füllzeichen und Tabweite ändern können.
#### Scenario: Farben ändern
- **WHEN** der Benutzer Titelhintergrund, Desktopzeichen und Tabweite im Display-Dialog ändert
- **THEN** erscheinen die Änderungen in der IDE, während die Farbvorgaben des ausgeführten BASIC-Programms unverändert bleiben
### Requirement: Beständige und validierte Optionen
Options SHALL Display, Set Paths, Right Mouse, Save und Syntax Checking anbieten. Syntax Checking SHALL anfangs aktiv sein. Rechtsklick SHALL konfigurierbar Kontext-Hilfe auslösen. Explizites Save SHALL die Optionen benutzerbezogen speichern; fehlerhafte oder unbekannte Konfiguration SHALL mit verständlicher Diagnose und benutzbaren Vorgaben behandelt werden.
#### Scenario: Neustart mit Optionen
- **WHEN** Optionen gespeichert und die IDE aus einem anderen Arbeitsverzeichnis neu gestartet wird
- **THEN** gelten die gespeicherten Werte weiterhin, ohne Projektdateien als Konfigurationsspeicher zu benutzen
### Requirement: Terminalgröße und Wiederherstellung
Die IDE SHALL die aktuelle Terminalfläche nutzen und auf Größenänderungen reagieren. Unter 80×25 SHALL ausschließlich ein Mindestgrößenhinweis erscheinen, ohne Dokumente oder Sitzung zu verlieren. Normaler Exit und Fehlerabbruch SHALL Terminalmodus und Cursor wiederherstellen.
#### Scenario: Verkleinern und zurück
- **WHEN** ein Terminal mit offenen Dokumenten unter 80×25 schrumpft und anschließend wieder wächst
- **THEN** kehrt die bedienbare Oberfläche mit erhaltenen Dokumenten und erreichbaren Fenstern zurück
### Requirement: Vollständige Exportdialoge mit getrennter Erzeugung
Run→Make EXE File und Run→Make Library SHALL bereits in Phase 5 bedienbare Dialoge für Artefaktart, Zielsystem/-architektur und Ausgabepfad öffnen. Die Ziele SHALL als natives eigenständiges Executable beziehungsweise native Systembibliothek beschrieben sein. Die Dialoge SHALL Eingaben prüfen, Überschreibkonflikte behandeln und Zustände für Erzeugung, Erfolg, Fehler und Abbruch darstellen können. Die tatsächliche Erzeugung SHALL erst mit dem Backend aus Phase 6 verfügbar sein; bis dahin SHALL nur die Erzeugungsaktion mit einem verständlichen Verfügbarkeitsgrund gesperrt sein. Die IDE MUST NOT einen Export vortäuschen oder ein bloßes TBC-Kompilat als natives Artefakt ausgeben.
#### Scenario: Dialoge vor dem Erzeugungsbackend
- **WHEN** beide Make-Befehle in Phase 5 über Menü oder Tastatur geöffnet werden
- **THEN** lassen sich Zielsystem, Architektur und Ausgabepfad bearbeiten und validieren; die fehlende Erzeugung wird erklärt und keine Zieldatei geschrieben
#### Scenario: Fehlerhafte Ausgabeangaben
- **WHEN** ein leerer oder unzulässiger Ausgabepfad beziehungsweise ein bestehendes Ziel ohne Überschreibentscheidung angegeben wird
- **THEN** zeigt der Dialog den Eingabefehler oder die notwendige Entscheidung und behält die übrigen Angaben
#### Scenario: Ergebnisdarstellung über die vorbereitete Übergabe
- **WHEN** die Exportanbindung im Oberflächentest Erzeugung, Erfolg, Fehler und Abbruch mit demselben gültigen Auftrag zurückmeldet
- **THEN** zeigt die IDE jeweils den passenden Zustand mit Ziel beziehungsweise Diagnose und erhält die Projektdokumente; der Test behauptet keine tatsächliche native Dateierzeugung