Files
TerminalBasic/openspec/changes/archive/2026-09-07-phase-6-01-kompatibilitaet-und-leistungsabnahme/abnahmematrix.md

88 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 0207
G ist der wiederverwendbare lokale Abnahmeaufruf für spätere Actions; F
bleibt zwingend. 0204 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.