---
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
---

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.

**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 — 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]].
