From 884a2c39448cc5e4880974425f3232fdcd63b97f Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 20 Sep 2026 21:00:13 +0200 Subject: [PATCH] fix(canary): point the launchers at a binary that exists and is instrumented `/sylph-canary` was dead at both ends, measured rather than assumed: * `run-canary-safe.sh` runs the Wine build and defaults to `xenia_canary_i2d.exe`, which DOES NOT EXIST. The `xenia_canary.exe` that does (2026-06-19) has ZERO strings for `audit_61_branch_probe_pcs` and zero for `RE-INPUT`/`RE-DRAW` -- it predates all our instrumentation, and refreshing it needs the clang-cl + xwin toolchain on `cross-build-wine`. * both native launchers defaulted to `xenia-canary-native/build/bin/Linux/Release/xenia_canary`. That directory does not exist on this workspace -- the checkout is `xenia-canary/` -- and Release is not even a target in that build tree (`ninja -n` lists 0 steps), so its binary is frozen at 2026-08-28, before the probe. Native launchers now default to `xenia-canary/build/bin/Linux/Checked/xenia_canary`: the config this tree can actually build, rebuilt today with the audit_61 probe (Canary PR #2), verified by `strings` -- audit_61 8 hits, RE-INPUT/RE-DRAW 4. `Checked` is optimised WITH assertions, which is what a behavioural reference should be: a bad state stops loudly rather than being sampled. The Wine launcher now ABORTS with the reason and points at the native one, instead of failing somewhere downstream on a missing file. Co-Authored-By: Claude Opus 5 (1M context) --- tools/run-canary-native-safe.sh | 13 ++++++++++++- tools/run-canary-native.sh | 13 ++++++++++++- tools/run-canary-safe.sh | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/tools/run-canary-native-safe.sh b/tools/run-canary-native-safe.sh index ab9b7cdb..5ed5ea59 100755 --- a/tools/run-canary-native-safe.sh +++ b/tools/run-canary-native-safe.sh @@ -32,7 +32,18 @@ export ALSA_CONFIG_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/asound-nu # Paths derive from where this script sits — see the note in run-canary-safe.sh. HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORKSPACE="$(cd "$HERE/../.." && pwd)" -BIN_DEFAULT="$WORKSPACE/xenia-canary-native/build/bin/Linux/Release/xenia_canary" +# 🔴 THE INSTRUMENTED BINARY IS THE `Checked` ONE, and it is the only config this +# build tree can produce: `ninja -n bin/Linux/Release/xenia_canary` lists ZERO +# steps, so Release is not a target here and its binary still dates from +# 2026-08-28, before the audit_61 probe existed. Pointing at Release therefore +# runs an oracle with no probe and no way to refresh it. +# +# The old default named `xenia-canary-native/`, a directory that does not exist +# on this workspace at all -- the checkout is `xenia-canary/`. +# +# `Checked` is optimised WITH assertions, which is what you want from a +# behavioural reference: a bad state stops loudly instead of being sampled. +BIN_DEFAULT="$WORKSPACE/xenia-canary/build/bin/Linux/Checked/xenia_canary" BIN_EXE="${CANARY_BIN:-$BIN_DEFAULT}" ISO="${SYLPHEED_ISO:-$WORKSPACE/Project Sylpheed - Arc of Deception (USA, Europe) (En,Ja).iso}" [ -f "$ISO" ] || { echo "ABORT: no ISO at '$ISO' — set \$SYLPHEED_ISO"; exit 4; } diff --git a/tools/run-canary-native.sh b/tools/run-canary-native.sh index 19db4705..7d207e9c 100755 --- a/tools/run-canary-native.sh +++ b/tools/run-canary-native.sh @@ -24,7 +24,18 @@ set -u # Paths derive from where this script sits — see the note in run-canary-safe.sh. HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORKSPACE="$(cd "$HERE/../.." && pwd)" -BIN_DEFAULT="$WORKSPACE/xenia-canary-native/build/bin/Linux/Release/xenia_canary" +# 🔴 THE INSTRUMENTED BINARY IS THE `Checked` ONE, and it is the only config this +# build tree can produce: `ninja -n bin/Linux/Release/xenia_canary` lists ZERO +# steps, so Release is not a target here and its binary still dates from +# 2026-08-28, before the audit_61 probe existed. Pointing at Release therefore +# runs an oracle with no probe and no way to refresh it. +# +# The old default named `xenia-canary-native/`, a directory that does not exist +# on this workspace at all -- the checkout is `xenia-canary/`. +# +# `Checked` is optimised WITH assertions, which is what you want from a +# behavioural reference: a bad state stops loudly instead of being sampled. +BIN_DEFAULT="$WORKSPACE/xenia-canary/build/bin/Linux/Checked/xenia_canary" BIN_EXE="${CANARY_BIN:-$BIN_DEFAULT}" ISO="${SYLPHEED_ISO:-$WORKSPACE/Project Sylpheed - Arc of Deception (USA, Europe) (En,Ja).iso}" [ -f "$ISO" ] || { echo "ABORT: no ISO at '$ISO' — set \$SYLPHEED_ISO"; exit 4; } diff --git a/tools/run-canary-safe.sh b/tools/run-canary-safe.sh index 108ee28e..5d7d62b3 100755 --- a/tools/run-canary-safe.sh +++ b/tools/run-canary-safe.sh @@ -57,7 +57,22 @@ rm -f xenia.log # Binary is overridable (default keeps the historical _i2d snapshot); extra # cvars pass through via CANARY_EXTRA_ARGS (space-separated, values w/o spaces). +# ⚠️ THIS WINE BUILD HAS NO INSTRUMENTATION AND CANNOT BE REFRESHED HERE. +# Measured 2026-09-20: `xenia_canary_i2d.exe` does not exist at all, and the +# `xenia_canary.exe` that does (2026-06-19) has ZERO hits for both +# `audit_61_branch_probe_pcs` and `RE-INPUT`/`RE-DRAW`. Rebuilding it needs the +# clang-cl + xwin cross toolchain on the `cross-build-wine` branch. +# +# 🔴 FOR PROBE RUNS USE `run-canary-native-safe.sh` INSTEAD -- same hard Vulkan +# gate, same headless behaviour, and it runs the Checked native binary, which +# carries audit_61 and the RE-INPUT/RE-DRAW logging. BIN_EXE="${CANARY_BIN:-xenia_canary_i2d.exe}" +if [ ! -f "$BIN/$BIN_EXE" ]; then + echo "ABORT: no Wine binary at $BIN/$BIN_EXE" >&2 + echo " This build is stale and uninstrumented; use run-canary-native-safe.sh" >&2 + echo " for anything needing audit_61 or the RE-* logging." >&2 + exit 4 +fi args=(--log_level=3 --mute=true) [ -n "$PROBES" ] && args+=("--audit_61_branch_probe_pcs=$PROBES") if [ -n "${CANARY_EXTRA_ARGS:-}" ]; then