Files

10 KiB
Raw Permalink Blame History

Verifizierung: phase-6-02-native-executables

Stand: 2026-09-07, Arbeitsbaum auf 993c3e7638f4819615ce6d1eea2c984afb29a1f2. Der vorausgehende Change 01 wurde synchronisiert, archiviert und mit diesem Commit auf origin/main bestätigt. Dieser Bericht betrifft Change 02.

Ergebnis

Dimension Nachweis
Vollständigkeit 11/11 Aufgaben; 4/4 Requirements
Korrektheit Alle 6 Spec-Szenarien abgedeckt; native macOS-arm64-Ausführung bestanden
Kohärenz Gemeinsamer Runner, bestehende VM/TBC/Forms-Semantik, vorgebaute Runtime und geschützter Export gemäß Design
Offene Befunde 0 CRITICAL, 0 WARNING, 0 SUGGESTION

Proposal, Design, Tasks, Delta-Spec, betroffene Ausführungspfade und Regressionen wurden geprüft. Keine Prüfdimension übersprungen. Die nach Design ausdrücklich späteren realen Windows-/Linux-Abnahmen sind unten getrennt benannt; sie werden nicht als durchgeführt ausgegeben.

Requirement- und Szenariozuordnung

Requirement / Szenario Implementierung und ausgeführter Nachweis
Eigenständiges natives Terminalprogramm / Leere Runtime-Vorlage crates/tb-runner/src/bin/tbrt.rs:13 liest sein eigenes Executable; tb_export::embedded prüft vor VM-Start. Native Probe: leere Vorlage liefert Exit 1 und Nutzlastdiagnose.
Eigenständiges natives Terminalprogramm / Ausführung auf sauberem Ziel crates/tb-export/src/lib.rs:471, tests/support/native-abnahme.py: sieben CLI-/EXE-Vergleiche, darunter ein Forms-/Mehrmodulprojekt mit verschachtelten Includes. Quellen vor EXE-Start gelöscht, separates Arbeitsverzeichnis, PATH leer. Fehlerorte, Anfangswerte, Ausgabe und Dateieffekte identisch.
Explizites Ausgabeformat und Ziel / Vorlage passt nicht crates/tb-cli/src/main.rs:140: Standard bleibt TBC; explizite EXE-/Target-/Vorlagen-/Ausgabe-/Force-Optionen. native_build_optionen_sind_explizit_und_tbc_bleibt_standard sowie Exporttests prüfen unbekannte/doppelte/fehlende Optionen, fremde Systeme/Architekturen, Runtime-/Paket-/TBC-Version, Integrität und fehlende Vorlage.
Gemeinsame Laufzeitsemantik / Neustart aus dem Executable crates/tb-runner/src/lib.rs:10 und :72 werden von CLI und tbrt benutzt. Native Probe verändert Variable/Datei und führt RUN aus: frische VM, Datei bleibt, COMMAND$ bleibt. Externes TBC-RUN, STOP, Runtimefehler, LPRINT, Eingaben, Forms und Terminalabbruch bestehen ebenfalls.
Validiertes und sicher veröffentlichtes Artefakt / Beschädigte Nutzlast crates/tb-export/src/lib.rs:179: Container-/Runtime-/TBC-/Targetprüfung, geprüfte Offset-/Längenarithmetik, Prüfsumme und TBC-Validierung. Native Gegenproben für maximale u64-Länge, falsche Version und abgeschnittene Nutzlast enden mit Exit 1/Ladefehler ohne Programmausgabe.
Validiertes und sicher veröffentlichtes Artefakt / Finalisierung schlägt fehl crates/tb-export/src/lib.rs:346: temporäres Geschwisterziel, Schutzpfade, Abbruch, Zielvergleich und atomare Veröffentlichung. fehlgeschlagene_native_finalisierung_erhaelt_das_ziel lässt die tatsächliche native Finalisierung scheitern und prüft Original/Bereinigung. Weitere Gegenproben decken Schreibfehler, Konflikt, nachträglich belegtes Ziel und Abbruch ab.

Behobene Befunde aus der Umsetzung und Verifizierung

  1. Indirekter Quellcompiler in tbrt. Designentscheidung 1 fordert einen Runner ohne BASIC-Quellcompiler. Die erste Symbolprüfung fand den Parser über den Watch-/Debugger-Pfad der gemeinsamen VM. DebugCompiler bindet den Compiler nun erst bei seiner ausdrücklichen Erzeugung über einen Funktionszeiger (crates/tb-vm/src/project.rs). Die VM-API und Debuggerfunktion bleiben erhalten. Erneute Release-Symbolprüfung mit nm findet keine Parser-, SourceLoader-, Projektcompiler- oder Debug-Compiler-Implementierungssymbole; IDE-/VM-Debuggertests bestehen.
  2. Abbruch während CLI-Export. Ein nur für Bibliotheksaufrufer vorhandener Abbruchcallback genügte nicht für CLI-Signale. export_cancel.rs führt Unix-SIGINT/SIGTERM beziehungsweise Windows-Ctrl+C/Break in diesen Callback. Die native Prozessprobe unterbricht zwei laufende Exporte nach Anlage der temporären Datei: Exit 1, Original unverändert, keine temporäre Ausgabe. Laufzeit-Ctrl+C bleibt beim bestehenden Terminalhost.
  3. Native Formatgrenzen. Gegenproben schärften abgeschnittene Header und fremde ELF-System-ABIs. Kurze Header und andere ABIs als System V/Linux werden abgewiesen. PE übernimmt keine veraltete optionale Prüfsumme; vorhandene Authenticode-Signaturen führen zu einer konkreten Ablehnung. Vier Target-Zuordnungen und beschädigte Header/Nutzlasten sind geprüft.
  4. Mach-O-Ende nach Signierung. Eine reine Dateiende-Annahme wäre nach codesign falsch. Die Implementierung entfernt die vorherige Signatur, erweitert __LINKEDIT, signiert nach dem Einbetten und liest vor der Veröffentlichung die fertige Datei erneut. Der Lader benutzt die durch LC_CODE_SIGNATURE bezeichnete Grenze und geprüftes Nullpadding. Export, codesign --verify --strict und native Ausführung bestehen.

Keine bestehenden Golden-Dateien oder Inventarverträge wurden geändert. Die CLI-/IDE-Abnahme benutzt weiterhin denselben Ausführungspfad; nur ihre Imports wurden nach Herauslösen des Runners ausdrücklich gemacht.

Ausgeführte Gates

Lokaler Rechner: Apple M5 Max, 128 GiB, macOS 26.6.2 (25G83), aarch64-apple-darwin, Rust 1.97.1/Cargo 1.97.1. Release-Profil mit LTO und codegen-units 1. Vorlagen-/Container-Runtime-ABI 1, TBC-Version 4.

cargo build --locked --release -p tb-cli -p tb-runner -p tb-export
python3 tests/support/native-abnahme.py --target aarch64-apple-darwin
python3 tests/support/release-abnahme.py --vbdos-repo /tmp/terminalbasic-vbdos-evidence
cargo check --locked --target aarch64-unknown-linux-gnu -p tb-cli -p tb-runner -p tb-export
openspec validate --all --strict
git diff --check
Gate Ergebnis
Native CLI-/EXE-Probe 7 Vergleichsfälle bestanden: Konsole/COMMAND$/INPUT/LPRINT, RUN-Neustart, STOP, Laufzeitfehler/Export aus TBC, Projekt-/Include-/Dateifehler, Forms-/Mehrmodul-/Include-Projekt und externes TBC-RUN
Terminal 4 Unix-PTY-Läufe: CLI und EXE jeweils Eingabe bzw. Ctrl+C; korrekte Exitcodes und Terminalattribute wiederhergestellt
Veröffentlichung Überschreibverweigerung und ausdrückliches Ersetzen; echte SIGINT-/SIGTERM-Abbrüche erhalten das Original und entfernen temporäre Dateien
Ladefehler 3 beschädigte native Nutzlasten ohne Projektcode-Ausführung abgewiesen; zusätzliche Versions-/Grenz-/Prüfsummen-Gegenproben in Rust
macOS-Signierung Alle finalisierten Vergleichsprogramme strikt geprüft und nativ gestartet
Workspace 613 Tests plus 1 Offline-Kindprozesstest bestanden, 0 fehlgeschlagen; 2 beabsichtigte Ignores
Öffentlicher Pflichtnachweis Separat 3 Tests bestanden, darin 7 Einstiege × 2 Läufe von cout/vbdos bei 1cdd2b32b829fe1721d0b6aecc433abc47a96fb6
Inventar 845 Einträge: 795 implementiert, 0 offen, 50 deklarierte Non-Features; keine Umklassifizierung
Clippy / Format Workspace/all-targets mit -D warnings und Formatprüfung bestanden
OpenSpec 30 Specs/Changes strikt bestanden, 0 fehlgeschlagen; bestehende INFO-Textlängenhinweise
Linux arm64 Cargo-Cross-Check bestanden; kein nativer Ausführungsnachweis
Vorlagen-Builder build-runtime.py --target aarch64-apple-darwin --output /tmp/tb-phase6-02-evidence/templates/aarch64-apple-darwin erfolgreich, native Header/Architektur und Metadaten geprüft

Die native Probe setzt PATH bereits beim Export leer; codesign wird über seinen absoluten Systempfad aufgerufen. Die ausgeführten Programme benötigen somit keine auflösbaren Compiler-/Linkerwerkzeuge. Das ist ein isolierter lokaler Prozessnachweis, keine Behauptung eines frisch installierten Betriebssystems. Die externe RUN-Probe enthält bewusst ihr zusätzliches TBC-Laufzeitmodul; die übrigen Programme benötigen keine separate TBC-Datei.

Beschädigte Mach-O-Proben werden nach der absichtlichen Mutation neu signiert, damit der Nutzlastlader geprüft wird. Eine ungültige native Signatur kann bereits vom Betriebssystem vor main abgewiesen werden. Die lokale Ad-hoc-Signatur beweist Ausführbarkeit, keine Notarisierung.

Das finale macOS-tbrt ist 3.022.416 Bytes groß. otool -L weist ausschließlich /usr/lib/libiconv.2.dylib und /usr/lib/libSystem.B.dylib als dynamische Abhängigkeiten aus; keine separate Terminal-Basic-Runtime und keine IDE.

Leistungsregression der gemeinsamen VM

Die unveränderten Benchmarks aus Change 01 wurden im vollständigen Abnahmelauf erneut ausgeführt. Modul: 1,20 ms bei Budget < 50 ms; Projekt mit 49.760 Zeilen: 100 ms bei Budget < 1.000 ms. Inkrementelle Mediane: 0,72 ms und 20,62 ms. VM: INTEGER 1.193 ms, DOUBLE 556 ms, SUB 138 ms, Strings 110 ms. Gegenüber der dokumentierten Basis 1.217/572/139/109 ms kein relevanter Leistungsrückschritt; keine Performance-Optimierung.

Übergabe und bewusst spätere Zielnachweise

Native Executables dokumentiert CLI-Optionen, Vorlagenherstellung für alle vier vereinbarten Triples, Metadaten/Container, öffentliche Export-API und Systemvoraussetzungen. tbrt lädt externe RUN-Ziele als vorkompilierte TBC; Quellen benötigen die vorherige Übersetzung durch tbc. RUN-/OPEN-/ISAM-/SHELL-Ressourcen werden nicht automatisch eingebettet. Diese Grenze folgt dem geplanten Runner ohne BASIC-Quellcompiler und ist ausdrücklich sichtbar.

Die tatsächliche Windows-amd64- und Linux-amd64/arm64-Ausführung, Windows-Terminal-/Abbruchprüfung, konkrete glibc-Builderbasis sowie vier Gitea-Releasepakete bleiben gemäß Design bei Changes 05/06. Change 02 liefert Bauaufrufe, Header-/Architekturprüfung und lokalen macOS-Nativnachweis. TBL/Linker und IDE-Anbindung verwenden denselben Exportvertrag in 03/04.

Lokale Rohprotokolle: /tmp/tb-phase6-02-evidence/, insbesondere native.log, release-abnahme.log, export-tests.log, linux-arm64-check.log und template-build.log. Alle wesentlichen Resultate und reproduzierbaren Aufrufe stehen zusätzlich in diesem Bericht. Am 2026-09-07 wurden die vier Requirements in die Hauptspezifikation native-executables synchronisiert, alle 25 Hauptspezifikationen strikt validiert und Change 02 archiviert.