Phase 6: Gitea-Cross-Builds, Paketprüfung und gesperrten Releasepfad implementieren
Some checks failed
Vierziel-Build und Pflichtabnahme / checks (push) Has been cancelled
Vierziel-Build und Pflichtabnahme / build (ghcr.io/rust-cross/cargo-zigbuild@sha256:82af75c41958c2af2787e8bedd912da7678a9438937e223e9d83d006d747b38b, aarch64-apple-darwin) (push) Has been cancelled
Vierziel-Build und Pflichtabnahme / build (ghcr.io/rust-cross/cargo-zigbuild@sha256:82af75c41958c2af2787e8bedd912da7678a9438937e223e9d83d006d747b38b, aarch64-unknown-linux-gnu) (push) Has been cancelled
Vierziel-Build und Pflichtabnahme / build (ghcr.io/rust-cross/cargo-zigbuild@sha256:82af75c41958c2af2787e8bedd912da7678a9438937e223e9d83d006d747b38b, x86_64-unknown-linux-gnu) (push) Has been cancelled
Vierziel-Build und Pflichtabnahme / build (messense/cargo-xwin@sha256:4696dd4e79edf8569fa99c4b06bd99273e0501c7adc983aa61d57945f795bef0, x86_64-pc-windows-msvc) (push) Has been cancelled
Vierziel-Build und Pflichtabnahme / stage (push) Has been cancelled

This commit is contained in:
2026-09-07 21:50:05 +02:00
parent 796564795a
commit 32d3838002
40 changed files with 3134 additions and 11 deletions

View File

@@ -12,7 +12,7 @@ Origin ist `https://git.rfc1437.de/hugo/TerminalBasic.git`; die read-only Versio
1. `.gitea/workflows/` nutzt den vorhandenen Linux-arm64-Runner für alle vier Build-/Paketziele. Vorhandene Workflowmuster der anderen Origin-Projekte wiederverwenden: cargo-zigbuild für Linux amd64 und macOS arm64, cargo-xwin für Windows amd64/MSVC; Linux arm64 nativ oder mit derselben festgelegten Linux-Zielbaseline. Container/Tools und benötigte SDKs/Sysroots reproduzierbar pinnen; konkrete Rust-/OS-/glibc-Versionen mit TerminalBasic prüfen. Das Runnerlabel `linux-arm64` bei Anbindung bestätigen. Vier native Buildrunner sind nicht erforderlich. `build-runtime.py` erzeugt Vorlagenmetadaten mit dem Hostwerkzeug für das jeweilige Target; fremde Executables werden auf dem Buildhost nicht nativ ausgeführt.
2. Wiederverwendbare Repository-Skripte erledigen Build, Tests, Paketierung und Prüfung auch lokal. Source-Checkout vom Gitea-Origin, alle zusätzlichen Actions nur über explizite Gitea-URLs und feste Revisionen, soweit überhaupt nötig; keine implizite fremde Action-Auflösung. Rust und benötigte Systemwerkzeuge versioniert bereitstellen. Server-/Runner-Kompatibilität praktisch prüfen, statt lediglich YAML zu validieren.
3. Matrixprodukte: `terminalbasic-<version>-windows-amd64.7z`, `terminalbasic-<version>-macos-arm64.tar.gz`, `terminalbasic-<version>-linux-amd64.tar.gz`, `terminalbasic-<version>-linux-arm64.tar.gz`. Windows enthält `tb.exe`/`tbc.exe`/`tbrt.exe`, übrige `tb`/`tbc`/`tbrt`; tbrt ist die native Exportvorlage, dazu deren Metadaten, Lizenz, Kurzinstallation. Archive dürfen keine Buildverzeichnis-/Quellbaumabhängigkeiten haben. Exportierte Anwenderprogramme bleiben normale native Einzelartefakte; die Archivformate betreffen die Distribution.
3. Matrixprodukte: `terminalbasic-<version>-windows-amd64.7z`, `terminalbasic-<version>-macos-arm64.tar.gz`, `terminalbasic-<version>-linux-amd64.tar.gz`, `terminalbasic-<version>-linux-arm64.tar.gz`. Windows enthält `tb.exe`/`tbc.exe`/`tbrt.exe`, übrige `tb`/`tbc`/`tbrt`; tbrt ist die native Exportvorlage unter `runtimes/<Target-Triple>/`, dazu deren Metadaten, Lizenz, Kurzinstallation. Das vorhandene CLI-/IDE-Suchschema bleibt erhalten. Archive dürfen keine Buildverzeichnis-/Quellbaumabhängigkeiten haben. Exportierte Anwenderprogramme bleiben normale native Einzelartefakte; die Archivformate betreffen die Distribution.
4. Der Linux-Buildhost erzeugt/prüft Windows-Archive mit 7-Zip und Unix-Archive mit tar+gzip unter Erhalt der Executable-Bits. Inhalts-/Formatprüfungen laufen dort; tatsächliche Start-/Exportprüfungen verwenden neu entpackte Pakete auf passenden Zielsystemen aus 05, automatisiert oder dokumentiert manuell. Externe Nachweise müssen an Revision und exakte Paketprüfsumme gebunden und vor Freigabe geprüft sein. Ein gemeinsames TBL-Testartefakt wird einmal erzeugt und mit nachgewiesen identischen Bytes auf allen vier Zielsystemen verwendet. Separate BASIC-Verbraucher werden mit den entpackten TB-Tools verknüpft, als TBC ausgeführt und mit tbrt als EXE exportiert. Library-Quellen sind dabei nicht verfügbar. Erzeugung/Linken werden in einer Umgebung ohne erreichbaren C-/Rust-Compiler oder nativen Linker geprüft; Systemhilfen zur EXE-Finalisierung dürfen verfügbar bleiben. Fertige EXEs laufen anschließend ohne externe TBL/TBC oder TB-Installation.
5. `cargo test --locked --workspace`, Clippy und Formatprüfung zentral auf dem Linux-arm64-Host; zielabhängige Rust-Testprogramme bei Bedarf cross-kompilieren und auf passenden Prüfsystemen ausführen. Native Tests aus 02/03/04 und automatisierbare Plattformtests aus 05 auf ihren tatsächlichen Zielen ausführen. Buildstatus und Ausführungsnachweise getrennt ausweisen; macOS-EXE-Finalisierung mit codesign erfolgt auf macOS. Den fixierten Fremdprogrammbestand ausdrücklich im erforderlichen Abnahmelauf bereitstellen. Compile-/VM-Messungen auf dokumentiertem Referenzrunner statt instabiler Debug-Zeitlimits in allen Jobs.
6. Gitea-Release erst nach allen Pflichtjobs, zugeordneten echten Zielnachweisen und Vollständigkeits-/Prüfsummenprüfung freigeben. Upload zunächst zu einem als Entwurf erkennbaren Release oder gleichwertigem nicht freigegebenen Staging; anschließend atomare Freigabe im Rahmen der verfügbaren API. PR-Jobs ohne Veröffentlichungsrechte und ohne Release-Secrets; fremder PR-Code darf nicht mit solchen Rechten auf persönlichen Runnern laufen. Zugangswerte werden als Gitea-Secrets konfiguriert, nicht committed. Tests erzeugen keine öffentlichen Testreleases.
@@ -28,3 +28,20 @@ Origin ist `https://git.rfc1437.de/hugo/TerminalBasic.git`; die read-only Versio
## Migration Plan
Lokale Skripte zuerst lauffähig machen, dann Gitea-Runner und Workflows anbinden. PR-/Push-Lauf ohne Veröffentlichung prüfen; kontrollierter Tag-/Release-Lauf nach erfolgreicher Matrix. Bisherige lokale Cargo-Nutzung erhalten. Rollback über vorheriges vollständiges Release und Rücknahme der Workflowänderung; keine Server-/Runnerinstallation durch bloße Proposal-Erstellung.
## Konkretisierung während der Umsetzung
- Rust 1.97.1, vorhandene Cross-Images per Digest, 7-Zip 25.01 per SHA-256.
SDK-/CRT-Versionen und ein Hash ihrer exakten Header-/Library-Bytes sind
für Windows fixiert; macOS-SDK/Zig stammen aus dem gepinnten Image.
- `tb-template --inspect` nutzt den vorhandenen PE/ELF/Mach-O-Parser auch
für tb/tbc. Build und Paketprüfung laufen auf dem Host ohne fremde Programme
auszuführen. Die Anwenderpakete benötigen tb-template nicht.
- Taglauf erzeugt erst nach Build/Grundabnahme einen überprüften Entwurf.
Originalpakete werden auf separaten Systemen geprüft. Ein manueller Workflow
auf main bindet deren Nachweise aus einem Origin-Commit an Tag, Revision und
Paket-SHA-256 und gibt erst dann denselben Entwurf frei; kein erneuter Bau.
- Die Benutzerentscheidung aus 05, Windows-Ausführung vorerst offen zu lassen,
bleibt erhalten. Sie macht Windows-Builds zulässig, aber keinen Release mit
fehlender Windows-Abnahme erfolgreich. Fehlende Nachweise werden nicht auf
Basis der gemeinsamen ANSI-Technik von macOS/Linux pauschal abgehakt.

View File

@@ -0,0 +1,6 @@
Checking tb-frontend v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-frontend)
Checking tb-runtime v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-runtime)
Checking tb-ui v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-ui)
Checking tb-vm v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-vm)
Checking tb-export v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-export)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.74s

View File

@@ -0,0 +1,3 @@
PASS {'shell_exit': 7}
PASS {'abort': True}
PASS {'file_shell': True}

View File

@@ -0,0 +1 @@
{"target": "aarch64-apple-darwin", "tbl_sha256": "5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df", "native_execution": true, "source_free": true, "run_reset": true, "output": " 1 \n 7 3 9 1 \nTB \n"}

View File

@@ -0,0 +1,13 @@
PASS native console
PASS native restart
PASS native stop
PASS native error
PASS native project
PASS native form
PASS native external
PASS PTY Eingabe, Abbruch und Wiederherstellung (CLI/native)
PASS Exportabbruch SIGINT/SIGTERM, Original und Bereinigung
PASS corrupted length
PASS corrupted version
PASS corrupted truncated
Native Abnahme bestanden: aarch64-apple-darwin

View File

@@ -0,0 +1,16 @@
{
"target": "aarch64-apple-darwin",
"revision": "796564795a6607651c366c6b0de74560af55e71a",
"package": "terminalbasic-0.1.0-macos-arm64.tar.gz",
"package_sha256": "369882d9962f0264f41a7dfc0e352acb826c43d84a3c8babd028636a24aeaf4d",
"tbl_sha256": "5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df",
"host": "macOS-26.6.2-arm64-arm-64bit-Mach-O",
"automated_passed": true,
"manual_terminal_passed": false,
"checks": {
"default-template": "passed",
"native": "passed",
"library": "passed",
"ide-pty": "passed"
}
}

View File

@@ -0,0 +1,270 @@
info: syncing channel updates for '1.97.1-aarch64-unknown-linux-gnu'
info: latest update on 2026-07-16, rust version 1.97.1 (8bab26f4f 2026-07-14)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
1.97.1-aarch64-unknown-linux-gnu installed - rustc 1.97.1 (8bab26f4f 2026-07-14)
info: default toolchain set to '1.97.1-aarch64-unknown-linux-gnu'
info: checking for self-update
info: downloading self-update
/tmp/tb-7zip.tar.xz: OK
rustc 1.97.1 (8bab26f4f 2026-07-14)
7-Zip (z) 25.01 (arm64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
64-bit arm_v:8-A locale=C.UTF-8 Threads:4 OPEN_MAX:1024, ASM
+ rustup target add aarch64-unknown-linux-gnu
info: component rust-std is up to date
+ cargo zigbuild --locked --release --target aarch64-unknown-linux-gnu.2.28 -p tb-ide -p tb-cli -p tb-runner --bins
Updating crates.io index
Downloading crates ...
Downloaded bitflags v1.3.2
Downloaded cassowary v0.3.0
Downloaded anyhow v1.0.104
Downloaded bitflags v2.13.1
Downloaded equivalent v1.0.2
Downloaded allocator-api2 v0.2.21
Downloaded cfg-if v1.0.4
Downloaded darling_core v0.24.1
Downloaded indoc v2.0.7
Downloaded scopeguard v1.2.0
Downloaded defmt v1.1.1
Downloaded either v1.18.0
Downloaded signal-hook-mio v0.2.5
Downloaded compact_str v0.8.2
Downloaded static_assertions v1.1.0
Downloaded strsim v0.11.1
Downloaded unicode-ident v1.0.24
Downloaded jiff-core v0.1.0
Downloaded syn v2.0.119
Downloaded defmt-macros v1.1.1
Downloaded defmt-parser v1.0.0
Downloaded foldhash v0.1.5
Downloaded parking_lot v0.12.5
Downloaded rustix v0.38.44
Downloaded darling_macro v0.24.1
Downloaded thiserror v2.0.20
Downloaded unicase v2.9.0
Downloaded itoa v1.0.18
Downloaded paste v1.0.15
Downloaded serde_core v1.0.229
Downloaded quote v1.0.47
Downloaded mio v1.2.2
Downloaded ryu v1.0.23
Downloaded strum_macros v0.26.4
Downloaded jiff-static v0.2.35
Downloaded unicode-width v0.1.14
Downloaded log v0.4.34
Downloaded signal-hook v0.3.18
Downloaded crossterm v0.28.1
Downloaded hashbrown v0.15.5
Downloaded strum v0.26.3
Downloaded itertools v0.13.0
Downloaded heck v0.5.0
Downloaded redb v4.2.0
Downloaded syn v3.0.4
Downloaded jiff v0.2.35
Downloaded castaway v0.2.4
Downloaded rustversion v1.0.23
Downloaded instability v0.3.13
Downloaded errno v0.3.14
Downloaded lru v0.12.5
Downloaded smallvec v1.15.2
Downloaded parking_lot_core v0.9.12
Downloaded proc-macro2 v1.0.107
Downloaded ident_case v1.0.1
Downloaded thiserror-impl v2.0.20
Downloaded unicode-segmentation v1.13.3
Downloaded unicode-truncate v1.1.0
Downloaded darling v0.24.1
Downloaded pulldown-cmark v0.13.4
Downloaded unicode-width v0.2.0
Downloaded memchr v2.8.3
Downloaded linux-raw-sys v0.4.15
Downloaded signal-hook-registry v1.4.8
Downloaded ratatui v0.29.0
Downloaded libc v0.2.189
Downloaded lock_api v0.4.14
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
warning: `tb-cli` (bin "tbc") generated 1 warning
warning: `tb-runner` (bin "tbrt") generated 1 warning (1 duplicate)
warning: `tb-ide` (bin "tb") generated 1 warning (1 duplicate)
Finished `release` profile [optimized] target(s) in 1.55s
+ cargo build --locked --release -p tb-export --bin tb-template
Finished `release` profile [optimized] target(s) in 0.04s
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tb aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tbc aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tbrt aarch64-unknown-linux-gnu
+ /work/target/release/tb-template /tmp/tb-pack-3ccs00ug/tbrt aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-27ro6ib_/tb aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-27ro6ib_/tbc aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-27ro6ib_/tbrt aarch64-unknown-linux-gnu
/work/dist/terminalbasic-0.1.0-linux-arm64.tar.gz
+ /tmp/tb-unpacked-c072ix0x/tb --help
+ /usr/bin/python3 /work/tests/support/native-abnahme.py --bin-dir /tmp/tb-unpacked-c072ix0x --target aarch64-unknown-linux-gnu
+ /usr/bin/python3 /work/tests/support/library-abnahme.py --bin-dir /tmp/tb-unpacked-c072ix0x
+ /usr/bin/python3 /work/tests/support/ide-execution-pty.py --binary /tmp/tb-unpacked-c072ix0x/tb
+ rustup target add x86_64-unknown-linux-gnu
info: downloading component rust-std
+ cargo zigbuild --locked --release --target x86_64-unknown-linux-gnu.2.28 -p tb-ide -p tb-cli -p tb-runner --bins
Compiling libc v0.2.189
Compiling syn v3.0.4
Compiling rustversion v1.0.23
Compiling log v0.4.34
Compiling errno v0.3.14
Compiling ident_case v1.0.1
Compiling signal-hook v0.3.18
Compiling cfg-if v1.0.4
Compiling strsim v0.11.1
Compiling parking_lot_core v0.9.12
Compiling darling_core v0.24.1
Compiling signal-hook-registry v1.4.8
Compiling scopeguard v1.2.0
Compiling smallvec v1.15.2
Compiling bitflags v2.13.1
Compiling rustix v0.38.44
Compiling thiserror v2.0.20
Compiling lock_api v0.4.14
Compiling darling_macro v0.24.1
Compiling thiserror-impl v2.0.20
Compiling mio v1.2.2
Compiling syn v2.0.119
Compiling allocator-api2 v0.2.21
Compiling either v1.18.0
Compiling instability v0.3.13
Compiling equivalent v1.0.2
Compiling paste v1.0.15
Compiling foldhash v0.1.5
Compiling heck v0.5.0
Compiling linux-raw-sys v0.4.15
Compiling strum_macros v0.26.4
Compiling hashbrown v0.15.5
Compiling itertools v0.13.0
Compiling redb v4.2.0
Compiling signal-hook-mio v0.2.5
Compiling darling v0.24.1
Compiling parking_lot v0.12.5
Compiling castaway v0.2.4
Compiling itoa v1.0.18
Compiling ryu v1.0.23
Compiling unicode-width v0.2.0
Compiling static_assertions v1.1.0
Compiling unicode-segmentation v1.13.3
Compiling indoc v2.0.7
Compiling jiff-core v0.1.0
Compiling unicode-width v0.1.14
Compiling unicode-truncate v1.1.0
Compiling jiff v0.2.35
Compiling compact_str v0.8.2
Compiling crossterm v0.28.1
Compiling strum v0.26.3
Compiling lru v0.12.5
Compiling cassowary v0.3.0
Compiling ratatui v0.29.0
Compiling tb-runtime v0.1.0 (/work/crates/tb-runtime)
Compiling tb-frontend v0.1.0 (/work/crates/tb-frontend)
Compiling anyhow v1.0.104
Compiling tb-ui v0.1.0 (/work/crates/tb-ui)
Compiling tb-vm v0.1.0 (/work/crates/tb-vm)
Compiling tb-export v0.1.0 (/work/crates/tb-export)
Compiling pulldown-cmark v0.13.4
Compiling memchr v2.8.3
Compiling unicase v2.9.0
Compiling tb-runner v0.1.0 (/work/crates/tb-runner)
Compiling tb-ide v0.1.0 (/work/crates/tb-ide)
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
warning: `tb-runner` (bin "tbrt") generated 1 warning
Compiling tb-cli v0.1.0 (/work/crates/tb-cli)
warning: `tb-ide` (bin "tb") generated 1 warning (1 duplicate)
warning: `tb-cli` (bin "tbc") generated 1 warning (1 duplicate)
Finished `release` profile [optimized] target(s) in 2m 23s
+ cargo build --locked --release -p tb-export --bin tb-template
Finished `release` profile [optimized] target(s) in 0.06s
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tb x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tbc x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tbrt x86_64-unknown-linux-gnu
+ /work/target/release/tb-template /tmp/tb-pack-3e1u_9my/tbrt x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-lwy0qi08/tb x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-lwy0qi08/tbc x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-lwy0qi08/tbrt x86_64-unknown-linux-gnu
/work/dist/terminalbasic-0.1.0-linux-amd64.tar.gz
+ rustup target add aarch64-apple-darwin
info: downloading component rust-std
+ cargo zigbuild --locked --release --target aarch64-apple-darwin -p tb-ide -p tb-cli -p tb-runner --bins
Compiling libc v0.2.189
Compiling log v0.4.34
Compiling cfg-if v1.0.4
Compiling signal-hook v0.3.18
Compiling parking_lot_core v0.9.12
Compiling smallvec v1.15.2
Compiling bitflags v2.13.1
Compiling scopeguard v1.2.0
Compiling lock_api v0.4.14
Compiling rustix v0.38.44
Compiling thiserror v2.0.20
Compiling equivalent v1.0.2
Compiling allocator-api2 v0.2.21
Compiling errno v0.3.14
Compiling signal-hook-registry v1.4.8
Compiling mio v1.2.2
Compiling foldhash v0.1.5
Compiling either v1.18.0
Compiling itertools v0.13.0
Compiling signal-hook-mio v0.2.5
Compiling hashbrown v0.15.5
Compiling redb v4.2.0
Compiling parking_lot v0.12.5
Compiling castaway v0.2.4
Compiling ryu v1.0.23
Compiling static_assertions v1.1.0
Compiling unicode-width v0.2.0
Compiling unicode-segmentation v1.13.3
Compiling unicode-width v0.1.14
Compiling itoa v1.0.18
Compiling jiff-core v0.1.0
Compiling unicode-truncate v1.1.0
Compiling compact_str v0.8.2
Compiling jiff v0.2.35
Compiling crossterm v0.28.1
Compiling strum v0.26.3
Compiling lru v0.12.5
Compiling cassowary v0.3.0
Compiling ratatui v0.29.0
Compiling tb-runtime v0.1.0 (/work/crates/tb-runtime)
Compiling tb-frontend v0.1.0 (/work/crates/tb-frontend)
Compiling anyhow v1.0.104
Compiling tb-ui v0.1.0 (/work/crates/tb-ui)
Compiling tb-vm v0.1.0 (/work/crates/tb-vm)
Compiling tb-export v0.1.0 (/work/crates/tb-export)
Compiling pulldown-cmark v0.13.4
Compiling unicase v2.9.0
Compiling memchr v2.8.3
Compiling tb-runner v0.1.0 (/work/crates/tb-runner)
Compiling tb-ide v0.1.0 (/work/crates/tb-ide)
Compiling tb-cli v0.1.0 (/work/crates/tb-cli)
Finished `release` profile [optimized] target(s) in 2m 16s
+ cargo build --locked --release -p tb-export --bin tb-template
Finished `release` profile [optimized] target(s) in 0.06s
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tb aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tbc aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tbrt aarch64-apple-darwin
+ /work/target/release/tb-template /tmp/tb-pack-ymsier7a/tbrt aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-e391lcwl/tb aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-e391lcwl/tbc aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-e391lcwl/tbrt aarch64-apple-darwin
/work/dist/terminalbasic-0.1.0-macos-arm64.tar.gz

View File

@@ -0,0 +1,279 @@
info: syncing channel updates for '1.97.1-aarch64-unknown-linux-gnu'
info: latest update on 2026-07-16, rust version 1.97.1 (8bab26f4f 2026-07-14)
info: component 'clippy' for target 'aarch64-unknown-linux-gnu' is up to date
info: component 'rustfmt' for target 'aarch64-unknown-linux-gnu' is up to date
1.97.1-aarch64-unknown-linux-gnu unchanged - rustc 1.97.1 (8bab26f4f 2026-07-14)
info: checking for self-update
info: downloading self-update
/tmp/tb-7zip.tar.xz: OK
rustc 1.97.1 (8bab26f4f 2026-07-14)
7-Zip (z) 25.01 (arm64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
64-bit arm_v:8-A locale=C.UTF-8 Threads:4 OPEN_MAX:1024, ASM
+ rustup target add x86_64-pc-windows-msvc
info: component rust-std for target x86_64-pc-windows-msvc is up to date
+ cargo xwin build --locked --release --target x86_64-pc-windows-msvc -p tb-ide -p tb-cli -p tb-runner --bins
Updating crates.io index
Downloading crates ...
Downloaded indoc v2.0.7
Downloaded bitflags v2.13.1
Downloaded heck v0.5.0
Downloaded paste v1.0.15
Downloaded bitflags v1.3.2
Downloaded strum_macros v0.26.4
Downloaded anyhow v1.0.104
Downloaded syn v3.0.4
Downloaded allocator-api2 v0.2.21
Downloaded cassowary v0.3.0
Downloaded windows-sys v0.59.0
Downloaded unicode-segmentation v1.13.3
Downloaded defmt-parser v1.0.0
Downloaded parking_lot v0.12.5
Downloaded thiserror v2.0.20
Downloaded thiserror-impl v2.0.20
Downloaded castaway v0.2.4
Downloaded jiff-tzdb v0.1.8
Downloaded static_assertions v1.1.0
Downloaded windows-link v0.2.1
Downloaded darling_macro v0.24.1
Downloaded errno v0.3.14
Downloaded defmt-macros v1.1.1
Downloaded jiff-static v0.2.35
Downloaded cfg-if v1.0.4
Downloaded log v0.4.34
Downloaded lru v0.12.5
Downloaded serde_core v1.0.229
Downloaded rustversion v1.0.23
Downloaded unicode-truncate v1.1.0
Downloaded signal-hook v0.3.18
Downloaded signal-hook-mio v0.2.5
Downloaded unicase v2.9.0
Downloaded scopeguard v1.2.0
Downloaded windows-targets v0.52.6
Downloaded defmt v1.1.1
Downloaded ident_case v1.0.1
Downloaded jiff-tzdb-platform v0.1.3
Downloaded quote v1.0.47
Downloaded strsim v0.11.1
Downloaded strum v0.26.3
Downloaded itoa v1.0.18
Downloaded equivalent v1.0.2
Downloaded instability v0.3.13
Downloaded foldhash v0.1.5
Downloaded smallvec v1.15.2
Downloaded crossterm_winapi v0.9.1
Downloaded signal-hook-registry v1.4.8
Downloaded either v1.18.0
Downloaded parking_lot_core v0.9.12
Downloaded ryu v1.0.23
Downloaded compact_str v0.8.2
Downloaded darling_core v0.24.1
Downloaded lock_api v0.4.14
Downloaded proc-macro2 v1.0.107
Downloaded unicode-ident v1.0.24
Downloaded darling v0.24.1
Downloaded memchr v2.8.3
Downloaded mio v1.2.2
Downloaded crossterm v0.28.1
Downloaded jiff-core v0.1.0
Downloaded itertools v0.13.0
Downloaded hashbrown v0.15.5
Downloaded pulldown-cmark v0.13.4
Downloaded unicode-width v0.2.0
Downloaded redb v4.2.0
Downloaded unicode-width v0.1.14
Downloaded rustix v0.38.44
Downloaded syn v2.0.119
Downloaded ratatui v0.29.0
Downloaded jiff v0.2.35
Downloaded libc v0.2.189
Downloaded windows_x86_64_msvc v0.52.6
Downloaded winapi v0.3.9
Downloaded linux-raw-sys v0.4.15
Downloaded windows-sys v0.61.2
warning: linker stderr: lld-link: Cannot use debug info for 'libcmt.lib(std_type_info_static.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(fltused.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(tlssup.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(delete_scalar_size.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(gs_cookie.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(guard_support.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(delete_scalar.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(initializers.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(utility_desktop.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(gshandler.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(gs_report.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(throw.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(riscchandler.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(risctrnsctrl.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(ehhelpers.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(cpu_disp.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(pesect.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(jbcxrval.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(per_thread_data.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(ehstate.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(frame.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(wcschr.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(winapi_downlevel.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(std_exception.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(std_type_info.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(gshandlerseh.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(undname.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(purevirt.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(locks.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(purevirt_data.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(strrchr.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(jmpuwind.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(exe_main.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(loadcfg.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(utility.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(gs_support.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(matherr.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(argv_mode.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(commit_mode.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(file_mode.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(new_mode.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(thread_locale.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(tncleanup.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(env_mode.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(invalid_parameter_handler.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(denormal_control.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(default_local_stdio_options.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(matherr_detection.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(dyn_tls_init.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(dyn_tls_dtor.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(initsect.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(softmemtag.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(initialization.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libcmt.lib(ucrt_detection.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libcmt.amd64.pdb': No such file or directory
lld-link: Cannot use debug info for 'libvcruntime.lib(strchr.obj)' [LNK4099]
>>> failed to load reference 'D:\a\_work\1\s\binaries\amd64ret\lib\amd64\libvcruntime.amd64.pdb': No such file or directory
|
= note: `#[warn(linker_messages)]` on by default
warning: `tb-runner` (bin "tbrt") generated 1 warning
warning: `tb-ide` (bin "tb") generated 1 warning (1 duplicate)
warning: `tb-cli` (bin "tbc") generated 1 warning (1 duplicate)
Finished `release` profile [optimized] target(s) in 1.75s
+ cargo build --locked --release -p tb-export --bin tb-template
Finished `release` profile [optimized] target(s) in 0.04s
+ /work/target/release/tb-template --inspect /work/target/x86_64-pc-windows-msvc/release/tb.exe x86_64-pc-windows-msvc
+ /work/target/release/tb-template --inspect /work/target/x86_64-pc-windows-msvc/release/tbc.exe x86_64-pc-windows-msvc
+ /work/target/release/tb-template --inspect /work/target/x86_64-pc-windows-msvc/release/tbrt.exe x86_64-pc-windows-msvc
+ /work/target/release/tb-template /tmp/tb-pack-am6i0jvn/runtimes/x86_64-pc-windows-msvc/tbrt.exe x86_64-pc-windows-msvc
+ /usr/local/bin/7zz a -t7z /work/dist-pinned/terminalbasic-0.1.0-windows-amd64.7z INSTALL.txt LICENSE manifest.json runtimes/x86_64-pc-windows-msvc/tbrt.exe runtimes/x86_64-pc-windows-msvc/tbrt.exe.meta tb.exe tbc.exe
+ /usr/local/bin/7zz x -y -o/tmp/tb-package-5j84dd93 -- /work/dist-pinned/terminalbasic-0.1.0-windows-amd64.7z
+ /work/target/release/tb-template --inspect /tmp/tb-package-5j84dd93/tb.exe x86_64-pc-windows-msvc
+ /work/target/release/tb-template --inspect /tmp/tb-package-5j84dd93/tbc.exe x86_64-pc-windows-msvc
+ /work/target/release/tb-template --inspect /tmp/tb-package-5j84dd93/runtimes/x86_64-pc-windows-msvc/tbrt.exe x86_64-pc-windows-msvc
/work/dist-pinned/terminalbasic-0.1.0-windows-amd64.7z

View File

@@ -0,0 +1,24 @@
Compiling tb-vm v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-vm)
Compiling tb-export v0.1.0 (/Users/gb/Projects/TerminalBasic/crates/tb-export)
Finished `test` profile [unoptimized + debuginfo] target(s) in 3.69s
Running unittests src/lib.rs (target/debug/deps/tb_export-25aa117d19f46d7a)
running 3 tests
test tests::publication_preserves_originals_on_conflict_failure_race_and_cancel ... ok
test tests::fehlgeschlagene_native_finalisierung_erhaelt_das_ziel ... ok
test tests::targets_versions_integrity_and_payload_bounds_are_enforced ... ok
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
Running unittests src/bin/tb-template.rs (target/debug/deps/tb_template-ef8c38310b67cef7)
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Doc-tests tb_export
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

View File

@@ -0,0 +1,12 @@
{
".gitea/INSTALL.txt": "8dedd68d8c03e56a6f322bad6451a0403eca3abf2fffb3260dd07a8c6a5ba98f",
".gitea/scripts/acceptance.py": "89d84d678095be7cd3ffb8bd8ea40cb2312f77f4776ecec4544bcc1cbc24b51a",
".gitea/scripts/bootstrap.sh": "ac6d7d605fcb314c2a267fbe549ce54a5bce562d4c4a173f5e1f25eeeebba2a3",
".gitea/scripts/build.py": "71f00d0fc41b998a168e7599b6c619ebfcc80f61695ff25d5c5233ee98111644",
".gitea/scripts/distribution.py": "de9b1ec3cd189102952372937daa72e0566cb342286b7c3b2f8fd8a72ccb28f6",
".gitea/scripts/publish.py": "e5598cd5399dca58c01a118d2ecf044126f0de5226be05d1e64edbc51c955804",
".gitea/scripts/release.py": "fe0e3fc55e22de10bfc244623f0df3395cececc474834a844fe850bc70468c93",
".gitea/scripts/test_distribution.py": "f09463bb8528dedc5df7dd98f85c4d04e2231a5821f528a6e32400231f4f5c4b",
".gitea/workflows/build.yml": "60842092d3ce09dcf7e303a1186dfdd3f409a47c314c18bcde90eb644930322f",
".gitea/workflows/publish.yml": "30dff7b2045b80d5961407bc501334c3c9fa154133fa3d8eb925e5e87d0d3592"
}

View File

@@ -0,0 +1,3 @@
PASS {'shell_exit': 7}
PASS {'abort': True}
PASS {'file_shell': True}

View File

@@ -0,0 +1 @@
{"target": "aarch64-unknown-linux-gnu", "tbl_sha256": "5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df", "native_execution": true, "source_free": true, "run_reset": true, "output": " 1 \n 7 3 9 1 \nTB \n"}

View File

@@ -0,0 +1,13 @@
PASS native console
PASS native restart
PASS native stop
PASS native error
PASS native project
PASS native form
PASS native external
PASS PTY Eingabe, Abbruch und Wiederherstellung (CLI/native)
PASS Exportabbruch SIGINT/SIGTERM, Original und Bereinigung
PASS corrupted length
PASS corrupted version
PASS corrupted truncated
Native Abnahme bestanden: aarch64-unknown-linux-gnu

View File

@@ -0,0 +1,16 @@
{
"target": "aarch64-unknown-linux-gnu",
"revision": "796564795a6607651c366c6b0de74560af55e71a",
"package": "terminalbasic-0.1.0-linux-arm64.tar.gz",
"package_sha256": "e1eff42146202fe4694b8812a17acfc9337a454a27c0ef36d53a3fc776088b81",
"tbl_sha256": "5d25c2f8c95ae535e55a6c84c1ddd0d964358863f4f3c780c50ac4a2eb3594df",
"host": "Linux-6.8.0-139-generic-aarch64-with-glibc2.41",
"automated_passed": true,
"manual_terminal_passed": false,
"checks": {
"default-template": "passed",
"native": "passed",
"library": "passed",
"ide-pty": "passed"
}
}

View File

@@ -0,0 +1,12 @@
{
"revision": "796564795a6607651c366c6b0de74560af55e71a",
"passed": true,
"buildhost": "macOS-26.6.2-arm64-arm-64bit-Mach-O",
"run_url": "local-verification",
"foreign": true,
"inventory": true,
"workspace": true,
"benchmarks": true,
"native_ide": true,
"log_sha256": "f3b51d1f0155b0d8f33435f23206073d2dd19c7bad56c23ac7e4c32abe50af30"
}

View File

@@ -0,0 +1,12 @@
Finished `release` profile [optimized] target(s) in 0.06s
Finished `release` profile [optimized] target(s) in 0.01s
Running `target/release/tb-template /private/var/folders/qv/bccsf2nd15lgm71zrpylrc_80000gn/T/tb-ci-runtime-w6n0ip1v/runtime/aarch64-apple-darwin/tbrt aarch64-apple-darwin`
/private/var/folders/qv/bccsf2nd15lgm71zrpylrc_80000gn/T/tb-ci-runtime-w6n0ip1v/runtime/aarch64-apple-darwin
Finished `test` profile [unoptimized + debuginfo] target(s) in 0.03s
Running unittests src/main.rs (target/debug/deps/tbc-a3652d07eb423d84)
running 1 test
test ide_acceptance::real_native_ide_exports_and_source_free_cli_library_consumer ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 6 filtered out; finished in 0.68s

View File

@@ -0,0 +1,112 @@
- Validating...
✓ spec/bytecode-kompilat
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/datei-eio
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[8]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ereignissteuerung
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[10]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/forms-dateiformat
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/forms-objektmodell
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/forms-steuerelemente
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-ausfuehrung
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-debugger
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-editor
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-formulardesigner
✓ spec/ide-hilfe
✓ spec/ide-native-exporte
✓ spec/ide-oberflaeche
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[7]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[8]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-phasenabnahme
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/ide-projekte
✓ spec/isam-datenbank
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[7]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/kompat-testkorpus
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[7]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[8]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/konsolen-basisbibliothek
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[8]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[9]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[10]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[11]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/laufzeitfehler
✓ spec/native-executables
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/pcode-bibliotheken
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ change/phase-6-06-gitea-actions-und-releases
✓ change/phase-6-07-dokumentation-und-phasenabnahme
✓ spec/release-kompatibilitaet
✓ spec/sprach-frontend
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[7]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[10]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[11]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[13]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/sprachinventar
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[2]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/terminal-plattformmatrix
[INFO] requirements[1]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/textbildschirm
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[4]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[6]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[8]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[9]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[10]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/vm-ausfuehrung
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[3]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[5]: Requirement text is very long (>500 characters). Consider breaking it down.
[INFO] requirements[7]: Requirement text is very long (>500 characters). Consider breaking it down.
✓ spec/vm-fehlerbehandlung
[INFO] requirements[0]: Requirement text is very long (>500 characters). Consider breaking it down.
Totals: 30 passed, 0 failed (30 items)

View File

@@ -0,0 +1,6 @@
{
"terminalbasic-0.1.0-linux-amd64.tar.gz": "2ced064df0d1c8b041f23df1a668787d22933b2f6be646e01f73061cc20a4e04",
"terminalbasic-0.1.0-linux-arm64.tar.gz": "e1eff42146202fe4694b8812a17acfc9337a454a27c0ef36d53a3fc776088b81",
"terminalbasic-0.1.0-macos-arm64.tar.gz": "369882d9962f0264f41a7dfc0e352acb826c43d84a3c8babd028636a24aeaf4d",
"terminalbasic-0.1.0-windows-amd64.7z": "8fb79b0e34f2a496a93e90f87c70d9bff2d5b38b77087a123518491d0964e092"
}

View File

@@ -0,0 +1,5 @@
.....
----------------------------------------------------------------------
Ran 5 tests in 0.017s
OK

View File

@@ -0,0 +1,30 @@
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tb aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tbc aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/aarch64-unknown-linux-gnu/release/tbrt aarch64-unknown-linux-gnu
+ /work/target/release/tb-template /tmp/tb-pack-o13p5pm9/runtimes/aarch64-unknown-linux-gnu/tbrt aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-g7jby_v7/tb aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-g7jby_v7/tbc aarch64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-g7jby_v7/runtimes/aarch64-unknown-linux-gnu/tbrt aarch64-unknown-linux-gnu
/work/dist-final/terminalbasic-0.1.0-linux-arm64.tar.gz
+ /tmp/tb-unpacked-akoqbup6/tb --help
+ /tmp/tb-unpacked-akoqbup6/tbc build /tmp/tb-unpacked-akoqbup6/hello.bas --exe --target aarch64-unknown-linux-gnu -o /tmp/tb-unpacked-akoqbup6/hello
/tmp/tb-unpacked-akoqbup6/hello
+ /usr/bin/python3 /work/tests/support/native-abnahme.py --bin-dir /tmp/tb-unpacked-akoqbup6 --target aarch64-unknown-linux-gnu
+ /usr/bin/python3 /work/tests/support/library-abnahme.py --bin-dir /tmp/tb-unpacked-akoqbup6
+ /usr/bin/python3 /work/tests/support/ide-execution-pty.py --binary /tmp/tb-unpacked-akoqbup6/tb
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tb x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tbc x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /work/target/x86_64-unknown-linux-gnu/release/tbrt x86_64-unknown-linux-gnu
+ /work/target/release/tb-template /tmp/tb-pack-lrb4e1pp/runtimes/x86_64-unknown-linux-gnu/tbrt x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-1agxs6xy/tb x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-1agxs6xy/tbc x86_64-unknown-linux-gnu
+ /work/target/release/tb-template --inspect /tmp/tb-package-1agxs6xy/runtimes/x86_64-unknown-linux-gnu/tbrt x86_64-unknown-linux-gnu
/work/dist-final/terminalbasic-0.1.0-linux-amd64.tar.gz
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tb aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tbc aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /work/target/aarch64-apple-darwin/release/tbrt aarch64-apple-darwin
+ /work/target/release/tb-template /tmp/tb-pack-dlq0c_7h/runtimes/aarch64-apple-darwin/tbrt aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-w9maj5ky/tb aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-w9maj5ky/tbc aarch64-apple-darwin
+ /work/target/release/tb-template --inspect /tmp/tb-package-w9maj5ky/runtimes/aarch64-apple-darwin/tbrt aarch64-apple-darwin
/work/dist-final/terminalbasic-0.1.0-macos-arm64.tar.gz

View File

@@ -0,0 +1,161 @@
diff --git a/.gitignore b/.gitignore
index b7141ea..15c6f97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,8 @@
/target
**/*.rs.bk
*.pdb
+/dist
+/acceptance
+/artifacts
+/packages
+**/__pycache__
diff --git a/crates/tb-export/src/bin/tb-template.rs b/crates/tb-export/src/bin/tb-template.rs
index 7776b1a..c1ed101 100644
--- a/crates/tb-export/src/bin/tb-template.rs
+++ b/crates/tb-export/src/bin/tb-template.rs
@@ -1,10 +1,23 @@
//! Builder-Hilfe: geprüfte Metadaten für eine frisch gebaute Runtime schreiben.
fn main() -> anyhow::Result<()> {
- let args: Vec<_> = std::env::args().skip(1).collect();
+ let mut args: Vec<_> = std::env::args().skip(1).collect();
+ let inspect = args.first().is_some_and(|s| s == "--inspect");
+ if inspect {
+ args.remove(0);
+ }
anyhow::ensure!(
args.len() == 2,
- "Aufruf: tb-template <tbrt-Pfad> <Target-Triple>"
+ "Aufruf: tb-template [--inspect] <Executable-Pfad> <Target-Triple>"
);
+ if inspect {
+ let found = tb_export::native_target(&std::fs::read(&args[0])?)?;
+ anyhow::ensure!(
+ found == tb_export::Target::parse(&args[1])?,
+ "Executable hat falsches Ziel"
+ );
+ println!("{}", found.triple());
+ return Ok(());
+ }
tb_export::prepare_template(
std::path::Path::new(&args[0]),
tb_export::Target::parse(&args[1])?,
diff --git a/openspec/changes/phase-6-06-gitea-actions-und-releases/design.md b/openspec/changes/phase-6-06-gitea-actions-und-releases/design.md
index 9ed6dd3..8134698 100644
--- a/openspec/changes/phase-6-06-gitea-actions-und-releases/design.md
+++ b/openspec/changes/phase-6-06-gitea-actions-und-releases/design.md
@@ -12,7 +12,7 @@ Origin ist `https://git.rfc1437.de/hugo/TerminalBasic.git`; die read-only Versio
1. `.gitea/workflows/` nutzt den vorhandenen Linux-arm64-Runner für alle vier Build-/Paketziele. Vorhandene Workflowmuster der anderen Origin-Projekte wiederverwenden: cargo-zigbuild für Linux amd64 und macOS arm64, cargo-xwin für Windows amd64/MSVC; Linux arm64 nativ oder mit derselben festgelegten Linux-Zielbaseline. Container/Tools und benötigte SDKs/Sysroots reproduzierbar pinnen; konkrete Rust-/OS-/glibc-Versionen mit TerminalBasic prüfen. Das Runnerlabel `linux-arm64` bei Anbindung bestätigen. Vier native Buildrunner sind nicht erforderlich. `build-runtime.py` erzeugt Vorlagenmetadaten mit dem Hostwerkzeug für das jeweilige Target; fremde Executables werden auf dem Buildhost nicht nativ ausgeführt.
2. Wiederverwendbare Repository-Skripte erledigen Build, Tests, Paketierung und Prüfung auch lokal. Source-Checkout vom Gitea-Origin, alle zusätzlichen Actions nur über explizite Gitea-URLs und feste Revisionen, soweit überhaupt nötig; keine implizite fremde Action-Auflösung. Rust und benötigte Systemwerkzeuge versioniert bereitstellen. Server-/Runner-Kompatibilität praktisch prüfen, statt lediglich YAML zu validieren.
-3. Matrixprodukte: `terminalbasic-<version>-windows-amd64.7z`, `terminalbasic-<version>-macos-arm64.tar.gz`, `terminalbasic-<version>-linux-amd64.tar.gz`, `terminalbasic-<version>-linux-arm64.tar.gz`. Windows enthält `tb.exe`/`tbc.exe`/`tbrt.exe`, übrige `tb`/`tbc`/`tbrt`; tbrt ist die native Exportvorlage, dazu deren Metadaten, Lizenz, Kurzinstallation. Archive dürfen keine Buildverzeichnis-/Quellbaumabhängigkeiten haben. Exportierte Anwenderprogramme bleiben normale native Einzelartefakte; die Archivformate betreffen die Distribution.
+3. Matrixprodukte: `terminalbasic-<version>-windows-amd64.7z`, `terminalbasic-<version>-macos-arm64.tar.gz`, `terminalbasic-<version>-linux-amd64.tar.gz`, `terminalbasic-<version>-linux-arm64.tar.gz`. Windows enthält `tb.exe`/`tbc.exe`/`tbrt.exe`, übrige `tb`/`tbc`/`tbrt`; tbrt ist die native Exportvorlage unter `runtimes/<Target-Triple>/`, dazu deren Metadaten, Lizenz, Kurzinstallation. Das vorhandene CLI-/IDE-Suchschema bleibt erhalten. Archive dürfen keine Buildverzeichnis-/Quellbaumabhängigkeiten haben. Exportierte Anwenderprogramme bleiben normale native Einzelartefakte; die Archivformate betreffen die Distribution.
4. Der Linux-Buildhost erzeugt/prüft Windows-Archive mit 7-Zip und Unix-Archive mit tar+gzip unter Erhalt der Executable-Bits. Inhalts-/Formatprüfungen laufen dort; tatsächliche Start-/Exportprüfungen verwenden neu entpackte Pakete auf passenden Zielsystemen aus 05, automatisiert oder dokumentiert manuell. Externe Nachweise müssen an Revision und exakte Paketprüfsumme gebunden und vor Freigabe geprüft sein. Ein gemeinsames TBL-Testartefakt wird einmal erzeugt und mit nachgewiesen identischen Bytes auf allen vier Zielsystemen verwendet. Separate BASIC-Verbraucher werden mit den entpackten TB-Tools verknüpft, als TBC ausgeführt und mit tbrt als EXE exportiert. Library-Quellen sind dabei nicht verfügbar. Erzeugung/Linken werden in einer Umgebung ohne erreichbaren C-/Rust-Compiler oder nativen Linker geprüft; Systemhilfen zur EXE-Finalisierung dürfen verfügbar bleiben. Fertige EXEs laufen anschließend ohne externe TBL/TBC oder TB-Installation.
5. `cargo test --locked --workspace`, Clippy und Formatprüfung zentral auf dem Linux-arm64-Host; zielabhängige Rust-Testprogramme bei Bedarf cross-kompilieren und auf passenden Prüfsystemen ausführen. Native Tests aus 02/03/04 und automatisierbare Plattformtests aus 05 auf ihren tatsächlichen Zielen ausführen. Buildstatus und Ausführungsnachweise getrennt ausweisen; macOS-EXE-Finalisierung mit codesign erfolgt auf macOS. Den fixierten Fremdprogrammbestand ausdrücklich im erforderlichen Abnahmelauf bereitstellen. Compile-/VM-Messungen auf dokumentiertem Referenzrunner statt instabiler Debug-Zeitlimits in allen Jobs.
6. Gitea-Release erst nach allen Pflichtjobs, zugeordneten echten Zielnachweisen und Vollständigkeits-/Prüfsummenprüfung freigeben. Upload zunächst zu einem als Entwurf erkennbaren Release oder gleichwertigem nicht freigegebenen Staging; anschließend atomare Freigabe im Rahmen der verfügbaren API. PR-Jobs ohne Veröffentlichungsrechte und ohne Release-Secrets; fremder PR-Code darf nicht mit solchen Rechten auf persönlichen Runnern laufen. Zugangswerte werden als Gitea-Secrets konfiguriert, nicht committed. Tests erzeugen keine öffentlichen Testreleases.
@@ -28,3 +28,20 @@ Origin ist `https://git.rfc1437.de/hugo/TerminalBasic.git`; die read-only Versio
## Migration Plan
Lokale Skripte zuerst lauffähig machen, dann Gitea-Runner und Workflows anbinden. PR-/Push-Lauf ohne Veröffentlichung prüfen; kontrollierter Tag-/Release-Lauf nach erfolgreicher Matrix. Bisherige lokale Cargo-Nutzung erhalten. Rollback über vorheriges vollständiges Release und Rücknahme der Workflowänderung; keine Server-/Runnerinstallation durch bloße Proposal-Erstellung.
+
+## Konkretisierung während der Umsetzung
+
+- Rust 1.97.1, vorhandene Cross-Images per Digest, 7-Zip 25.01 per SHA-256.
+ SDK-/CRT-Versionen und ein Hash ihrer exakten Header-/Library-Bytes sind
+ für Windows fixiert; macOS-SDK/Zig stammen aus dem gepinnten Image.
+- `tb-template --inspect` nutzt den vorhandenen PE/ELF/Mach-O-Parser auch
+ für tb/tbc. Build und Paketprüfung laufen auf dem Host ohne fremde Programme
+ auszuführen. Die Anwenderpakete benötigen tb-template nicht.
+- Taglauf erzeugt erst nach Build/Grundabnahme einen überprüften Entwurf.
+ Originalpakete werden auf separaten Systemen geprüft. Ein manueller Workflow
+ auf main bindet deren Nachweise aus einem Origin-Commit an Tag, Revision und
+ Paket-SHA-256 und gibt erst dann denselben Entwurf frei; kein erneuter Bau.
+- Die Benutzerentscheidung aus 05, Windows-Ausführung vorerst offen zu lassen,
+ bleibt erhalten. Sie macht Windows-Builds zulässig, aber keinen Release mit
+ fehlender Windows-Abnahme erfolgreich. Fehlende Nachweise werden nicht auf
+ Basis der gemeinsamen ANSI-Technik von macOS/Linux pauschal abgehakt.
diff --git a/openspec/changes/phase-6-06-gitea-actions-und-releases/tasks.md b/openspec/changes/phase-6-06-gitea-actions-und-releases/tasks.md
index 3f1d0c2..a226e36 100644
--- a/openspec/changes/phase-6-06-gitea-actions-und-releases/tasks.md
+++ b/openspec/changes/phase-6-06-gitea-actions-und-releases/tasks.md
@@ -1,19 +1,27 @@
## 1. Gitea und Runner
- [ ] 1.1 Vorhandenen Linux-arm64-Gitea-Runner und tatsächliches Label bestätigen; Cross-Buildumgebungen mit cargo-zigbuild, cargo-xwin und benötigten SDKs/Sysroots reproduzierbar festlegen. Ein Gitea-Prüfjob muss den Buildhost nachweisen; separate echte Prüfsysteme aus 05 zuordnen, ohne vier native Buildrunner vorauszusetzen.
-- [ ] 1.2 Repositorylokale Build-/Testaufrufe und feste Toolchain-/Systemvoraussetzungen bereitstellen; alle vier Ziele müssen auf Linux arm64 mit --locked baubar sein. Zentrale Workspace-Regressionen und getrennte Aufrufe für echte Zielprüfungen bereitstellen; fremde Executables nicht als nativ auf dem Buildhost getestet ausweisen.
+- [x] 1.2 Repositorylokale Build-/Testaufrufe und feste Toolchain-/Systemvoraussetzungen bereitstellen; alle vier Ziele müssen auf Linux arm64 mit --locked baubar sein. Zentrale Workspace-Regressionen und getrennte Aufrufe für echte Zielprüfungen bereitstellen; fremde Executables nicht als nativ auf dem Buildhost getestet ausweisen.
- [ ] 1.3 Push-/PR-Workflow unter .gitea/workflows anbinden; ein tatsächlicher Origin-Lauf muss vier Zielergebnisse und Fehlerstatus liefern, ohne Release-Secrets im PR-Pfad.
## 2. Artefakte und Pakete
- [ ] 2.1 IDE, CLI und native `tbrt`-Exportvorlage je Ziel in Gitea Actions bauen; Format-/Architektur-/Versionsprüfungen müssen Windows amd64, macOS arm64 und beide Linux-Architekturen eindeutig bestätigen.
-- [ ] 2.2 Windows-Paket als .7z und macOS-/Linux-Pakete als .tar.gz erzeugen; Archivtests müssen Dateinamen, Paketinhalt, Executable-Rechte und notwendige Begleitdateien prüfen.
+- [x] 2.2 Windows-Paket als .7z und macOS-/Linux-Pakete als .tar.gz erzeugen; Archivtests müssen Dateinamen, Paketinhalt, Executable-Rechte und notwendige Begleitdateien prüfen.
- [ ] 2.3 Jedes fertige Paket auf dem tatsächlichen Ziel neu entpacken und die enthaltenen Programme starten; automatisierte oder dokumentiert manuelle Nachweise aus separaten Prüfsystemen an Revision und Paketprüfsumme binden; `tbc link` und EXE-/TBL-Beispiele müssen mit separaten BASIC-Verbrauchern ohne Library-Quellen/Entwicklungscheckout sowie ohne erreichbaren C-/Rust-Compiler oder nativen Linker funktionieren.
-- [ ] 2.4 Einmal erzeugte TBL-Probe mit identischen Bytes an alle vier Zielprüfungen verteilen sowie Artefaktmanifest und Prüfsummen erzeugen; absichtlich beschädigte oder vertauschte Zielartefakte müssen die Prüfung scheitern lassen.
+- [x] 2.4 Einmal erzeugte TBL-Probe mit identischen Bytes an alle vier Zielprüfungen verteilen sowie Artefaktmanifest und Prüfsummen erzeugen; absichtlich beschädigte oder vertauschte Zielartefakte müssen die Prüfung scheitern lassen.
## 3. Releasepfad
- [ ] 3.1 Taggebundenen Gitea-Releasepfad mit vollständiger Pflichtasset-Liste und getrennten Rechten einrichten; fehlgeschlagene/fehlende Zielbuilds oder zugeordnete echte Paket-/Zielprüfungen müssen die Freigabe verhindern.
-- [ ] 3.2 Upload zunächst als nicht freigegebenen Stand prüfen und erst vollständig freigeben; ein simulierter fehlender Upload darf keinen vollständigen bestehenden Release überschreiben.
-- [ ] 3.3 Fremdprogramm-, Inventar-, native und automatisierte Plattformnachweise sowie Referenzbenchmarks in den erforderlichen Abnahmelauf integrieren; ignorierte Pflichtfälle müssen als fehlend sichtbar bleiben.
+- [x] 3.2 Upload zunächst als nicht freigegebenen Stand prüfen und erst vollständig freigeben; ein simulierter fehlender Upload darf keinen vollständigen bestehenden Release überschreiben.
+- [x] 3.3 Fremdprogramm-, Inventar-, native und automatisierte Plattformnachweise sowie Referenzbenchmarks in den erforderlichen Abnahmelauf integrieren; ignorierte Pflichtfälle müssen als fehlend sichtbar bleiben.
- [ ] 3.4 Einen tatsächlichen vollständigen Gitea-Lauf mit vier Paketartefakten nachweisen; Run-/Commit-/Buildhost-/Targetdaten und paketprüfsummengebundene entpackte Prüfergebnisse an 07 übergeben, bevor der Change als fertig gilt.
+
+Stand 07.09.2026: Repository-Implementierung und lokale Prüfungen vorhanden.
+Alle vier Ziele wurden in den fixierten Containern auf Linux arm64 gebaut;
+Linux-arm64- und cross-kompilierte macOS-Pakete bestehen echte entpackte
+Automatikprüfungen. Das ist noch kein Actions-Lauf. 1.1/1.3/2.1/3.4 bleiben
+wegen des defekten gemeinsamen Runners offen; 2.3 wegen Windows/Linux-amd64
+und den restlichen visuellen Zielnachweisen. 3.1 bleibt bis zur Einrichtung
+des Releasezugangs und tatsächlichen Rechteprüfung offen. Details: verification.md.
diff --git a/tests/support/library-abnahme.py b/tests/support/library-abnahme.py
index c596219..003e064 100644
--- a/tests/support/library-abnahme.py
+++ b/tests/support/library-abnahme.py
@@ -63,8 +63,15 @@ def main():
library = root / 'library.tbl'
shutil.copyfile(args.library, library)
template = root / ('runtime' + suffix)
- shutil.copy2(binaries / ('tbrt' + suffix), template)
- run([template_tool, template, target], root, env)
+ runtime = binaries / ('tbrt' + suffix)
+ if not runtime.is_file():
+ runtime = binaries / 'runtimes' / target / ('tbrt' + suffix)
+ shutil.copy2(runtime, template)
+ metadata = Path(str(runtime) + '.meta')
+ if metadata.is_file():
+ shutil.copyfile(metadata, Path(str(template) + '.meta'))
+ else:
+ run([template_tool, template, target], root, env)
source = root / 'consumer.bas'
source.write_text(SOURCE, encoding='utf-8')
linked = root / 'consumer.tbc'
diff --git a/tests/support/native-abnahme.py b/tests/support/native-abnahme.py
index 78f4c2a..837d868 100644
--- a/tests/support/native-abnahme.py
+++ b/tests/support/native-abnahme.py
@@ -76,13 +76,19 @@ def main():
suffix = '.exe' if args.target == 'x86_64-pc-windows-msvc' else ''
tbc = binaries / ('tbc' + suffix)
rt = binaries / ('tbrt' + suffix)
+ if not rt.is_file():
+ rt = binaries / 'runtimes' / args.target / ('tbrt' + suffix)
prepare = binaries / ('tb-template' + suffix)
env = dict(os.environ, PATH='') # weder Cargo noch tbc/tbrt über PATH auflösbar
with tempfile.TemporaryDirectory(prefix='tb-native-') as work:
root = Path(work)
template = root / ('runtime' + suffix)
shutil.copy2(rt, template)
- must(run([prepare, template, args.target], root))
+ metadata = Path(str(rt) + '.meta')
+ if metadata.is_file():
+ shutil.copyfile(metadata, Path(str(template) + '.meta'))
+ else:
+ must(run([prepare, template, args.target], root))
empty = run([template], root, env=env)
assert empty.returncode == 1 and b'Nutzlast' in empty.stderr, empty
cases = {

View File

@@ -1,19 +1,27 @@
## 1. Gitea und Runner
- [ ] 1.1 Vorhandenen Linux-arm64-Gitea-Runner und tatsächliches Label bestätigen; Cross-Buildumgebungen mit cargo-zigbuild, cargo-xwin und benötigten SDKs/Sysroots reproduzierbar festlegen. Ein Gitea-Prüfjob muss den Buildhost nachweisen; separate echte Prüfsysteme aus 05 zuordnen, ohne vier native Buildrunner vorauszusetzen.
- [ ] 1.2 Repositorylokale Build-/Testaufrufe und feste Toolchain-/Systemvoraussetzungen bereitstellen; alle vier Ziele müssen auf Linux arm64 mit --locked baubar sein. Zentrale Workspace-Regressionen und getrennte Aufrufe für echte Zielprüfungen bereitstellen; fremde Executables nicht als nativ auf dem Buildhost getestet ausweisen.
- [x] 1.2 Repositorylokale Build-/Testaufrufe und feste Toolchain-/Systemvoraussetzungen bereitstellen; alle vier Ziele müssen auf Linux arm64 mit --locked baubar sein. Zentrale Workspace-Regressionen und getrennte Aufrufe für echte Zielprüfungen bereitstellen; fremde Executables nicht als nativ auf dem Buildhost getestet ausweisen.
- [ ] 1.3 Push-/PR-Workflow unter .gitea/workflows anbinden; ein tatsächlicher Origin-Lauf muss vier Zielergebnisse und Fehlerstatus liefern, ohne Release-Secrets im PR-Pfad.
## 2. Artefakte und Pakete
- [ ] 2.1 IDE, CLI und native `tbrt`-Exportvorlage je Ziel in Gitea Actions bauen; Format-/Architektur-/Versionsprüfungen müssen Windows amd64, macOS arm64 und beide Linux-Architekturen eindeutig bestätigen.
- [ ] 2.2 Windows-Paket als .7z und macOS-/Linux-Pakete als .tar.gz erzeugen; Archivtests müssen Dateinamen, Paketinhalt, Executable-Rechte und notwendige Begleitdateien prüfen.
- [x] 2.2 Windows-Paket als .7z und macOS-/Linux-Pakete als .tar.gz erzeugen; Archivtests müssen Dateinamen, Paketinhalt, Executable-Rechte und notwendige Begleitdateien prüfen.
- [ ] 2.3 Jedes fertige Paket auf dem tatsächlichen Ziel neu entpacken und die enthaltenen Programme starten; automatisierte oder dokumentiert manuelle Nachweise aus separaten Prüfsystemen an Revision und Paketprüfsumme binden; `tbc link` und EXE-/TBL-Beispiele müssen mit separaten BASIC-Verbrauchern ohne Library-Quellen/Entwicklungscheckout sowie ohne erreichbaren C-/Rust-Compiler oder nativen Linker funktionieren.
- [ ] 2.4 Einmal erzeugte TBL-Probe mit identischen Bytes an alle vier Zielprüfungen verteilen sowie Artefaktmanifest und Prüfsummen erzeugen; absichtlich beschädigte oder vertauschte Zielartefakte müssen die Prüfung scheitern lassen.
- [x] 2.4 Einmal erzeugte TBL-Probe mit identischen Bytes an alle vier Zielprüfungen verteilen sowie Artefaktmanifest und Prüfsummen erzeugen; absichtlich beschädigte oder vertauschte Zielartefakte müssen die Prüfung scheitern lassen.
## 3. Releasepfad
- [ ] 3.1 Taggebundenen Gitea-Releasepfad mit vollständiger Pflichtasset-Liste und getrennten Rechten einrichten; fehlgeschlagene/fehlende Zielbuilds oder zugeordnete echte Paket-/Zielprüfungen müssen die Freigabe verhindern.
- [ ] 3.2 Upload zunächst als nicht freigegebenen Stand prüfen und erst vollständig freigeben; ein simulierter fehlender Upload darf keinen vollständigen bestehenden Release überschreiben.
- [ ] 3.3 Fremdprogramm-, Inventar-, native und automatisierte Plattformnachweise sowie Referenzbenchmarks in den erforderlichen Abnahmelauf integrieren; ignorierte Pflichtfälle müssen als fehlend sichtbar bleiben.
- [x] 3.2 Upload zunächst als nicht freigegebenen Stand prüfen und erst vollständig freigeben; ein simulierter fehlender Upload darf keinen vollständigen bestehenden Release überschreiben.
- [x] 3.3 Fremdprogramm-, Inventar-, native und automatisierte Plattformnachweise sowie Referenzbenchmarks in den erforderlichen Abnahmelauf integrieren; ignorierte Pflichtfälle müssen als fehlend sichtbar bleiben.
- [ ] 3.4 Einen tatsächlichen vollständigen Gitea-Lauf mit vier Paketartefakten nachweisen; Run-/Commit-/Buildhost-/Targetdaten und paketprüfsummengebundene entpackte Prüfergebnisse an 07 übergeben, bevor der Change als fertig gilt.
Stand 07.09.2026: Repository-Implementierung und lokale Prüfungen vorhanden.
Alle vier Ziele wurden in den fixierten Containern auf Linux arm64 gebaut;
Linux-arm64- und cross-kompilierte macOS-Pakete bestehen echte entpackte
Automatikprüfungen. Das ist noch kein Actions-Lauf. 1.1/1.3/2.1/3.4 bleiben
wegen des defekten gemeinsamen Runners offen; 2.3 wegen Windows/Linux-amd64
und den restlichen visuellen Zielnachweisen. 3.1 bleibt bis zur Einrichtung
des Releasezugangs und tatsächlichen Rechteprüfung offen. Details: verification.md.

View File

@@ -0,0 +1,111 @@
# Verifizierung: phase-6-06-gitea-actions-und-releases
Stand 07.09.2026. Basis: `796564795a6607651c366c6b0de74560af55e71a`
mit dem dokumentierten Change-06-Diff. Change 05 wurde zuvor synchronisiert,
auf Benutzeranweisung archiviert und dieser Commit auf Origin bestätigt.
## Ergebnis
| Dimension | Stand |
|---|---|
| Vollständigkeit | 5/11 Aufgaben abgeschlossen; sechs Aufgaben mit echten Origin-/Ziel-/Rechtenachweisen offen |
| Korrektheit | Vier echte Cross-/Native-Builds auf Linux arm64; native Paketprüfungen auf Linux arm64 und macOS arm64 bestanden; lokale Pflichtabnahme und negative Paket-/Releaseprüfungen bestanden |
| Kohärenz | Bestehende Exportvalidierung, Vorlagenpfade, TBL-/Native-/PTY-Prüfungen wiederverwendet; keine neue Produktabhängigkeit |
Keine aktuell bekannte unbehobene lokale Codeabweichung. Der Change ist
wegen der unten benannten fehlenden externen Nachweise **nicht vollständig
verifiziert oder archivierungsbereit**. Vier lokal orchestrierte Container-
builds auf dem Gitea-Host sind keine vier erfolgreichen Actions-Jobs.
## Umsetzung und Szenarioabdeckung
- `.gitea/workflows/build.yml`: Push/interner PR, vier Targets auf
`linux-arm64`, gepinnte Images/Action-Commits, getrennte Grundabnahme und
Paketartefakte. Fremde PRs laufen nicht auf dem persönlichen Runner.
- `.gitea/scripts/build.py`, `bootstrap.sh`, `rust-toolchain.toml`: feste
Toolchain, SDK-/CRT-Versionen und Inhaltsprüfung, statische Windows-CRT,
glibc-Buildbaseline 2.28, macOS-Deployment 11.0. Das sind Buildvorgaben,
keine nachgewiesenen minimalen OS-Versionen.
- `distribution.py`: richtige `.7z`-/`.tar.gz`-Formate, vollständige Inhalte,
0755 für Unix-Executables, Dateiprüfsummen, Versions-/Target-/Revision-
Manifest. Entpacken lehnt fremde Pfade, Links und unvollständige Archive ab.
`tb-template --inspect` verwendet den vorhandenen nativen Formatparser.
- `target-check`: Programme aus frisch entpackten Paketen starten; EXE-Export
ohne expliziten Vorlagenpfad, native Parität, identische portable.tbl,
quellfreie Verbraucher, leerer PATH ohne Compiler/Linker, Unix-PTY; Windows
verlangt zusätzlich das explizite Konsolentestexecutable. Manuelle
Emulatorfolgen bleiben getrennt und revisions-/paketgebunden.
- `release.py`, `publish.py`, `publish.yml`: Tag-/Commitbindung, vollständige
Pflichtassets, Entwurfsstatus, Zurücklesen mit Bytevergleich, keine Ersetzung
existierender abweichender Assets oder veröffentlichter Releases. Fehlende,
falsche oder unvollständige Ziel-/Terminal-/Grundnachweise verhindern den
letzten `draft=false`-Aufruf. Nachweise stammen aus einem Origin-Commit.
- `acceptance.py`: bestehende Fremdprogramm-/Inventar-/Workspace-/Clippy-/
Format-/Compile-/VM-Prüfung sowie explizite native IDE-Abnahme. Fehlende
Konfiguration, ignorierte Pflichtläufe und Fehler werden nicht grün.
- `docs/distribution.md`, `INSTALL.txt`: Aufrufe, Paketlayout, Rechte,
Systemgrenzen, manuelle Nachweisform und Freigabefolge.
## Gefundene und behobene Befunde
1. Die neuen Paketprüfungen verwendeten zunächst `tbc --help`, obwohl die
CLI diesen Aufruf nicht unterstützt. Prüfung/Installation verwenden jetzt
echte Compiler-/Exportbefehle; keine zusätzliche CLI-Funktion nötig.
2. Ein flaches tbrt neben tb/tbc erfüllte die bestehenden automatischen
Suchpfade nicht. Archive enthalten nun `runtimes/<Target>/tbrt[.exe]`
samt Metadaten. Der ausdrückliche Test ohne `--template` besteht.
3. Alte Abnahmeskripte setzten das Entwicklerwerkzeug tb-template voraus.
Sie verwenden vorhandene Paketmetadaten; der bisherige Entwicklerpfad
bleibt für nicht paketierte Builds verfügbar.
4. Die native IDE-Pflichtprobe erhielt zunächst den falschen Runtime-Basispfad.
`acceptance.py` legt die Vorlage im geforderten Target-Unterverzeichnis ab;
der vollständige Abnahmelauf besteht nach der Korrektur.
5. Der vorhandene cargo-xwin-Stand akzeptiert den VS-Kanal nur numerisch;
CRT-Auswahl benutzt die Manifest-ID `14.44.17.14`, nicht die Dateiversion.
Mit Kanal 17 und den tatsächlichen IDs bestehen Build und .7z-Prüfung.
Zusätzlich verhindert der SDK-Inhaltspin eine stille Änderung unter
unveränderten Versionsbezeichnungen.
## Nachweise
- Vier Targets auf dem tatsächlichen Linux-aarch64-Gitea-Host gebaut;
PE/amd64/Console, Mach-O/arm64 und beide ELF-Maschinen geprüft.
- Echte entpackte Linux-arm64-Paketprüfung auf Linux 6.8.0-139/glibc 2.41.
- Das auf Linux cross-kompilierte macOS-Paket auf macOS 26.6.2/arm64 gestartet:
Standard-Vorlagenpfad, native Fälle, TBL, IDE-Shell/Abbruch/Wiederherstellung
bestanden. Die Programme wurden dabei nicht lokal erneut gebaut.
- Fünf automatisierte Paket-/Release-Regressionen: vollständiger Satz,
fehlende/falsche Nachweise, Korruption, falsche Revision, schmutzige Quellen,
Archiv-Traversierung, fehlender Upload, sichere Wiederholung, Schutz bereits
veröffentlichter Releases. Keine öffentlichen Testreleases erzeugt.
- Zusätzlich echte negative Artefaktproben: Mach-O als Linux deklariert und
verändertes Executable innerhalb eines Archivs werden abgelehnt.
- Lokaler vollständiger Pflichtlauf mit fixiertem Fremdbestand einschließlich
Benchmarks und expliziter nativer IDE-Probe bestanden. Exporttests, Clippy,
Format, YAML-Parsing und OpenSpec-Validierung bestanden.
Die gebauten Testpakete tragen den uncommitteten Diffstand im Manifest und
sind absichtlich nicht releasefähig. Lokale Belege werden unter `evidence/`
aufbewahrt; Paketprüfsummen und tatsächliche Hostdaten stehen in den Berichten.
## Offene externe Befunde
- **1.1/1.3/2.1/3.4:** Gitea 1.25.4, Actions am Repository aktiviert,
registrierter Runner `gitea-arm64-01`, Label `linux-arm64` bestätigt.
Der Runner ist in einer Neustartschleife: `rootlesskit ... /proc/self/exe:
operation not permitted`. Eine Entscheidung zur Reparatur des gemeinsamen
Runners wurde angefragt. Keine Docker-/AppArmor-Konfiguration verändert.
Ein echter erfolgreicher Actions-Matrixlauf und dessen Rechteverhalten fehlen.
- **2.3:** Windows-Ausführung bleibt entsprechend Benutzerentscheidung offen;
Linux amd64 und die vollständigen manuellen Emulatorfolgen sind ebenfalls
nicht belegt. Cross-Build, lokale Mocktests und gemeinsame ANSI-Technik
ersetzen diese Prüfungen nicht.
- **3.1:** Der getrennte Releasezugang `TB_RELEASE_TOKEN` ist noch nicht
eingerichtet/verifiziert. Es wurde kein persönlicher Git-Zugang als
dauerhaftes Release-Secret übernommen. Die Referenzvariable für den
vorhandenen fixierten Fremdbestand wurde am Repository eingerichtet.
Diese Befunde lassen sich nicht durch Änderungen an Paketcode oder durch
Abhaken von Aufgaben schließen. Nach Runner-Reparatur den Origin-Lauf ausführen,
zugehörige Paket-/Zielnachweise ergänzen und kontrollierte Entwurfs-/Rechte-
prüfung durchführen. Bis dahin keine Freigabe und keine Behauptung „0 Befunde“.