---
name: gate-cross-platform-leg
description: Windows-only wave-final gate misses platform-dependent test bugs — path-semantics-sensitive waves need a Linux leg before declaring PASS
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 66c61acf-bb34-4e39-8679-20cd1dd1cafd
  modified: 2026-08-25T01:02:27.136Z
---

A wave-final gate run only on Windows (1505/1505 green) let a deterministic Linux test failure through to the v0.22.0 release PR (2026-07-03): `resolve_endpoint_drop_dir_cases` hardcoded `Path::new("C:/abs/drop")`, which `is_absolute()` accepts on Windows but rejects on Linux — first cross-platform run was the PR's kitsubito CI leg, which blocked the cut.

**Why:** `Path::is_absolute()` and path-separator semantics differ per-OS; a green single-platform suite proves nothing about tests (or code) that feed literal paths through platform-sensitive APIs.

**SECOND HIT — F-030 v0.25.0 cut (2026-07-04), same class, different mechanism.** All 6 F-030 waves gated GREEN on Windows-only (hfenduleam) across 8 gate runs; PR #51 CI's kitsubito Linux leg caught 2 DETERMINISTIC failures in the wave-HEART conformance ints (psyche_context_file_e2e:129 + psyche_residency_expectation_e2e:137). Root: the tests' `#[cfg(unix)]` mock-manifest branch builds `command='sh -c '...' _ {key}'` — a `sh -c '...'` (single-quoted) wrapped in a TOML SINGLE-QUOTE LITERAL → the literal closes at the sh-c opening quote → `TomlError "expected newline"` → the test's own manifest-build `.unwrap()` panics. The `#[cfg(windows)]` branch used `.bat`/`cmd` (no nested single quotes) so it parsed clean and passed every Windows gate. Fix = TOML multiline-literal `'''...'''` (single quotes legal inside) on the unix branch. LESSON HARDENED: a shell/argv/mock-fixture wave is cfg-sensitive even when NO path literal is involved — the whole `#[cfg(unix)]` fixture branch is INVISIBLE to a Windows gate. My 8 independent gates all skipped it.

**THIRD HIT — SIGNET golden 32790838399 (2026-08-24), same class, new arm: CLIPPY, not tests.** My W2 gate PASS at ad3347ad ran clippy `-D warnings` cold on WINDOWS only. `authseam.rs:45` defined `BACKEND_KIND_HELLO_RS256` ungated while its only uses live inside `#[cfg(windows)] mod hello` (sibling `KEY_NAME` at :56 WAS gated — an asymmetry, todlando's own commit e4761f26). On Windows the const is live, clippy green; on Linux it is dead code → `-D warnings` refuses → the golden's Linux clippy step was the run's red. NO TEST can catch this class on either OS — the crate compiles and tests green everywhere; it is a lint, so the blind spot is specifically a one-OS CLIPPY arm, and the Linux TEST leg alone would not have caught it either. Both arms on one sha measured the split (Windows clippy step green, Linux red). Gate lesson as deployah put it: the Windows-only gate was narrow, not wrong. Rider (deployah, same incident): when a clippy `--all-targets` pass ABORTS at crate Y, "X compiled before Y failed" constrains only what Y actually NEEDED — X's lib targets. Test/bench targets are nobody's dependency, so they sit in the unlinted residual along with the non-dependency crates; the flag that makes the lint reach further is the same flag that makes build-order inference weaker. Pre-register that residual before the re-arm so a second red reads as "never-yet-linted crate", not "fix incomplete".

**How to apply:** When gating a wave that touches path resolution / filesystem semantics OR any `cfg`-sensitive code OR shell/mock-command test fixtures, include a Linux verification leg before PASS — and for any wave introducing or touching `#[cfg]`-gated items, the Linux leg must include a CLIPPY `-D warnings` arm, not just tests (third hit: a cfg-asymmetric item is a dead-code lint on the other OS, invisible to every test). Grep the wave diff for cfg-gated items whose siblings/uses are gated differently — kitsubito via CI on a pushed sha, or [[kitsubito-linux-rig]] scratch build. Grep the wave diff for (a) drive-letter literals (`"[A-Za-z]:[/\\]`) feeding `Path` APIs and (b) `#[cfg(unix)]`/`#[cfg(windows)]`-split test fixtures — ANY cfg-split mock command/manifest means the other platform's branch never ran; gate BOTH. Demand `cfg!(windows)`-gated fixtures parse on both OSes. Windows-green is necessary-not-sufficient for shell-fixture / path-semantic waves. Kin [[gate-clean-target-not-incremental]].
