Files
TerminalBasic/docs/reviews/2026-09-06-openspec-abschlussreview.md

14 KiB
Raw Permalink Blame History

OpenSpec-Abschlussabgleich vom 06.09.2026

Aktueller Nachprüfungsstand: V01V03 sind vollständig behoben. Der abschließende Change-Review verzeichnet keine offenen Befunde; der erste Review bleibt separat erhalten.

Grundlage: Arbeitsbaum auf c8b92f06190d77714865e0018b090348f372d77e, nach Integration der fünf Korrektur-Changes und Umsetzung von spezifikationsabgleich-und-regressionsnachweise. Der Review vom 05.09.2026 bleibt die historische Bestandsaufnahme. Dieser Bericht gleicht alle dortigen F01F25 erneut ab.

Ergebnis: F01F25 sind durch Umsetzung oder präzisierten Vertrag geschlossen. Die unten genannten Regressionen bestehen im aktuellen Arbeitsbaum. Die vier Delta-Specs wurden am 06.09.2026 in die Hauptspecs synchronisiert und der Change wurde anschließend archiviert.

Befundmatrix

ID Ergebnis und heutiger Nachweis
F01 ISAM-OPEN verwendet den gemeinsamen Writer einer laufenden Transaktion. CLI-Test tbc_isam_open_in_transaktion_hat_eine_harte_frist; isamopen.bas, einschließlich Prozessfrist.
F02 SAVEPOINT/ROLLBACK stellt Satz-, Index- und Tabellenstruktur wieder her. ISAM-Tests savepoints_nehmen_index_und_tabellenstrukturen_zurueck, neue_tabellen_und_aktive_indizes_verschwinden_bei_ruecknahme; isamstruktur.bas.
F03 FREEFILE und normale/ISAM-Bindungen teilen den Nummernraum. isamdateinummern.bas prüft Lücken, Wiederbelegung, CLOSE und RESET.
F04 Beide Signale erreichen ihre registrierten Traps. events.rs beide_signale_werden_zugestellt_und_beginnen_in_quellreihenfolge.
F05 KEY STOP erhält lesbare Eingabe und merkt den Handler einmal. events.rs key_on_off_stop_gelten_fuer_alle_konsoleneingaben; zusätzlich F1 in trap-masken.bas.
F06 Eingaben und Handler behalten ihre Reihenfolge. events.rs taste_maus_und_trap_behalten_die_annahmereihenfolge, fokus_handler_laufen_geordnet_bis_zur_rueckkehr, doevents_verhindert_rekursion_derselben_forms_prozedur.
F07 Das offene Menü sperrt Traps und Forms-Timer auch bei SLEEP und Eingabe. events.rs offenes_menu_sperrt_traps_und_wartende_forms_timer_an_allen_zustellpunkten, review_menu_schliessen_stellt_pending_trap_vor_erneutem_warten_zu.
F08 Zeit und Warten kommen vom Host. events.rs ohne_zeitbedarf_keine_uhrabfrage_und_keine_mausansammlung, sleep_folgt_nur_der_hostfrist_und_forms_timer_beendet_es; Ausführungsmodell.
F09 Controls werden im jeweiligen Formular aufgelöst. project.rs zwei_formulare_mit_gleichen_controls_und_arrays_laufen_aus_dem_kompilat; der neue FRM-Test erhält zusätzlich unterschiedliche Eltern von Elementen desselben Arrays.
F10 Quellen, Module, Fehlerorte und Debuggerziele bleiben getrennt. project.rs module_includes_erl_breakpoints_und_inspektion_behalten_ihren_ursprung, initialisierungen_def_fn_und_modulhandler_haben_eigene_quellorte; CLI-Quellorttest.
F11 TBC 4 erhält Forms-Anfangswerte und Designarrays. CLI-Test projekt_und_formular_laufen_nach_entfernen_saemtlicher_quellen; VM-Projekttest für zwei Formulare.
F12 ListIndex = 1 und Auswahländerungen sind konsistent. Forms-Tests listenauswahl_bleibt_beim_einfuegen_und_entfernen_konsistent, sorted_wechsel_erhaelt_auch_die_auswahl_zwischen_duplikaten.
F13 Timerphasen beginnen bei ihrer Aktivierung. Forms-Tests timerarrays_holen_nur_aktive_zeit_nach_und_sortieren_nach_name_und_index; events.rs spaete_timeraktivierung_nutzt_hostzeit_auch_ueber_control_parameter, intervallaenderung_im_handler_verwirft_bereits_faellige_altintervalle.
F14 INPUT # bewahrt Feldfortschritt und unterscheidet leeres von fehlendem Feld. vm.rs input_datei_bewahrt_felder_und_unterscheidet_leer_von_fehlend.
F15 INPUT$ zählt Zeichen, erhält Sondertastenreste und meldet vorzeitiges EOF. vm.rs input_datei_alle_lesearten_teilen_utf8_cursor_und_seek, input_s_teilt_sondertasten_und_bewahrt_rest_fuer_inkey, unicode_puffergrenzen_und_binaere_records_bleiben_getrennt.
F16 Alle fünf CV-Funktionen verlangen exakte Bytezeichenbreite. vm.rs alle_mk_cv_paare_verlangen_exakte_bytezeichenbreite.
F17 Fehlende Datei und fehlender Elternpfad ergeben unterschiedliche Fehler. vm.rs datei_und_elternpfadfehler_sind_am_sprachzugang_unterscheidbar.
F18 BackTab wird als Tab mit Shift weitergegeben. Terminal-Mapper backtab_ist_tab_mit_shift_auch_ohne_modifier; formular-access-backtab.frm prüft den BASIC-Fokuspfad.
F19 TIMEZONEKNOWN liefert den gegenwärtigen Status, einschließlich Ausfall und Erholung. vm.rs timezoneknown_hat_integer_signatur_und_zeigt_aktuellen_status; Runtime-Test zonenquelle_ausfall_und_erholung_gelten_fuer_alle_zeitfunktionen.
F20 VM-/Forms-Einbettung benötigt kein Terminalbackend. Separater Resolver tests/terminalfrei, erneut ohne GUI ausgeführt: Terminalfreier FRM-/VM-Lauf: KM.
F21 Alle 845 Inventareinträge werden mit kompilierten BASIC-Proben bis HIR/Runtime-Ziel geprüft. inventar.rs vergleicht unabhängige Sollziele mit der konkreten Absenkung und erkennt falsche Statuswerte, Unsupported, fehlende/vertauschte Builtin-Bindungen, entfernte Absenkung und falsche Forms-Member/Typselektoren; events.rs führt alle 133 registrierten Ereignisse bis zum BASIC-Handler und erkennt eine künstlich entfernte Ereignisbindung.
F22 trap-masken.bas ergänzt KEY/UEVENT ON/OFF/STOP und EVENT OFF; formular-access-backtab.frm ergänzt gewöhnlichen Control-Access-Key und Rückwärtstab mit Click;LostFocus;GotFocus;. Der Harness prüft jedes Programm zweimal. Sieben öffentliche Programme bestehen den gesonderten Bediennachweis unten.
F23 SCREEN 013, LINE, PAINT und VIEW sind ausdrücklich erlaubt; übrige Non-Features bleiben ausgeschlossen. Sprachreferenz, Delta; CLI-Test prüft alle 14 SCREEN-Modi und benannte Abweisungen.
F24 VM-Design und Hauptspec beschreiben TBC 4 mit neun Abschnitten und dem aktuellen Opcode-Vertrag. Loader-Rundlauf, Versionsablehnung und beschädigte Referenzen sind in project.rs bzw. den CLI-Projekttests abgesichert. Dieser Change führt keine neue Formatversion ein.
F25 Dateiformate und Delta unterscheiden Originalerhalt und kanonisches Schreiben. FRM-Tests prüfen CRLF und explizite Defaults bytegleich sowie Default-Auslassung nach Änderung. Index 0 bleibt als Array-Strukturangabe erhalten.

Zusätzlich im Abgleich gefundene und behobene Ursachen

  • Die Signatur für die SHELL-Funktion fehlte; IRR erwartete die Argumente in umgekehrter Reihenfolge. Eine VM-Probe prüft jetzt SHELL → Exitcode 7 und IRR für 100/+110 → 0,1, neben den 845 Kompilierproben.
  • Koordinatenformen von CIRCLE/WINDOW und IOCTL # brachen vor der benannten Non-Feature-Diagnose ab. Parser und Semantik nennen nun das ausgeschlossene Element; POKE und PEEK sind ausdrücklich per CLI geprüft.
  • Form_KeyPress/KeyUp, Form-Fokus/Paint/Resize, Label.Change, PictureBox.Paint, ComboBox.DropDown und die getrennten Dateilistenereignisse hatten fehlende oder falsche Quellen. Die 133 Ereignisproben verwenden Tastatur, Maus, Hostzeit oder echte Modell-/BASIC-Operationen statt direkter Ereignisqueue-Einträge.
  • Der VM-Ereignisdispatch setzte auch ohne Handler den aktiven Control-Zustand. Er ignoriert jetzt fehlende Bindungen ohne diese Nebenwirkung; reine Zustandsmeldungen und nicht fokussierbare Objekte übernehmen keinen Fokus.
  • Binäre FRM-Records enthielten auch bei Einzelcontrols einen Index-Slot. Der Import berücksichtigt das tatsächliche Array-Flag. Eingebettete Includes werden als Herkunftskommentar ausgegeben, nicht ein zweites Mal geöffnet.
  • Arrayelemente unter unterschiedlichen Containern behalten ihre Eltern über vorhandene PARENT-Anfangswerte. Die Suche bleibt auf das jeweilige Formular begrenzt; der bestehende Mehrformular-/TBC-Test schützt diese Grenze.
  • Kanonisches Weglassen von Index 0 hätte ein einzelnes Arrayelement in ein Einzelcontrol verwandelt. Der Writer erhält diese Strukturangabe; der präzisierte Delta-Vertrag und der Rundlauftest benennen sie ausdrücklich.

Öffentlicher Fremdprogrammbestand

Bestand: cout/vbdos, Revision 1cdd2b32b829fe1721d0b6aecc433abc47a96fb6. Der Test erstellt für jeden Lauf per git archive eine neue Kopie dieses Commits, baut den unveränderten Programmeinstieg mit tbc build, lädt das Kompilat und bedient die VM über CaptureHost bei 100×30 Zellen. Die lokale Prüfbasis war /tmp/terminalbasic-vbdos-evidence. Kein Emulator oder interaktives Terminal.

Einstieg Deklarierte Eingabe Geprüftes Ergebnis, in beiden Läufen
graphics/graphics.mak Alt+X Formular entladen
microsoft/check.mak Alt+F, X Menü zunächst sichtbar, danach geschlossen und Formular entladen
microsoft/qlbview.mak Esc Cancel-Pfad entlädt das Formular
microsoft/seek.mak Alt+X Formular entladen
microsoft/spindemo.mak Tab, Tab, Pfeil auf VSpin_Custom ändert Text1 von 0 auf 1; Bildschirmänderung durch Pfeiltaste
microsoft/notepad.frm Alt+F, X, N im Speicherdialog Menü öffnet, Save-Dialog wird angezeigt, N beantwortet ihn und Formular wird entladen
misc/mentors/mentors.frm Alt+F, X Menü zunächst sichtbar, danach geschlossen und Formular entladen

Alle sieben Programme: diagnosefreie Übersetzung und zwei gleiche Folgen von sichtbaren Formular-/Menüzuständen und Bildschirm-Snapshots. Keine fehlende externe Voraussetzung und keine angepassten Fremdprogrammquellen. Das belegt diese sieben Einstiege und Sequenzen, keine vollständige VBDOS-Kompatibilität.

Reproduktion mit vorhandenem Checkout der genannten Revision:

TB_VBDOS_REPO=/pfad/zu/vbdos cargo test -p tb-cli --test foreign oeffentliche -- --ignored --nocapture

Der Test ist im normalen Workspace-Lauf explizit ignoriert, weil der öffentliche Checkout keine Repository-Abhängigkeit ist. Der gesonderte Aufruf oben wurde für diese Abnahme erfolgreich ausgeführt; ohne Umgebungsvariable oder bei abweichender Revision schlägt er fehl.

Abnahme und Sollbilder

  • cargo test --workspace: 481 bestanden, 0 fehlgeschlagen, 2 ignoriert. Ignoriert sind der Golden-Generator und der separat ausgeführte Fremdtest.
  • Fremdtest: 1 bestanden, sieben Programme jeweils zweimal.
  • cargo run --manifest-path tests/terminalfrei/Cargo.toml --offline: bestanden.
  • Clippy für Workspace, alle Targets/Features, -D warnings: bestanden.
  • cargo fmt --all -- --check und git diff --check: bestanden.
  • openspec validate --all --strict: 16 bestanden, 15 Hauptspecs und der aktive Change, keine Fehler. Bestehende Hinweise zu langen Requirement-Texten sind rein informativ.

Die beiden neuen Sollausgaben wurden aus den erwarteten Zuständen festgelegt. EVENT OFF verwirft eingetretene Ereignisse; es wird ausdrücklich kein Nachholen beim erneuten ON erwartet. Der bestehende formular.out wurde fachlich geprüft: Nur die zehn Attributzellen der OK-Schaltfläche in Zeile 4, Spalten 2433 wechseln auf Vordergrund 15/Hintergrund 1 (f1), weil sie den Eingabefokus behält. Die Zeichenebene und alle übrigen Zellen bleiben bytegleich. Der Golden-Generator wurde nicht ausgeführt.

Abschluss der Reviewkorrekturen

  • V01: Parent-Schlüssel enthalten den Arrayindex. Geometrie, Optionsgruppen, Menüzuordnung und Formular-Traversierung nutzen dieselbe Referenz. Container liegen bei Zeichnung und Trefferprüfung hinter ihren Kindern. Die ergänzte Gegenprobe traf vor der letzten Korrektur fälschlich Group(1) statt Other; danach sind Treffer und sichtbare Beschriftung korrekt. TBC4 bleibt unverändert, ungültige Parent-Zyklen und fehlende Arrayinstanzen werden abgewiesen.
  • V02: Die 291 festen Vorlagen enthalten unabhängige Sollziele; Forms werden gegen den abgesenkten Klassenmember geprüft. Der Inventartest liegt in tb-cli, damit $INCLUDE durch den echten Projektlader läuft. Falsche gültige Bindungen, falsche Konverterselektoren/Forms-Member sowie entfernte Absenkungen werden namentlich erkannt.
  • V03: Die gemeinsame Anweisungsauflösung weist auch Koordinaten mit Farbe/STEP, WINDOW SCREEN und PALETTE USING namentlich ab, nachdem mögliche Variablenzuweisungen erkannt wurden. Gleichnamige Arrays und SCREEN 013/LINE/PAINT/VIEW bleiben verfügbar.
  • Ergänzende Prüfung: ComboBox-Ausklapplisten schließen bei Fokuswechsel und Ausblenden; der neue Regressionstest besteht.

Alle fünf ursprünglichen Soll-Gegenproben bestehen. Der Golden-Generator wurde nicht ausgeführt; bei den Reviewkorrekturen wurden keine weiteren Sollbilder verändert.