Prepare Linux delivery and correct lifecycle rendering build types

This commit is contained in:
2026-09-11 07:53:42 -07:00
parent cb611a71df
commit 29084050a7
41 changed files with 1120 additions and 25 deletions
+1
View File
@@ -38,6 +38,7 @@ harness/experiments/source-cli-independent-20260911/** -text whitespace=cr-at-eo
harness/fixtures/scenario-lifecycle-native/**/*.arcadia -text whitespace=cr-at-eol
harness/experiments/lifecycle-native-ytr83r-20260911/** -text whitespace=cr-at-eol
harness/experiments/lifecycle-native-ytr83r-20260911/*.log -text -whitespace
harness/experiments/wsl-postboot-ytr83r-20260911/** -text -whitespace
# Preserve checksum-bound font notices verbatim through Git round trips.
scripts/windows-notices/GNOME-Cantarell-61362600e104-COPYING -text
@@ -220,7 +220,7 @@ impl Rendering {
Stroke {
line_dash: canvas::LineDash {
segments: &[2., 5.],
offset: 0.,
offset: 0,
},
..Stroke::default()
.with_width(1.)
@@ -1,5 +1,6 @@
use super::*;
use crate::{behavior::Scene, document::Document};
use iced::Size;
use oa_core::*;
struct Fixture {
+10 -8
View File
@@ -1,6 +1,6 @@
# Linux packaging and deployment inputs
The packaging command stages **already-built** desktop/server executables for `x86_64-unknown-linux-gnu`. It runs on Windows PowerShell 5.1 or PowerShell 7 (including Linux) with Python 3.11+ standard library, Git, and the matching Rust/Cargo dependency cache. It does not build, download, install runtime libraries or launch the application. Python creates and reads back the tar archive; end users do not need Python, PowerShell or Rust.
The packaging command stages **already-built** desktop, server and source CLI executables for `x86_64-unknown-linux-gnu`. It runs on Windows PowerShell 5.1 or PowerShell 7 (including Linux) with Python 3.11+ standard library, Git, and the matching Rust/Cargo dependency cache. It does not build, download, install runtime libraries or launch the application. Python creates and reads back the tar archive; end users do not need Python, PowerShell or Rust.
Build and validate first in a source checkout. The current runtime validation baseline is Ubuntu 24.04 x86-64. A glibc symbol inventory is not a claim that every distribution with that glibc version supports the renderer and dialogs.
@@ -9,23 +9,25 @@ Build and validate first in a source checkout. The current runtime validation ba
-Version 0.2.0-rc1 -BinaryDirectory ./target/release -Python python3
```
For an explicit-target build, use `target/x86_64-unknown-linux-gnu/release`. A cross-build may supply another directory containing both `arcadia-studio` and `arcadia-server`. Select the Rust compiler used for the intended build before packaging; its Linux target libraries, copyright reports and locked source/archive cache must be installed. Read-only `cargo metadata --locked --offline --filter-platform x86_64-unknown-linux-gnu` and Rust version/sysroot queries are the only Rust commands run by packaging. When packaging from Windows, `-Python C:/path/to/python.exe` selects Python explicitly.
For an explicit-target build, use `target/x86_64-unknown-linux-gnu/release`. A cross-build may supply another directory containing all three executables: `arcadia-studio`, `arcadia-server` and `arcadia`. Select the Rust compiler used for the intended build before packaging; its Linux target libraries, copyright reports and locked source/archive cache must be installed. Read-only `cargo metadata --locked --offline --filter-platform x86_64-unknown-linux-gnu` and Rust version/sysroot queries are the only Rust commands run by packaging. When packaging from Windows, `-Python C:/path/to/python.exe` selects Python explicitly.
The script refuses existing output/claim names. It creates `dist/ArcadiaStudio-<version>-x86_64-unknown-linux-gnu/`, a `.tar.gz`, and an adjacent `.sha256`. A failed attempt leaves its claim and any partial outputs for diagnosis; choose a fresh version or output root rather than overwriting them. Archives use sorted paths, zero timestamps and uid/gid, 0755 for the two Linux executables and 0644 for other files. Every entry is read back and compared against staging, including permissions. The same unchanged inputs on the same Python/zlib implementation produce the same bytes; this does not promise reproducible compiler output.
The script refuses existing output/claim names. It creates `dist/ArcadiaStudio-<version>-x86_64-unknown-linux-gnu/`, a `.tar.gz`, and an adjacent `.sha256`. A failed attempt leaves its claim and any partial outputs for diagnosis; choose a fresh version or output root rather than overwriting them. Archives use sorted paths, zero timestamps and uid/gid, 0755 for the three Linux executables and 0644 for other files. Every entry is read back and compared against staging, including permissions. The same unchanged inputs on the same Python/zlib implementation produce the same bytes; this does not promise reproducible compiler output.
## Contents and provenance
Both executables, the MIT license, a package-specific README, complete tracked examples (including all water-pressure teaching/evidence files), deployment references and the reachable documentation closure are included. Relative Markdown/reST/HTML file links are checked before archiving; upstream license texts are preserved verbatim and their internal source-tree hyperlinks are outside that documentation check. Untracked private files, caches and unrelated harness history are not included merely because they exist on disk.
All three executables, the MIT license, a package-specific README, complete tracked examples (including all water-pressure teaching/evidence files), deployment references and the reachable documentation closure are included. Relative Markdown/reST/HTML file links are checked before archiving; upstream license texts are preserved verbatim and their internal source-tree hyperlinks are outside that documentation check. Untracked private files, caches and unrelated harness history are not included merely because they exist on disk.
`package.json` records input hashes and static ELF dependencies. `SHA256SUMS.txt` inventories every file except itself; the archive checksum covers that inventory too. `dependency-notices.json`, `THIRD-PARTY-NOTICES.txt` and `licenses/` use the same strict collector as Windows: exact target-filtered normal/build dependency graph, locked crate archives, actual source hashes, checksum-bound supplements and embedded fonts, Rust distribution notices and target-library hashes. Unknown sources, absent notices or changed supplements stop packaging. No Linux system libraries are bundled by this pipeline; their runtime distribution supplies them and its notices.
`package.json` records input hashes and static ELF dependencies. `SHA256SUMS.txt` inventories every file except itself; the archive checksum covers that inventory too. `dependency-notices.json`, `THIRD-PARTY-NOTICES.txt` and `licenses/` use the same strict collector as Windows: exact target-filtered normal/build dependency graph rooted at `oa-desktop`, `oa-server` and `oa-cli`, locked crate archives, actual source hashes, checksum-bound supplements and embedded fonts, Rust distribution notices and target-library hashes. Unknown sources, absent notices or changed supplements stop packaging. No Linux system libraries are bundled by this pipeline; their runtime distribution supplies them and its notices.
ELF preflight requires little-endian x86-64 executables/PIE, the glibc dynamic loader, no RPATH/RUNPATH and a reviewed set of direct libc/compiler-runtime imports. Unknown libraries require an explicit packaging design instead of being silently copied from a developer machine. Graphics/window/portal libraries loaded at runtime are outside that static import list.
Optionally pass `-BuildEvidence <json-file>`, containing nonempty `source_identity`, `profile`, `compiler`, exact `target`, and `binary_sha256` keyed by `arcadia-studio` and `arcadia-server`. Hash strings must be lowercase SHA256. Target and binary hashes are checked; other fields remain explicit caller assertions. Omission records build provenance as unknown. Never label a development binary an optimized release because of its directory or package version.
Optionally pass `-BuildEvidence <json-file>`, containing nonempty `source_identity`, `profile`, `compiler`, exact `target`, and `binary_sha256` keyed by `arcadia-studio`, `arcadia-server` and `arcadia`. Hash strings must be lowercase SHA256. Target and binary hashes are checked; other fields remain explicit caller assertions. Omission records build provenance as unknown. Never label a development binary an optimized release because of its directory or package version.
## Native extracted-bundle checks
Extract into a fresh user-writable Linux directory and run from an unrelated working directory. Verify SHA256SUMS, file permissions, `file`/`ldd` and actual desktop/runtime libraries. A typical Ubuntu runtime needs X11/XKB and Wayland clients, Vulkan loader/Mesa Vulkan drivers, and working session DBus plus an xdg-desktop-portal backend for file dialogs. A successful `ldd` alone is insufficient because these libraries can be loaded dynamically.
The source authoring CLI is `./arcadia`. Run `./arcadia --help` for `check`, `lint`, `stabilize` and `rename-alias`; each takes an explicit `.arcadia` entry file. Mutation commands preview by default and require `--write` to apply their candidate; `--json` produces a machine-readable report. Test writes on a separate project copy. CLI use does not require a display, a server or Rust. Include CLI check, preview, write and unchanged-repeat checks in extracted-bundle acceptance, alongside desktop and server checks.
Extract into a fresh user-writable Linux directory and run from an unrelated working directory. Verify SHA256SUMS, file permissions, `file`/`ldd` and actual desktop/runtime libraries. A typical Ubuntu runtime needs X11/XKB and Wayland clients and Vulkan loader/Mesa Vulkan drivers. Linux Open/Save uses the application's path-entry dialog and does not require an xdg-desktop-portal backend. A successful `ldd` alone is insufficient because graphics/window libraries can be loaded dynamically.
For a software Vulkan trial, first locate the installed lavapipe ICD; only if it exists, use:
@@ -33,7 +35,7 @@ For a software Vulkan trial, first locate the installed lavapipe ICD; only if it
WGPU_BACKEND=vulkan VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json ./arcadia-studio
```
A compatible native GPU may run without these variables. WSLg uses real Linux user space with a particular display environment; record the actual X11/Wayland backend and do not infer support for all Linux sessions from one trial. Exercise Home walkthrough, Help/search, native Open/Save dialogs, a multi-file project, diagram/source edits, Undo/Redo and reopening at normal/minimum window sizes. Compare complete saved model/source and inspect stderr, not merely whether a window appeared.
A compatible native GPU may run without these variables. WSLg uses real Linux user space with a particular display environment; record the actual X11/Wayland backend and do not infer support for all Linux sessions from one trial. Exercise Home walkthrough, Help/search, Linux Open/Save path entry, existing-file handling, SVG export overwrite confirmation, a multi-file project, diagram/source edits, Undo/Redo and reopening at normal/minimum window sizes. Compare complete saved model/source and inspect stderr, not merely whether a window appeared.
Run the server against a separate local data directory and unused loopback port. Follow [server configuration](server.md) for health, authentication, ETags, restart and backup/restore. Test create/import, a changed conditional update, unchanged no-op, stale/invalid rejection, and persistence after a clean restart. Record exact binary/archive/source/compiler hashes and platform. Packaging verification is separate from current-tree release acceptance.
+2 -1
View File
@@ -25,7 +25,8 @@ analysis, maintained libraries and current Linux acceptance remain unfinished.
| What will native behavior be compared against? | [Independent fixture and procedure](fixtures/scenario-lifecycle-native/README.md), [exact pre-native evidence](experiments/lifecycle-native-ytr83r-20260911/) |
| Which checks ran on this host? | [Host build record](release-host-bootstrap-ytr83r-20260911.md), [current status](STATE.md) |
| What remains for Windows packaging? | [Current runtime/notice preflight](release-b4-package-preflight-ytr83r-20260911.md), [publication path](release-publication-path-ytr83r-20260911.md) |
| Is Linux available? | [Current host investigation](release-linux-host-ytr83r-20260911.md); download or cross-build evidence alone is not runtime acceptance |
| Is Linux available? | [Current WSL installation, shell and startup outcomes](release-wsl-postboot-ytr83r-20260911.md), [prepared build sequence](release-linux-build-plan-ytr83r-20260911.md); older QEMU work is historical |
| What changed for Linux delivery? | [Three-binary CLI packaging and checks](release-linux-cli-packaging-ytr83r-20260911.md), [portable REST restart probe](release-rest-probe-portability-ytr83r-20260911.md); native execution remains pending |
| Which bounded follow-ups are proposals? | [Explicit Action allocation](release-qualified-action-design-ytr83r-20260911.md), [inheritance scaling diagnosis](release-inheritance-scaling-diagnosis-ytr83r-20260911.md) |
External staged-source, chooser and analysis/library owners maintain their current
+23
View File
@@ -7,6 +7,29 @@ interrupted during dependency compilation; no test result exists. Current work
is the reviewed Unicode capsule clipping correction and cached Windows gate,
plus ordinary Ubuntu26.04 installation because no distro was yet registered.
The old [resume instructions](RESUME.md) preserve the exact interruption context.
The user enabled virtualization and restarted again (fresh boot13:57:30UTC).
No old compiler/installer processes remain. Root resumed Windows compilation
as55371 and supported Ubuntu installation as33480; its prior download had
completed but registration failed before that virtualization change. See the
[current WSL attempt](release-wsl-postboot-ytr83r-20260911.md) for exact scope.
Ubuntu installation subsequently passed (exit0 at14:19:47UTC), and an actual
Ubuntu26.04/WSL2 kernel shell completed. Two later VM startups timed out before
apt could run. Root holds further setup retries until Windows compiler55371
releases; next trial will retain one persistent guest shell. The WSL report
distinguishes initial kernel success from reliable startup/build/GUI acceptance.
Following the user's direct pointer to issue1 comment316, root applied mirrored
networking and DNS tunneling to the previously absent .wslconfig, then completed
ordinary WSL shutdown at14:42:18UTC. No VPN or other networking changes occurred.
The single persistent guest trial52988 also timed out before a shell, so none
of the owner's network checks ran. Independent tracing preparation follows.
The user's newer issue1 comment328 supersedes that plan: root applied exact
VirtioProxy configuration and shutdown completedexit0 at14:51:36UTC. One
persistent-shell startup/network trial is active with no compiler; VPN remains
uninspected/unchanged. Tracing is held; successful networking ends diagnosis.
Windows55371 terminated101 at14:43:51UTC with17 errors from two type mistakes:
ambiguous Iced Size in added tests and usize LineDash offset. Raw failure is
preserved; both minimal corrections and scoped rustfmt/whitespace checks are
complete. A cached compiled rerun is next; no desktop test pass is claimed.
**Release remains incomplete.** This is the new Codex-ytr83r Windows checkout.
It started clean at `ff615d0`; no local compiled desktop or native acceptance
is claimed for the combined source at this checkpoint.
+9 -3
View File
@@ -50,6 +50,11 @@ the owner's clarification allows domain constraints rather than arbitrary moveme
- The separate baseline-context experiment passed218 assertions; explicit
one-level overrides reduce repeated stable assumptions while complete frozen
definition environments remain necessary. Proposed syntax is not source7.
- After the user's virtualization/reboot change, supported Ubuntu26.04 install
completed exit0 and a real x86_64 WSL2 kernel shell completed. Later VM startups
timed out before apt. This establishes initial guest execution, not reliable
Linux builds or GUI acceptance; exact outcomes and next controlled trial are
in the [WSL record](release-wsl-postboot-ytr83r-20260911.md).
## Assumptions and unresolved questions
@@ -61,9 +66,10 @@ the owner's clarification allows domain constraints rather than arbitrary moveme
- Pinned package provenance must be distinguished from checked type compatibility;
unchanged quantity kinds cannot become incompatible merely through cosmetic
repackaging without a deliberate policy. Energy and Torque remain distinct.
- Which supported environment will complete current Linux GUI/service/package
execution remains a release question. Old failed or denied experiments do not
establish a current successful environment.
- Ubuntu26.04/WSL2 is the current supported Linux route; reliable repeat startup,
guest toolchain/dependencies and GUI/service/package execution remain open.
Initial shell success does not erase later startup timeouts. Old QEMU work is
retained as history, not the next route to repeat.
- Large-model human/AI task usability, cross-file refactoring, actual chooser
latency/keyboard/minimum geometry and complete native lifecycle behavior remain
to be measured. Parser admission or a widget experiment is insufficient.
@@ -0,0 +1,22 @@
[
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\crates\\oa-desktop\\src\\behavior.rs",
"Hash": "F2FB8850480FB96F8038A4C1D855EE31E408890B1D943E7B3A9F26B5E4498445"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\crates\\oa-desktop\\src\\behavior\\scenario_lifecycle\\render.rs",
"Hash": "EC2FA29495644274AF6C2A7F4364B76FBD0756347B702ABF55A72D782A8203FF"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\crates\\oa-desktop\\src\\behavior\\scenario_lifecycle\\render_tests.rs",
"Hash": "2942071D768CE021CA0DCE2FE2667BBA14DE0F3FA1D4176B7A6ECDCC156B2AA9"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\Cargo.toml",
"Hash": "369F5B4B2B60705A94623C8C0B68F8E0B048F263280CE07AE0629AD353797D62"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\Cargo.lock",
"Hash": "2B960242C33EB839FF008D01731F6D5CDB4E047CA8CD6E13151CBF9C09913510"
}
]
@@ -0,0 +1,38 @@
Compiling fontdb v0.23.0
Compiling swash v0.2.10
Compiling gpu-allocator v0.27.0
Compiling naga v27.0.3
Compiling gpu-descriptor v0.3.2
Compiling gpu-alloc v0.6.2
Compiling wgpu-hal v27.0.4
Compiling iced_futures v0.14.0
Compiling http-body v1.1.0
Compiling parking_lot v0.12.5
Compiling glutin_wgl_sys v0.6.1
Compiling serde_core v1.0.229
Compiling khronos-egl v6.0.0
Compiling ash v0.38.0+1.3.281
Compiling harfrust v0.3.2
Compiling skrifa v0.37.0
Compiling zerotrie v0.2.5
Compiling potential_utf v0.1.6
Compiling wgpu-types v27.0.1
Compiling ordered-float v5.5.0
Compiling tracing-core v0.1.36
Compiling tracing-attributes v0.1.31
Compiling sys-locale v0.3.2
Compiling range-alloc v0.1.5
Compiling utf8_iter v1.0.4
Compiling unicode-bidi v0.3.18
Compiling unicode-script v0.5.8
Compiling linebender_resource_handle v0.1.1
Compiling unicode-linebreak v0.1.5
Compiling renderdoc-sys v1.1.0
Compiling profiling v1.0.18
Compiling self_cell v1.3.0
Compiling icu_properties_data v2.3.0
Compiling icu_normalizer_data v2.3.0
Compiling percent-encoding v2.3.2
Compiling glow v0.16.0
Compiling rangemap v1.8.0
Compiling cosmic-text v0.15.0
@@ -0,0 +1,19 @@
{
"log": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\ytr83r-desktop-lifecycle-resume2.log",
"seconds": 2391.3671309,
"completed_utc": "2026-09-11T14:43:51.9174941Z",
"name": "ytr83r-desktop-lifecycle-resume2",
"command": [
"cargo",
"test",
"--locked",
"--offline",
"-p",
"oa-desktop",
"scenario_lifecycle",
"--",
"--test-threads=1"
],
"exit": 101,
"started_utc": "2026-09-11T14:04:00.3791457Z"
}
@@ -0,0 +1,419 @@
Compiling wgpu-hal v27.0.4
Compiling cosmic-text v0.15.0
Compiling icu_normalizer_data v2.3.0
Compiling icu_collections v2.3.0
Compiling icu_properties_data v2.3.0
Compiling tracing v0.1.44
Compiling icu_provider v2.3.1
Compiling ring v0.17.14
Compiling wgpu-core v27.0.3
Compiling httparse v1.10.1
Compiling tower-service v0.3.3
Compiling litrs v1.0.0
Compiling document-features v0.2.12
Compiling wgpu-core-deps-windows-linux-android v27.0.0
Compiling wgpu v27.0.1
Compiling svg_fmt v0.4.5
Compiling zeroize v1.9.0
Compiling try-lock v0.2.5
Compiling want v0.3.1
Compiling rustls-pki-types v1.15.1
Compiling icu_normalizer v2.3.0
Compiling icu_properties v2.3.0
Compiling iced_graphics v0.14.0
Compiling form_urlencoded v1.2.2
Compiling sync_wrapper v1.0.2
Compiling getrandom v0.2.17
Compiling serde_derive v1.0.229
Compiling atomic-waker v1.1.2
Compiling untrusted v0.9.0
Compiling tower-layer v0.3.3
Compiling httpdate v1.0.3
Compiling float_next_after v1.0.0
Compiling static_assertions v1.1.0
Compiling serde_json v1.0.151
Compiling lyon_tessellation v1.0.21
Compiling hyper v1.11.1
Compiling serde v1.0.229
Compiling idna_adapter v1.2.2
Compiling etagere v0.2.15
Compiling http-body-util v0.1.5
Compiling iced_debug v0.14.0
Compiling lyon_algorithms v1.0.21
Compiling ipnet v2.12.1
Compiling rustls v0.23.43
Compiling subtle v2.6.1
Compiling base64 v0.22.1
Compiling lru v0.16.4
Compiling cryoglyph v0.1.0
Compiling hyper-util v0.1.20
Compiling lyon v1.0.19
Compiling idna v1.1.0
Compiling rustls-webpki v0.103.15
Compiling tower v0.5.3
Compiling guillotiere v0.6.2
Compiling winit v0.30.13
Compiling error-code v3.4.0
Compiling ryu v1.0.23
Compiling serde_urlencoded v0.7.1
Compiling clipboard-win v5.4.1
Compiling iced_wgpu v0.14.0
Compiling url v2.5.8
Compiling iced_runtime v0.14.0
Compiling windows-sys v0.52.0
Compiling winapi-util v0.1.11
Compiling cursor-icon v1.2.0
Compiling mime v0.3.17
Compiling dpi v0.1.2
Compiling tempfile v3.27.0
Compiling uuid v1.26.0
Compiling axum-core v0.5.6
Compiling same-file v1.0.6
Compiling iced_program v0.14.0
Compiling tower-http v0.6.11
Compiling tokio-rustls v0.26.5
Compiling iced_renderer v0.14.0
Compiling window_clipboard v0.5.1
Compiling webpki-roots v1.0.9
Compiling serde_path_to_error v0.1.20
Compiling rfd v0.15.4
Compiling oa-server v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-server)
Compiling matchit v0.8.4
Compiling axum v0.8.9
Compiling hyper-rustls v0.27.9
Compiling iced_winit v0.14.0
Compiling iced_widget v0.14.2
Compiling oa-core v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-core)
Compiling windows-sys v0.59.0
Compiling oa-desktop v0.2.0 (C:\Users\User\Documents\Git\ARCADIA-Studio\crates\oa-desktop)
Compiling iced v0.14.0
Compiling reqwest v0.12.28
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:177:58
|
177 | let capsule = Rectangle::new(Point::new(100., 200.), Size::new(140., 28.));
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:181:51
|
181 | Rectangle::new(Point::new(5.4, 10.2), Size::new(6.2, 1.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:185:51
|
185 | Rectangle::new(Point::new(54., 102.), Size::new(62., 10.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:189:52
|
189 | Rectangle::new(Point::new(108., 204.), Size::new(124., 20.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:193:52
|
193 | Rectangle::new(Point::new(216., 408.), Size::new(248., 40.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:196:53
|
196 | let clip = birth_label_clip(capsule, scale, Size::new(1000., 1000.)).unwrap();
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:215:58
|
215 | let capsule = Rectangle::new(Point::new(100., 200.), Size::new(140., 28.));
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:217:39
|
217 | birth_label_clip(capsule, 2., Size::new(300., 420.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:218:53
|
218 | Some(Rectangle::new(Point::new(216., 408.), Size::new(84., 12.)))
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:220:66
|
220 | let crossing_origin = Rectangle::new(Point::new(-20., -10.), Size::new(140., 28.));
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:222:47
|
222 | birth_label_clip(crossing_origin, 2., Size::new(300., 420.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:223:44
|
223 | Some(Rectangle::new(Point::ORIGIN, Size::new(224., 28.)))
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:225:22
|
225 | for viewport in [Size::new(200., 420.), Size::new(300., 400.), Size::ZERO] {
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:225:45
|
225 | for viewport in [Size::new(200., 420.), Size::new(300., 400.), Size::ZERO] {
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:225:68
|
225 | for viewport in [Size::new(200., 420.), Size::new(300., 400.), Size::ZERO] {
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0659]: `Size` is ambiguous
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:230:46
|
230 | birth_label_clip(capsule, scale, Size::new(1000., 1000.)),
| ^^^^ ambiguous name
|
= note: ambiguous because of multiple glob imports of a name in the same module
note: `Size` could refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:1:5
|
1 | use super::*;
| ^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
note: `Size` could also refer to the struct imported here
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render_tests.rs:3:5
|
3 | use oa_core::*;
| ^^^^^^^^^^
= help: consider adding an explicit import of `Size` to disambiguate
error[E0308]: mismatched types
--> crates\oa-desktop\src\behavior\scenario_lifecycle\render.rs:223:33
|
223 | offset: 0.,
| ^^ expected `usize`, found floating-point number
Some errors have detailed explanations: E0308, E0659.
For more information about an error, try `rustc --explain E0308`.
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 17 previous errors
@@ -0,0 +1,18 @@
[
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\harness\\experiments\\wsl-postboot-ytr83r-20260911\\initial\\install.json",
"Hash": "7A71DB371BF1A6FC8021CDE198957D4E16D12B6D79D09707B9FF439A6AE8C7B7"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\harness\\experiments\\wsl-postboot-ytr83r-20260911\\initial\\install.stderr.log",
"Hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\harness\\experiments\\wsl-postboot-ytr83r-20260911\\initial\\install.stdout.log",
"Hash": "CF50CC0ECDEEC0C94371648755DED719516570262453FBAAE9271718BFF17165"
},
{
"Path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\harness\\experiments\\wsl-postboot-ytr83r-20260911\\initial\\progress.jsonl",
"Hash": "7EC259C6B7693030A0EB7D3A2B7AB3BEA4C7133BF0389922BEF07D2B4C6DE205"
}
]
@@ -0,0 +1,5 @@
{
"command": "wsl.exe --install Ubuntu-26.04 --no-launch --version 2",
"startedUtc": "2026-09-11T13:47:53.0539541Z",
"pid": 3640
}
@@ -0,0 +1,3 @@
{"freeRamKiB":4187900,"freeDiskBytes":31194845184,"downloadBytes":261226496,"utc":"2026-09-11T13:54:04.2643859Z"}
{"freeDiskBytes":31078645760,"freeRamKiB":4071672,"utc":"2026-09-11T13:55:03.4111754Z","downloadBytes":315817984}
{"downloadBytes":386727936,"utc":"2026-09-11T13:56:06.0994536Z","freeRamKiB":4456496,"freeDiskBytes":30838284288}
@@ -0,0 +1,3 @@
[wsl2]
networkingMode=mirrored
dnsTunneling=true
@@ -0,0 +1,10 @@
{
"prior_config_exists": false,
"config_path": "C:\\Users\\User\\.wslconfig",
"applied_utc": "2026-09-11T14:42:13.2433400Z",
"source": "Gitea issue 1 comment316, explicitly referenced by user",
"settings": {
"dnsTunneling": true,
"networkingMode": "mirrored"
}
}
@@ -0,0 +1,22 @@
[
{
"name": "applied.wslconfig",
"bytes": 49,
"sha256": "4A4D2D7C9684AFDF5A106DEA4B3AB195E706F8859182E09F4AA05FFF6C5D1C63"
},
{
"name": "configuration.json",
"bytes": 293,
"sha256": "068DE1D3BCA11428123B26F6E3745F645560E4456DD6B26D32FB7B33DE81DD2A"
},
{
"name": "shutdown-status.json",
"bytes": 71,
"sha256": "A7655285DB531C90A73E690CFDF8438CAF096BE543605F8383B1A3DBDE471F8B"
},
{
"name": "shutdown.log",
"bytes": 0,
"sha256": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
}
]
@@ -0,0 +1,4 @@
{
"exit": 0,
"completed_utc": "2026-09-11T14:42:18.9208168Z"
}
@@ -0,0 +1,8 @@
HTTP/1.1 200 OK
Date: Fri, 11 Sep 2026 14:11:51 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Mon, 20 Apr 2026 18:09:15 GMT
ETag: "18c1e8df-64fe8324a48c0"
Accept-Ranges: bytes
Content-Length: 415361247
@@ -0,0 +1,55 @@
{
"provenance": "Root observations of unified exec results; normalized record, not raw redirected shell logs.",
"installation_session": 33480,
"installation_exit": 0,
"installation_completed_utc": "2026-09-11T14:19:47.9073217Z",
"first_shell": {
"session": 20913,
"exit": 0,
"started_utc": "2026-09-11T14:20:30Z",
"os": "Ubuntu 26.04 LTS",
"kernel": "6.18.33.2-microsoft-standard-WSL2",
"architecture": "x86_64",
"uid": 0,
"root_device": "/dev/sdd",
"display": ":0",
"wayland_display": "wayland-0",
"xdg_runtime_dir": "/run/user/0",
"path_tools_found": [
"/usr/bin/git",
"/usr/bin/python3"
],
"path_tools_not_found": [
"rustc",
"cargo"
],
"warning": "Failed to start the systemd user session for 'root'. See journalctl for more details."
},
"followup_inventory_sessions": [
{
"session": 1905,
"exit": 0
},
{
"session": 97517,
"exit": 0
}
],
"later_startup_failures": [
{
"session": 99983,
"exit": -1,
"stage": "initial bash -n before dependency script"
},
{
"session": 92958,
"exit": 1,
"stage": "file-backed inventory before script execution"
}
],
"later_startup_error": "Wsl/Service/CreateInstance/CreateVm/0x800705b4",
"apt_started": false,
"linux_cargo_started": false,
"native_gui_tested": false,
"next": "One persistent-shell trial after current Windows compiler load releases; no cause established."
}
@@ -0,0 +1,6 @@
{
"completed_utc": "2026-09-11T14:19:47.9073217Z",
"started_utc": "2026-09-11T14:03:45.5401681Z",
"pid": 7824,
"exit": 0
}
@@ -0,0 +1,27 @@
[
{
"path": "started.json",
"bytes": 250,
"sha256": "06909eb16f1a00d707b7d163b39cc76d17dbf2dcbf7b7f81bcc3fb49cd3c70f9"
},
{
"path": "result.json",
"bytes": 137,
"sha256": "34ec331d05fad9cca23a1683da5b6f96c7ff24b8bcd6439a0ecba04f5ecf6078"
},
{
"path": "stdout.log",
"bytes": 296,
"sha256": "83b346901876fab366e976bb770ca1b7d935ebab4a50e843fdc630536a800be2"
},
{
"path": "stderr.log",
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "image-head.txt",
"bytes": 215,
"sha256": "eafe21b123ffc787a0b7903b4d02f57f6b3acd549708cb71379ebc06cff58df3"
}
]
@@ -0,0 +1,6 @@
{
"reason": "User enabled virtualization and rebooted; previous registration failed before that change.",
"command": "wsl.exe --install Ubuntu-26.04 --no-launch --version 2",
"started_utc": "2026-09-11T14:03:45.5401681Z",
"pid": 7824
}
@@ -1,3 +1,4 @@
#requires -Version 7.0
param([Parameter(Mandatory=$true)][string]$ServerExe)
$ErrorActionPreference = 'Stop'
$taskRoot = (Resolve-Path (Join-Path $PSScriptRoot '../../..')).Path
@@ -21,7 +22,16 @@ $codes = @($payload.expected | ForEach-Object { $_.code })
function Assert-Probe($condition,[string]$message) { if (-not $condition) { throw $message } }
function Start-ProbeServer {
$script:launch++
$script:probeProcess = Start-Process -FilePath $exe -ArgumentList @('--bind',"127.0.0.1:$probePort",'--data-dir',('"'+$storePath+'"'),'--token-file',('"'+$tokenPath+'"')) -WindowStyle Hidden -PassThru -RedirectStandardOutput (Join-Path $runRoot "server-$script:launch.stdout.log") -RedirectStandardError (Join-Path $runRoot "server-$script:launch.stderr.log")
$startOptions = @{
FilePath = $exe
ArgumentList = @('--bind',"127.0.0.1:$probePort",'--data-dir',('"'+$storePath+'"'),'--token-file',('"'+$tokenPath+'"'))
PassThru = $true
RedirectStandardOutput = Join-Path $runRoot "server-$script:launch.stdout.log"
RedirectStandardError = Join-Path $runRoot "server-$script:launch.stderr.log"
}
# WindowStyle is Windows-only; Unix keeps the child attached to this probe.
if ($IsWindows) { $startOptions.WindowStyle = 'Hidden' }
$script:probeProcess = Start-Process @startOptions
for ($attempt = 0; $attempt -lt 40; $attempt++) {
if ($script:probeProcess.HasExited) { throw 'Probe server exited before readiness' }
try { $ready=Invoke-WebRequest "$base/health/ready" -TimeoutSec 1; if ($ready.StatusCode -eq 200) { return } } catch {}
@@ -27,3 +27,12 @@ This additional Wiki snapshot is separate from the thirteen Git-blob ledger
entries in hashes.json. Its old palette compilation blockers were resolved by
later milestones; use [current status](../../STATE.md) and the
[current evidence index](../../README.md) for active work.
`wiki-linux-host-before-wsl-20260911.md` preserves exact decoded Wiki
`LinuxHostYtr83r20260911` content from commit
`c13e9191d8db6cbe54ee7c766727fd312d426f3b` before the WSL outcome refresh. SHA256:
`E131F82A65CED4C294CE100EA574D332C7BF36D8064CE78875C58C375AF1D4D0`.
It retains unique download/QEMU observations and failed approaches; its next-step
instructions are historical. Use the [WSL outcome](../../release-wsl-postboot-ytr83r-20260911.md)
for the active supported route. This snapshot is separate from hashes.json's
original thirteen ledger blobs.
@@ -0,0 +1,51 @@
# Linux host Codex-ytr83r — 2026-09-11
Owner: Codex-ytr83r /root/linux_runtime. Durable report: harness/release-linux-host-ytr83r-20260911.md. Current outcome supersedes the preserved transfer history below; root owns source/Cargo/resource scheduling.
## Current outcome — 13:25:20 UTC
The pinned Ubuntu Minimal image is fully verified and reusable: 264,372,224 bytes, SHA256 `46b0dbaffa6950a7da5ff2dc5ed34c46084610b3b6d1fae8f1ec2d7e953984a3`, matching fresh publisher HTTPS SHA256SUMS and independent/preparation rehashes. QEMU publisher SHA512 also passed again. Exact <=256 KiB missing-range delivery reused complete ranges and overlap-compared partial prefixes, with two concurrent requests. Suffix run: 1,952.520 seconds, 209,338,368 new image bytes, zero retries, five overlap comparisons. Total original delivery budget used 3,122.192 / 3,600 seconds. All 14,139,392 provisional-only bytes were admitted only after the whole-image publisher hash passed. Original failed transfers remain preserved.
The first normal Q35/UEFI/TCG pilot (one CPU, 1536 MiB, isolated overlay/private vars/loopback endpoints) did not establish Linux readiness. Host resource gates passed. Spawn 13:20:10.433 UTC; QMP accepted ACPI powerdown around 270 seconds; forced stop requested at 300.564 seconds; SIGTERM process exit at 310.155 seconds, 13:25:20.557 UTC. This includes a measured 9.6-second termination delay, not clean guest shutdown. Serial/stdout/stderr are empty. QEMU/helper processes were absent afterward. No kernel panic or guest-ready result was observed; no SSH/application/Linux Cargo/GUI gate passed. No second boot or system/security/network changes.
## Read-only diagnosis and next step
Packaged firmware metadata explicitly pairs x86_64 code with the i386-named vars template for Q35; that filename is not evidence of an incorrect pair. The pilot removed VGA (`-vga none`) and hid video (`-display none`), capturing only serial. QEMU's [option reference](https://www.qemu.org/docs/master/system/qemu-manpage.html) distinguishes these channels. OVMF's [README](https://github.com/tianocore/edk2/blob/master/OvmfPkg/README) describes a separate default debug port and build-dependent logging; this pilot did not capture that channel. Thus empty serial is inconclusive about the boot stage. QMP responsiveness is emulator control evidence, not guest acceptance.
Root must coordinate any later bounded normal observation. Retaining VGA/framebuffer observation alongside serial, QMP status/block/CPU and ordinary SSH readiness could distinguish firmware/media selection, kernel progress and guest shell. Debug-port capture would require explicit approval; no firmware/kernel behavioral override is proposed or executed. Preserve the original pilot unchanged and do not automatically repeat it. Linux runtime/build remains outstanding; the verified image cache is the completed milestone.
Evidence: `.local/linux-host-ytr83r/ranges-suffix-20260911/{verification,result}.json`, `preparation.json`, `pilot-20260911/{command,events,result}.json[l]` and the owned report. [Verified image milestone, issue #1 comment 252](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-252). The report records hashes and exact commands.
## Preserved history through 12:16 UTC
Owner: Codex-ytr83r /root/linux_runtime. New host; historical other-host Linux results remain separately attributed. Durable report: harness/release-linux-host-ytr83r-20260911.md.
### Historical initial outcome
Verified portable QEMU is available, but no usable Linux guest yet. Ubuntu image download ended with curl error 28 after 900.015 seconds, receiving 11,714,560 / 264,372,224 bytes. Partial file remains .local/linux-host-ytr83r/ubuntu-24.04-minimal-cloudimg-amd64.img; it is not a validated image. No VM, listener, guest seed/SSH identity, overlay, Linux packages, Cargo or GUI was started. This is a network preparation constraint, not a kernel/runtime failure.
### Direct host inventory
Windows 11 Pro 26200.8457, VMware20,1, 8 GiB RAM/two logical CPUs, approximately 35.2 GiB initial free disk. WSL 2.7.13.0/kernel 6.18.33.2-2/WSLg 1.0.73.2 exists but explicitly reports unavailable virtualization; no distro. VirtualMachinePlatform enabled; WSL1/Hyper-V features disabled; WslService running, vmcompute/hns absent; CBS RebootPending exists; CPU virtualization/monitor extensions false. No host settings/services/restart/import changed, and no claim that reboot alone resolves outer VMware prerequisites.
No Docker/Podman/QEMU runtime found initially through bounded PATH/conventional directory inspection. Git SSH and 7-Zip exist. Root separately prepares Windows Rust in .local/toolchain.
### Verified portable emulator
QEMU publisher-pinned https://qemu.weilnetz.de/w64/qemu-w64-setup-20260811.exe: 206,615,928 bytes, SHA512 5bcf9eed634e8575a37b74f445af41a2fe4106da512d0c30c368301d4c105037fdfab40a5287367a28a957624cddebbc8c07e16c88ab6634f554cdf3d16bf543 matches fetched publisher checksum. Existing 7-Zip extracted 3,389 files / 1,256,205,208 bytes; installer never executed. qemu-system-x86_64 reports 11.1.0 (v11.1.0-12130-ge470268ff4). TCG, GTK/SDL and UEFI files are present; binary listing WHPX does not prove host acceleration.
QEMU transfer needed bounded resumptions. DNS resolves both hosts; Ubuntu IPv4 small HTTPS HEAD returned 200/Accept-Ranges. Main image server 185.125.190.37 was extremely slow; 64 KiB range returned 206 in 13.38s. Alternate published A record 185.125.190.40 timed out in 10.56s. No assertion that IPv6 caused stalls.
### Historical prepared action (superseded)
Root authorized one normal portable QEMU TCG boot, one CPU/1536 MiB, five-minute monotonic cap, preserving 15 GiB host free disk. Prepared .local/linux-host-ytr83r/{prepare,pilot}.cjs pass Node syntax checks; pilot --describe passed. Report gives exact curl -4 --continue-at - resume, checksum fetch, preparation and hidden launch commands. prepare.cjs verifies both publisher checksums and creates a new 12 GiB sparse overlay/private UEFI vars/disposable SSH seed only when the whole image is present. Pilot uses normal Q35/UEFI, no direct kernel/no_timer_check workaround; loopback-only 18080/2222/4445, ACPI powerdown at 270s, owned-child stop at 300s. No automatic retry of an existing pilot result.
Complete the official Ubuntu Minimal 24.04 release-20260905 image transfer first. Its manifest contains cloud-init and OpenSSH, so initial shell proof needs no apt. Root retains resource scheduling and source snapshot/Cargo ownership. Do not treat this preparation, older ELF cross-builds, or another host's evidence as current native Linux acceptance.
### Follow-up superseding current transfer size — 12:16 UTC
Root authorized a three-MiB protocol diagnosis: HTTPS two 1MiB ranges averaged 507.37 KiB/s; HTTP was 134.59 KiB/s. All three HTTP206 responses exactly matched retained overlap bytes. No separately documented official CDN for this exact pinned image was established. This small-sample result justified a separately authorized resume with 600s maximum and 128KiB/s for30s low-speed stop, not another identical900s attempt.
That guarded HTTPS resume ran12:14:47–12:15:22 UTC and stopped correctly after34.1516695 monotonic seconds, curl exit28/HTTP206: operation too slow. Curl reports1,228,800 received bytes in31.686317s, 38,780 bytes/s. Latest retained partial size is12,943,360 bytes. No full publisher checksum verification, guest seed/overlay, VM/boot, apt or Cargo occurred; no retry followed. No settings, security, network or timer/kernel workaround changed. No curl/QEMU remained; free disk33,588,867,072 bytes.
Exact report appendix and .local/linux-host-ytr83r/resume-600-20260911/{status.json,curl.json,curl.stderr.log} preserve the measurements. Issues#1 comments181 and186 record the diagnosis and guarded result. Complete-image delivery remains pending; earlier11,714,560-byte size above is historical.
@@ -4,6 +4,18 @@ Author: Codex-ytr83r /root/server_audit, reassigned from the completed REST revi
## Implementation and decisions
Root execution update: the first completed current-host desktop compile on
cb611a7 failed101 at14:43:51.917UTC after2391.367seconds. It reported16 occurrences
of ambiguous `Size` in the added clip geometry tests and one production
`LineDash.offset` type mismatch. Raw log/status are preserved in
`experiments/lifecycle-native-ytr83r-20260911/desktop-resume2-compile-failed*`.
This is a real compile failure, distinct from the two reboot interruptions.
Root corrected the test import to explicit `iced::Size` and the zero dash offset
from floating-point to usize. No geometry, lifetime/source/model or assertion
changed. Scoped rustfmt and whitespace check pass; cached compiled rerun and
native acceptance remain pending. Earlier source freezes below retain their
original attribution.
The frozen pure `scenario_lifecycle` traversal is now used in production. Its conservative local-tree rules remain unchanged: exact receiver IDs; no inferred receiver from an exchange; independent ALT/Optional/Loop/Parallel operands; uncertain continuation after a lifecycle-bearing fragment; opaque ScenarioUse; no Reply invention, model commands or serialization writes.
`behavior/scenario_lifecycle/render.rs` contains a separate Rendering record. Neutral dotted guides and stronger scoped Alive spines are distinct from message Lines. The complete rendering lane map includes unassigned lifelines; existing `Scene.lanes` remains the represented-lane authoring eligibility map. Neutral top headers say `Lane · name`. A small footer explains guide, lifetime and `?` uncertainty marks; unanswered call cues keep their existing ellipsis, avoiding two meanings for the same glyph.
@@ -0,0 +1,97 @@
# Linux build and acceptance preparation — 2026-09-11
Owner: Codex-ytr83r `/root/linux_build_plan`. Inspected source `cb611a71df53704abc5ebe4290b916e17ee96bf1`, AGENTS, issues 1/2 through comment285 and current LinuxHost Wiki; open PR inventory empty. Root owns installer33480 and Windows Cargo55371. No WSL, package installation, Rust tool, server, GUI or build executed by this worker. These are prepared commands, not acceptance. Earlier QEMU evidence is historical and irrelevant to this supported WSL installation.
## Distro dependencies and compiler choice
Root currency note: supported installation and one actual guest shell later
succeeded, followed by startup timeouts; see the [current WSL outcome](release-wsl-postboot-ytr83r-20260911.md).
The [existing REST restart probe](release-rest-probe-portability-ytr83r-20260911.md)
now omits the Windows-only launch parameter on Linux, and [full Linux packaging](release-linux-cli-packaging-ytr83r-20260911.md)
now includes all three executables and their strict notices/modes. Those source
corrections supersede the corresponding pending implementation notes below;
their actual Linux execution remains pending. The original frozen-source
preparation and its unexecuted command sequence remain useful history.
After root establishes a working Ubuntu26.04 shell and frees the sole compiler lease, inspect `cat /etc/os-release`, `uname -m`, `df -h /`, `free -h`, `command -v rustc cargo rustup`, and existing `rustc -Vv`/`cargo -V`. Do not infer this host's resources or registration from another agent's report.
The repository README's supported development baseline is the following; it is not a experimentally minimized Ubuntu26.04 package closure:
```sh
sudo apt-get update
sudo apt-get install --no-install-recommends build-essential pkg-config \
libxkbcommon-dev libxkbcommon-x11-0 libwayland-dev libvulkan-dev \
libx11-dev libxrandr-dev libxi-dev git ca-certificates curl \
python3 python3-jsonschema file
```
The first two packages plus Rust suffice for the headless build's normal C/linker tooling; GUI native dependencies are preserved from the documented baseline, not guessed from a different application. `python3-jsonschema` runs the existing OpenAPI/HTTP oracle without pip/global-Python changes. Mesa software rendering (`mesa-vulkan-drivers`) is a runtime option after inspecting WSLg/GPU availability, not a compiler prerequisite. No Java, Node, GTK development suite or portal installation is required by this plan. Root must verify apt candidates on the actual distro; none were queried here.
Workspace MSRV is1.90; current recorded Windows compiler is1.98.1. Prefer an already installed Linux compiler >=1.90, recording its exact version; use matched1.98.1 when practically available to remove compiler-version differences. Do not install default apt Rust blindly or label apt's unknown candidate sufficient. A distro compiler satisfying MSRV is valid for a scoped build, but packaging currently requires sysroot `share/doc/rust/COPYRIGHT.html` and `COPYRIGHT-library.html` plus exact target libraries (`scripts/windows-notices.ps1:160`); verify those before choosing it for release. An MSRV build is a separate gate, not provided by a1.98.1 build.
If no suitable compiler exists, ordinary rustup supports task-local `CARGO_HOME`/`RUSTUP_HOME`; do not change HOME, CODEX_HOME, shell profiles or global defaults. [Rustup installation](https://rust-lang.github.io/rustup/installation/index.html) documents those paths. In the isolated layout below, fetch `https://sh.rustup.rs` to an evidence file, inspect it, then run `sh <file> -y --no-modify-path --profile minimal --default-toolchain 1.98.1`; add `rustfmt`/`clippy` only for their gates. Fetch/install remains root's action. Preserve existing Linux Rust if suitable instead of duplicating it.
## Frozen ext4 source and one-job sequence
Run the following in a fresh Linux shell after readiness/capacity admission. It creates a new private checkout with its own Git objects (no shared worktree/index), not a Windows source/build copy. Microsoft recommends Linux filesystem storage for Linux builds: [WSL filesystems](https://learn.microsoft.com/en-us/windows/wsl/filesystems). Confirm `findmnt -T "$arcadia_run"` reports the expected Linux filesystem. WSL's underlying disk still consumes Windows host capacity.
```sh
set -eu
arcadia_commit=cb611a71df53704abc5ebe4290b916e17ee96bf1
arcadia_run="$HOME/arcadia-linux-$arcadia_commit"
test ! -e "$arcadia_run"
mkdir -p "$arcadia_run/evidence" "$arcadia_run/cache"
git clone --no-hardlinks --no-checkout \
/mnt/c/Users/User/Documents/Git/ARCADIA-Studio "$arcadia_run/src"
git -C "$arcadia_run/src" -c core.autocrlf=false checkout --detach "$arcadia_commit"
test "$(git -C "$arcadia_run/src" rev-parse HEAD)" = "$arcadia_commit"
cd "$arcadia_run/src"
export CARGO_HOME="$arcadia_run/cache/cargo"
export CARGO_TARGET_DIR="$arcadia_run/target"
export CARGO_BUILD_JOBS=1 CARGO_INCREMENTAL=0
# Only for a new isolated rustup installation; retain an existing Linux RUSTUP_HOME otherwise.
# export RUSTUP_HOME="$arcadia_run/cache/rustup"
# export PATH="$CARGO_HOME/bin:$PATH"
unset CARGO_BUILD_TARGET RUSTFLAGS CARGO_ENCODED_RUSTFLAGS RUSTC RUSTC_WRAPPER
unset RUSTC_WORKSPACE_WRAPPER CC CXX AR RANLIB RC
rustc -Vv > "$arcadia_run/evidence/rustc.txt"
cargo -V > "$arcadia_run/evidence/cargo.txt"
git status --porcelain
cargo fetch --locked --target x86_64-unknown-linux-gnu
cargo test --locked -j 1 -p oa-core -p oa-server -p oa-cli -- --test-threads=1
cargo build --locked -j 1 -p oa-server -p oa-cli
timeout 180s python3 crates/oa-server/tests/semantic_http_contract.py \
"$CARGO_TARGET_DIR/debug/arcadia-server"
cargo test --locked -j 1 -p oa-desktop -- --test-threads=1
cargo build --locked -j 1 -p oa-desktop
cp -R examples "$CARGO_TARGET_DIR/debug/"
```
Root should tee each command's stdout/stderr to distinct evidence files with Bash `set -o pipefail`, preserving terminal exit codes. Avoid Windows PATH/linker inputs and check the chosen `cargo`/`rustc` resolve to Linux executables. Do not copy `.local`, `target`, registry build outputs or Windows `.cargo/config` from the Windows workspace. Cargo downloads a fresh locked Linux source/archive cache; retain it for notice collection. The explicit commit excludes later production edits until a new freeze is chosen. Current uncommitted packaging-doc correction is not part of that frozen source.
Run `cargo fmt --all -- --check`, `cargo clippy --locked -j1 --workspace --all-targets -- -D warnings`, then `cargo build --locked -j1 --release --workspace` only after the earlier gates/resources pass. Keep incremental disabled to avoid another large incremental cache. This does not eliminate release build disk demand. Copy examples beside release binaries too. Do not parallelize with root's Windows Cargo or launch tests concurrently.
## Reuse existing executable/transport acceptance
The headless test command above includes `crates/oa-cli/tests/source_cli.rs`: it launches actual `CARGO_BIN_EXE_arcadia`, checks preview/write/fixed-point behavior against the40-identity alarm fixture, cross-file alias rename, Unicode diagnostics, CRLF, conflict and no-op preservation. No duplicate CLI smoke program is needed. For an isolated rerun use `cargo test --locked -j1 -p oa-cli --test source_cli -- --test-threads=1`.
`crates/oa-server/tests/http.rs` binds real `127.0.0.1:0` sockets with reqwest clients (`TestServer::start`, line48), including persistence reopen rather than router-only mocks. Useful exact reruns, all already covered by the full headless suite:
```sh
cargo test --locked -j1 -p oa-server --test http conditional_writes_are_atomic_and_survive_restart -- --exact --test-threads=1
cargo test --locked -j1 -p oa-server --test http batches_dry_run_noop_and_source_share_the_core -- --exact --test-threads=1
cargo test --locked -j1 -p oa-server --test http auth_origins_media_and_body_limits_are_enforced_over_http -- --exact --test-threads=1
cargo test --locked -j1 -p oa-server --test http current_migration_reports_and_invalid_typed_transaction_preserve_http_state -- --exact --test-threads=1
```
These cover conditional writes, stale/missing tags, no-op, invalid atomic rejection and persisted revision/ETag on reopen. They restart the in-process server/store, not the standalone executable. The separate `semantic_http_contract.py` command above launches the actual supplied executable with a fresh store and cross-platform subprocess flags; checks served-vs-local OpenAPI, typed import/semantic preview/apply and stale412. It does not test process restart. It has a blocking banner read, hence the outer timeout; on timeout root must check/stop only the test-owned process because forced Python termination may bypass its finally block.
For standalone executable restart acceptance, reuse `harness/fixtures/rest-coverage/run-coverage-probe.ps1` (parameter `-ServerExe`): it already has exact source/model/validation comparisons and ETag persistence after process stop/start. Its `Start-Process -WindowStyle Hidden` is Windows-specific. A Linux copy/adaptation must remove only that parameter, preserve `PSScriptRoot` fixture/root resolution, retain generated evidence and synthetic token handling, and use PowerShell7. Do not run the current script verbatim in Linux or point it at a Windows binary. This adaptation/install is not performed here. `run-timed-bundle-oracle.ps1` has the same platform issue and additional saved-fixture inputs. Historical `run_experiment.py` hardcodes Windows executable, creationflags and another host's archive; it is not a portable current gate. No new duplicate acceptance tests were added.
## Remaining root-owned acceptance and narrow documentation correction
Actual Ubuntu26.04 registration/shell, compiler/dependency availability, capacity, native WSLg rendering/backend and all commands above remain unverified. Ubuntu26.04 results cannot establish the older Ubuntu24.04 package baseline. Native UI still needs Home/help, normal/minimum layout, B4 Unicode/lifetime clipping, Linux path-entry Open/Save, save/reopen, source/diagram Undo/Redo and full independent model/source comparison. Rendering should record actual display variables and stderr; use lavapipe only after finding the installed ICD, without assuming the historical filename exists.
Root authorized a narrow correction to `docs/linux-packaging.md`: remove obsolete portal-dialog prerequisite and replace native Open/Save acceptance with Linux path entry, existing-file handling and SVG-export overwrite confirmation. Exact source: `app.rs:3410` chooses `FilePrompt` for Linux before the rfd branch; `app.rs:3108` gates the explicit overwrite prompt on Export; `app.rs:3480` routes Save to normal snapshot writing. Thus README140's generic overwrite wording is broader than this direct prompt evidence. The corrected packaging text does not claim general Save-as confirmation or a native pass. No dependency/runtime/license promises elsewhere changed.
Release/notices/package acceptance remains root-owned: scripts/package-linux.ps1 currently packages **only arcadia-studio and arcadia-server**, not the new `arcadia` CLI. Its strict collector needs matching compiler sysroot notices, Linux target libraries and Cargo archives, plus Python3.11+/PowerShell7/Git; absence of notice files stops packaging. Build evidence must record exact source/profile/compiler and hashes. Current CLI inclusion is an explicit outstanding release-scope decision, not silently repaired here. Extract a fresh bundle, verify checksums/modes/ELF dependencies, and exercise its actual binaries from another working directory before publishing a prerelease. This report and docs correction were source-reviewed only.
@@ -0,0 +1,39 @@
# Linux portable CLI inclusion — 2026-09-11
Owner: Codex-ytr83r `/root/linux_build_plan`. Root assigned full Linux portable package inclusion of the existing source authoring CLI; Gitea ownership304 and scoped shared-helper authorization306. Rust/Cargo source freeze remains `cb611a71df53704abc5ebe4290b916e17ee96bf1`; no Rust, Cargo, WSL, server, GUI, native package execution or Git mutation by this worker. Root owns compiler/setup/native acceptance. This supersedes the earlier Linux build-plan finding that CLI inclusion was undecided.
## Final change
`scripts/package-linux.ps1` now requires all three prebuilt native ELF files: `arcadia-studio`, `arcadia-server`, `arcadia`. Each uses the same strict ELF inspection, captured hash, build-evidence validation, copy-time unchanged-input verification, package metadata and checksum inventory. Full-package notice roots are explicitly desktop/server/CLI; `-ServerNoticesOnly` remains server-only. START-HERE identifies `./arcadia --help` and its source authoring purpose. Runtime metadata removes the obsolete portal-dialog implication, preserving Ubuntu24.04 as the historical validation baseline and requiring current native checks.
Two minimal shared changes were necessary and explicitly authorized: `windows-notices.ps1` admits `oa-cli` as an explicit root while preserving default desktop/server selection; `package-artifacts.py` assigns and verifies0755 for root-level `arcadia` alongside the other two binaries. All other archive files remain0644; a nested `examples/arcadia` regression ensures a basename match cannot accidentally make documentation executable. No shared-helper refactor, notice relaxation, container graph change or optional binary omission was added.
The notice collector traverses CLI normal/build dependencies, records actual CLI workspace source hashes and workspace license, and continues enforcing locked archives, exact supplements/fonts and Rust sysroot notices/target-library hashes. `Read-PackageBuildEvidence` already validates every supplied binary hash key; no change needed. A two-binary evidence document now correctly fails because the CLI hash is mandatory for a full package.
`docs/linux-packaging.md` consistently names three binaries/modes/build-evidence hashes and all three notice roots. Its new CLI paragraph gives explicit-entry check/lint/stabilize/rename-alias guidance, preview/default and `--write`/`--json` behavior, and separate-project-copy acceptance. Shared portable README was left unchanged: it links the platform guide and contains no claim excluding the CLI. The full bundle's START-HERE plus Linux guide make launch/discovery concrete.
## Validation
- Existing `scripts/test-package-artifacts.py`:11 passed in2.965seconds, exit0, using bundled Python. Extended archive test verifies deterministic bytes, all three executable modes, exact CLI payload readback and nested same-name data0644. Existing ELF loader/dependency/RPATH, archive integrity/refusal, document closure and synthetic container invariants remain passing. No executable fixture is launched.
- Existing `scripts/test-windows-notices.ps1`: passed with its explicitly mocked Cargo/rustc functions; no real toolchain calls. Added synthetic CLI plus a CLI-only transitive dependency and verified exact full-root identity, source/license inventory, dev/unreachable exclusion. Original default Windows and server-only Linux selection plus strict stale-archive/font/supplement/runtime refusals remain passing. Fixture retained at `C:/Temp/arcadia-notices-c07d38edff1f4a38999d2648ef1012cb`.
- Direct synthetic `Read-PackageBuildEvidence` checks: three correct hashes accepted; absent and mismatching CLI hashes rejected. Retained corrected fixture at `C:/Temp/arcadia-cli-evidence-bc74b663b4ef4e79b039cb02715289fe`. First ad-hoc fixture failed before meaningful validation because PowerShell OrderedDictionary has no Clone method; changed only the ephemeral fixture to a Hashtable and reran with terminating errors. No production defect or pass was inferred from that failed attempt.
- PowerShell7.6.5 parser: zero errors for package-linux.ps1, windows-notices.ps1 and test-windows-notices.ps1. `git diff --check` passed on all six modified files. Source review confirms unchanged server-notices-only path and strict generic copy/build-evidence logic.
No new duplicate test file was needed; the established artifact/notice suites cover the actual serialization and dependency-graph boundaries. These checks establish packaging logic on synthetic inputs, not an actual Linux distributable or Ubuntu compatibility.
## Root-owned next action
After serialized native builds and acceptance, supply the same-source Linux directory with **all three** binaries, matching Linux Cargo archive cache, Rust compiler/sysroot reports and target libraries, Python3.11+, Git and PowerShell7. Run the existing package command with fresh version/output names and build evidence including all three lowercase SHA256 hashes. Missing/unreviewed CLI ELF, missing CLI evidence or notice inputs must stop packaging; do not fall back to a two-binary bundle.
Extract into a new Linux directory, verify checksums and0755 modes, then actually run Studio, server and CLI from an unrelated working directory. CLI acceptance should reuse the existing source fixture contracts for check, preview, exact write and unchanged repeat on a copy. Native GUI/path-entry/Undo/Redo and actual server process-restart/ETag gates remain separate. Ubuntu26.04 success does not prove the documented Ubuntu24.04 baseline. This worker produced no archive/release and updated no common Wiki or acceptance ledger.
## Frozen SHA256
| File | SHA256 |
| --- | --- |
| scripts/package-linux.ps1 | 1715EC6ACED5C642D4F8D8023B221F4D934B4305A51BF07F2090CC509135ED53 |
| scripts/windows-notices.ps1 | AC70B61937076416C50B104FD9F7E127880748764FA59C21105312CB291369ED |
| scripts/package-artifacts.py | 655711B051A3CD2D478D9B15BA27BE9B63C5B056BE80ADE8DA4DABC6BB46A91C |
| scripts/test-package-artifacts.py | 4E984EC557F5B48B7E27A399F6D7C6E4239352DC24C1CA212088C7BAC58802A4 |
| scripts/test-windows-notices.ps1 | 1D5B1FE5461D25D72D217CDF3658B9AAA18C7AEA9919AEC28F13087489C9CE89 |
| docs/linux-packaging.md | 1E6EEEE7AC23CFCBA5803354855E5E364A101507D97C30A862ACFE0062A07A6D |
@@ -0,0 +1,31 @@
# Existing REST coverage probe portability — 2026-09-11
Owner: Codex-ytr83r `/root/linux_build_plan`, assigned by root after the Linux build preparation. Read complete helper and Gitea issue1 through297; ownership announced in comment298. Own only this report and `harness/fixtures/rest-coverage/run-coverage-probe.ps1`. No WSL, apt, compiler, Cargo, server, GUI or Git mutation. Root owns active setup/build and actual Linux acceptance.
## Correction
The existing helper now declares PowerShell7.0 explicitly and splats its unchanged `Start-Process` arguments. Only Windows adds `WindowStyle = 'Hidden'`; Linux omits that unsupported parameter. Windows retains hidden launch, identical executable and quoted store/token arguments, process handle, stdout/stderr files and readiness loop. PowerShell7 was already implicitly required by `ConvertFrom-Json -AsHashtable` and `Invoke-WebRequest -SkipHttpErrorCheck`; the requirement now fails clearly before creating evidence on older PowerShell.
Microsoft's [Start-Process reference](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-7.5) documents platform-specific launch behavior and argument joining. A Linux child remains attached to its launching shell; keep the PowerShell invocation alive for the probe. No nohup, detach, shell intermediary or persistent service was added.
## Whole-helper platform review
- `$PSScriptRoot`/`Join-Path` still resolve the checked-in fixture and repository independently of working directory. `-ServerExe` resolves to an explicit supplied path; no `.exe` suffix, Windows drive, registry or user profile is hardcoded. Store/token arguments retain explicit double quotes for ordinary paths containing spaces. Unusual literal quote characters in paths remain outside the existing argument-quoting contract.
- .NET loopback listener, file writes, hashing, JSON conversion and PowerShell7 HTTP APIs are available across platforms. Same localhost port, synthetic local token, HTTP headers/body bytes, response decoding, source comparisons, exact coverage tuples and ETag comparisons remain. No fixture or oracle assertion changed.
- Start/Stop helpers retain the owned Process object; Stop-Process plus WaitForExit and the outer `finally` remain unchanged. Actual stop/start with the same store, restarted model/source/validation equality and ETag equality still execute in the same order. This is process-restart persistence after completed requests, not graceful-shutdown or crash-mid-write acceptance.
- Existing limitations remain: ephemeral-port selection closes the reservation before bind (small race); evidence names have one-second resolution and refuse colliding directories; readiness is bounded by40 one-second requests plus250ms delays, not a strict ten-second deadline. Root should run one invocation at a time. No unrelated lifecycle or oracle redesign was introduced.
## Validation and exact execution
Windows PowerShell7.6.5 parser accepted the modified file with zero errors, required version7.0 and seven functions. Original and modified ASTs also parsed with zero errors. A normalized AST statement comparison verifies all top-level statements outside `Start-ProbeServer` remain byte-identical (apart from CRLF normalization); the full fixture has no Git diff. Manual diff review confirms readiness/cleanup inside the changed launch function remain untouched. `git diff --check` passed. Neither Windows nor Linux server execution was performed, so this is source/static validation only.
After root has a matching native Linux server and PowerShell7 in the ext4 checkout containing this correction:
```sh
pwsh -NoProfile -File harness/fixtures/rest-coverage/run-coverage-probe.ps1 \
-ServerExe "$CARGO_TARGET_DIR/debug/arcadia-server"
```
The command assumes the checkout is current working directory and `CARGO_TARGET_DIR` is the Linux target directory from the build plan; use the release binary for final package acceptance. From an unrelated directory, pass the absolute path to the helper and binary. No Python module or Pester installation is needed. Linux executable permission and runtime loader must be valid. The repository checkout must be writable for `.local/rest-coverage-<timestamp>/`; evidence includes supplied executable hash, exact request/response/meta files, separate two-launch logs and terminal result/failure. Preserve the process/store evidence if the actual run fails. Peer Linux installation reports are not acceptance of this local script/binary pair.
This correction supersedes only the build-plan warning that this specific REST coverage helper still needs Linux WindowStyle adaptation. The separate timed-bundle helper and historical Python experiment remain unchanged and retain their previously reported limitations. No package, shared ledger or Wiki ownership taken.
@@ -0,0 +1,132 @@
# WSL post-reboot preparation — 2026-09-11
Original owner: Codex-ytr83r `/root/linux_wsl`; root took over all live process handles after the second reboot. Coordination: issue1 comments273,283,285. No production changes are part of this setup record.
## Current intervention — VirtioProxy supersedes mirrored networking
The next direct user message points to [owner comment328](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-328).
Root preserved the previous applied bytes and replaced the owned configuration
with exactly `[wsl2]` and `networkingMode=virtioproxy`. Shutdown completedexit0
at14:51:36.9652073UTC. One persistent root shell from guest `/` is starting, with
no compiler active, for the owner's address/route/ping/DNS/GitHub-HTTPS checks.
The host VPN is immutable and is neither inspected nor modified. If networking
works, diagnosis stops and ordinary build setup resumes. Evidence is under
`.local/wsl-virtioproxy-ytr83r-20260911/`; this start is not yet a successful probe.
The prepared trace fallback remains unexecuted and secondary to this new trial.
## Previous intervention — mirrored networking
The user's direct message asks to check the Gitea networking solution. Root read
the owner's [issue1 comment316](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-316),
which directs mirrored networking, DNS tunneling and an ordinary WSL restart,
explicitly forbidding any host VPN change. `C:\Users\User\.wslconfig` was absent;
root recorded that baseline and created exactly:
```ini
[wsl2]
networkingMode=mirrored
dnsTunneling=true
```
Only Ubuntu-26.04 was registered, stopped, and no WSL command/guest work remained.
`wsl --shutdown` completed exit0 at14:42:18.9208168UTC. Exact applied bytes,
authorization reference, timestamp and shutdown record are saved in
`.local/wsl-mirrored-ytr83r-20260911/`. No VPN, firewall, route/NAT or resolv.conf
change occurred. Actual persistent-shell startup and the owner's bounded
ping/DNS/HTTPS checks remain next; successful configuration writing alone does
not establish network access or explain the earlier CreateVm timeouts. This new
explicit guidance supersedes the earlier no-config-change trial strategy below.
The single post-change persistent-shell trial52988 subsequently reached
terminalexit1 with the same `CreateVm/0x800705b4` before a prompt. Windows Cargo
had already terminated at14:43:51.917UTC; no guest ping/DNS/HTTPS commands ran.
There is no successful networking result from this intervention. Root requests
a read-only review of minimal local WSL tracing before any further reproduction;
no further blind launch, VPN change or host reboot is planned. See the independent
[startup review](release-wsl-startup-review-ytr83r-20260911.md) for observed stage
limits; current results do not prove network configuration caused the timeout.
## Current outcome — registered WSL2 guest, later startup timeouts
The supported root-owned installation reached terminal **exit0 at
14:19:47.9073217UTC**. Its stdout says the distribution was successfully installed;
`wsl --list --verbose` then listed Ubuntu-26.04 as version2. The complete official
download was415,361,247 bytes. These observations supersede the pending status
of this attempt below; the earlier failed attempt remains separate history.
Root's first shell inventory (session20913, started14:20:30UTC) completed exit0.
It executed as uid0 and reported Ubuntu26.04 LTS (Resolute Raccoon), x86_64 kernel
`6.18.33.2-microsoft-standard-WSL2`, a `/dev/sdd` root and3.8GiB guest RAM
with1GiB swap. The apparent955GiB guest filesystem availability is virtual-disk
capacity, not physical Windows free space (about29GiB at14:29UTC). Git and Python3
exist; no Rust compiler/Cargo was found on PATH. The repository mount is readable and
WSLg directories plus `DISPLAY=:0`, `WAYLAND_DISPLAY=wayland-0` and
`XDG_RUNTIME_DIR=/run/user/0` exist. No application rendering was tested.
First launch warned that root's systemd user session failed to start. Separate
read-only inventories1905/97517 completed: user@0 was inactive with no journal
entries, and Landscape client subsequently appeared failed. Cloud-init was
still finishing during the initial inventory. No default uid1000 account was
returned; OOBE remains the Ubuntu-supplied `/usr/lib/wsl/wsl-setup`. Root's
explicit noninteractive shell did not create an account or change that setup.
After those shells ended, two later commands reached real terminal WSL errors:
setup session99983 (its initial `bash -n` command) exited-1 and inventory92958
exited1 with `Wsl/Service/CreateInstance/CreateVm/0x800705b4` (timeout). Neither
dependency installation nor the file-backed inventory began; no apt/Cargo pass
is claimed. At14:30:53UTC boot remained13:57:30UTC, Windows had about3.86GiB free
RAM, WslService/vmcompute/hns were running and a new vmmemWSL process existed.
This does not identify the timeout's cause. It is distinct from the old
HCS_E_HYPERV_NOT_INSTALLED failure: the new guest kernel actually ran.
Root will preserve both outcomes and retry a single persistent Linux shell
after releasing the current Windows compiler load, rather than repeat concurrent
startup attempts or change host settings. Windows lifecycle gate55371 remains
active on frozen Rust/Cargo inputscb611a7. Guest dependencies, reliable restart,
Linux compilation, WSLg application and packaging acceptance remain pending.
## Installation chronology — 14:03:45 UTC, after virtualization was enabled
The user confirmed enabling virtualization and rebooting again, then explicitly
authorized installing Ubuntu26.04 ourselves. Fresh root boot13:57:30UTC was
observed; no cargo/rustc/wsl installer or registered distribution remained.
The previous Windows gate33704 handle is missing and has no final test status.
It is a reboot interruption, not an application test failure.
Reading the original install stdout as UTF16 established its actual outcome:
download completed, then registration failed with
`Wsl/InstallDistro/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED`.
This occurred before the latest virtualization change. The installer removed
its temporary image; no retained Ubuntu26.04 archive was found in this login's
temp directory. The earlier progress-only statements below are historical.
Root started the same supported install command at14:03:45.540UTC, PID7824,
owned exec session33480. Exact command/timestamps/output are under
`.local/wsl-root-postvirtualization-20260911/`; inspect that actual process and
result before any retry. At14:04UTC its temporary Ubuntu26.04 image existed with
zero bytes and no output. Guest shell/registration were then pending. Windows
cached lifecycle compilation runs separately as55371, one Cargo job; no Linux
Cargo may run concurrently without root scheduling. No host feature, security,
firmware setting or reboot was changed by the agent.
## Historical first attempt — 13:50 UTC
WSL is installed (2.7.13.0; packaged kernel 6.18.33.2-2; WSLg 1.0.73.2; Windows 10.0.26200.8457). These are host package versions, not an executed Linux kernel or GUI acceptance.
Fresh post-reboot checks found no registered distribution, Ubuntu Appx package or Lxss child registration. Only wslservice was initially active; no installer lease appeared in current Gitea comments, and no open PR existed. Read AGENTS.md, RESUME.md, previous Linux host report, current issue 1 comments and LinuxHostYtr83r20260911 Wiki before setup. Previous verified Ubuntu/QEMU evidence is preserved; no QEMU boot was repeated.
The live online catalog explicitly lists Ubuntu-26.04. Local WSL help supports the exact ordinary setup command:
```powershell
wsl.exe --install Ubuntu-26.04 --no-launch --version 2
```
Started hidden at 13:47:53.0539541 UTC, PID 3640 / child 1696. At approximately 13:50 UTC the installer is still active; TCP is established to 91.189.91.109:443, `%TEMP%/Ubuntu-26.04.wsl` exists with zero bytes, and stdout/stderr are empty. No successful registration, first-run prompt, guest shell, installed build dependency or Linux application validation is claimed. Do not duplicate this running installation.
Raw command/PID timestamp, redirected install logs, normalized WSL help/catalog/version and prepared guest inventory script are under `.local/wsl-postboot-ytr83r/`. Pending completion is monitored by the lease owner. No Windows feature/security/boot settings or reboot were changed.
## Prepared next steps, not yet executed
1. After installer completion, capture `wsl --list --verbose` and run the read-only `inventory.sh` through the registered distribution, first retaining existing default user/OOBE state. Check actual uname/os-release, rootfs, architecture, RAM/disk, WSLg socket/environment and tools/packages.
2. Before package mutation, recheck shared owner/apt/dpkg activity. Install README development packages using ordinary apt: build-essential, pkg-config, libxkbcommon-dev, libxkbcommon-x11-0, libwayland-dev, libvulkan-dev, libx11-dev, libxrandr-dev, libxi-dev. Inspect existing Rust before selecting/installing a toolchain; workspace minimum is 1.90 and current Windows evidence uses 1.98.1.
3. Root must release the heavyweight gate before any Cargo build/test. Use one build job and one test thread with a distinct Linux target/cache and a frozen source identity. Start with locked core tests, then serial server/CLI and desktop gates, then actual WSLg application acceptance. Prefer an ext4 source/target snapshot over concurrent mutation of the Windows checkout. Windows artifacts are not Linux acceptance.
+2 -2
View File
@@ -237,7 +237,7 @@ def make_archive(stage, archive, package_name):
for relative, path in files.items():
info = tarfile.TarInfo(f'{package_name}/{relative}')
info.size = path.stat().st_size
info.mode = 0o755 if relative in ('arcadia-studio', 'arcadia-server') else 0o644
info.mode = 0o755 if relative in ('arcadia-studio', 'arcadia-server', 'arcadia') else 0o644
info.mtime = 0
with path.open('rb') as source:
tar.addfile(info, source)
@@ -254,7 +254,7 @@ def make_archive(stage, archive, package_name):
stream = tar.extractfile(entry)
if hashlib.file_digest(stream, 'sha256').hexdigest() != expected[relative]:
raise ValueError(f'Archive readback mismatch: {relative}')
mode = 0o755 if relative in ('arcadia-studio', 'arcadia-server') else 0o644
mode = 0o755 if relative in ('arcadia-studio', 'arcadia-server', 'arcadia') else 0o644
if entry.mode != mode or entry.uid or entry.gid or entry.mtime:
raise ValueError('Archive permissions/metadata mismatch')
if seen != set(expected) or set(stage_files(stage)) != set(expected) or any(digest(path) != expected[name] for name, path in files.items()):
+4 -4
View File
@@ -29,7 +29,7 @@ $imports = [ordered]@{}
$evidence = $null
if (-not $ServerNoticesOnly) {
$binaryHashes = [ordered]@{}
foreach ($name in @('arcadia-studio', 'arcadia-server')) {
foreach ($name in @('arcadia-studio', 'arcadia-server', 'arcadia')) {
$path = [IO.Path]::GetFullPath((Join-Path $BinaryDirectory $name))
$elf = Invoke-PackageHelper $Python @('elf', $path)
$inputs[$name] = $path
@@ -40,7 +40,7 @@ if (-not $ServerNoticesOnly) {
$evidence = Read-PackageBuildEvidence $BuildEvidence $Target $binaryHashes
$documentation = Get-PackageDocumentation $repository 'linux' $Python
foreach ($name in $documentation.Keys) { $inputs[$name] = $documentation[$name] }
$notices = Get-ArcadiaNotices $repository $Target $NoticeManifest ''
$notices = Get-ArcadiaNotices $repository $Target $NoticeManifest '' @('oa-desktop', 'oa-server', 'oa-cli')
} else {
if ($BuildEvidence) { throw '-BuildEvidence applies to a binary package, not a notice-only bundle.' }
$notices = Get-ArcadiaNotices $repository $Target $NoticeManifest '' @('oa-server')
@@ -77,10 +77,10 @@ try {
acceptance = 'Packaging integrity only; current-tree native Linux acceptance required.'
build = 'Prebuilt inputs; no build profile, source identity or compiler inferred.'
build_evidence = $evidence; imports = $imports; input_sha256 = $inputHashes
runtime = 'Ubuntu 24.04 x86-64 is the validation baseline. Direct ELF dependencies only are inspected; graphics/window/portal dynamic loads must be verified on the actual runtime.'
runtime = 'Ubuntu 24.04 x86-64 is the validation baseline. Direct ELF dependencies only are inspected; graphics/window dynamic loads must be verified on the actual runtime. Linux Open/Save uses application path entry.'
}
[IO.File]::WriteAllText((Join-Path $stage 'package.json'), ($metadata | ConvertTo-Json -Depth 14) + "`n", $encoding)
[IO.File]::WriteAllText((Join-Path $stage 'START-HERE.txt'), "Arcadia Studio portable Linux bundle`nRun ./arcadia-studio. Keep examples/release1 beside the executable.`nRead README.md and docs/linux-packaging.md. The optional server is ./arcadia-server.`nSource checkout required for Cargo/Docker instructions. Packaging is not runtime acceptance.`n", $encoding)
[IO.File]::WriteAllText((Join-Path $stage 'START-HERE.txt'), "Arcadia Studio portable Linux bundle`nRun ./arcadia-studio. Keep examples/release1 beside the executable.`nRead README.md and docs/linux-packaging.md. The optional server is ./arcadia-server.`nThe source authoring CLI is ./arcadia; run ./arcadia --help for check, stabilization and alias rename commands.`nSource checkout required for Cargo/Docker instructions. Packaging is not runtime acceptance.`n", $encoding)
$documentCheck = Invoke-PackageHelper $Python @('check-docs', '--stage', $stage)
[IO.File]::WriteAllText((Join-Path $stage 'documentation-check.json'), ($documentCheck | ConvertTo-Json) + "`n", $encoding)
}
+7 -1
View File
@@ -52,14 +52,20 @@ class PackageContracts(unittest.TestCase):
def test_tar_is_deterministic_with_executable_modes_and_unicode_paths(self):
self.file('stage/arcadia-studio', b'not executable in this test')
self.file('stage/arcadia-server', b'another inert fixture')
self.file('stage/arcadia', b'inert source CLI fixture')
self.file('stage/examples/arcadia', b'ordinary data with the same basename')
self.file('stage/examples/temperature delta.txt', 'Δ\n'.encode())
first = packaging.make_archive(self.root / 'stage', self.root / 'a.tar.gz', 'fixture')
second = packaging.make_archive(self.root / 'stage', self.root / 'b.tar.gz', 'fixture')
self.assertEqual(first['sha256'], second['sha256'])
with tarfile.open(self.root / 'a.tar.gz') as archive:
self.assertEqual(archive.getmember('fixture/arcadia-studio').mode, 0o755)
self.assertEqual(archive.getmember('fixture/arcadia-server').mode, 0o755)
self.assertEqual(archive.getmember('fixture/arcadia').mode, 0o755)
self.assertEqual(archive.getmember('fixture/examples/arcadia').mode, 0o644)
self.assertEqual(archive.extractfile('fixture/arcadia').read(), b'inert source CLI fixture')
self.assertEqual(archive.getmember('fixture/examples/temperature delta.txt').mode, 0o644)
self.assertEqual(len(archive.getmembers()), 3)
self.assertEqual(len(archive.getmembers()), 5)
def test_archive_refuses_overwrite_and_case_collisions(self):
self.file('stage/a', b'first')
+12 -3
View File
@@ -20,7 +20,7 @@ $null = Write-Fixture 'rust/share/doc/rust/COPYRIGHT.html' 'Synthetic Rust distr
$null = Write-Fixture 'rust/share/doc/rust/COPYRIGHT-library.html' 'Synthetic Rust library notice'
$null = Write-Fixture 'rust/lib/fake.rlib' 'Synthetic target library'
$packages = @(); $nodes = @(); $lock = @()
foreach ($name in @('oa-desktop', 'oa-server', 'normal', 'build', 'dev-only', 'unreachable')) {
foreach ($name in @('oa-desktop', 'oa-server', 'oa-cli', 'cli-only', 'normal', 'build', 'dev-only', 'unreachable')) {
$external = $name -notlike 'oa-*'
$root = if ($external) { "registry/src/test/$name-1.0.0" } else { "workspace/$name" }
$manifest = Write-Fixture "$root/Cargo.toml" "[package]`nname = `"$name`"`nversion = `"1.0.0`""
@@ -40,10 +40,13 @@ foreach ($name in @('oa-desktop', 'oa-server', 'normal', 'build', 'dev-only', 'u
$deps += [pscustomobject]@{ pkg = $pair[0]; dep_kinds = @([pscustomobject]@{ kind = $pair[1] }) }
}
}
if ($name -eq 'oa-cli') {
$deps += [pscustomobject]@{ pkg = 'cli-only'; dep_kinds = @([pscustomobject]@{ kind = $null }) }
}
$nodes += [pscustomobject]@{ id = $id; deps = $deps; features = @() }
}
$null = Write-Fixture 'Cargo.lock' ($lock -join "`n")
$script:FixtureMetadata = [pscustomobject]@{ packages = $packages; workspace_members = @('oa-desktop', 'oa-server'); resolve = [pscustomobject]@{ nodes = $nodes } }
$script:FixtureMetadata = [pscustomobject]@{ packages = $packages; workspace_members = @('oa-desktop', 'oa-server', 'oa-cli'); resolve = [pscustomobject]@{ nodes = $nodes } }
$script:FixtureTarget = 'x86_64-pc-windows-msvc'
function cargo {
if (($args -join ' ') -notmatch '--locked --offline' -or ($args -join ' ') -notmatch "--filter-platform $script:FixtureTarget") { throw 'Unexpected Cargo command' }
@@ -74,6 +77,12 @@ $script:FixtureTarget = 'x86_64-unknown-linux-gnu'
$linuxNotices = Get-ArcadiaNotices $fixture $script:FixtureTarget $manifestPath '' @('oa-server')
Assert ($linuxNotices.Inventory.packages.Count -eq 1 -and $linuxNotices.Inventory.packages[0].name -eq 'oa-server') 'Server-only Linux notice graph includes desktop roots'
Assert ($linuxNotices.Inventory.root_packages.Count -eq 1 -and $linuxNotices.Inventory.root_packages[0] -eq 'oa-server' -and $null -eq $linuxNotices.Inventory.runtime) 'Linux target/root/runtime identity not retained'
$fullLinuxNotices = Get-ArcadiaNotices $fixture $script:FixtureTarget $manifestPath '' @('oa-desktop', 'oa-server', 'oa-cli')
$fullNames = @($fullLinuxNotices.Inventory.packages | ForEach-Object { $_.name })
Assert ($fullNames.Count -eq 6 -and $fullNames -contains 'oa-cli' -and $fullNames -contains 'cli-only' -and $fullNames -notcontains 'dev-only' -and $fullNames -notcontains 'unreachable') 'Full Linux package omitted CLI dependencies or included unrelated roots'
Assert (($fullLinuxNotices.Inventory.root_packages -join ',') -ceq 'oa-cli,oa-desktop,oa-server') 'Full Linux notice root identity differs'
$cliRecord = $fullLinuxNotices.Inventory.packages | Where-Object name -eq 'oa-cli'
Assert ($cliRecord.local_source_sha256.Contains('src/lib.rs') -and $cliRecord.notices.Count -gt 0) 'CLI source or notice inventory missing'
try { $null = Get-ArcadiaNotices $fixture $script:FixtureTarget $manifestPath 'unexpected-runtime'; throw 'Expected runtime refusal' } catch { if ($_.Exception.Message -notmatch 'only to the gnullvm target') { throw } }
$script:FixtureTarget = 'x86_64-pc-windows-msvc'
$before = ($result.Inventory.packages | Where-Object name -eq normal).local_source_sha256['src/lib.rs']
@@ -109,5 +118,5 @@ $bad.packages[0].notices[0].file = 'NOTICE.txt'
$null = Write-Fixture 'supplements/NOTICE.txt' 'Synthetic supplemental notice'
$null = Write-Fixture 'supplements/manifest.json' ($bad | ConvertTo-Json -Depth 8)
Refuses 'Supplement changed'
Write-Output 'PASS: normal/build and server-only Linux selection, cross-target runtime refusal, Rust reports, actual source hashes, stale archive refusal, doc-comment font exclusion, production font path/mapping refusals, exact font mapping and changed-byte refusal, unsupported source refusal, traversal refusal, altered supplement refusal.'
Write-Output 'PASS: normal/build, server-only and full Linux CLI-root selection, cross-target runtime refusal, Rust reports, actual source hashes, stale archive refusal, doc-comment font exclusion, production font path/mapping refusals, exact font mapping and changed-byte refusal, unsupported source refusal, traversal refusal, altered supplement refusal.'
Write-Output "Synthetic fixture retained for inspection: $fixture"
+1 -1
View File
@@ -1,7 +1,7 @@
#Requires -Version 5.1
# Read-only dependency preflight. Does not build, download, or change a Cargo target.
function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$NoticeManifest, [string]$LlvmMinGWRoot, [string[]]$RootPackages = @('oa-desktop', 'oa-server')) {
if ($RootPackages.Count -eq 0 -or @($RootPackages | Where-Object { $_ -notin @('oa-desktop', 'oa-server') }).Count -gt 0) { throw 'Notice roots must be oa-desktop and/or oa-server.' }
if ($RootPackages.Count -eq 0 -or @($RootPackages | Where-Object { $_ -notin @('oa-desktop', 'oa-server', 'oa-cli') }).Count -gt 0) { throw 'Notice roots must be selected from oa-desktop, oa-server and oa-cli.' }
if ($LlvmMinGWRoot -and $Target -ne 'x86_64-pc-windows-gnullvm') { throw 'LLVM-MinGW runtime notices apply only to the gnullvm target.' }
function Hash-File([string]$Path) {
$stream = [IO.File]::OpenRead($Path)