# Verifizierung: phase-6-01-kompatibilitaet-und-leistungsabnahme Stand: 2026-09-07. Geprüft wurden Proposal, Design, Tasks, Delta-Spec und Implementierung im Arbeitsbaum auf Basis von `54ee427c1c676170450068c5436e5875c84c9dce`. ## Ergebnis | Dimension | Ergebnis | | --- | --- | | Vollständigkeit | 9/9 Aufgaben umgesetzt; 4/4 Requirements nachgewiesen | | Korrektheit | 4/4 Szenarien geprüft; alle gefundenen Abweichungen behoben | | Kohärenz | Bestehende Harnesses, Inventare und Benchmarks weiterverwendet; keine neue Abhängigkeit | | Offene Befunde | 0 CRITICAL, 0 WARNING, 0 SUGGESTION | Alle Prüfungen dieses Changes bestanden. Keine Prüfdimension übersprungen. Die [Abnahmematrix](abnahmematrix.md) enthält konkrete Fallnamen, Eingaben, Sollzustände, Aufrufe und Voraussetzungen für die weitere Phase 6. ## Requirements und Szenarien | Requirement / Szenario | Implementierung und Nachweis | | --- | --- | | Deterministischer Abnahmesatz / Wiederholter Formularlauf | `tests/compat/release-formular.frm` verbindet Fokus, Maus, Menü und Resize mit Unicode und Farbe. `crates/tb-cli/tests/compat.rs`: `release_formular_vergleicht_zeichen_und_attribute_unabhaengig` prüft zwei Läufe und absichtlich falsche Text-/Farberwartungen. Das Soll wurde aus Handlerfolge, COLOR und LOCATE geschrieben. Der bestehende Korpus prüft fehlende Sollwerte als Fehler. | | Deterministischer Abnahmesatz: Projekte, Includes, Fehler, Dateien | `crates/tb-cli/tests/project.rs`: `release_projekt_prueft_anfangsdateien_dateieffekte_und_include_fehler` prüft zwei Quell- und zwei quellfreie TBC-Läufe, Anfangsdateien, exakte Ergebnisbytes, Exitcode 2, physischen Include-Ort 8:5 und Aufräumen. Die Matrix ordnet die übrigen bestehenden Verhaltensgruppen zu. | | Expliziter Fremdprogrammnachweis / Referenzbestand fehlt | `crates/tb-cli/tests/foreign.rs`: `pruefe_bestand` erzwingt Revision und lesbares Repository; Gegenprobe prüft fehlende Variable, ungültigen Pfad und falsche Revision. `tests/support/release-abnahme.py` aktiviert den Fremdtest ausdrücklich vor allen weiteren Gates. Der vollständige Lauf mit sieben Einstiegen, jeweils zweimal, bestand. | | Begründete Leistungsentscheidung / Kein Optimierungsbedarf | Unveränderte Compile-/VM-Benchmarks auf identischer Hardware vor und nach der Änderung; Messwerte und Einordnung unten. Compile-Budgets bestanden. Keine Performance-Optimierung durchgeführt; die einzige VM-Änderung behebt einen funktionalen Dialog-EOF-Fehler. | | Nachvollziehbare Befundbehandlung / Snapshot weicht ab | Vergleichs-Gegenproben nennen erste Text-/Farbabweichung mit Soll/Ist. Befunde und Korrekturen unten; vorhandene Golden-Dateien und Inventare unverändert. Regressionstests und vollständige erneute Abnahme bestanden. | ## Behobene Befunde ### 1. Fehlerhafte Attributdiagnose im Korpusvergleich Sollquelle: `kompat-testkorpus`, Requirement zum Sollvergleich mit erster Abweichung; `textbildschirm`, Unicode-/Attributdarstellung. Zuständig: `crates/tb-cli/tests/compat.rs`, `assert_output_matches`. Ist: Eine verkürzte Attributzeile mit gleichem Präfix führte zu Spalte 0 und anschließendem Integer-Unterlauf. Nach einem breiten Unicode-Zeichen wurde die logische Zeichenposition als Bildschirmspalte gemeldet. Korrektur: Der Vergleich berechnet zunächst den Attributindex, auch bei unterschiedlicher Länge, und daraus die physische Spalte mit der bereits verfügbaren Textbreitenfunktion. Die Regression prüft verkürzte Attribute und `中a`: Eine Farbabweichung bei `a` muss Spalte 3 nennen. Die separate Formularprobe weist sowohl falsche Zeichen als auch ausschließlich falsche Farben zurück. Bestehende Sollausgaben wurden nicht angepasst. ### 2. Unvollständige Dialogeingaben im öffentlichen Pflichtnachweis Sollquelle: `release-kompatibilitaet`, explizite Eingabefolge und sichtbares Resultat des fixierten Bestands. Zuständig: `crates/tb-cli/tests/foreign.rs`. Ist: Der ausdrücklich aktivierte Lauf erreichte bei `check.mak` den Save-Dialog ohne Antwort und überschritt seine Prozessfrist. Auch Mentors benötigt eine Save-Antwort. Der Testhost lieferte vorbereitete Antworten bisher nur bei blockierenden Hostaufrufen; kooperatives Polling verwendet nichtblockierende Aufrufe. Korrektur: Die Eingabefolge für Check und Mentors enthält ausdrücklich N. Der Host liefert die Antwort erst nach Darstellung des erwarteten Dialogs; für Check/Mentors `Save these records?`, für Notepad `Save changes to`. Dialoganzeige, Verbrauch der Antwort, sichtbare Menüwirkung und Entladen werden weiter geprüft. Alle sieben bisherigen Einstiege bleiben erhalten; beide Läufe jedes Einstiegs stimmen überein. ### 3. Dialog-EOF wurde in der Formularpumpe verschluckt Sollquelle: `release-kompatibilitaet`, nachvollziehbare Fachkorrektur; bestehender kooperativer Ausführungs-/EOF-Vertrag der VM-Ereignispumpe. Zuständig: `crates/tb-vm/src/interp.rs`, `poll_visible_forms`. Ist: EOF während eines MSGBOX in einem modellosen Formularhandler ließ `poll` enden. Die Formularpumpe wandelte dies wie ein normales Modulende in Yield um und konnte endlos weiterlaufen. Dies wurde unabhängig vom Fremdhost mit einem begrenzten Regressionstest reproduziert. Korrektur: Die gemeinsame Formularpumpe gibt bei aktivem Dialog und EOF Ended zurück. CLI und IDE benutzen diesen Pfad. Der neue Test `eof_im_dialog_eines_formularhandlers_beendet_die_ereignispumpe` scheiterte vor der Korrektur mit „Dialog-EOF wurde als Yield verschluckt“ und besteht danach. Er prüft auch, dass nach dem Dialog kein BASIC-Code ausgeführt wird. Der bestehende Test für bereits angenommene Eingaben vor EOF bleibt grün; 33 Ereignis- und 7 kooperative Tests bestanden zusammen. ## Ausgeführte Gates Gesamtabnahme: ```sh python3 tests/support/release-abnahme.py --vbdos-repo /tmp/terminalbasic-vbdos-evidence openspec validate --all --strict git diff --check ``` | Prüfung | Ergebnis | | --- | --- | | Expliziter Fremdtest mit `--include-ignored` | 3 Tests bestanden, darin 7 Einstiege × 2 Läufe; Revision `1cdd2b32b829fe1721d0b6aecc433abc47a96fb6` | | `cargo test --locked --workspace` | 609 Tests sowie 1 Offline-Kindprozesstest bestanden; 0 fehlgeschlagen | | Absichtlich ignorierte Entwicklertests | 2: Golden-Erzeugung und optionaler Fremdtest; Fremdtest separat verpflichtend bestanden, Golden-Erzeugung nicht ausgeführt | | Korpus | 38 BAS + 7 FRM, 46 größenbezogene Sollausgaben, jeder Fall zweimal; zusätzliche Vergleichs-Gegenproben | | Inventarbericht | 845 Einträge, siehe getrennte Statusgruppen unten | | `cargo fmt --all -- --check` | Bestanden | | `cargo clippy --locked --workspace --all-targets -- -D warnings` | Bestanden | | Compile-/VM-Benchmarks | Bestanden, beide Compile-Budgets eingehalten | | OpenSpec, alle Specs und Changes, strikt | 30 bestanden, 0 fehlgeschlagen; vorhandene INFO-Hinweise zu Textlängen sind keine Validierungsfehler | | `git diff --check` | Bestanden | Zusätzliche Gegenproben des tatsächlichen Release-Aufrufs: Ohne `--vbdos-repo` Exit 2 mit Benennung des Pflichtarguments; mit falschem Repository Exit 101 und „falsche Revision“; mit nicht vorhandenem Pfad Exit 101 und fehlendem/ungültigem Git-Bestand. Letzterer Aufruf erfolgte außerhalb des Checkouts über den absoluten Skriptpfad. Kein Fehlfall wurde als erfolgreicher Release-Nachweis gewertet. ## Inventar | Gruppe | Implementiert | Offen | Non-Feature | Gesamt | | --- | ---: | ---: | ---: | ---: | | Sprache | 241 | 0 | 50 | 291 | | Forms-Objektmodell | 554 | 0 | 0 | 554 | | Gesamt | 795 | 0 | 50 | 845 | Offene Einträge: keine. Quelllisten, unabhängige Absenkungsziele, Forms-Klassentabelle und tatsächliche BASIC-Ereignisauslöser wurden geprüft. Es wurden keine Inventareinträge entfernt oder als Non-Feature umklassifiziert. ## Leistung und Entscheidung Hardware: Apple M5 Max, 128 GiB RAM, macOS 26.6.2 (25G83), `aarch64-apple-darwin`. Rust 1.97.1 (`8bab26f4f`), Cargo 1.97.1, LLVM 22.1.6. Alle Messungen auf demselben Rechner mit `cargo bench --locked -p tb-vm --bench compile --bench vm`, optimiertem Bench-/Release-Profil, opt-level 3, LTO und codegen-units 1. Vergleich: sauberer Basiscommit `54ee427c1c676170450068c5436e5875c84c9dce` vor Änderungen. Endstand: dieser Arbeitsbaum einschließlich Dialog-EOF-Fix. Die erste Endmessung folgte dem vollständigen Abnahmelauf und Rebuild; eine zusätzliche Messung ohne Rebuild klärte die beobachtete Streuung. | Last | Basis | Endstand, erster Lauf | Endstand, Bestätigung | | --- | ---: | ---: | ---: | | Modul, 508 Zeilen, Budget < 50 ms | 0,73 ms | 1,26 ms | 0,80 ms | | Projekt, 49.760 Zeilen / 20 Module, Budget < 1.000 ms | 93 ms | 107 ms | 91 ms | | Inkrementell, 1 Modul | 0,77 ms | 0,79 ms | 0,73 ms | | Inkrementell, 20 Module | 22,46 ms | 22,38 ms | 21,19 ms | | INTEGER, 10 Mio. Iterationen | 1.217 ms | 1.251 ms | 1.184 ms | | DOUBLE, 5 Mio. Iterationen | 572 ms | 621 ms | 557 ms | | SUB/BYREF, 1 Mio. Aufrufe | 139 ms | 141 ms | 140 ms | | Stringfunktionen, 200.000 Runden | 109 ms | 118 ms | 110 ms | Verfahren unverändert: Modul als bester von zehn Läufen nach Aufwärmen; Projekt als vollständige Übersetzung mit 335.421 Instruktionen; inkrementell Median aus sieben Änderungen einschließlich Invalidierung und Link, beim Projekt ein Modul neu und 19 wiederverwendet. VM-Zeiten messen Ausführung ohne Compilation. Bestätigter VM-Durchsatz: 8,4 Mio. INTEGER- und 9,0 Mio. DOUBLE-Iterationen/s, 7,1 Mio. Aufrufe/s sowie 1,8 Mio. Stringrunden/s. Entscheidung: **Kein Optimierungsbedarf im gemessenen Abnahmesatz.** Beide Compile-Budgets bestehen mit deutlichem Abstand. Die anfänglichen VM-Abstände von ungefähr 1–9 % bestätigten sich nicht: Schleifen waren anschließend schneller als die Basis, Aufruf-/Stringzeiten lagen jeweils nur 1 ms darüber. Das belegt keinen belastbaren Engpass. Es wurde kein neues VM-Zeitlimit eingeführt und kein VM-Code zur Optimierung verändert. Der funktionale EOF-Fix wurde mit denselben Semantik- und Leistungstests abgenommen. Die Messung behauptet keine statistisch exakte Performanceparität. ## Übergabe Der Abnahmeaufruf benötigt Rust/Cargo, Python 3, Git, tar und den extern bereitgestellten fixierten Fremdbestand. Er lädt nichts herunter und erzeugt keine Golden-Dateien. Fallmatrix und Zahlen stehen im Repository; lokale Rohprotokolle liegen ergänzend in `/tmp/tb-phase6-01-evidence/` (`baseline-environment.txt`, `baseline-bench.log`, `release-abnahme.log`, `bench-confirmation.log`, `dialog-eof-before.log`, `vm-regression.log`). Changes 02–07 übernehmen diese Grundlage für tbrt, TBL/Linker, IDE-Export, reale Zielplattformen, Gitea Actions und finale Abnahme. Windows/Linux, native Exportartefakte und Release-Pakete sind hier nicht als abgenommen ausgewiesen. Am 2026-09-07 wurden die vier Requirements in die Hauptspezifikation `release-kompatibilitaet` synchronisiert, alle 24 Hauptspezifikationen strikt validiert und der Change archiviert.