Files
rose-ash/hosts/ocaml/browser/bisect_sxbc.sh
giles 9dd90eba7f Remove cssx.sx references from WASM test scripts
cssx.sx was deleted in the CSSX → ~tw migration. The test scripts
(test_wasm.sh, test_wasm_native.js, bisect_sxbc.sh) still referenced
it, causing ENOENT during WASM build step 5.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:06:42 +00:00

106 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# bisect_sxbc.sh — Binary search for which .sxbc file breaks reactive rendering.
# Runs test_wasm.sh with SX_TEST_BYTECODE=1, toggling individual files between
# bytecode and source to find the culprit.
set -euo pipefail
cd "$(dirname "$0")/../../.."
SXBC_DIR="shared/static/wasm/sx"
BACKUP_DIR="/tmp/sxbc-bisect-backup"
# All .sxbc files in load order
FILES=(
render core-signals signals deps router page-helpers freeze
bytecode compiler vm dom browser
adapter-html adapter-sx adapter-dom
boot-helpers hypersx
harness harness-reactive harness-web
engine orchestration boot
)
# Backup all sxbc files
mkdir -p "$BACKUP_DIR"
for f in "${FILES[@]}"; do
cp "$SXBC_DIR/$f.sxbc" "$BACKUP_DIR/$f.sxbc" 2>/dev/null || true
done
# Test function: returns 0 if the reactive scoped test passes
test_passes() {
local result
result=$(SX_TEST_BYTECODE=1 bash hosts/ocaml/browser/test_wasm.sh 2>&1) || true
if echo "$result" | grep -q "scoped static class"; then
# Test mentioned = it failed
return 1
else
return 0
fi
}
# Restore all bytecodes
restore_all() {
for f in "${FILES[@]}"; do
cp "$BACKUP_DIR/$f.sxbc" "$SXBC_DIR/$f.sxbc" 2>/dev/null || true
done
}
# Remove specific bytecodes (force source loading for those)
remove_sxbc() {
for f in "$@"; do
rm -f "$SXBC_DIR/$f.sxbc"
done
}
echo "=== Bytecode bisect: finding which .sxbc breaks reactive rendering ==="
echo " ${#FILES[@]} files to search"
echo ""
# First: verify all-bytecode fails
restore_all
echo "--- All bytecode (should fail) ---"
if test_passes; then
echo "UNEXPECTED: all-bytecode passes! Nothing to bisect."
exit 0
fi
echo " Confirmed: fails with all bytecode"
# Second: verify all-source passes
for f in "${FILES[@]}"; do rm -f "$SXBC_DIR/$f.sxbc"; done
echo "--- All source (should pass) ---"
if ! test_passes; then
echo "UNEXPECTED: all-source also fails! Bug is not bytecode-specific."
restore_all
exit 1
fi
echo " Confirmed: passes with all source"
# Binary search: find minimal set of bytecode files that causes failure
# Strategy: start with all source, add bytecode files one at a time
echo ""
echo "=== Individual file test ==="
culprits=()
for f in "${FILES[@]}"; do
# Start from all-source, add just this one file as bytecode
for g in "${FILES[@]}"; do rm -f "$SXBC_DIR/$g.sxbc"; done
cp "$BACKUP_DIR/$f.sxbc" "$SXBC_DIR/$f.sxbc"
if test_passes; then
printf " %-20s bytecode OK\n" "$f"
else
printf " %-20s *** BREAKS ***\n" "$f"
culprits+=("$f")
fi
done
# Restore
restore_all
echo ""
if [ ${#culprits[@]} -eq 0 ]; then
echo "No single file causes the failure — it's a combination."
echo "Run with groups to narrow down."
else
echo "=== CULPRIT FILE(S): ${culprits[*]} ==="
echo "These .sxbc files individually cause the reactive rendering to break."
fi