# 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.
