#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp" WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs" SDK_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_sdk.mjs" STATE_MATRIX="$ROOT_DIR/tests/wasm/node/verify_task_state_matrix.mjs" SOURCE_REUSE="$ROOT_DIR/docs/source-reuse-map.md" DRIFT="$ROOT_DIR/docs/drift-report.md" COMPAT="$ROOT_DIR/docs/compatibility-validation.md" MATRIX="$ROOT_DIR/working/04-任务矩阵.md" fail() { printf 'task_standalone_emc_status_status=fail\n' printf 'task_standalone_emc_status_error=%s\n' "$1" exit 1 } require_file() { local label="$1" local file="$2" [[ -f "$file" ]] || fail "$label missing: $file" printf 'task_standalone_emc_status_%s=ok\n' "$label" } require_text() { local label="$1" local file="$2" local text="$3" grep -Fq "$text" "$file" || fail "$label missing" printf 'task_standalone_emc_status_%s=ok\n' "$label" } require_file task_wrapper "$TASK_WRAPPER" require_file wasm_test "$WASM_TEST" require_file sdk_test "$SDK_TEST" require_file state_matrix "$STATE_MATRIX" require_file source_reuse "$SOURCE_REUSE" require_file drift "$DRIFT" require_file compatibility "$COMPAT" require_file matrix "$MATRIX" require_text wrapper_status_struct "$TASK_WRAPPER" "struct StandaloneEmcStatus" require_text wrapper_task_struct "$TASK_WRAPPER" "struct StandaloneEmcTaskStatus" require_text wrapper_motion_struct "$TASK_WRAPPER" "struct StandaloneEmcMotionStatus" require_text wrapper_io_struct "$TASK_WRAPPER" "struct StandaloneEmcIoStatus" require_text wrapper_sync "$TASK_WRAPPER" "sync_standalone_emc_status" require_text wrapper_status_source "$TASK_WRAPPER" 'statusSource' require_text wrapper_emc_status_json "$TASK_WRAPPER" 'emcStatus' require_text wrapper_task_from_container "$TASK_WRAPPER" "const StandaloneEmcTaskStatus &task_status = emc_status.task" require_text wrapper_motion_from_container "$TASK_WRAPPER" "const StandaloneEmcMotionStatus &motion = emc_status.motion" require_text wasm_status "$WASM_TEST" "standalone_emc_status_container=ok" require_text wasm_source "$WASM_TEST" 'snapshot.statusSource, "StandaloneEmcStatus"' require_text wasm_top_match "$WASM_TEST" "snapshot.emcStatus.top.status, snapshot.taskTopLevelStatus" require_text wasm_motion_match "$WASM_TEST" "snapshot.emcStatus.motion.programLine, snapshot.motionStatus.motion.programLine" require_text sdk_status "$SDK_TEST" "task_hal_sdk_standalone_emc_status=ok" require_text sdk_source "$SDK_TEST" 'status.statusSource, "StandaloneEmcStatus"' require_text state_matrix_status "$STATE_MATRIX" "standalone_emc_status_matrix=ok" require_text state_matrix_helper "$STATE_MATRIX" "function assertStandaloneEmcStatus(status)" require_text docs_source "$SOURCE_REUSE" 'T-007 adds `StandaloneEmcStatus`' require_text docs_drift "$DRIFT" "T-007 StandaloneEmcStatus" require_text docs_compat_gate "$COMPAT" "tools/verify_task_standalone_emc_status.sh" require_text docs_compat_status "$COMPAT" "standalone_emc_status_container=ok" require_text matrix_t007_done "$MATRIX" '| T-007 | 建立 `EMC_STAT` 等价状态容器 | 完成 |' require_text matrix_next_none "$MATRIX" '下一条优先任务:无' printf 'task_standalone_emc_status_status=ok\n'