# Kompatibilitäts-Testkorpus

Kleine BAS- und FRM-Referenzprogramme mit unabhängig begründeter Sollausgabe.
`cargo test --locked -p tb-cli --test compat` übersetzt sie, führt sie ohne
Terminal durch die TBVM und vergleicht jeden Lauf mit seiner `.out`.
Jeder Fall läuft zweimal. Mehrere deklarierte Bildschirmgrößen besitzen
jeweils eine eigene `<name>.<cols>x<rows>.out`.

Snapshots enthalten das getrimmte Textbild und bei abweichenden Farben eine
Attributebene. UTF-8 und LF sind verbindlich. PRINT-Leerzeichen sind auch am
Zeilenende signifikant; `.gitattributes` schützt `.out` vor Konvertierung.
Breite Zeichen erscheinen einmal, ihre Fortsetzungszellen werden nicht als
zusätzliches Leerzeichen ausgegeben. Die Farbdiagnose nennt Bildschirmspalten.

Kopfzeilen stehen bei BAS am Anfang, bei FRM in den ersten acht Codezeilen:

- `tb-screen: 80x25` ist Pflicht; mehrere Größen werden durch Kommas getrennt.
- `tb-resize: nach 1 auf 120x40` liefert eine einzelne Größenänderung nach
  dem angegebenen Host-Zustellpunkt.
- `tb-keys:` beschreibt Tasten; `<TAB>`, `<ENTER>`, `<ESC>`, `<F1>` bis `<F12>`
  und Pfeiltasten sind benannt, `+`/`^`/`%` stehen für Shift/Ctrl/Alt.
- `tb-events:` ordnet Tasten, Maus, Zeit und Resize ausdrücklich, etwa
  `key:<TAB> | resize:100x30 | mouse:down,1,0,4,25 | time:250ms`.
  Mausfelder sind Art, Taste, Modifikatoren, Zeile, Spalte (einsbasiert).
  `time:` rückt die virtuelle Uhr um den Wert vor; ohne Zeitschritt steht sie
  bei 0. `mouse:up` und `mouse:move` ergänzen Loslassen und Bewegung.
- `tb-clock: 25ms/Zustellpunkt` ist die alternative Uhr für TIMER-Traps;
  der Harness verbietet fehlende Trap-Uhren und die Mischung mit tb-events.
- `tb-tempdir` führt Dateiprogramme in einem frischen leeren Arbeitsverzeichnis
  aus und entfernt es danach, auch beim Entrollen eines Testfehlers.
- `tb-tz: +00:00` setzt eine feste Zone, `tb-tz: unknown` prüft UTC-Rückfall.
  Datums-/Zeitproben setzen ihre Werte oder prüfen ausdrücklich Invarianten;
  Zufall verwendet eine feste Saat.

`release-formular.frm` verbindet Fokuswechsel, Mausklick, Menü und Resize
mit farbiger Unicode-Ausgabe. Das Soll folgt den Handlern
`Lost;Got;Click;Menu;`, `COLOR 14,1` (e1) und `LOCATE 2,90` nach Resize auf
100×30. Der Test verändert gezielt ein Zeichen und ein Attribut in der
Erwartung und muss beides erkennen. Das Soll wird nicht aus dem VM-Istwert
gewonnen. Bestehende `formular.frm`-/Listen-/Timerfälle prüfen zusätzlich
die sichtbare Formularzeichnung und modale Übergänge.

Die Programme `eingabefortschritt`, `timezoneknown` und `timezonefallback`
prüfen Codepoints, gemeinsame Dateileseposition und Zonenzustand. Späterer
Zonenausfall und Erholung werden mit einer ersetzbaren Quelle geprüft,
ohne die Rechnerzeitzone zu ändern.

## Erforderliche Release-Grundabnahme

```sh
python3 tests/support/release-abnahme.py --vbdos-repo /absoluter/pfad/zu/vbdos
```

Der Aufruf funktioniert auch außerhalb des Checkouts mit absolutem Skriptpfad.
Er benötigt Python 3, Cargo/Rust sowie Git und tar für den Fremdbestand.
Er lädt nichts herunter. Der Git-Bestand muss HEAD
`1cdd2b32b829fe1721d0b6aecc433abc47a96fb6` enthalten; der Test exportiert exakt
diese Revision in temporäre Verzeichnisse, sodass lokale Änderungen am
Fremdcheckout nicht in die Prüfung eingehen.

Zuerst läuft der erforderliche Fremdtest mit `--include-ignored`, danach
Workspace-Regressionen, Inventarbericht, Format, Clippy und die vorhandenen
Compile-/VM-Benchmarks. Jeder Fehler beendet den Aufruf erfolglos. Ohne
Bestand oder mit falscher Revision entsteht kein bestandener Release-Nachweis.
Der normale Entwicklertest darf den Fremdtest weiter ignorieren; er allein
ist keine Release-Abnahme. Das ignorierte Golden-Erzeugungswerkzeug wird vom
Release-Aufruf niemals gestartet. Bestehende Sollwerte werden nur nach
Prüfung ihrer Spec-/Referenzgrundlage geändert.

Fallzuordnung, Eingabefolgen, Referenzrevision und Messwerte stehen im Change
`phase-6-01-kompatibilitaet-und-leistungsabnahme` in `abnahmematrix.md` und
`verification.md` (nach Archivierung unter `openspec/changes/archive/`).
Diese Grundabnahme ersetzt keine native EXE-/TBL-, reale Terminalmatrix-
oder Gitea-Releaseprüfung; diese folgen mit Phase-6-Changes 02–07.
