Files
TerminalBasic/openspec/changes/archive/2026-09-07-phase-6-03-pcode-bibliotheken-und-linker/verification.md

10 KiB

Verifikation: phase-6-03-pcode-bibliotheken-und-linker

Stand: 2026-09-07. Verifiziert wurde die lokale Implementierung auf Basis von 60d37ec79ddfdebdfa71b893bf6b3a141d20ac3c auf main. Der vorangehende Change 02 wurde synchronisiert, als 2026-09-07-phase-6-02-native-executables archiviert und mit diesem Commit auf origin/main bestätigt. Change 03 wurde am 2026-09-07 nach Spec-Synchronisierung archiviert; dieser Bericht wird gemeinsam mit der Implementierung committed.

Ergebnis

Dimension Ergebnis
Vollständigkeit 13/13 Aufgaben gemäß bestätigter Abnahmeaufteilung abgeschlossen
Implementierung Alle sechs Requirements im Backend-/CLI-Umfang von 03 umgesetzt; IDE-Anbindung gemäß Proposal in 04
Szenarien Sechs vollständig lokal nachgewiesen; Vierziel-Portabilität auf macOS arm64 nachgewiesen, drei Zielausführungen fehlen
Korrektheit Keine offenen Codebefunde nach Korrektur und erneuten Prüfungen
Kohärenz Gemeinsamer Projektcompiler/Linker, kompakte Metadaten, bestehender TBC-Codec und sichere Veröffentlichung wiederverwendet
Gesamtabnahme Change 03 ohne offene Befunde; Vierziel-/Releaseabnahme in 05/06 noch offen

Bestätigte Abnahmeaufteilung

Am 2026-09-07 bestätigte der Benutzer den zentralen Cross-Paketbau auf dem vorhandenen Linux-arm64-Gitea-Runner und die getrennte echte Plattformabnahme. PLAN, Proposal, Design und Tasks ordnen die vollständigen Zielausführungen jetzt konsistent 05/06 zu. Der bisherige Befund zu Aufgabe 4.1 ist damit durch eine ausdrücklich bestätigte Änderung der Abnahmezuständigkeit geschlossen, nicht durch zusätzliche behauptete Testläufe. Der Portabilitätsvertrag bleibt unverändert. Die lokale Implementierungsverifikation enthält keine Codebefunde.

Dieselben TBL-Bytes wurden auf macOS arm64 ohne Bibliotheksquellen verknüpft und als eigenständiges Executable ausgeführt. Windows amd64 sowie Linux amd64 und arm64 wurden noch nicht ausgeführt; Linux-arm64-cargo check beweist keine Ausführung. Der vorhandene entfernte Gitea-Runner wurde als Linux aarch64 bestätigt; TerminalBasic wurde darauf noch nicht über die Vierzielmatrix gebaut.

05 muss python3 tests/support/library-abnahme.py --bin-dir <native-TB-Werkzeuge> mit unveränderter tests/libraries/portable.tbl auf allen vier echten Zielen nachweisen. 06 übernimmt dies für die entpackten Releasepakete und bindet die Nachweise an Revision und Paketprüfsumme; fehlende Nachweise sperren die Releasefreigabe. Die bisherigen lokalen Testergebnisse bleiben unverändert.

Requirement- und Szenarioabgleich

Requirement / Szenario Umsetzung und Nachweis
Portables TBL-Format / Bibliothek auf anderem Ziel library.rs: TBL 1, P-Code 4, gemeinsamer Runtime-Vertrag 1, feste Breiten, Länge/Prüfsumme, unverknüpfte Modulprodukte, Export-/Importverträge. Gemeinsames TBL-Artefakt und Zielprobe. macOS bestanden; drei Zielausführungen offen.
Gemeinsamer Linkbefehl / quellfreie Nutzung bis EXE CLI, ProjectSources::compile/compile_library, ProjectCompiler::link_library. Der Verbrauchercheck löscht Quelle, TBL, TBC und Vorlage vor dem EXE-Lauf mit leerem PATH; Ausgabe und Dateieffekte stimmen einschließlich RUN.
Explizite Bibliothekszuordnung / verschobenes Projekt project_io.rs: geordnete TBL-Mitglieder, Startmodul zuerst, Zusatzbibliotheken danach, fallunabhängige Pfade. Projekt-I/O-Tests prüfen Verschieben, Save As, fehlende Datei mit MAK-Bezug, Duplikate, TBL nicht als Text/Startdatei.
Typgeprüfte Verknüpfung / A benötigt B Projektlinker bindet vor der Verbraucher-Semantik Deklarationen und danach vollständige Signaturen. Library-Tests prüfen offene Imports, zwei quellfreie Bibliotheken, fehlendes B, Parameter-/Ergebnistypen, COMMON-Grenzen, ungültige Deklarationen und flache Abhängigkeiten.
Typgeprüfte Verknüpfung / mehrdeutiges Symbol Library-Tests mit zwei Definitionen und explizitem sowie implizitem Verbraucher-DECLARE: Konflikt nennt beide Herkunftsmodule; keine zufällige Auswahl. Doppelte Modulidentitäten werden separat abgewiesen.
BASIC-Semantik / Quellmodule durch TBL ersetzen Vergleichsprojekte prüfen BYREF/BYVAL, Arrays, UDTs/feste Strings, Konstanten, COMMON, DATA/RESTORE und Modulreihenfolge. Getrennte Forms-Libraries prüfen verschachtelte gleiche Controlnamen, Designarrays, Anfangsdaten und Form_Load-Ereignisse. Include-Fehler behalten physischen Ort und ERL=200. Der native Verbraucher erzeugt nach RUN nachweislich erneut frische Bibliotheksvariablen, DATA und Bildschirmzustand.
Validierung/geschützte Ausgabe / beschädigte Datei oder Ausgabe auf Eingabe TBL-Leser prüft Header, Versionen, Prüfsumme, Abschnitte, Tags, Referenzen, Export-/Code-Verträge und Grenzen. Tests für alle abgeschnittenen Präfixe, nachberechnete Prüfsummen auf ungültigen Strukturen und kontrollierte Mutationen. CLI-Tests prüfen Ausgabe auf TBL/MAK, No-clobber, ungültige Optionen und defekte Eingaben ohne Änderung alter Ziele. Der gemeinsame Publikationstest prüft Abbruch vor/nach Vorbereitung, Schreibfehler, konkurrierende Änderungen und Bereinigung.

Behobene Befunde aus den Prüfläufen

  • Die Quelltabellen-Normalisierung erzeugte zunächst zusätzliche Einträge und verschob IDE-Bindungsorte. Module behalten jetzt ihre vollständige lokale Quelltabellenreihenfolge; die vorhandenen vier betroffenen Designerfälle, Projekt-, Cache- und Debuggertests bestehen. Bei eingeschobenen TBL-Modulen bleiben außerdem die tatsächlichen Modul-IDs der Quell-Debugkontexte erhalten.
  • Objektzuordnung nur über Namen und übergeordneten Namen kollidierte bei gleich benannten verschachtelten Controls in zwei Forms. Der Linker verwendet den remappten Eltern-Slot; getrennte Form-Libraries ergeben dieselben Ereignisse und Anfangswerte wie die äquivalenten Quellen.
  • Die strengere Importprüfung behandelte den unbenutzten NotReserved-Prototyp in QLBVIEW als Linkabhängigkeit. Nicht referenzierte ungebundene Prototypen werden aus dem Endprodukt entfernt; tatsächliche Aufrufe müssen auch in unaufgerufenen mitgelieferten Prozeduren gebunden sein. Eine spätere Debug-Ausführung eines entfernten Prototyps liefert ebenfalls eine Diagnose. Der Fremdprogramm-Abnahmesatz besteht wieder vollständig.
  • Zusätzliche Grenz-/Vertragsprüfungen verhindern unter anderem leere Konstantenexporte, inkonsistente COMMON-Slots und Überlauf remappter Tabellen. Bytecode-Mutationen mit erneut berechneter Prüfsumme werden kontrolliert behandelt; es trat keine Panic im Reader-/Linkpfad auf.

Ausgeführte Prüfungen

Prüfung Ergebnis
cargo test --locked --workspace auf endgültigem Stand 625 bestanden, 0 fehlgeschlagen, 2 vorgesehen ignoriert
release-abnahme.py --vbdos-repo /tmp/terminalbasic-vbdos-evidence Vollständig bestanden: Fremdbestand, Workspace, Inventar, Format, Clippy, Benchmarks
Explizite Fremdabnahme in fixierter Revision Drei Tests einschließlich 14 Programm-Ausführungen bestanden; kein Emulator/GUI gestartet
Nachträglich ergänzte gezielte Library-/Projekt-/CLI-Prüfungen Bestanden, einschließlich Include-ERL, identischer Dateigröße bei reinem Codeaustausch und TBL als unzulässigem Startprodukt
cargo fmt --all -- --check Bestanden
cargo clippy --locked --workspace --all-targets -- -D warnings Bestanden auf endgültigem Stand
openspec validate --all --strict 30 Elemente bestanden, 0 fehlgeschlagen; rein informative Längenhinweise in bestehenden Requirements
Release-Build von tb-cli, tb-runner, tb-export Bestanden
library-abnahme.py auf macOS arm64 Echter quellfreier TBL→TBC/EXE-Verbraucher und RUN bestanden
native-abnahme.py --target aarch64-apple-darwin Alle EXE-, PTY-, Abbruch-, Signierungs- und Beschädigungsprüfungen bestanden
Linux arm64: cargo check --locked --target aarch64-unknown-linux-gnu -p tb-cli -p tb-runner -p tb-export Bestanden; keine Zielausführung
Runtime-Prüfung tbrt 3.022.416 Bytes; keine BASIC-Parser-/Quellcompiler-Symbole; native Abhängigkeiten nur libiconv und libSystem

Die beiden regulär ignorierten Workspace-Tests sind bewusste Golden-Erzeugung und der externe Fremdbestand; letzterer wurde im gesonderten Abnahmesatz explizit ausgeführt. Das Inventar meldet 795 implementiert, 50 Non-Features, 0 offen.

Leistung: Einzelmodul 0,79 ms bei 50-ms-Budget, Projekt mit 49.760 Zeilen 100 ms bei 1000-ms-Budget; Cacheänderung 0,77 ms/28,37 ms für 1/20 Module. VM: INTEGER 1289 ms, DOUBLE 589 ms, BYREF-Aufrufe 148 ms, String-Funktionen 114 ms. Alle geltenden Budgets bestanden.

Reproduzierbares gemeinsames Artefakt: 5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df (SHA-256 von tests/libraries/portable.tbl). Der aktuelle macOS-Nachweis meldet native_execution=true, source_free=true, run_reset=true.

Lokale Rohprotokolle: /tmp/tb-phase6-03-release-abnahme.log, /tmp/tb-phase6-03-workspace-final.log, /tmp/tb-phase6-03-focused.log, /tmp/tb-phase6-03-clippy-final.log, /tmp/tb-phase6-03-openspec.log, /tmp/tb-phase6-03-library-native.log, /tmp/tb-phase6-03-native-regression.log, /tmp/tb-phase6-03-linux-check.log, /tmp/tb-phase6-03-runtime-audit.log.

Übergabe

Format und Befehle beschreiben das Binärformat, Auflösung, Initialisierung, geschützte Ausgabe und Systemvoraussetzungen. 04 erhält den gemeinsamen Dienst für IDE-Dokumentmodell und Make-Aktionen. 05/06 erhalten ein einziges gespeichertes TBL-Artefakt und denselben plattformprüfenden Verbraucheraufruf für echte Zielsysteme; der Paketbau erfolgt zentral auf dem Linux-arm64-Gitea-Runner. Die fehlenden Zielnachweise sind noch offen und werden nicht durch das geplante spätere CI-Setup ersetzt.