Phase 5: Ausführung und Output implementieren und archivieren
This commit is contained in:
@@ -31,7 +31,7 @@ Besondere Risiken sind unverändert ausgeführte alte Kompilate nach einer Text
|
||||
| 01 | [Projekt- und Dokumentmodell](proposal.md) | keine | Gemeinsame Lade-/Speicheraktionen, bearbeitete Quellen, MAK und Startup-Metadaten |
|
||||
| 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](../2026-09-06-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 |
|
||||
| 04 | [Ausführung und Output](../2026-09-06-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 |
|
||||
| 06 | [Debugger und Direktfenster](../../phase-5-06-debugger-und-direktfenster/proposal.md) | 03, 04 | Quellgenaues Debuggen, Watches, Immediate, History und Fehlerhalte |
|
||||
| 07 | [Hilfesystem](../../phase-5-07-hilfesystem/proposal.md) | 02, 03 | Offline-Markdown-Hilfe und Kontextnavigation |
|
||||
|
||||
@@ -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](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../archive/2026-09-06-phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md).
|
||||
**Abhängigkeiten:** [phase-5-01-projekt-und-dokumentmodell](../2026-09-06-phase-5-01-projekt-und-dokumentmodell/proposal.md), [phase-5-02-ide-rahmen](../2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../2026-09-06-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.
|
||||
**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.
|
||||
@@ -1,27 +1,27 @@
|
||||
## 1. Fortsetzbare Ausführung
|
||||
|
||||
- [ ] 1.1 Einen begrenzten VM-Pollpfad mit eigenem Yield-Zustand ergänzen und run darüber treiben; Tests belegen Unterbrechbarkeit leerer Schleifen, unveränderte RunEvents und keine zusätzlichen Clock-Abfragen im trapfreien Standardlauf.
|
||||
- [ ] 1.2 INPUT/LINE INPUT einschließlich teilweise gelesener Eingabe als fortsetzbare Operation modellieren; Pause/Resume-Tests belegen einmaligen Prompt, erhaltenen Stack und keine doppelten Zuweisungen.
|
||||
- [ ] 1.3 INPUT$ und SLEEP an fortsetzbare Eingabe-/Deadline-Zustände anbinden; Tests belegen Zeichenreste, Timeout und Pause ohne wiederholte Nebenwirkungen.
|
||||
- [ ] 1.4 MSGBOX, INPUTBOX, modales SHOW und die sichtbare Forms-Schleife kooperativ treiben; Tests belegen Unterbrechen/Fortsetzen einschließlich Timer-, Fokus- und Handlerzustand.
|
||||
- [ ] 1.5 Alle weiteren Host-Warteaufrufer gegen den Pollpfad abgleichen und eine konkrete Liste in verification.md führen; jede wartende Operation besitzt einen Fortsetzungsnachweis oder eine dokumentierte synchrone Betriebssystemgrenze.
|
||||
- [x] 1.1 Einen begrenzten VM-Pollpfad mit eigenem Yield-Zustand ergänzen und run darüber treiben; Tests belegen Unterbrechbarkeit leerer Schleifen, unveränderte RunEvents und keine zusätzlichen Clock-Abfragen im trapfreien Standardlauf.
|
||||
- [x] 1.2 INPUT/LINE INPUT einschließlich teilweise gelesener Eingabe als fortsetzbare Operation modellieren; Pause/Resume-Tests belegen einmaligen Prompt, erhaltenen Stack und keine doppelten Zuweisungen.
|
||||
- [x] 1.3 INPUT$ und SLEEP an fortsetzbare Eingabe-/Deadline-Zustände anbinden; Tests belegen Zeichenreste, Timeout und Pause ohne wiederholte Nebenwirkungen.
|
||||
- [x] 1.4 MSGBOX, INPUTBOX, modales SHOW und die sichtbare Forms-Schleife kooperativ treiben; Tests belegen Unterbrechen/Fortsetzen einschließlich Timer-, Fokus- und Handlerzustand.
|
||||
- [x] 1.5 Alle weiteren Host-Warteaufrufer gegen den Pollpfad abgleichen und eine konkrete Liste in verification.md führen; jede wartende Operation besitzt einen Fortsetzungsnachweis oder eine dokumentierte synchrone Betriebssystemgrenze.
|
||||
|
||||
## 2. IDE-Sitzung und gemeinsamer Reset
|
||||
|
||||
- [ ] 2.1 Die Sitzungszustände und aktuellen Kompilatrevisionen an Start/Continue/Unterbrechen anbinden; App-Eventtests prüfen F5/Shift+F5/Ctrl+Break und die explizite Wahl bei Quelländerung im Break-Modus.
|
||||
- [ ] 2.2 STOP, END, SYSTEM und Fehler auf IDE-Zustände abbilden; Tests bestätigen Pause bei STOP, offene IDE nach Ende und unveränderte CLI-Exit-Codes.
|
||||
- [ ] 2.3 Explizite Startup-Auswahl aus 01 im gemeinsamen Compiler umsetzen; IDE-/CLI-/TBC-Tests belegen BAS ohne implizites Startformular, ausgewähltes FRM und unverändertes Verhalten alter MAK-Dateien.
|
||||
- [ ] 2.4 run_target/run_chain-Reset wiederverwenden und IDE-Restart/BASIC-RUN anschließen; Tests belegen neue VM/Runtime, relative Fremdziele, Startzeile und Erhalt des bearbeiteten Projekts bei fehlendem Ziel.
|
||||
- [ ] 2.5 COMMAND$-Dialog und kontrolliertes Sitzungsende implementieren; wiederholte Starts/Resets prüfen Argumente sowie fehlende alte Timer, Handles und ausstehende Aktionen.
|
||||
- [x] 2.1 Die Sitzungszustände und aktuellen Kompilatrevisionen an Start/Continue/Unterbrechen anbinden; App-Eventtests prüfen F5/Shift+F5/Ctrl+Break und die explizite Wahl bei Quelländerung im Break-Modus.
|
||||
- [x] 2.2 STOP, END, SYSTEM und Fehler auf IDE-Zustände abbilden; Tests bestätigen Pause bei STOP, offene IDE nach Ende und unveränderte CLI-Exit-Codes.
|
||||
- [x] 2.3 Explizite Startup-Auswahl aus 01 im gemeinsamen Compiler umsetzen; IDE-/CLI-/TBC-Tests belegen BAS ohne implizites Startformular, ausgewähltes FRM und unverändertes Verhalten alter MAK-Dateien.
|
||||
- [x] 2.4 run_target/run_chain-Reset wiederverwenden und IDE-Restart/BASIC-RUN anschließen; Tests belegen neue VM/Runtime, relative Fremdziele, Startzeile und Erhalt des bearbeiteten Projekts bei fehlendem Ziel.
|
||||
- [x] 2.5 COMMAND$-Dialog und kontrolliertes Sitzungsende implementieren; wiederholte Starts/Resets prüfen Argumente sowie fehlende alte Timer, Handles und ausstehende Aktionen.
|
||||
|
||||
## 3. Terminal und Ausgabe
|
||||
|
||||
- [ ] 3.1 IDE-/Programmeingaben über den Dispatcher aus 02 exklusiv zustellen; Eventtests prüfen Copy bei Editorfokus, Break bei Outputfokus und normale BASIC-Tasten genau einmal.
|
||||
- [ ] 3.2 Output-Fenster und F4-Vollbild auf demselben TextScreen darstellen und die physische Mindestgrößenprüfung vom Viewport lösen; Snapshots prüfen kleine Output-Fenster, echtes Resize und erhaltene Endausgabe.
|
||||
- [ ] 3.3 Terminalübergabe für File→Shell und BASIC-SHELL über einen gemeinsamen Hostpfad implementieren; kontrollierte Kindprozess-Tests prüfen Erfolg, Exit-Code, Benutzerabbruch und Terminalwiederherstellung.
|
||||
- [ ] 3.4 File→Print mit Auswahl/Gesamttext und UTF-8-Zieldatei an die geschützte Dateiausgabe aus 01 binden; Tests belegen Inhalt, Überschreibentscheidung und Schreibfehler ohne Datenverlust.
|
||||
- [x] 3.1 IDE-/Programmeingaben über den Dispatcher aus 02 exklusiv zustellen; Eventtests prüfen Copy bei Editorfokus, Break bei Outputfokus und normale BASIC-Tasten genau einmal.
|
||||
- [x] 3.2 Output-Fenster und F4-Vollbild auf demselben TextScreen darstellen und die physische Mindestgrößenprüfung vom Viewport lösen; Snapshots prüfen kleine Output-Fenster, echtes Resize und erhaltene Endausgabe.
|
||||
- [x] 3.3 Terminalübergabe für File→Shell und BASIC-SHELL über einen gemeinsamen Hostpfad implementieren; kontrollierte Kindprozess-Tests prüfen Erfolg, Exit-Code, Benutzerabbruch und Terminalwiederherstellung.
|
||||
- [x] 3.4 File→Print mit Auswahl/Gesamttext und UTF-8-Zieldatei an die geschützte Dateiausgabe aus 01 binden; Tests belegen Inhalt, Überschreibentscheidung und Schreibfehler ohne Datenverlust.
|
||||
|
||||
## 4. Gemeinsame Regression und Dokumentation
|
||||
|
||||
- [ ] 4.1 IDE- und CLI-Läufe mit identischem Input-/Zeit-/Forms-Skript vergleichen; vorhandene VM-, Fehlerhandler-, Runtime-, Forms- und CLI-Regressionen müssen nach dem Poll-Umbau bestehen.
|
||||
- [ ] 4.2 Sitzungsübergänge, Startup-Metadatenwirkung, Shell-/Druckanpassung und Unterbrechungsgrenzen dokumentieren; verification.md ordnet alle Spec-Szenarien den ausgeführten Nachweisen zu und Format-/Clippy-Prüfung besteht.
|
||||
- [x] 4.1 IDE- und CLI-Läufe mit identischem Input-/Zeit-/Forms-Skript vergleichen; vorhandene VM-, Fehlerhandler-, Runtime-, Forms- und CLI-Regressionen müssen nach dem Poll-Umbau bestehen.
|
||||
- [x] 4.2 Sitzungsübergänge, Startup-Metadatenwirkung, Shell-/Druckanpassung und Unterbrechungsgrenzen dokumentieren; verification.md ordnet alle Spec-Szenarien den ausgeführten Nachweisen zu und Format-/Clippy-Prüfung besteht.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Verifizierung: Phase 5 / 04 – Ausführung und Output
|
||||
|
||||
Stand: 2026-09-06. Geprüft gegen proposal.md, design.md, alle 16 Aufgaben und
|
||||
alle sechs Requirements mit neun Szenarien in specs/ide-ausfuehrung/spec.md.
|
||||
|
||||
## Ergebnis
|
||||
|
||||
Vollständig umgesetzt. Keine offenen Befunde in Vollständigkeit, Korrektheit
|
||||
oder Kohärenz. Am 2026-09-06 wurde die Hauptspezifikation `ide-ausfuehrung`
|
||||
synchronisiert, mit 19 Hauptspezifikationen erfolgreich validiert und der
|
||||
Change unter `archive/2026-09-06-phase-5-04-ausfuehrung-und-output` archiviert.
|
||||
|
||||
Die VM läuft auf dem IDE-Thread in begrenzten Intervallen. Yield und Waiting
|
||||
sind von RunEvent und Debugger-Ereignissen getrennt. Der CLI-Wrapper treibt
|
||||
dieselben Operationen bis zum nächsten RunEvent. Bestehende Capture-/Forms-
|
||||
und Fehlerhandler-Regressionen bleiben grün. Es gibt keine neuen Abhängigkeiten.
|
||||
|
||||
## Szenarien und Nachweise
|
||||
|
||||
| Spec-Szenario | Umsetzung | Ausgeführter Nachweis |
|
||||
| --- | --- | --- |
|
||||
| Startauswahl in IDE und CLI | `ProjectSources::compile`, nach Startdatei geordnete SourceUnits, explizites BAS ohne Startformular, FRM-Auswahl im TBC | IDE `startup_selection_matches_shared_cli_pipeline_and_legacy_mak`; CLI `explicit_startup_order_and_form_selection_survive_tbc`: Reihenfolge B/A, ausgewähltes zweites FRM, Legacy-Standard, COMMAND$, TBC-Rundlauf |
|
||||
| Änderung während einer Pause | Sitzung bindet Bytecode und vollständige Quellrevision; Entscheidung Neustart/ausdrücklich altes Kompilat, sichtbare Kennzeichnung | IDE `changed_paused_source_requires_explicit_old_revision_or_restart`, `comment_only_source_change_also_requires_revision_choice`; ungültiger neuer Stand startet keine VM |
|
||||
| Abbruch während INPUT | Frame besitzt Teiltext, Restlänge und Stack-Argumente; Pause nennt Quelldatei/Zeile | IDE `f5_input_pause_copy_and_single_delivery_keep_the_same_vm`; VM `partial_console_operations_keep_prompt_arguments_and_assignment`: INPUT, LINE INPUT, INPUT$, RANDOMIZE, Prompt und Zuweisung genau einmal |
|
||||
| Enge Schleife und Formular | Feste Instruktionsbudgets, fortsetzbares SHOW und Forms-Pump, Pause/F5/F4 | VM `finite_slices_preserve_events_without_clock_queries`, `modal_and_modeless_forms_resume_handlers_across_tiny_budgets`; IDE `explicit_end_and_system_end_visible_forms_but_natural_end_keeps_them_live`, einschließlich Ctrl+Break unterhalb der Terminal-Mindestgröße |
|
||||
| Wiederholter Neustart | `new_execution` als gemeinsamer Reset; altes VM-/Runtime-Objekt wird verworfen; separates Ausführungsziel | IDE `restart_drops_files_data_traps_and_queued_actions`, `restart_command_run_targets_and_missing_target_preserve_documents`, `named_run_of_current_target_uses_edited_sources`: offene Datei, DATA, Timer-Trap, Variablen, COMMAND$, ausstehende Shell/Eingaben, RUN-Startzeile, relative/fehlende Ziele und erhaltene Dokumente |
|
||||
| Kleines Ausgabefenster | ScreenWidget als abgeschnittene Ansicht des einzigen Programmpuffers; physische Mindestgröße beim Terminalbesitzer | IDE `output_viewports_resize_and_end_preserve_buffer_and_basic_colors`: 30×8-Fenster, F4, BASIC-Farben, 120×40-Resize, erhaltene Endausgabe; VM `pending_dialog_keeps_physical_resize_and_modeless_handler_finishes_after_hide` |
|
||||
| Copy und Programmeingabe | App-Dispatcher entscheidet vor Runtime-Zustellung; lokale Mauskoordinaten im Output-Viewport | IDE `f5_input_pause_copy_and_single_delivery_keep_the_same_vm`, bestehender `mouse_focus_is_modal_and_program_abort_is_not_editor_copy`: Ctrl+C im Editor kopiert, im Output pausiert es; Zeichen kommen einmal an |
|
||||
| Shell kehrt zurück | Gemeinsamer Host-Shell-Einstieg und gemeinsamer TerminalGuard; IDE plant Übergabe außerhalb des VM-Polls; Kind wird abgewartet bzw. beendet | IDE `shell_request_is_resumed_once_and_error_is_basic_error`; UI `terminal_cleanup_on_normal_error_and_partial_initialization`: Exit 0/7, kontrollierter Abbruch ohne regulären Exit-Code mit unverändertem Rückgabewert 0, Modusrestaurierung; echter PTY-Smoke für BASIC-SHELL, Ctrl+C und File→Shell mit Rückkehr, Continue und identischen Terminalattributen |
|
||||
| Druckziel nicht schreibbar | Print nutzt geschütztes `Project::save_text` und atomare Ausgabe; Auswahl/Gesamttext, Vorgabe LPT1.TXT | IDE `print_uses_utf8_protected_output_and_does_not_mutate_source`: UTF-8, Auswahl/Gesamttext, explizites Überschreiben, geschütztes Quellziel und nicht beschreibbarer Pfad unter einer regulären Datei; Quelldatei und bestehender Zielbestand bleiben unverändert |
|
||||
|
||||
Zusätzliche Nachweise: `sleep_deadline_survives_pause_and_does_not_pop_argument_twice`,
|
||||
`dialogs_keep_partial_text_focus_and_caller_arguments` und
|
||||
`common_dialog_external_call_keeps_byref_arguments_until_completion` prüfen
|
||||
Deadline, MSGBOX/INPUTBOX samt Fokus und Common-Dialog-Aufrufe mit ByRef-Argumenten.
|
||||
`ide_and_cli_run_wrapper_match_input_time_and_forms_script` vergleicht einen
|
||||
identischen Forms-Timer-/SLEEP-/Eingabe-/COMMAND$-Ablauf und die fertige Ausgabe.
|
||||
|
||||
## Aufgabenabdeckung
|
||||
|
||||
- 1.1–1.5: VM-Poll, Frame-Fortsetzungen, Dialogmodell, Forms-Pump und untenstehender Wartepfad-Audit; sieben gezielte VM-Tests plus bestehende Ereignis-/Forms-Regressionen.
|
||||
- 2.1–2.5: `execution.rs`, App-Befehle und gemeinsame Projekt-/Reset-Funktionen; zwölf IDE-Ausführungstests, CLI-Startup-/TBC- und bestehende STOP-Exitcode-Tests.
|
||||
- 3.1–3.4: Input-Dispatcher, ScreenWidget, gemeinsamer TerminalGuard, Print-Dialog; IDE-, UI- und reale PTY-Nachweise.
|
||||
- 4.1–4.2: gemeinsamer Skriptvergleich, vollständige Workspace-Regression, Bedienungsdokumentation, dieser Report und Format-/Clippy-Prüfung.
|
||||
|
||||
## Audit aller Wartepfade
|
||||
|
||||
| Pfad | Verhalten im IDE-Poll / Grenze |
|
||||
| --- | --- |
|
||||
| `Vm::konsoleneingabe` → INPUT/LINE INPUT | Teiltext im Frame; höchstens 64 gepufferte Tasten je Leseraufruf; danach Fortschritt oder Waiting, kein Host-Warten. Referenzen bleiben bis zur Zuweisung auf dem Stack. |
|
||||
| `CallBuiltin(INPUT_S, 1)` | Derselbe Leser mit erhaltener Restlänge und Tastencode-Rest; Datei-Variante mit zwei Argumenten bleibt synchrones Datei-I/O. |
|
||||
| `CallBuiltin(RANDOMIZE, 0)` | Derselbe Leser; Seed-Prompt einmal, Saatsetzung erst nach vollständiger Eingabe. Direkter Runtime-Fallback `bi_randomize`/`read_line` wird von der VM nicht verwendet. |
|
||||
| `Instr::Sleep` | Absolute Host-Deadline im Frame; Waiting nennt auch frühere Trap-/Forms-Fristen. Ereignishandler beenden SLEEP wie bisher. Der direkte Runtime-Fallback `bi_sleep` wird vom Codegenerator nicht als Wartepfad verwendet. |
|
||||
| `forms_dialog` → MSGBOX/INPUTBOX sowie ABOUT/FILEOPEN/FILESAVE/FINDTEXT/CHANGETEXT | `Dialog::poll` bewahrt Modell, Fokus, Eingabetext und Hintergrund; ein Ereignis pro Aufruf, kein blockierendes next_event. Common-Dialog-Argumente verbleiben bis Abschluss auf dem Stack. Resize erreicht auch den aufbewahrten Hintergrund. |
|
||||
| Modales SHOW / `waiting_form` | Waiting statt `warten`; Handler und wartender Aufrufer bleiben getrennte Frames. |
|
||||
| `poll_visible_forms` | Handler laufen auch über Budgetgrenzen und nach Hide vollständig zu Ende; EOF verarbeitet zuvor angenommene Ereignisse. |
|
||||
| `Vm::warten`, `run`, `run_visible_forms` | Blockierende Komfort-Wrapper für CLI/Capture; ausschließlich diese Wrapper rufen den Host-Wartepfad auf. Der explizite alte `run_visible_forms`-Einstieg bleibt für bestehende Einbetter erhalten; IDE/CLI unterscheiden natürliches Ende von END/SYSTEM. |
|
||||
| `Dialog::run`, `msgbox_dialog`, `inputbox_dialog` | Synchrone UI-Komfort-Wrapper um denselben Dialog-Poll. Die VM verwendet die fortsetzbaren Konstruktoren und `Dialog::poll`. |
|
||||
| `RtState::naechste_taste(true)`, `read_line`, direkte `bi_input_s`/`bi_sleep` | Kompatibilitäts-APIs für direkte Runtime-Nutzer; kein erreichbarer IDE-VM-Wartepfad. INKEY$ bleibt nicht blockierend. |
|
||||
| `Host::shell` | IDE: Anfrage/Ergebnis-Fortsetzung. `main` gibt das Terminal an den Vordergrundprozess ab; Erfolg, Fehler und Abbruch stellen es wieder her. CLI/sonstige synchrone Hosts dürfen den Kindprozess in diesem ausdrücklich synchronen Host-Einstieg abwarten. |
|
||||
| `TerminalHost::warten`, CLI `PipeHost::warten`/stdin | Terminal-/CLI-Ereignisschleifen, außerhalb des IDE-Hosts. `IdeHost::warten` würde im Test sofort fehlschlagen. |
|
||||
| OPEN/CLOSE, INPUT#/LINE INPUT#/INPUT$(…, Datei), GET/PUT, Verzeichnis-/Dateioperationen, ISAM, Projekt-/Include-I/O, Compiler, Print und Save | Synchrone Betriebssystem-/Rechenoperationen, keine auf Benutzertasten wartenden Schleifen. Ein laufender Systemaufruf ist nicht unterbrechbar. Die Grenze ist in design.md vorgesehen und in der Bedienungsdokumentation beschrieben. |
|
||||
|
||||
## Ausgeführte Prüfungen
|
||||
|
||||
- `cargo test --workspace`: **549 bestanden, 0 fehlgeschlagen, 2 absichtlich ignoriert**, 30 Testgruppen einschließlich Doc-Tests. Ignoriert bleiben der Golden-Ausgabe-Generator und der externe VBDOS-Formularlauf mit `TB_VBDOS_REPO`.
|
||||
- Nach letzter Korrektur der Sitzungsbereinigung: `cargo test -p tb-ide --test execution`: **12 bestanden**.
|
||||
- `cargo clippy -p tb-ide -p tb-vm -p tb-ui -p tb-cli --all-targets -- -D warnings`: bestanden.
|
||||
- `cargo fmt --all -- --check`, `git diff --check`: bestanden.
|
||||
- `cargo build -p tb-ide`; `python3 tests/support/ide-execution-pty.py`: drei PTY-Szenarien bestanden; inklusive Prüfung der Terminalattribute nach IDE-Ende.
|
||||
- `openspec validate --all --strict`: **23 bestanden**, keine Fehler.
|
||||
- `openspec instructions apply --change phase-5-04-ausfuehrung-und-output --json`: **16/16**, `all_done`.
|
||||
|
||||
Die während der Verifizierung gefundenen Differenzen wurden behoben und mit
|
||||
Regressionen abgesichert: Pipe-Ausgabe bei fehlgeschlagener Terminalinitialisierung,
|
||||
Forms-Ende/EOF und Budgetfortsetzung nach Hide, Dialog-Resize, identische RUN-Ziele
|
||||
mit anderer Schreibweise, Kommentaränderungen bei pausiertem Kompilat sowie
|
||||
veraltete Shell-Anfragen beim Reset, sofortige Eingabeumschaltung nach Ctrl+C und der unveränderte SHELLFN-Vertrag bei Signalende. Es verbleiben keine Befunde innerhalb des
|
||||
Change-Vertrags. Native EXE-/Library-Erzeugung bleibt gemäß PLAN.md in Phase 6.
|
||||
@@ -23,6 +23,6 @@ Keine bestehenden Anforderungen werden ersetzt; die neue IDE-Fähigkeit ergänzt
|
||||
|
||||
tb-vm/interp.rs, Debug-Quellorte und Frontend/Codegen für Ausdrücke und Direktfenster; tb-ide-Debugfenster. Keine zweite Auswertungsmaschine, kein Zeitreise-Debugger.
|
||||
|
||||
**Abhängigkeiten:** [phase-5-03-editor-und-inkrementelle-uebersetzung](../archive/2026-09-06-phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md), [phase-5-04-ausfuehrung-und-output](../phase-5-04-ausfuehrung-und-output/proposal.md).
|
||||
**Abhängigkeiten:** [phase-5-03-editor-und-inkrementelle-uebersetzung](../archive/2026-09-06-phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md), [phase-5-04-ausfuehrung-und-output](../archive/2026-09-06-phase-5-04-ausfuehrung-und-output/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.
|
||||
|
||||
@@ -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](../archive/2026-09-06-phase-5-02-ide-rahmen/proposal.md), [phase-5-03-editor-und-inkrementelle-uebersetzung](../archive/2026-09-06-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](../archive/2026-09-06-phase-5-03-editor-und-inkrementelle-uebersetzung/proposal.md), [phase-5-04-ausfuehrung-und-output](../archive/2026-09-06-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.
|
||||
|
||||
61
openspec/specs/ide-ausfuehrung/spec.md
Normal file
61
openspec/specs/ide-ausfuehrung/spec.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# ide-ausfuehrung Specification
|
||||
|
||||
## Purpose
|
||||
|
||||
Führt bearbeitete Projekte innerhalb der IDE mit derselben TBVM wie die CLI aus und erhält dabei verlässliche Unterbrechung, Ausgabe und Terminalbedienung.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: Start und revisionsgebundene Sitzung
|
||||
Shift+F5/Start SHALL den aktuellen gültigen Projektstand mit gewähltem COMMAND$ in einer frischen Sitzung starten. Eine explizite Startdatei SHALL als erstes Modul ausgeführt werden; übrige Modulrümpfe folgen in ihrer relativen Projektreihenfolge. Ist die explizite Startdatei ein Formular, SHALL dieses das Startformular sein; bei explizitem BAS-Start SHALL kein Formular allein aufgrund seiner Projektmitgliedschaft automatisch gestartet werden. Ohne Auswahl SHALL die bisherige CLI-Semantik gelten. Kompilierfehler MUST einen neuen Lauf verhindern.
|
||||
|
||||
#### Scenario: Startauswahl in IDE und CLI
|
||||
- **WHEN** dasselbe gespeicherte Projekt mit expliziter BAS- oder FRM-Startdatei in IDE und CLI gestartet wird
|
||||
- **THEN** stimmen Modulreihenfolge, initial sichtbare Formulare und COMMAND$ überein
|
||||
|
||||
#### Scenario: Änderung während einer Pause
|
||||
- **WHEN** Quelltext einer pausierten Sitzung geändert wird und Continue gewählt wird
|
||||
- **THEN** verlangt die IDE einen Neustart oder die ausdrückliche Fortsetzung des gekennzeichneten alten Stands; sie ersetzt keinen laufenden Code unbemerkt
|
||||
|
||||
### Requirement: Unterbrechen und Fortsetzen
|
||||
Die IDE SHALL laufende Rechenschleifen, Forms-Ereignisverarbeitung und Eingabewarten kontrolliert unterbrechen können. Ctrl+Break, Strg+C in der Programmausgabe und ein Unterbrechen-Befehl SHALL den Break-Modus an einer sicheren Grenze aktivieren. F5/Continue SHALL den erhaltenen VM-Zustand fortsetzen. STOP SHALL in der IDE pausieren; END und SYSTEM SHALL die Sitzung beenden und die IDE offen lassen. Der CLI-STOP-Vertrag SHALL unverändert bleiben.
|
||||
|
||||
#### Scenario: Abbruch während INPUT
|
||||
- **WHEN** ein Programm auf INPUT wartet und der Benutzer unterbricht
|
||||
- **THEN** reagiert die IDE ohne zusätzliche BASIC-Eingabe, zeigt die Unterbrechungsstelle und kann die ausstehende Eingabe beim Fortsetzen ohne doppelte Nebenwirkungen weiterführen
|
||||
|
||||
#### Scenario: Enge Schleife und Formular
|
||||
- **WHEN** ein Programm in einer leeren Schleife oder einer sichtbaren Form auf Ereignisse wartet
|
||||
- **THEN** bleiben Output-Umschaltung und Unterbrechen bedienbar und ein Fortsetzen erhält Variablen und Formularzustand
|
||||
|
||||
### Requirement: Einheitlicher Reset und RUN
|
||||
Restart und BASIC-RUN SHALL denselben vollständigen Sitzungsreset nutzen: Variablen, Frames, DATA-Zeiger, Fehler-/Trapzustand, Forms, Timer, Laufzeithandles und Ausgabezustand werden wie bei einem frischen Lauf neu aufgebaut. RUN mit Ziel SHALL die bestehende relative Zielauflösung und optionale Startzeile behalten. Ein fehlendes oder ungültiges Ziel SHALL eine Diagnose liefern und die IDE sowie bearbeitete Dokumente erhalten. BASIC-RUN zu einem anderen Ziel SHALL das bearbeitete IDE-Projekt nicht ersetzen.
|
||||
|
||||
#### Scenario: Wiederholter Neustart
|
||||
- **WHEN** ein Programm Variablen, Dateien und Timer verändert und danach mehrfach neu startet
|
||||
- **THEN** beginnt jeder Lauf mit den spezifizierten Anfangswerten und es bleiben keine alten Timer, Dateihandles oder parallelen Sitzungen zurück
|
||||
|
||||
### Requirement: Output-Fenster und Vollbild
|
||||
Window→Output und F4 SHALL denselben Programmbildschirm als Fenster beziehungsweise Vollbild zeigen. Eine kleinere Fensteransicht SHALL den Bildschirm abschneiden oder scrollen und MUST NOT allein durch den Ansichtswechsel die für BASIC sichtbaren Bildschirmmaße ändern. Echte Terminalgrößenänderungen SHALL über den vorhandenen Laufzeitpfad zugestellt werden. Nach Programmende SHALL die letzte Ausgabe sichtbar bleiben.
|
||||
|
||||
#### Scenario: Kleines Ausgabefenster
|
||||
- **WHEN** auf einem ausreichend großen Terminal ein Output-Fenster kleiner als 80×25 dargestellt und mit F4 umgeschaltet wird
|
||||
- **THEN** bleiben Programminhalt und logische Laufzeitgröße erhalten; im kleinen Fenster erscheint die Ausgabe statt des Terminal-Mindestgrößenhinweises
|
||||
|
||||
### Requirement: Eigentum an Eingaben und Beenden
|
||||
Eine Taste oder Mausaktion SHALL genau einmal dem aktiven IDE-Kontext oder dem laufenden Programm zugestellt werden. IDE-eigene Steueraktionen MUST NOT zusätzlich in BASIC-Eingabepuffern landen. IDE-Ende und Neustart SHALL die bisherige Sitzung kontrolliert beenden, bevor Terminalressourcen freigegeben oder eine neue Sitzung gestartet werden.
|
||||
|
||||
#### Scenario: Copy und Programmeingabe
|
||||
- **WHEN** Ctrl+C bei Editorfokus und danach ein normales Zeichen bei Programmfokus eingegeben wird
|
||||
- **THEN** kopiert die erste Aktion nur im Editor und die zweite erreicht genau einmal das BASIC-Programm
|
||||
|
||||
### Requirement: Shell und Druckausgabe
|
||||
File→Shell und BASIC-SHELL SHALL für ein interaktives Kindprogramm den Terminalmodus kontrolliert abgeben und anschließend die IDE wiederherstellen; BASIC-SHELLFN SHALL den bisherigen Exit-Code-Vertrag behalten. File→Print SHALL Auswahl oder gesamten aktiven Quelltext über einen Dialog in eine wählbare UTF-8-Druckdatei ausgeben und Fehler sichtbar machen. Dies SHALL keine Druckerhardware voraussetzen und als Plattformanpassung dokumentiert sein.
|
||||
|
||||
#### Scenario: Shell kehrt zurück
|
||||
- **WHEN** ein Shell-Kommando regulär, mit Fehler oder durch Benutzerabbruch endet
|
||||
- **THEN** sind Terminal und IDE-Fokus wiederhergestellt und das Programm erhält den passenden bestehenden Rückgabewert beziehungsweise Fehler
|
||||
|
||||
#### Scenario: Druckziel nicht schreibbar
|
||||
- **WHEN** File→Print ein unbeschreibbares Ziel erhält
|
||||
- **THEN** erscheint eine Dateidiagnose und Quelltext sowie bestehende Zieldatei bleiben erhalten
|
||||
Reference in New Issue
Block a user