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>
106 lines
2.8 KiB
Bash
Executable File
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
|