diff --git a/scripts/run/dev.sh b/scripts/run/dev.sh index f7c51e70..9335a94c 100644 --- a/scripts/run/dev.sh +++ b/scripts/run/dev.sh @@ -80,9 +80,35 @@ cmd_test() { echo -e "${BLUE}Running vitest (guide)...${NC}" pnpm --prefix "$GUIDE_DIR" test || exit_code=$? + echo "" + echo -e "${BLUE}Running stability test (20s game boot)...${NC}" + _run_stability_test || exit_code=$? + return $exit_code } +_run_stability_test() { + # Uses the existing screenshot pipeline to boot the game, navigate to + # world_map, wait 20s, and capture a screenshot. If the game crashes + # before the screenshot is taken, the test fails. + local STABILITY_LOG="$REPO_ROOT/.project/logs/stability_$(date +%Y%m%d_%H%M%S).log" + mkdir -p "$(dirname "$STABILITY_LOG")" + "$REPO_ROOT/tools/screenshot.sh" "stability_test" "world_map" "20" > "$STABILITY_LOG" 2>&1 + local RESULT=$? + if [ $RESULT -ne 0 ]; then + echo -e "${RED}FAIL: Stability test failed (exit code $RESULT)${NC}" + tail -10 "$STABILITY_LOG" | grep -E "SCRIPT ERROR|ERROR:" | head -5 + return 1 + fi + if grep -q "SCREENSHOT_PATH:" "$STABILITY_LOG"; then + echo -e "${GREEN}PASS: Game stable for 20s, screenshot captured${NC}" + return 0 + else + echo -e "${RED}FAIL: Game ran but no screenshot captured${NC}" + return 1 + fi +} + cmd_verify() { local -a step_names step_times step_results local overall_exit=0