From b70393762edd14f7fa5bd4602299e33066ad1e2c Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Sat, 25 Jul 2026 17:03:10 -0400 Subject: [PATCH] test(lsp): gate the non-UTF-8 fixture on linux, not merely unix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI round 1: both macOS jobs failed on the acceptance case added last commit. APFS enforces valid UTF-8 in filenames, so `std::fs::write` with a 0xFF byte in the name fails with EILSEQ ("Illegal byte sequence") before `pmacs.fs.canonicalize` is ever called. The fixture cannot be built there. That is a filesystem refusing to represent the case, not a behavioral difference: the subject — `to_str()` returning None for a non-UTF-8 resolution — is platform-independent Rust, and the Linux run pins it. `#[cfg(unix)]` was the wrong granularity; review had asked for unix gating on the symlink tests and I applied the same gate here without checking whether the filesystem, rather than the API, was the constraint. Gated `#[cfg(target_os = "linux")]` with the reason in place, rather than skipped at runtime, so a future failure here is a real failure and not a silent no-op. Ledger records both CI-round facts: this one, and that `composition_overhead_under_ten_percent` is load-sensitive under a parallel workspace sweep (it reported -4.6% realistic overhead in the same run that tripped its 10% budget at 18.8%, which is noise, not work). --- docs/active-work.md | 18 +++++++++++++++--- tests/lsp_dispatch_seams_acceptance.rs | 12 +++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index 3cf1a8e..aef6edc 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -236,9 +236,21 @@ If it does not, stop and repair the remote/fetch configuration. code rather than left looking covered. - Verification on this branch: `cargo fmt --check` clean; strict workspace Clippy clean; 1,826 default + 2,003 CRDT library tests; - dispatch seams 14/14; multi-root 13/13; M4 121; required GPU 155; - **isolated-config workspace sweep 3,188 across 93 suites, zero - failures**; `git diff --check` clean. + dispatch seams 15/15 on Linux (14 on macOS — see below); multi-root + 13/13; M4 121; required GPU 155; **isolated-config workspace sweep + 3,189 across 93 suites, zero failures**; `git diff --check` clean. +- **Two flakes/portability facts from CI round 1, both worth keeping:** + 1. `composition_overhead_under_ten_percent` tripped once in a local + sweep at 18.8% against a 10% budget, then passed 3/3 in isolation + here, passed in isolation on main, and passed a full sweep rerun. + The tell is in its own output: the same run reported realistic-frame + overhead as **-4.6%**, and a negative figure is measurement noise, + not added work. Load-sensitive under a parallel `--workspace` run. + 2. **A non-UTF-8 filename fixture cannot be built on macOS.** APFS + enforces valid UTF-8, so `std::fs::write` fails with EILSEQ + ("Illegal byte sequence") before the code under test is reached. + `#[cfg(unix)]` is NOT sufficient for such a fixture — + `#[cfg(target_os = "linux")]` is. Cost one red CI round to learn. ## Dired lane — framing APPROVED; Stage 0 MERGED, Stage 1 next diff --git a/tests/lsp_dispatch_seams_acceptance.rs b/tests/lsp_dispatch_seams_acceptance.rs index bc0b40d..f644367 100644 --- a/tests/lsp_dispatch_seams_acceptance.rs +++ b/tests/lsp_dispatch_seams_acceptance.rs @@ -679,10 +679,20 @@ fn acc34b_falsified_by_a_resolver_that_skips_canonicalization() { // server-affinity key via `file_uri_for` and would silently fail to // round-trip. Bites against the `display()` form, which returns a // non-nil string for this fixture. +// +// **Linux-gated, and `cfg(unix)` was not enough** — CI caught that. +// APFS enforces valid UTF-8 in filenames, so on macOS the `write` below +// fails with EILSEQ ("Illegal byte sequence") before the code under test +// is ever reached: the fixture cannot be built there. That is a +// filesystem refusing to represent the case, not a behavioral +// difference — the subject itself, `to_str()` returning None, is +// platform-independent Rust. Gated explicitly rather than skipped at +// runtime, so a future failure here is a real failure and not a silent +// no-op. // --------------------------------------------------------------------------- #[test] -#[cfg(unix)] +#[cfg(target_os = "linux")] fn acc34a_canonicalize_declines_a_non_utf8_resolution() { use std::ffi::OsStr; use std::os::unix::ffi::OsStrExt as _;