123 lines
10 KiB
Markdown
123 lines
10 KiB
Markdown
# 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](../../../../crates/tb-vm/src/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](../../../../tests/libraries/portable.tbl) und [Zielprobe](../../../../tests/support/library-abnahme.py). macOS bestanden; drei Zielausführungen offen. |
|
|
| Gemeinsamer Linkbefehl / quellfreie Nutzung bis EXE | [CLI](../../../../crates/tb-cli/src/main.rs), `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](../../../../crates/tb-vm/src/project_io.rs): geordnete TBL-Mitglieder, Startmodul zuerst, Zusatzbibliotheken danach, fallunabhängige Pfade. [Projekt-I/O-Tests](../../../../crates/tb-vm/tests/project_io.rs) 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](../../../../crates/tb-vm/src/project.rs) bindet vor der Verbraucher-Semantik Deklarationen und danach vollständige Signaturen. [Library-Tests](../../../../crates/tb-vm/tests/library.rs) 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](../../../../crates/tb-cli/tests/project.rs) prüfen Ausgabe auf TBL/MAK, No-clobber, ungültige Optionen und defekte Eingaben ohne Änderung alter Ziele. Der gemeinsame [Publikationstest](../../../../crates/tb-export/src/tests.rs) 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](../../../../docs/pcode-bibliotheken.md) 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.
|