Files
TerminalBasic/docs/plattformmatrix.md

11 KiB
Raw Blame History

Plattformabnahme Phase 6, Change 05

Diese Matrix prüft die tatsächliche IDE und native Exporte auf den vier Release-Zielen. Automatisierte Headless-/PTY-/Konsolentests und die manuelle Emulatorbedienung sind getrennte Nachweise. Eine grüne Compilation oder ein archivierter Fachchange schließt keine noch ungeprüfte Matrixzelle.

Verbindliche Matrix

ID Tatsächliches Ziel Emulator OS-Version Terminalversion Revision / Executable-SHA-256 Visueller Stand
W Windows amd64 Windows Terminal offen offen offen nicht ausgeführt
M macOS arm64 Terminal.app 26.6.2 (25G83) 2.15 je Lauf eintragen nicht ausgeführt
X64 Linux amd64 xterm offen offen offen nicht ausgeführt
V64 Linux amd64 VTE-Terminal, Produkt benennen offen offen offen nicht ausgeführt
XA Linux arm64 xterm offen offen offen nicht ausgeführt
VA Linux arm64 VTE-Terminal, Produkt benennen offen offen offen nicht ausgeführt

Je Zelle zusätzlich Datum/Prüfer, TERM, COLORTERM, NO_COLOR, Profil, Transparenz/Dimmung, Größe und OS-/Terminal-Shortcutbelegungen protokollieren. Unbekannte Werte sind offen, keine Defaultannahmen. Ein Prüfcontainer auf Linux ersetzt weder Windows/macOS noch einen echten xterm-/VTE-Lauf.

Automatisierte Zielprüfungen

Kandidaten im passenden Checkout bauen:

cargo build --locked --release -p tb-ide -p tb-cli -p tb-runner -p tb-export --bins
python3 tests/support/platform-abnahme.py --bin-dir target/release --output /tmp/tb-platform-proof

Unter Windows python und ein neues, absolutes Ausgabeverzeichnis verwenden; zusätzlich --windows-console-test <tb-ui-Testexecutable.exe> übergeben. Dieses Testexecutable entsteht mit cargo test --locked -p tb-ui --features terminal --lib --no-run auf Windows oder wird als passendes Cross-Testartefakt bereitgestellt. Direkter Aufruf:

<tb-ui-Testexecutable.exe> --exact terminal::tests::windows_console_restores_modes --ignored --nocapture

Der Test verwendet eine eigene Kindkonsole mit 30-Sekunden-Frist. Er prüft nichtstandardmäßige Eingabeflags, Shell-Ergebnisse 0/7, Abbruch, Rückkehr zu Raw Mode sowie Cleanup nach Render- und Initialisierungsfehlern. Die Windows-Terminal-Bedienung der Matrix wird dadurch nicht abgedeckt. Der fehlende Windows-Test wird vom Sammelaufruf als fehlend gewertet.

platform-abnahme.py sammelt Bericht, Logdateien und Unix-PTY-Transkripte in einem neuen Verzeichnis; es überschreibt keine vorhandenen Nachweise. Es verwendet die vorhandenen native-abnahme.py, library-abnahme.py und ide-execution-pty.py. report.json enthält tatsächliches Host-Target, OS-/Pythonversion, Checkout-Revision, Dirty-Status/Diff-Prüfsumme, Executable-/Harness-Prüfsummen und Ergebnisse. Bei lokalen Änderungen gehört working-tree.patch zum Nachweis. Binaries müssen aus genau diesem Stand gebaut werden; eine Checkout-Revision allein belegt ihre Herkunft nicht. Für 06 kommen Buildmanifest und exakte Paketprüfsumme hinzu.

all_automated_passed bezeichnet nur diese automatisierten Prüfungen. manual_terminal_status bleibt not_run und matrix_complete bleibt false. Ein erfolgreicher Skript-Exit ist keine Releasefreigabe. tb-template wird hier als Prüf-/Buildhilfe benötigt; Anwenderprogramme benötigen es nicht.

Die TBL-Probe verwendet auf allen vier Zielen unverändert tests/libraries/portable.tbl, SHA-256 5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df. Das jeweilige library.log muss quellfreies Linken nach TBC und EXE, tatsächliche Ausführung und den gleichen RUN-Neustart belegen. Ein neues, pro Target anders erzeugtes TBL ist kein Ersatz.

Eingabeprobe vorbereiten

tests/platform/input.frm in ein eigenes Prüfverzeichnis kopieren. Die Probe schreibt bei jedem Start dort platform-events.log neu; frühere Logs vorher unter der jeweiligen Matrix-ID sichern. IDE mit der kopierten Form starten. Als native Probe dieselbe Form über Run → Make EXE File exportieren (passende vorbereitete tbrt-Vorlage), die IDE schließen und das Executable direkt aus dem Prüfverzeichnis starten. Alternativ:

tbc build input.frm --exe --target <Target-Triple> --template <vorbereitete-tbrt-Vorlage> -o <Probe-Executable>

Die Triples sind x86_64-pc-windows-msvc, aarch64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu. Mac-Ausgaben müssen mit codesign --verify --strict <Probe-Executable> geprüft und tatsächlich gestartet werden. Fenster und Zähler sichtbar erfassen; Datei → Ende oder der Ende-Button beenden die Probe.

Im Textfeld zählt die Probe KeyDown/KeyUp/KeyPress, am Zählen-Button Click, auf freier Formfläche MouseDown/MouseUp/MouseMove. Ein einzelnes a ohne Halten erzeugt genau Down 97, Press 97, Up 97. Ein zusätzlicher roher Release darf keine zweite BASIC-Zustellung erzeugen. Erweiterte Tasten führen im bestehenden Forms-Vertrag KeyCode 0 und kein KeyPress; ihre Identität wird deshalb zusätzlich in der Rohdiagnose geprüft. Modifierbits werden im Log mitgeschrieben. Repeat bei absichtlich gehaltenen Tasten ist von ungewollter Doppelzustellung zu unterscheiden.

Rohdiagnose aus dem bestehenden Spike:

cargo build --locked --release -p tb-ui --features terminal --example spike
# Auf Windows: spike.exe; --log verlangt eine noch nicht existierende Datei.
target/release/examples/spike --log /tmp/tb-raw-events.txt

Die Diagnose protokolliert nummerierte Crossterm-Ereignisse einschließlich Press/Release/Repeat, Modifier, Mauskoordinaten und Resize. Esc beendet sie. Sie prüft den Eingang; das Formularlog prüft die BASIC-Wirkung. Beide müssen zur jeweiligen physischen Einzelfolge passen. Diagnose und Formular werden nacheinander mit derselben Belegung geprüft, nicht als vermeintlich identischer Eventstream zweier gleichzeitiger Empfänger.

Bedienfolge pro Matrixzelle

Für IDE-Tasten ein kleines Modul mit mehreren Anweisungen, STOP, einer Prozedur und gesetztem Breakpoint bereithalten. Tests im jeweils angegebenen Kontext ausführen. Die Rohdiagnose und die native Formularprobe mit F1 bis F12 zusätzlich einzeln prüfen; im nativen Textfeld müssen je zugestellter Funktionstaste genau ein Down/Up-Paar und kein KeyPress erscheinen.

Taste IDE-Kontext und sichtbares Soll
F1 Codekontext: passende Hilfe; Shift+F1 Using Help; Alt+F1 zurück, Ctrl+F1 nächstes Thema
F2 Form/Projekt: Code öffnen; im Designer Value-Box fokussieren
F3 Nach vorbereiteter Suche: nächsten Treffer markieren
F4 Output Screen öffnen/zurück; Ctrl+F4 Fenster schließen; Alt+F4 Exit-Dialog
F5 STOP/Breakpoint: fortsetzen; Shift+F5 neu starten; Ctrl+F5 Fenster wiederherstellen
F6 Nächstes Fenster; Shift+F6 vorheriges, Fokus sichtbar
F7 Pausierter Code: bis Cursor laufen; Ctrl+F7 Fensterverschiebung
F8 Einzelschritt; Ctrl+F8 Fenstergröße; Shift+F8 vorherige History-Position bei aktivierter History
F9 Breakpoint einmal umschalten; Shift+F9 Instant Watch; Ctrl+F9 minimieren
F10 Prozedurschritt; im Designer Properties/Menü wechseln; Ctrl+F10 maximieren; Shift+F10 nächste History-Position
F11 Menü aktivieren und Eintrag mit Pfeilen/Enter ausführen
F12 Event Procedures; Shift+F12 Form Designer

Nach jeder IDE-Aktion bei laufender Formularprobe deren Log prüfen: Die IDE-Taste darf nicht zusätzlich als BASIC-Ereignis auftauchen. Umgekehrt muss ein normales Zeichen im aktiven Output genau einmal in der Probe ankommen. Editor-Kopieren mit Ctrl+C verändert weder Programmzustand noch Formularlog; im Output muss Ctrl+C den BASIC-Lauf unterbrechen. Ctrl+Break prüft denselben Abbruchweg. Nach Break/Continue ein weiteres Zeichen senden: es darf kein altes Ereignis erneut zugestellt werden.

Weitere Pflichtfolgen:

  • Alt+F und Menümnemonics, Escape und Tab/Shift+Tab: Menü/Dialog öffnet, genau eine Aktion, korrekt zurückkehrender Fokus; Formularlog ohne Leck.
  • Ein Klick auf Zählen: Click-Zähler steigt genau um eins. Mausdruck und Loslassen auf freier Formfläche: genau ein passendes Logpaar; Mausbewegung erzeugt Move-Einträge ohne Click. Bewegung darf vom Emulator zusammengefasst werden; Koordinaten und logische Ereignisse müssen konsistent sein.
  • Unicode in Form und Editor (Äöß, 中界, Rahmen): keine versetzten Folgezeichen oder zerstörten Rahmen. Farben und Attribute mit Spike, IDE-Zustände und Profil-Gegenprobe nach ide-referenz.md, Abschnitt 4a.
  • Von 100×30 nach 79×24 und zurück: IDE zeigt nur den Größenhinweis und kehrt ohne Dokument-/Cursorverlust zurück; native Probe bleibt konsistent und bedienbar. Danach Mauskoordinaten und Formularzähler erneut prüfen.
  • INPUT/LINE INPUT: auf Eingabe warten, Text eingeben, abbrechen, fortsetzen beziehungsweise neu starten. IDE und native Ausgabe prüfen.
  • Normaler Exit, ERROR 6 und Shell-Rückkehr: Shell-Echo, Zeilenmodus, sichtbarer Cursor und normale Anzeige erhalten. SHELL mit Exit 0 und 7, nicht vorhandenem Kindkommando und unterbrochenem Kind prüfen. Anschließend in der IDE Eingabe/Continue und abschließenden Exit prüfen.
  • Für Shell-Abbruch einen interaktiven Kindprozess verwenden und Ctrl+C dort auslösen; sein Abbruch darf nicht nochmals an BASIC zugestellt werden. Unter Unix unterstützt sleep 30, unter Windows ein passendes Kindkommando die Probe. Keine Unix-Kommandozeile unverändert als Windows-Soll verwenden.

Befunde und Nachweisformat

Je Testfall ID, Kontext, Eingabe, erwarteten Effekt, tatsächlichen Effekt, Zähler/Logbezug, Screenshot/Transkript und Status erfassen. Pro Shortcut, den OS oder Emulator abfängt: genaue Belegung benennen und denselben vorhandenen Menü-/Mausweg tatsächlich prüfen. Erst ein funktionierender Ersatzweg belegt eine Terminalgrenze; ein Produktfehler bleibt ein Befund. Derzeit ist kein solcher Ersatzweg durch eine echte Pflichtmatrixzelle verifiziert.

Offene Zugänge, Stand 07.09.2026: Computer Use hat Terminal.app ausdrücklich gesperrt. Windows sowie Linux mit xterm/VTE sind noch nicht als Prüfsysteme zugänglich. Der erreichbare Gitea-Host ist Linux aarch64 ohne die benötigten GUI-Terminals; beim aktuellen Lesezugriff startet sein Runnercontainer wiederholt neu. Die Runnerkonfiguration wurde nicht geändert. Das sind fehlende Nachweise beziehungsweise Infrastrukturzustände, keine bestandenen Zieltests und keine unterstellten Produktfehler.

Die aus 05a übernommenen offenen Aufgaben 1.2, 3.2 und 3.3 werden durch die Profil-Gegenprobe, sämtliche visuellen Matrixzellen und die abschließende befundfreie Verifizierung geschlossen. Für 06/07 müssen Prüfsystem, Toolrevision und konkrete Artefakte zusammenpassen. Nach Änderungen an Terminaladapter, Eingaberouting oder Theme sind die betroffenen Zielnachweise auf der neuen Revision erneut zu erheben.