rebuild(migration): audit all legacy data
This commit is contained in:
@@ -2,18 +2,20 @@
|
||||
|
||||
## 交付边界
|
||||
|
||||
- 旧系统只作为只读来源;真实演练源为 `data/review.db`,目标为新建的 `next/data/stage14-migrated.db`。
|
||||
- 旧系统只作为只读来源;真实演练源为 `data/review.db`,目标为系统临时目录中的全新数据库。
|
||||
- 迁移逻辑仅存在于一次性工具 `tools/legacy_migration.py`,正常应用不导入旧系统代码或旧数据库。
|
||||
- 新 Docker、备份和恢复资产仅位于 `next/`,没有停止、修改或替换 NAS 正式容器。
|
||||
|
||||
## 真实迁移结果
|
||||
|
||||
- 源库 SHA-256:`b7c444359c3b9b201a47ce6b23e55ad7ca4eba3d9dd67dfc8544b575d43f4924`。
|
||||
- 源库 SHA-256:`5dda9e1538acb7efbcc6a7dbdf201978699daf03ff4ccef4d0677732f2e2f1ab`。正式切换时必须先停写并重新生成最终哈希。
|
||||
- SQLite `integrity_check=ok`,外键违规 0。
|
||||
- 3 个账号与会员状态、1 份出生资料、2 项系统数据凭据、3 个模型配置均已转换。
|
||||
- 6 条自选、3 条复盘、2 条提醒、28 条问师消息、45 条问师偏好、31 条问天历史均已迁移并保留账号归属。
|
||||
- 196 次历史选股与 16 条手动策略跟踪已迁移;每个历史交易日使用明确标注的归档因子快照,不伪造旧因子覆盖率。
|
||||
- 5,534 个股票目录、261 个交易日、24 份市场摘要、5,567 份最近 90 根日 K 展示归档和 24 份兼容市场洞察已迁移。
|
||||
- 5,534 个股票目录、394 个题材目录、261 个交易日、25 份市场摘要、5,579 份股票/题材日 K 展示归档和 47 份兼容市场洞察已迁移。
|
||||
- 286 条 iFinD 事件原因修订、9 份板块成分股快照、12 份题材详情及成分股、14 个龙虎榜历史日期和 110 份游资档案可被新业务服务直接读取。
|
||||
- 真实源库 36 张业务表及 24 种快照全部被分类;未分类表和未分类快照均为 0。报告同时记录逐表源行数、完整目标表行数和每项主动舍弃原因。
|
||||
- 真实账号密码验证、管理员与永久会员状态、模型选择、问天历史和选股历史抽验通过。
|
||||
- 逐项机器报告见 `real-migration-report.json`,报告不含明文令牌或模型密钥。
|
||||
|
||||
@@ -23,6 +25,7 @@
|
||||
- 已取消的用户自主 LLM 配置不迁移。
|
||||
- 旧原始因子表不复制成兼容表;由新系统受治理的数据同步和因子任务重建。
|
||||
- 旧指数行仅有收盘价,缺少新图表契约要求的 OHLC,未伪造成指数 K 线。
|
||||
- 旧库 36 条无用户归属的内置策略不复制;它们由当前唯一版本化产品策略目录取代。用户自建策略才进入 `custom_screener_strategies`,196 次历史运行结果仍完整保留。
|
||||
- 日 K 展示归档每个标的保留最近 90 根;旧全量数据库和一致性备份继续作为审计资产保留。
|
||||
|
||||
## 备份恢复演练
|
||||
@@ -43,9 +46,9 @@
|
||||
## 质量门
|
||||
|
||||
- Ruff:通过。
|
||||
- pytest:96 项通过。
|
||||
- pytest:106 项通过。
|
||||
- Vue 类型检查:通过。
|
||||
- Vitest:3 个文件、7 项通过。
|
||||
- Vite 生产构建:通过,CSS 89.25KB,JS 279.23KB,均为构建前原始体积。
|
||||
- Playwright:17 项通过,单 worker,耗时 53.6 秒。
|
||||
- Vite 生产构建:通过,CSS 92.40KB,JS 299.80KB,均为构建前原始体积。
|
||||
- Playwright:26 项通过,单 worker,耗时 147.3 秒。
|
||||
- `git diff --check` 与已知令牌/密码扫描:通过。
|
||||
|
||||
@@ -1,51 +1,209 @@
|
||||
{
|
||||
"source": "C:\\Users\\MoBai\\Documents\\gupiaofupan\\webapp\\data\\review.db",
|
||||
"target": "C:\\Users\\MoBai\\Documents\\gupiaofupan\\webapp\\next\\data\\stage14-migrated.db",
|
||||
"source_sha256": "b7c444359c3b9b201a47ce6b23e55ad7ca4eba3d9dd67dfc8544b575d43f4924",
|
||||
"target_sha256": "9b0ca7faed7a15b4099bd09ae7a0c94b52a0c8a7dbfedb9d2b26bdf47e34d5d2",
|
||||
"target": "C:\\Users\\MoBai\\AppData\\Local\\Temp\\xiaobai-next-migration-evidence-aa6d37d29f7a4a77994b04de8b3b3e22.db",
|
||||
"source_sha256": "5dda9e1538acb7efbcc6a7dbdf201978699daf03ff4ccef4d0677732f2e2f1ab",
|
||||
"target_sha256": "615992f425bbbc304e9fea8e7d34c42ab8ef7d99156757864bbbc50c80886987",
|
||||
"integrity": "ok",
|
||||
"foreign_key_violations": 0,
|
||||
"migrated": {
|
||||
"alerts": 2,
|
||||
"birth_profiles": 1,
|
||||
"chart_series": 5567,
|
||||
"chart_series": 5579,
|
||||
"heaven_readings": 31,
|
||||
"llm_models": 3,
|
||||
"llm_usage_daily": 9,
|
||||
"market_entities": 5534,
|
||||
"market_insight_snapshots": 24,
|
||||
"market_summaries": 24,
|
||||
"market_event_revisions": 286,
|
||||
"market_insight_snapshots": 47,
|
||||
"market_summaries": 25,
|
||||
"memberships": 3,
|
||||
"mentor_messages": 28,
|
||||
"mentor_preferences": 45,
|
||||
"review_notes": 3,
|
||||
"screener_runs": 196,
|
||||
"sector_member_snapshots": 9,
|
||||
"strategy_tracks": 16,
|
||||
"system_credentials": 2,
|
||||
"trading_days": 261,
|
||||
"users": 3,
|
||||
"watchlist_entries": 6
|
||||
},
|
||||
"target_counts": {
|
||||
"users": 3,
|
||||
"memberships": 3,
|
||||
"market_entities": 5537,
|
||||
"market_summaries": 24,
|
||||
"chart_series": 5567,
|
||||
"watchlist_entries": 6,
|
||||
"review_notes": 3,
|
||||
"trade_entries": 0,
|
||||
"source_tables": {
|
||||
"alerts": 2,
|
||||
"mentor_messages": 28,
|
||||
"assistant_messages": 0,
|
||||
"auction_factors": 505070,
|
||||
"benchmark_bars": 260,
|
||||
"daily_bars": 1424973,
|
||||
"daily_indicators": 764710,
|
||||
"dashboard_snapshots": 25,
|
||||
"data_snapshots": 422,
|
||||
"earnings_events": 580,
|
||||
"fundamental_indicators": 49481,
|
||||
"heaven_readings": 31,
|
||||
"job_runs": 1101,
|
||||
"lhb_institution_daily": 47,
|
||||
"llm_usage": 72,
|
||||
"mentor_messages": 28,
|
||||
"mentor_preferences": 45,
|
||||
"moneyflow_daily": 31175,
|
||||
"popularity_factors": 232,
|
||||
"reason_overrides": 0,
|
||||
"review_notes": 3,
|
||||
"schema_migrations": 3,
|
||||
"screener_runs": 196,
|
||||
"custom_screener_strategies": 0,
|
||||
"strategy_tracks": 16
|
||||
"screener_strategies": 36,
|
||||
"seat_aliases": 0,
|
||||
"sector_phase_overrides": 0,
|
||||
"stock_master": 5534,
|
||||
"strategy_tracks": 16,
|
||||
"sync_runs": 21053,
|
||||
"system_settings": 1,
|
||||
"trade_entries": 0,
|
||||
"user_birth_profiles": 1,
|
||||
"user_credentials": 1,
|
||||
"user_sessions": 207,
|
||||
"users": 3,
|
||||
"watchlist": 6,
|
||||
"wencai_saved_queries": 0
|
||||
},
|
||||
"intentionally_skipped": {
|
||||
"sessions": "sessions are intentionally invalidated during cutover",
|
||||
"handled_tables": [
|
||||
"alerts",
|
||||
"assistant_messages",
|
||||
"daily_bars",
|
||||
"dashboard_snapshots",
|
||||
"data_snapshots",
|
||||
"heaven_readings",
|
||||
"llm_usage",
|
||||
"mentor_messages",
|
||||
"mentor_preferences",
|
||||
"reason_overrides",
|
||||
"review_notes",
|
||||
"screener_runs",
|
||||
"screener_strategies",
|
||||
"seat_aliases",
|
||||
"stock_master",
|
||||
"strategy_tracks",
|
||||
"system_settings",
|
||||
"trade_entries",
|
||||
"user_birth_profiles",
|
||||
"users",
|
||||
"watchlist"
|
||||
],
|
||||
"intentionally_skipped_tables": {
|
||||
"auction_factors": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"benchmark_bars": "legacy rows lack OHLC values required by the chart contract",
|
||||
"daily_indicators": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"earnings_events": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"fundamental_indicators": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"job_runs": "legacy operational logs are not user-facing history",
|
||||
"lhb_institution_daily": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"moneyflow_daily": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"popularity_factors": "governed provider inputs are rebuilt by scheduled jobs",
|
||||
"schema_migrations": "legacy implementation metadata does not apply to the new schema",
|
||||
"sector_phase_overrides": "sector phase overrides are no longer product-configurable",
|
||||
"sync_runs": "legacy operational logs are not user-facing history",
|
||||
"user_credentials": "per-user LLM configuration was removed from the product",
|
||||
"raw_factor_tables": "reproducible provider inputs are rebuilt by governed sync jobs",
|
||||
"benchmark_bars": "legacy rows lack OHLC values required by the chart contract"
|
||||
"user_sessions": "sessions are intentionally invalidated during cutover",
|
||||
"wencai_saved_queries": "the WenCai feature was explicitly removed from the product"
|
||||
},
|
||||
"unmapped_tables": [],
|
||||
"source_snapshot_kinds": {
|
||||
"auction_center_v1": 2,
|
||||
"auction_center_v2": 1,
|
||||
"auction_center_v3": 1,
|
||||
"auction_center_v4": 1,
|
||||
"auction_center_v5": 5,
|
||||
"auction_center_v6": 3,
|
||||
"dashboard_request_v1": 2,
|
||||
"dragon_tiger": 7,
|
||||
"heaven_indices": 14,
|
||||
"heaven_sector": 65,
|
||||
"heaven_stock": 2,
|
||||
"hot_money_detail_v2": 8,
|
||||
"hot_money_detail_v3": 7,
|
||||
"hot_money_profiles_v1": 1,
|
||||
"ifind_event_enrichment_v1": 4,
|
||||
"popularity_v1": 7,
|
||||
"rotation_sector_members_v1": 9,
|
||||
"screener_auto_v1": 3,
|
||||
"search_directory": 1,
|
||||
"stock_detail": 256,
|
||||
"stock_intraday": 3,
|
||||
"theme_detail_v1": 12,
|
||||
"theme_directory_v1": 1,
|
||||
"theme_library_v1": 7
|
||||
},
|
||||
"handled_snapshot_kinds": [
|
||||
"auction_center_v1",
|
||||
"auction_center_v2",
|
||||
"auction_center_v3",
|
||||
"auction_center_v4",
|
||||
"auction_center_v5",
|
||||
"auction_center_v6",
|
||||
"dragon_tiger",
|
||||
"hot_money_detail_v2",
|
||||
"hot_money_detail_v3",
|
||||
"hot_money_profiles_v1",
|
||||
"ifind_event_enrichment_v1",
|
||||
"popularity_v1",
|
||||
"rotation_sector_members_v1",
|
||||
"theme_detail_v1",
|
||||
"theme_directory_v1",
|
||||
"theme_library_v1"
|
||||
],
|
||||
"intentionally_skipped_snapshot_kinds": {
|
||||
"dashboard_request_v1": "request cache is superseded by archived dashboard snapshots",
|
||||
"heaven_indices": "rebuildable input cache; saved Heaven readings are migrated",
|
||||
"heaven_sector": "rebuildable input cache; saved Heaven readings are migrated",
|
||||
"heaven_stock": "rebuildable input cache; saved Heaven readings are migrated",
|
||||
"screener_auto_v1": "derived cache is superseded by migrated screener runs",
|
||||
"search_directory": "search data is rebuilt from the migrated entity directory",
|
||||
"stock_detail": "rebuildable display cache",
|
||||
"stock_intraday": "rebuildable realtime display cache"
|
||||
},
|
||||
"unmapped_snapshot_kinds": [],
|
||||
"intentionally_skipped_rows": {
|
||||
"screener_strategies_builtin": {
|
||||
"count": 36,
|
||||
"reason": "legacy built-ins are superseded by the single versioned product catalog; only user-created strategies are migrated"
|
||||
}
|
||||
},
|
||||
"target_counts": {
|
||||
"alerts": 2,
|
||||
"birth_profiles": 1,
|
||||
"chart_series": 5579,
|
||||
"custom_screener_strategies": 0,
|
||||
"heaven_readings": 31,
|
||||
"job_runs": 0,
|
||||
"llm_attempts": 0,
|
||||
"llm_configuration": 1,
|
||||
"llm_models": 3,
|
||||
"llm_requests": 0,
|
||||
"llm_usage_daily": 9,
|
||||
"market_entities": 5931,
|
||||
"market_event_revisions": 286,
|
||||
"market_insight_snapshots": 47,
|
||||
"market_summaries": 25,
|
||||
"memberships": 3,
|
||||
"mentor_messages": 28,
|
||||
"mentor_preferences": 45,
|
||||
"review_assistant_messages": 0,
|
||||
"review_notes": 3,
|
||||
"schema_migrations": 12,
|
||||
"screener_factor_snapshots": 10,
|
||||
"screener_factor_values": 0,
|
||||
"screener_run_backtests": 0,
|
||||
"screener_runs": 196,
|
||||
"seat_aliases": 0,
|
||||
"sector_member_snapshots": 9,
|
||||
"sessions": 0,
|
||||
"strategy_track_bars": 0,
|
||||
"strategy_track_events": 0,
|
||||
"strategy_tracks": 16,
|
||||
"system_credentials": 2,
|
||||
"trade_entries": 0,
|
||||
"trading_days": 261,
|
||||
"users": 3,
|
||||
"watchlist_entries": 6
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user