Skip to content

Fix runtime boundaries and release validation gaps - #817

Merged
LunaStev merged 2 commits into
wavefnd:masterfrom
LunaStev:fix/october-release-stabilization
Sep 30, 2026
Merged

LunaStev merged 2 commits into
wavefnd:masterfrom
LunaStev:fix/october-release-stabilization

Conversation

@LunaStev

@LunaStev LunaStev commented Sep 30, 2026 •

Copy link
Copy Markdown
Member

Summary

Fix two runtime boundary errors and make release checks reject missing work, invalid artifacts, unsafe report destinations, and unrelated server responses.

  • Accept successful FreeBSD getcwd results and reject oversized POSIX descriptors before narrowing them.
  • Protect source/compiler files from report-path aliases, select the checkout std explicitly, and preserve corpus launch failures and interrupted native results.
  • Require compile-only object outputs, validate ELF header contracts, and discover standalone and directory-based FreeBSD cases before launching tools.
  • Tie the server regression to its own process and ephemeral endpoint using a bounded readiness check and request-specific response.
  • Make std policy checks handle accepted token spacing/comments and fail on search errors. Run frontend regressions in the existing isolated WebAssembly and LoongArch jobs.

Motivation

These are the selected stabilization fixes for the October 5 release. Previously, a report could overwrite an input, an empty or incomplete check could pass, and a server response could be accepted without establishing that the launched test supplied it.

Fixes #811
Fixes #814
Fixes #807
Fixes #812
Fixes #808
Fixes #809
Fixes #810
Fixes #514
Fixes #562
Fixes #580
Fixes #506
Fixes #713
Fixes #561
Fixes #560
Fixes #487

Target and compatibility impact

  • No language, public API signature, or ABI changes. Windows retains full-width socket handles; generic POSIX poll still permits disabled negative entries.
  • Validation now fails on empty required selections, missing/invalid objects, report/input aliases, and unavailable or failed search tools. Corpus compiler paths remain stable across working-directory changes.
  • Native progress reports retain completed results and distinguish running, interrupted, and unexecuted cases. Interrupted execution retains exit status 130.
  • The Linux amd64 server fixture announces its ephemeral port and echoes a per-request challenge. The new FreeBSD amd64 test14/main.wave exercises both the directory-case runner and the corrected environment API.

Validation

Rust 1.89, LLVM 21 (LLVM_SYS_211_PREFIX=/usr/lib64/llvm21), Cargo --locked --jobs 2:

  • All tools.test_* Python modules: 183 tests, 157 passed and 26 conditional skips. Invoked with python3 -m unittest and the sorted module list derived from tools/test_*.py.
  • After the final logging/policy adjustments: python3 -m unittest tools.test_server_case tools.test_case_execution tools.test_run_tests (20 passed) and python3 -m unittest tools.test_release_gates.PolicyTests (3 passed).
  • cargo +1.89 test --locked --jobs 2 --test native_providers cwd_accepts_zero_success and cargo +1.89 test --locked --jobs 2 --test native_providers native_provider_fixtures_compile_and_run_on_their_host passed. New fixtures exercised Linux amd64 at O0/O2 and emitted objects for the applicable supported native targets.
  • cargo +1.89 test --locked --no-default-features --features llvm-target-wasm --test frontend_regressions --jobs 2: 11 passed. The equivalent llvm-target-loongarch command: 10 passed.
  • The actual Wave server fixture built and passed the readiness/challenge runner at O0/O2. FreeBSD amd64 test14/main.wave compiled and statically linked without libc at O0/O2.
  • cargo +1.89 clippy --locked --jobs 2 --test native_providers -- -D warnings, cargo +1.89 fmt --all -- --check, bash tools/check_std_policy.sh, workflow YAML parsing, and git diff --check passed.

Native macOS, Windows, and FreeBSD execution remains for CI; cross-compilation and FreeBSD static linking are not claimed as native runtime validation. The broader post-PR audit is outside this change.

CI follow-up

  • Linux amd64: install ripgrep before the std policy check. The initial build failed because rg was unavailable; the release validation job now provisions the same prerequisite. Missing search tools still fail the policy check.
  • macOS amd64/arm64: compare resolved filesystem paths in Python tests, accounting for /var and /private/var aliases. Explicit compiler paths, WAVEC, and runtime checkout/std paths have directory-symlink regression coverage.
  • Focused local verification: python3 -m unittest tools.test_check_wave_corpus tools.test_runtime_cases tools.test_release_gates.PolicyTests passed all 28 tests. Workflow YAML parsing, policy prerequisite checks, and git diff --check passed. Native macOS execution of this follow-up remains for CI.

Deferred WebAssembly host dependencies

The initial runtime run reports 63 failing shared cases on each of wasm32-unknown, wasm32-WASI, and wasm64-unknown. For the unknown targets, 62 failures require env.printf and shared/test67.wave requires env.puts; WASI likewise lacks the required env imports. The compile-only reports passed.

Base PR #816 expanded shared runtime selection. Source comparison between its merge commit ca205e6eee3e7cf4d1fada463e2fbd4bd3c6f986 and the initial #817 commit 604b777e83d75551797f63899264f2421e966e96 shows no changes to print lowering (llvm/src/statement/io.rs), host import setup (src/cli.rs), case selection (tools/case_manifest.py, tests/cases/cases.toml), or the representative test11.wave/test67.wave fixtures. This supports an existing host-dependency gap exposed by expanded selection, rather than a new compiler/runtime regression introduced here; a separate base-build runtime comparison was not performed.

Per the agreed scope, these WASM failures remain visible and are deferred to separate work. This PR adds no host shim or passing exception and does not change WASM case semantics or #459 runtime classification. The overall CI is therefore not claimed to be green.

Checklist

  • Commits include a DCO Signed-off-by line.
  • Tests cover new behavior or the PR explains why no test is needed.
  • User-facing changes include documentation or diagnostics updates.
  • The change preserves the license boundary between the compiler and std/.

Signed-off-by: LunaStev <luna@lunastev.org>
Signed-off-by: LunaStev <luna@lunastev.org>
@LunaStev
LunaStev merged commit b384e64 into wavefnd:master Sep 30, 2026
21 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment