diff --git a/scripts/bulk_strategy_regenerate.py b/archive/scripts/bulk_strategy_regenerate.py similarity index 100% rename from scripts/bulk_strategy_regenerate.py rename to archive/scripts/bulk_strategy_regenerate.py diff --git a/scripts/check_db_paths.py b/archive/scripts/check_db_paths.py similarity index 100% rename from scripts/check_db_paths.py rename to archive/scripts/check_db_paths.py diff --git a/scripts/check_imports.py b/archive/scripts/check_imports.py similarity index 100% rename from scripts/check_imports.py rename to archive/scripts/check_imports.py diff --git a/scripts/check_key_levels.py b/archive/scripts/check_key_levels.py similarity index 100% rename from scripts/check_key_levels.py rename to archive/scripts/check_key_levels.py diff --git a/scripts/check_price_monitor.py b/archive/scripts/check_price_monitor.py similarity index 100% rename from scripts/check_price_monitor.py rename to archive/scripts/check_price_monitor.py diff --git a/scripts/check_prices.py b/archive/scripts/check_prices.py similarity index 100% rename from scripts/check_prices.py rename to archive/scripts/check_prices.py diff --git a/scripts/check_schema.py b/archive/scripts/check_schema.py similarity index 100% rename from scripts/check_schema.py rename to archive/scripts/check_schema.py diff --git a/scripts/check_todos_schema.py b/archive/scripts/check_todos_schema.py similarity index 100% rename from scripts/check_todos_schema.py rename to archive/scripts/check_todos_schema.py diff --git a/scripts/close_audit.py b/archive/scripts/close_audit.py similarity index 100% rename from scripts/close_audit.py rename to archive/scripts/close_audit.py diff --git a/scripts/data_freshness.py b/archive/scripts/data_freshness.py similarity index 100% rename from scripts/data_freshness.py rename to archive/scripts/data_freshness.py diff --git a/scripts/data_snapshot.py b/archive/scripts/data_snapshot.py similarity index 100% rename from scripts/data_snapshot.py rename to archive/scripts/data_snapshot.py diff --git a/scripts/data_validate.py b/archive/scripts/data_validate.py similarity index 100% rename from scripts/data_validate.py rename to archive/scripts/data_validate.py diff --git a/scripts/deep_check_01888.py b/archive/scripts/deep_check_01888.py similarity index 100% rename from scripts/deep_check_01888.py rename to archive/scripts/deep_check_01888.py diff --git a/scripts/diagnose_assets.py b/archive/scripts/diagnose_assets.py similarity index 100% rename from scripts/diagnose_assets.py rename to archive/scripts/diagnose_assets.py diff --git a/scripts/final_verify.py b/archive/scripts/final_verify.py similarity index 100% rename from scripts/final_verify.py rename to archive/scripts/final_verify.py diff --git a/scripts/fix_and_regenerate.py b/archive/scripts/fix_and_regenerate.py similarity index 100% rename from scripts/fix_and_regenerate.py rename to archive/scripts/fix_and_regenerate.py diff --git a/scripts/fix_currency_and_summary.py b/archive/scripts/fix_currency_and_summary.py similarity index 100% rename from scripts/fix_currency_and_summary.py rename to archive/scripts/fix_currency_and_summary.py diff --git a/scripts/fix_decisions_currency.py b/archive/scripts/fix_decisions_currency.py similarity index 100% rename from scripts/fix_decisions_currency.py rename to archive/scripts/fix_decisions_currency.py diff --git a/scripts/fix_hk_cost_cny.py b/archive/scripts/fix_hk_cost_cny.py similarity index 100% rename from scripts/fix_hk_cost_cny.py rename to archive/scripts/fix_hk_cost_cny.py diff --git a/scripts/fix_portfolio_prices.py b/archive/scripts/fix_portfolio_prices.py similarity index 100% rename from scripts/fix_portfolio_prices.py rename to archive/scripts/fix_portfolio_prices.py diff --git a/scripts/fix_self_todo_path.py b/archive/scripts/fix_self_todo_path.py similarity index 100% rename from scripts/fix_self_todo_path.py rename to archive/scripts/fix_self_todo_path.py diff --git a/scripts/fix_summary.py b/archive/scripts/fix_summary.py similarity index 100% rename from scripts/fix_summary.py rename to archive/scripts/fix_summary.py diff --git a/scripts/fix_todos_db.py b/archive/scripts/fix_todos_db.py similarity index 100% rename from scripts/fix_todos_db.py rename to archive/scripts/fix_todos_db.py diff --git a/scripts/fix_trigger.py b/archive/scripts/fix_trigger.py similarity index 100% rename from scripts/fix_trigger.py rename to archive/scripts/fix_trigger.py diff --git a/scripts/inject_xiaoguo_insight.py b/archive/scripts/inject_xiaoguo_insight.py similarity index 100% rename from scripts/inject_xiaoguo_insight.py rename to archive/scripts/inject_xiaoguo_insight.py diff --git a/scripts/inspect_decisions.py b/archive/scripts/inspect_decisions.py similarity index 100% rename from scripts/inspect_decisions.py rename to archive/scripts/inspect_decisions.py diff --git a/scripts/json_validation.py b/archive/scripts/json_validation.py similarity index 100% rename from scripts/json_validation.py rename to archive/scripts/json_validation.py diff --git a/scripts/migrate_all.py b/archive/scripts/migrate_all.py similarity index 100% rename from scripts/migrate_all.py rename to archive/scripts/migrate_all.py diff --git a/scripts/phase1_schema.py b/archive/scripts/phase1_schema.py similarity index 100% rename from scripts/phase1_schema.py rename to archive/scripts/phase1_schema.py diff --git a/scripts/post_mortem.py b/archive/scripts/post_mortem.py similarity index 100% rename from scripts/post_mortem.py rename to archive/scripts/post_mortem.py diff --git a/scripts/price_data_inject.py b/archive/scripts/price_data_inject.py similarity index 100% rename from scripts/price_data_inject.py rename to archive/scripts/price_data_inject.py diff --git a/scripts/process_trade.py b/archive/scripts/process_trade.py similarity index 100% rename from scripts/process_trade.py rename to archive/scripts/process_trade.py diff --git a/scripts/quick_verify.py b/archive/scripts/quick_verify.py similarity index 100% rename from scripts/quick_verify.py rename to archive/scripts/quick_verify.py diff --git a/scripts/regenerate_strategies.py b/archive/scripts/regenerate_strategies.py similarity index 100% rename from scripts/regenerate_strategies.py rename to archive/scripts/regenerate_strategies.py diff --git a/scripts/rollback_currency.py b/archive/scripts/rollback_currency.py similarity index 100% rename from scripts/rollback_currency.py rename to archive/scripts/rollback_currency.py diff --git a/scripts/test_api.py b/archive/scripts/test_api.py similarity index 100% rename from scripts/test_api.py rename to archive/scripts/test_api.py diff --git a/scripts/test_interval.py b/archive/scripts/test_interval.py similarity index 100% rename from scripts/test_interval.py rename to archive/scripts/test_interval.py diff --git a/scripts/test_ratelimit.py b/archive/scripts/test_ratelimit.py similarity index 100% rename from scripts/test_ratelimit.py rename to archive/scripts/test_ratelimit.py diff --git a/scripts/update_data.py b/archive/scripts/update_data.py similarity index 100% rename from scripts/update_data.py rename to archive/scripts/update_data.py diff --git a/scripts/verify_01888.py b/archive/scripts/verify_01888.py similarity index 100% rename from scripts/verify_01888.py rename to archive/scripts/verify_01888.py diff --git a/scripts/verify_pnl.py b/archive/scripts/verify_pnl.py similarity index 100% rename from scripts/verify_pnl.py rename to archive/scripts/verify_pnl.py diff --git a/scripts/verify_self_todo.py b/archive/scripts/verify_self_todo.py similarity index 100% rename from scripts/verify_self_todo.py rename to archive/scripts/verify_self_todo.py diff --git a/static/mofin_health.json b/static/mofin_health.json index 7b0cb24e..4fb9710a 100644 --- a/static/mofin_health.json +++ b/static/mofin_health.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-07-08 23:53:36", + "generated_at": "2026-07-09 00:18:34", "feature_tree": { "label": "MoFin 系统", "status": "ok", @@ -877,21 +877,6 @@ } ] }, - { - "label": "系统健康检查-每日 (system_health_check.py)", - "status": "ok", - "pipes": [ - { - "name": "系统健康检查-每日", - "script": "system_health_check.py", - "schedule": "0 9 * * 1-5", - "status": "ok", - "last_run": "2026-07-08T09:01", - "type": "no_agent", - "profile": "position-analyst" - } - ] - }, { "label": "区间维护 (None)", "status": "unknown", @@ -983,11 +968,9 @@ "desc": "建议准确率统计", "rows": 1, "readers": [ - "migrate_all", "mofin_db" ], "writers": [ - "migrate_all", "strategy_review" ], "has_input": true, @@ -1001,12 +984,10 @@ "desc": "建议执行时间线", "rows": 12735, "readers": [ - "migrate_all", - "mofin_db", - "advice_reconciliation" + "advice_reconciliation", + "mofin_db" ], "writers": [ - "migrate_all", "advice_reconciliation" ], "has_input": true, @@ -1020,34 +1001,28 @@ "desc": "", "rows": 133, "readers": [ - "migrate_all", "mofin_db" ], - "writers": [ - "migrate_all" - ], - "has_input": true, + "writers": [], + "has_input": false, "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "orphan": true, + "flow_status": "read_only", + "warn": true }, { "name": "candidates", "desc": "潜力股候选池(小果扫描产出)", "rows": 12, "readers": [ - "migrate_all", "mofin_db" ], - "writers": [ - "migrate_all" - ], - "has_input": true, + "writers": [], + "has_input": false, "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "orphan": true, + "flow_status": "read_only", + "warn": true }, { "name": "capital_flow_cache", @@ -1070,12 +1045,12 @@ "desc": "资金变动记录", "rows": 15, "readers": [ - "prepare_report_data", - "mofin_db" + "mofin_db", + "prepare_report_data" ], "writers": [ - "mo_data", - "mofin_db" + "mofin_db", + "mo_data" ], "has_input": true, "has_output": true, @@ -1104,25 +1079,21 @@ "desc": "每只股票的完整策略参数", "rows": 37, "readers": [ - "migrate_all", - "rollback_currency", - "system_health_check", - "system_audit", - "mo_data", - "deep_check_01888", - "verify_reassess_pipeline", "mofin_db", + "mo_data", "stale_push_wlin", - "fix_and_regenerate" + "strategy_lifecycle", + "pre-flight-check", + "data_governance", + "run_all_tests", + "mofin_collect", + "sync_decisions_to_db", + "verify_reassess_pipeline" ], "writers": [ "data_governance", - "mofin_db", - "fix_and_regenerate", - "fix_decisions_currency", - "rollback_currency", - "migrate_all", - "sync_decisions_to_db" + "sync_decisions_to_db", + "mofin_db" ], "has_input": true, "has_output": true, @@ -1135,24 +1106,20 @@ "desc": "当前持仓(权威源)", "rows": 19, "readers": [ - "stale_push_wlin", + "mofin_db", "strategy_lifecycle", - "refresh_mtf_cache", - "rollback_currency", + "price_monitor", + "import_holding_xls", "mofin_collect", - "verify_pnl", - "fix_hk_cost_cny", - "trend_detector", - "verify_01888", - "import_holding_xls" + "refresh_mtf_cache", + "mo_data", + "stale_push_wlin", + "prepare_recommendation", + "system_audit" ], "writers": [ - "fix_currency_and_summary", - "mofin_db", "import_holding_xls", - "rollback_currency", - "migrate_all", - "fix_hk_cost_cny" + "mofin_db" ], "has_input": true, "has_output": true, @@ -1165,15 +1132,15 @@ "desc": "所有持仓+自选最新实时价", "rows": 20, "readers": [ - "system_audit", - "mo_data", - "verify_reassess_pipeline", "mofin_db", - "cron_health_monitor" + "mo_data", + "cron_health_monitor", + "verify_reassess_pipeline", + "system_audit" ], "writers": [ - "mo_data", - "mofin_db" + "mofin_db", + "mo_data" ], "has_input": true, "has_output": true, @@ -1186,13 +1153,13 @@ "desc": "宏观上下文(大盘偏向/指数)", "rows": 12, "readers": [ - "stock_profile", - "system_audit", "strategy_tree", "stale_push_wlin", "strategy_lifecycle", "divergence_detector", - "xiaoguo_signal_consumer" + "system_audit", + "xiaoguo_signal_consumer", + "stock_profile" ], "writers": [ "refresh_macro_context" @@ -1208,8 +1175,8 @@ "desc": "宏观新闻原始数据", "rows": 8259, "readers": [ - "system_audit", - "macro_context_collector" + "macro_context_collector", + "system_audit" ], "writers": [ "macro_context_collector" @@ -1225,12 +1192,12 @@ "desc": "大盘指数快照(每10分)", "rows": 548, "readers": [ - "trend_detector", - "system_audit", "mofin_db", - "market_screener", + "trend_detector", "prepare_report_data", - "mofin_query" + "system_audit", + "mofin_query", + "market_screener" ], "writers": [ "mofin_db" @@ -1246,9 +1213,9 @@ "desc": "多周期均线缓存", "rows": 37, "readers": [ - "technical_analysis", "mofin_db", - "multi_timeframe" + "multi_timeframe", + "technical_analysis" ], "writers": [ "mofin_db", @@ -1265,24 +1232,16 @@ "desc": "总资产/现金/仓位汇总", "rows": 1, "readers": [ - "check_prices", - "fix_summary", - "price_monitor", - "fix_currency_and_summary", - "mo_data", - "preflight_verify", "mofin_db", + "mo_data", + "price_monitor", "import_holding_xls", - "check_price_monitor", - "rollback_currency" + "preflight_verify", + "prepare_report_data" ], "writers": [ - "fix_summary", - "fix_currency_and_summary", - "mofin_db", "import_holding_xls", - "rollback_currency", - "migrate_all" + "mofin_db" ], "has_input": true, "has_output": true, @@ -1295,11 +1254,9 @@ "desc": "价格区间突破事件日志", "rows": 2289, "readers": [ - "migrate_all", "mofin_db" ], "writers": [ - "migrate_all", "mofin_db" ], "has_input": true, @@ -1313,15 +1270,15 @@ "desc": "行业信号(趋势检测产出)", "rows": 653, "readers": [ + "trend_detector", "server", "mofin_news", - "xiaoguo_news_processor", - "trend_detector" + "xiaoguo_news_processor" ], "writers": [ - "xiaoguo_news_processor", + "trend_detector", "mofin_news", - "trend_detector" + "xiaoguo_news_processor" ], "has_input": true, "has_output": true, @@ -1334,10 +1291,10 @@ "desc": "行业板块数据", "rows": 44230, "readers": [ - "strategy_lifecycle", - "trend_detector", "mofin_db", - "market_screener" + "trend_detector", + "market_screener", + "strategy_lifecycle" ], "writers": [ "mofin_db" @@ -1353,20 +1310,20 @@ "desc": "信号相关新闻", "rows": 1026, "readers": [ + "server", + "macro_signal_consumer", "intraday_health_check", "system_audit", - "server", - "xiaoguo_signal_consumer", - "macro_signal_consumer" + "xiaoguo_signal_consumer" ], "writers": [ "xiaoguo_news_processor", - "mofin_news", - "xiaoguo_scanner", - "macro_context_collector", + "macro_signal_consumer", "divergence_detector", + "macro_context_collector", "xiaoguo_signal_consumer", - "macro_signal_consumer" + "xiaoguo_scanner", + "mofin_news" ], "has_input": true, "has_output": true, @@ -1395,28 +1352,23 @@ "desc": "日线行情", "rows": 8978, "readers": [ - "migrate_all", "mofin_db" ], - "writers": [ - "migrate_all" - ], - "has_input": true, + "writers": [], + "has_input": false, "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "orphan": true, + "flow_status": "read_only", + "warn": true }, { "name": "stock_fundamentals", "desc": "基本面数据(PE/PB)", "rows": 37, "readers": [ - "strategy_lifecycle", - "migrate_all" + "strategy_lifecycle" ], "writers": [ - "migrate_all", "mofin_db" ], "has_input": true, @@ -1429,32 +1381,26 @@ "name": "stock_monthly", "desc": "月线行情", "rows": 1232, - "readers": [ - "migrate_all" - ], - "writers": [ - "migrate_all" - ], - "has_input": true, - "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "readers": [], + "writers": [], + "has_input": false, + "has_output": false, + "orphan": true, + "flow_status": "orphan", + "warn": true }, { "name": "stock_sectors", "desc": "股票行业映射", "rows": 62, "readers": [ - "xiaoguo_news_processor", - "trend_detector", - "mofin_news", "mofin_db", "strategy_lifecycle", - "migrate_all" + "xiaoguo_news_processor", + "trend_detector", + "mofin_news" ], "writers": [ - "migrate_all", "mofin_db" ], "has_input": true, @@ -1467,31 +1413,25 @@ "name": "stock_weekly", "desc": "周线行情", "rows": 2060, - "readers": [ - "migrate_all" - ], - "writers": [ - "migrate_all" - ], - "has_input": true, - "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "readers": [], + "writers": [], + "has_input": false, + "has_output": false, + "orphan": true, + "flow_status": "orphan", + "warn": true }, { "name": "stocks", "desc": "全量股票代码", "rows": 87, "readers": [ - "xiaoguo_news_processor", + "mofin_db", "trend_detector", "mofin_news", - "mofin_db", - "migrate_all" + "xiaoguo_news_processor" ], "writers": [ - "migrate_all", "mofin_db" ], "has_input": true, @@ -1505,14 +1445,12 @@ "desc": "策略重评历史记录", "rows": 217, "readers": [ - "system_audit", - "migrate_all", + "mofin_db", "verify_reassess_pipeline", - "mofin_db" + "system_audit" ], "writers": [ - "mofin_collect", - "migrate_all" + "mofin_collect" ], "has_input": true, "has_output": true, @@ -1525,17 +1463,14 @@ "desc": "策略效果反馈", "rows": 222, "readers": [ - "migrate_all", "mofin_db" ], - "writers": [ - "migrate_all" - ], - "has_input": true, + "writers": [], + "has_input": false, "has_output": true, - "orphan": false, - "flow_status": "healthy", - "warn": false + "orphan": true, + "flow_status": "read_only", + "warn": true }, { "name": "todos", @@ -1543,17 +1478,17 @@ "rows": 61, "readers": [ "strategy-staleness-check", - "intraday_health_check", "self_todo_executor", - "morning_health_check" + "morning_health_check", + "intraday_health_check" ], "writers": [ - "intraday_health_check", "strategy-staleness-check", "morning_health_check", "preflight_verify", - "self_todo_executor", - "mofin_collect" + "mofin_collect", + "intraday_health_check", + "self_todo_executor" ], "has_input": true, "has_output": true, @@ -1566,21 +1501,20 @@ "desc": "自选股列表", "rows": 43, "readers": [ - "price_monitor", - "trend_detector", - "mo_data", - "stale_detector", "mofin_db", + "mo_data", "stock_quote", "stale_push_wlin", + "price_monitor", "mo_alphasift_bridge", - "refresh_mtf_cache", - "run_all_tests" + "stale_detector", + "run_all_tests", + "trend_detector", + "mofin_collect" ], "writers": [ - "migrate_all", - "per_stock_reassess", - "mofin_db" + "mofin_db", + "per_stock_reassess" ], "has_input": true, "has_output": true, @@ -1766,7 +1700,7 @@ "size_kb": 69.8, "readers": [], "writers": [], - "last_modified": "07-08 23:47", + "last_modified": "07-08 23:53", "warn": true }, { @@ -2038,7 +1972,7 @@ "script": null, "schedule": "0 * * * *", "status": "ok", - "last_run": "2026-07-08T23:04:52", + "last_run": "2026-07-09T00:11:33", "profile": "default" }, { @@ -2065,7 +1999,7 @@ "script": "xiaoguo_quick_scan.py", "schedule": "*/15 * * * *", "status": "ok", - "last_run": "2026-07-08T23:45:20", + "last_run": "2026-07-09T00:15:46", "profile": "default" }, { @@ -2074,7 +2008,7 @@ "script": "xiaoguo_tunnel_watchdog.sh", "schedule": "*/5 * * * *", "status": "error", - "last_run": "2026-07-08T23:52:27", + "last_run": "2026-07-09T00:17:46", "profile": "default" }, { @@ -2164,7 +2098,7 @@ "script": "", "schedule": "{'kind': 'cron', 'expr': '*/10 * * * *'}", "status": "ok", - "last_run": "2026-07-08T23:50:45", + "last_run": "2026-07-09T00:11:19", "profile": "default" }, { @@ -2500,15 +2434,6 @@ "last_run": "2026-07-08T09:32:03", "profile": "position-analyst" }, - { - "name": "系统健康检查-每日", - "type": "no_agent", - "script": "system_health_check.py", - "schedule": "0 9 * * 1-5", - "status": "ok", - "last_run": "2026-07-08T09:01:03", - "profile": "position-analyst" - }, { "name": "系统全局审计", "type": "LLM",