# Release-Grundabnahme: Fälle und Voraussetzungen Basis: `54ee427c1c676170450068c5436e5875c84c9dce`, lokale Änderungen dieses Changes. Alle folgenden Tests sind headless. Keine DOS-/GUI-Emulatoren. ## Ausführbare Aufrufe Vom Repository aus; `--locked` bewahrt die Abhängigkeitsrevisionen: ```sh # K: gesamter Korpus einschließlich Vergleichs-Gegenproben cargo test --locked -p tb-cli --test compat # P: Projekte, Includes, TBC, Diagnosen und Dateieffekte cargo test --locked -p tb-cli --test project # I: Inventar, Sollquellen, Absenkungsziele und Statusgruppen cargo test --locked -p tb-cli --test inventar -- --nocapture # E: tatsächliche Ereignisauslöser bis BASIC cargo test --locked -p tb-vm --test events # A: IDE-Projektablauf, CLI-/TBC-Parität und Befehlsmatrix cargo test --locked -p tb-cli --bin tbc ide_acceptance:: # F: Pflichtnachweis des fixierten öffentlichen Bestands TB_VBDOS_REPO=/absoluter/pfad/zu/vbdos cargo test --locked -p tb-cli --test foreign -- --include-ignored --nocapture # G: zusammenhängende Grundabnahme, zuerst F, dann Workspace/Inventar/Gates/Benchmarks python3 tests/support/release-abnahme.py --vbdos-repo /absoluter/pfad/zu/vbdos ``` Unter Windows wird TB_VBDOS_REPO als Prozessumgebungsvariable gesetzt; G übernimmt dies plattformunabhängig. Alle Aufrufe liefern bei Fehler einen von null verschiedenen Exitcode. Die reale Windows-/Linux-Prüfung folgt in 05/06, diese Matrix behauptet nur die ausgeführten lokalen Nachweise. ## Verhaltensgruppen und unabhängiges Soll | Gruppe | Fälle | Aufruf | Soll und festgelegter Anfangszustand | | --- | --- | --- | --- | | Konsole/Zahlen/Steuerung | `hello`, `printzahlen`, `konvertierung`, `byref`, `kontrollfluss` | K: `korpus_laeuft_mit_korrekter_ausgabe` | Jeweilige `.out`, explizite tb-screen-Größe, keine Eingaben, Hostuhr 0; bestehende Sprach-/VM-Specs | | Unicode/Attribute/Größe | `breitezeichen`, `bildschirm`, `groesse`, `groessenaenderung`, `release-formular` | K | COLOR/LOCATE-/Unicodevertrag; 80×25 bzw. 120×40, deklarierte Resize-Schritte; für release-formular 100×30 und Zeichen ab Spalte 90 | | Forms/Fokus/Maus/Menü | `formular`, `formular-access-backtab`, `eingabe-maus-taste`, `eingabe-taste-maus`, `release-formular` | K | Geordnete Kopfereignisse; LostFocus vor GotFocus, genau ein Click, Menüauswahl; separate Zeichen-/Farberwartungen und zwei Läufe | | Listen/Timer/modal | `listenauswahl`, `timer-aktivierung`, `formular` | K | Deklarierte Tasten/Maus/Zeit; bestehende `.out` mit Listenauswahl, Timertext und Dialogresultat | | Zeit/Traps | `traps`, `trap-masken`, `datumzeit`, `timezoneknown`, `timezonefallback` | K, E | Virtuelle Uhr oder ausdrücklich gesetzte Zeit/Zone; KEY/UEVENT/TIMER-Masken und Reihenfolge. Zeitlose Invarianten bleiben als solche benannt | | Dateien/ISAM | `dateien`, `eingabefortschritt`, alle `isam*.bas` | K | Frisches leeres Tempverzeichnis, deklarierte Bildschirmgröße, feste Dateiinhalte aus dem BASIC-Programm; `.out` prüft Lese-/Record-/Transaktionsresultate | | Projekt-/Include-/Dateikette | `release_projekt_prueft_anfangsdateien_dateieffekte_und_include_fehler` | P | Zwei Module, verschachtelte Includes; seed.txt=`Grüße\n`, result.txt=`Start\n`; Ergebnis exakt `Start\nGrüße\n`, Quelle unverändert, Exit 2 und inner.bi Zeile 8 Spalte 5; Quell-/TBC-Lauf jeweils zweimal, Library-Quellen vor TBC-Lauf entfernt | | Fehler/physische Orte | `fehlerbehandlung`; `cli_meldet_physische_quellorte_auch_nach_verschachtelten_includes`; `tbc_run_stop_exitcode`, `tbc_run_laufzeitfehler_exitcode` | K, P | ERR/ERL getrennt von Dateizeile; STOP=3, Runtimefehler=2; Sollstellen im jeweiligen Test, keine Systemzeitabhängigkeit | | Quellfreie Projekte und Startdatei | `projekt_und_formular_laufen_nach_entfernen_saemtlicher_quellen`, `explicit_startup_order_and_form_selection_survive_tbc` | P | Festes Projekt/Form/Include, danach Quellen entfernt; identische Ausgabe und richtige Startformularwahl aus TBC | | Vollständiges Inventar | `inventar_stimmt_mit_code_ueberein`, `jeder_inventareintrag_erreicht_hir_und_laufzeitziel`, `forms_inventar_stimmt_mit_der_klassentabelle_ueberein`, `abdeckungsstand_wird_ausgewiesen` | I | docs/inventar plus feste Inventar-Quellliste und unabhängige Absenkungsziele; Gegenproben für falsche Status-/Builtin-/Forms-Bindung | | Ereignisvollständigkeit | `registrierte_form_ereignisse_erreichen_basic_aus_realen_quellen`, `registrierte_control_ereignisse_erreichen_basic_aus_realen_quellen`, `fehlender_ereignispfad_wird_namentlich_erkannt` | E | Jede registrierte Quelle löst ihren BASIC-Handler aus; künstlich fehlender Auslöser wird benannt | | IDE/CLI/TBC | `create_save_debug_help_exports_and_reopen`, `saved_project_ide_source_cli_and_tbc_have_identical_sessions`, `reference_matrix_is_complete_and_points_to_runnable_tests` | A | Feste Tastensequenzen, Hostzeiten, Anfangsdateien und konkrete Ausgabe/Dateieffekte; bestehende 45-zeilige Phase-5-Befehlsmatrix. Native Exporterzeugung ist hier noch nicht implementiert | | Dialog-EOF | `eof_im_dialog_eines_formularhandlers_beendet_die_ereignispumpe`, `eof_leert_angenommene_eingaben_bei_modalen_und_modellosen_forms` | E | EOF in einem Dialog beendet die Pumpe; bereits angenommene normale Formularereignisse bleiben vor EOF zustellbar | | Vergleichsqualität | `release_formular_vergleicht_zeichen_und_attribute_unabhaengig`, `farbabweichung_nennt_zeile_spalte_soll_und_ist`, `fehlende_groessenangabe_wird_abgewiesen` | K | Vorab geschriebene Sollausgabe; gezielte Text-/Farbmutation, verkürzte Attributzeile und CJK-Spaltenposition müssen konkrete Diagnosen liefern | Jede Korpus-Sollausgabe muss bereits existieren. Der Harness erzeugt bei fehlendem Soll keine Ersatzdatei. Neue Ausgabe `release-formular.out` wurde aus Handlerfolge und COLOR/LOCATE-Vorgaben geschrieben, nicht vom Istwert übernommen. Bestehende Golden-Dateien bleiben unverändert. ## Öffentlicher Bestand `cout/vbdos`, Revision `1cdd2b32b829fe1721d0b6aecc433abc47a96fb6`. Lokaler Prüfbestand: `/tmp/terminalbasic-vbdos-evidence`; die Bereitstellung ist extern und wird nicht einvendort. `git archive` liefert für jeden Lauf frische Dateien exakt dieser Revision. Größe 100×30, virtuelle Hostuhr 0, keine echten Wartezeiten; je Einstieg zwei Läufe mit gleichen Eingaben. | Einstieg | Eingabe | Erwartete sichtbare Wirkung | | --- | --- | --- | | `graphics/graphics.mak` | Alt+X | Startformular sichtbar, danach entladen | | `microsoft/check.mak` | Alt+F, X, N im Save-Dialog | Menü und Save-Dialog nachgewiesen, N konsumiert, Exit entlädt Formular | | `microsoft/qlbview.mak` | Esc | Cancel entlädt Startformular | | `microsoft/seek.mak` | Alt+X | Exit entlädt Startformular | | `microsoft/spindemo.mak` | Tab, Tab, Pfeil hoch | Text1 wird ` 1`, sichtbarer Snapshot ändert sich | | `microsoft/notepad.frm` | Alt+F, X, N im Save-Dialog | Menü und Save-Dialog nachgewiesen, N konsumiert, Formular entladen | | `misc/mentors/mentors.frm` | Alt+F, X, N im Save-Dialog | Menü und Save-Dialog nachgewiesen, N konsumiert, Exit entlädt Formular | Snapshots/Zustände müssen zwischen beiden Läufen identisch sein; die obigen konkreten Wirkungen werden zusätzlich geprüft. Ein bloßer Vergleich zweier gleich falscher Starts genügt nicht. Fehlendes TB_VBDOS_REPO, ein unlesbares Repository und eine falsche HEAD-Revision scheitern mit Sollrevision und konkreter Ursache. Temporäre Dateien werden bei Erfolg und beim Entrollen von Assertions aufgeräumt. ## Übergabe an 02–07 G ist der wiederverwendbare lokale Abnahmeaufruf für spätere Actions; F bleibt zwingend. 02–04 ergänzen EXE-/TBL-/IDE-Link-Parität mit diesem Sollsatz, 05 echte Terminalziele, 06 Zielpakete und Gitea-Läufe. Die finale Inventar- und Leistungsprüfung nach deren Fachänderungen gehört in 07. Dieser Change baut keine nativen Exportartefakte und nimmt keine fremden Plattformen ab.