#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT_DIR" fail() { local message="$1" local details="${2:-}" printf '[FAIL] %s\n' "$message" >&2 if [[ -n "$details" ]]; then printf '%s\n' "$details" >&2 fi exit 1 } runtime_hits="$( rg -n \ --glob '!**/.git/**' \ --glob '!**/target/**' \ --glob '!**/docs/**' \ --glob '!**/*.md' \ --glob '!**/tests/**' \ --glob '!**/*test*.rs' \ --glob '!crates/fidc-core/src/strategy_ai.rs' \ --glob '!scripts/verify-no-legacy-data-source.sh' \ 'fidatacenter|FIDATACENTER|/v1/backtest/data|/v1/xuntou|ClickHouse|clickhouse|CLICKHOUSE' \ crates Cargo.toml \ 2>/dev/null || true )" if [[ -n "$runtime_hits" ]]; then fail "legacy fidatacenter/ClickHouse runtime data source references are not allowed in fidc-backtest-engine" "$runtime_hits" fi manifest_hits="$( rg -n --glob '!scripts/verify-no-legacy-data-source.sh' '\b(mysql|mariadb|clickhouse|clickhouse-rs|mysql_async|sqlx-mysql)\b' Cargo.toml crates 2>/dev/null || true )" if [[ -n "$manifest_hits" ]]; then fail "legacy database dependencies are not allowed in fidc-backtest-engine manifests" "$manifest_hits" fi local_only_hits="$( rg -n \ --glob '!**/.git/**' \ --glob '!**/target/**' \ --glob '!**/docs/**' \ --glob '!**/*.md' \ --glob '!**/tests/**' \ --glob '!**/*test*.rs' \ --glob '!crates/fidc-core/src/strategy_ai.rs' \ --glob '!scripts/verify-no-legacy-data-source.sh' \ 'FICLAW_DATA_AGENT_URL|ficlaw_data\.source_rows_v1|strategy-factory-source-lake://local' \ crates Cargo.toml \ 2>/dev/null || true )" if [[ -n "$local_only_hits" ]]; then fail "legacy or local-only data source references are not allowed in fidc-backtest-engine runtime" "$local_only_hits" fi fused_hits="$( rg -n \ --glob '!**/.git/**' \ --glob '!**/target/**' \ --glob '!**/docs/**' \ --glob '!**/*.md' \ --glob '!**/tests/**' \ --glob '!**/*test*.rs' \ --glob '!crates/fidc-core/src/strategy_ai.rs' \ --glob '!scripts/verify-no-legacy-data-source.sh' \ 'exported_fused|fidc_fused|fusion|fused|wide_table|wide table|source_rows_export|exported_daily|merged_daily|daily_merged|merged_source|materialized[_ -]source|materialized_source_rows|source_rows_materialized|融合表|融合宽表' \ crates Cargo.toml \ 2>/dev/null || true )" if [[ -n "$fused_hits" ]]; then fail "exported fused tables are not allowed in fidc-backtest-engine runtime; use Strategy Factory Source Lake source rows directly" "$fused_hits" fi truth_csv_hits="$( rg -n \ --glob '!**/.git/**' \ --glob '!**/target/**' \ --glob '!**/docs/**' \ --glob '!**/*.md' \ --glob '!**/tests/**' \ --glob '!**/*test*.rs' \ --glob '!crates/fidc-core/src/strategy_ai.rs' \ --glob '!scripts/verify-no-legacy-data-source.sh' \ 'FIDC_BT_TRUTH_STOCK_LIST_CSV|OMNI_BT_TRUTH_STOCK_LIST_CSV|OMNI_BACKTEST_TRUTH_STOCK_LIST_CSV|selection_source=truth_csv|truth_stock_list|truth_csv' \ crates Cargo.toml \ 2>/dev/null || true )" if [[ -n "$truth_csv_hits" ]]; then fail "CSV truth stock-list overrides are not allowed in fidc-backtest-engine runtime; use Source Lake runtime spec selection only" "$truth_csv_hits" fi printf '[OK] fidc-backtest-engine has no legacy runtime data-source references\n'