11 KiB
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 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:
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.