migration: preserve ladder and rotation slice
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# 切片 04:市场天梯与板块轮动
|
||||
|
||||
> 基线:`b3555d2`(切片 03)
|
||||
> 回档标签:`xiaobai-preservation-slice-04-20260731`
|
||||
> 结论:源码、API、真实页面和浏览器回归通过;最终视觉仍等待全站人工验收
|
||||
|
||||
## 1. 原实现归位
|
||||
|
||||
本切片从原版副本机械移动板块轮动服务,没有从 `next/` 取用代码,也没有修改天梯、轮动的计算、
|
||||
排序、展开、配色、页面结构或交互。
|
||||
|
||||
| 原位置 | 新的唯一实现位置 | 原位置兼容 |
|
||||
|---|---|---|
|
||||
| `app/backend/application.py` 的 2 个轮动方法 | `app/backend/features/rotation/service.py` | `DashboardService` 继承 `RotationServiceMixin` |
|
||||
| Tushare Provider 的天梯与轮动构造函数 | 保持 `app/backend/data/providers/tushare_client.py` | 切片 02 已归位的公共数据实现 |
|
||||
|
||||
市场天梯没有独立后端 API 或第二套计算,直接展示 `/api/dashboard` 中原 Tushare 实现生成的
|
||||
`ladders`;因此没有为目录形式建立空的天梯服务。
|
||||
|
||||
## 2. 等价证据
|
||||
|
||||
- `test_preservation_slice_ladder_rotation.py` 对 2 个轮动服务方法逐项执行无位置信息 AST 比较,
|
||||
全部与根目录原版 `server.py` 完全相同。
|
||||
- `_build_ladders` 与 `_build_sector_rotation` 两个原数据构造函数的 AST 与根目录原版完全相同。
|
||||
- 原版 `8784` 与迁移版 `8785` 在相同账号、日期和数据库副本上返回的天梯数据及 9 日轮动历史
|
||||
JSON 逐字段完全相同。
|
||||
- 成分股接口在当前外部网络状态下两版均返回 HTTP 400、`bad_request` 和相同的
|
||||
`该板块成分股暂不可用:Tushare request failed:`,没有改变错误或增加静默降级。
|
||||
- `config/api.config.json`、API 路径、鉴权、数据库 schema 和 `app/static/` 未修改。
|
||||
|
||||
## 3. 真实运行检查
|
||||
|
||||
- 市场天梯:8 个层级(含断层)、18 个首屏股票单元格、3 个结构分析模块正常;1920×1080 下
|
||||
页面宽度无溢出,首板展开入口保留。
|
||||
- 板块轮动:9 个交易日、每日 Top 12 共 108 个板块单元格、由远到近/由近到远两个排序入口正常;
|
||||
1920×1080 下页面宽度无溢出并保持全页滚动。
|
||||
- 日间模式页面控制台没有错误或警告。
|
||||
- `app-light-ladder-1920x1080.png` SHA-256:
|
||||
`9e57d18d92e745fd92131f7bf08f21faaaa745476dd942cdaa2a703b9a7a303a`。
|
||||
- `app-light-rotation-1920x1080.png` SHA-256:
|
||||
`03c092bb40bd0eb672136dff853abffc87e9790840107c2f22e6cf31d5f83c09`。
|
||||
|
||||
## 4. 自动验证
|
||||
|
||||
| 验证 | 结果 |
|
||||
|---|---:|
|
||||
| `python -m unittest discover -s tests -q` | 252 项通过 |
|
||||
| `python -m unittest tests.test_preservation_slice_ladder_rotation -q` | 4 项通过 |
|
||||
| 切片 02 至 04 与总览缓存专项集合 | 24 项通过 |
|
||||
| `npx.cmd playwright test --reporter=dot` | 45 项通过 |
|
||||
| `git diff --check` | 通过 |
|
||||
|
||||
## 5. 保留边界
|
||||
|
||||
- 成分股接口依赖的日行情与因子持久化方法仍由原 `ReviewDatabase` 提供,因其同时服务智能选股,
|
||||
待切片 06 随完整共享职责归位。
|
||||
- 天梯和轮动前端资产保持原位,切片 10 再按页面职责归档;当前没有复制或改写。
|
||||
- 没有删除待定代码、没有改动根目录正式数据库、没有切换 Docker/NAS。
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 139 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 198 KiB |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"updated_at": "2026-07-31T01:38:00+08:00",
|
||||
"updated_at": "2026-07-31T01:57:00+08:00",
|
||||
"status": "active",
|
||||
"migration_mode": "behavior_preserving_source_migration",
|
||||
"source_of_truth": "current_original_webapp_runtime_and_source",
|
||||
@@ -9,10 +9,10 @@
|
||||
"failed_roots": [
|
||||
"next"
|
||||
],
|
||||
"current_slice": "slice-04-ladder-rotation",
|
||||
"last_completed_slice": "slice-03-sentiment-pools-performance",
|
||||
"last_checkpoint": "xiaobai-preservation-slice-03-20260731",
|
||||
"next_action": "capture_slice-04_ladder_rotation_contracts_then_move_original_implementations",
|
||||
"current_slice": "slice-05-auction-themes-popularity-dragon-tiger",
|
||||
"last_completed_slice": "slice-04-ladder-rotation",
|
||||
"last_checkpoint": "xiaobai-preservation-slice-04-20260731",
|
||||
"next_action": "capture_slice-05_auction_theme_popularity_dragon_tiger_contracts_then_move_original_implementations",
|
||||
"authoritative_documents": [
|
||||
"AGENTS.md",
|
||||
"docs/migration/原版保真迁移总纲.md",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 小白复盘保真迁移账本
|
||||
|
||||
> 当前状态:正式迁移,切片03“情绪周期、五类股池与涨停表现”已完成
|
||||
> 当前状态:正式迁移,切片04“市场天梯与板块轮动”已完成
|
||||
|
||||
本账本是上下文恢复和人工审计的连续记录。任何迁移提交必须在同一提交中更新本文件及
|
||||
`保真迁移状态.json`。
|
||||
@@ -23,6 +23,7 @@
|
||||
| 2026-07-31 | `xiaobai-preservation-slice-01-20260731` | 启动、HTTP、账号、会员与系统管理原实现归位 | 自动差分通过,进入切片02 |
|
||||
| 2026-07-31 | `xiaobai-preservation-slice-02-20260731` | 公共行情、搜索、详情、图表与数据适配原实现归位 | 自动与浏览器差分通过,进入切片03 |
|
||||
| 2026-07-31 | `xiaobai-preservation-slice-03-20260731` | 情绪周期、五类股池与涨停表现原实现归位 | 自动、API与浏览器差分通过,进入切片04 |
|
||||
| 2026-07-31 | `xiaobai-preservation-slice-04-20260731` | 市场天梯与板块轮动原实现归位 | 自动、API与浏览器差分通过,进入切片05 |
|
||||
|
||||
## 资产处置登记
|
||||
|
||||
@@ -40,6 +41,8 @@
|
||||
| `sentiment_engine.py` | 情绪周期计算 | 总览、轮动、选股 | 移动并保留兼容别名 | `app/backend/features/sentiment/engine.py` | 文件哈希与原版一致;248项Python与45项Playwright通过 | 已移动 |
|
||||
| `DashboardService`情绪及股池原因方法 | 业务服务 | 情绪页、五类股池、涨停表现 | 按职责机械移动 | `app/backend/features/sentiment/`、`app/backend/features/pools/` | 8个方法AST与原版一致;真实API完全一致 | 已移动 |
|
||||
| `ReviewDatabase`原因覆盖方法 | 持久化 | 股池原因人工覆盖 | 按职责机械移动 | `app/backend/features/pools/repository.py` | 2个方法AST与原版一致;数据库schema哈希一致 | 已移动 |
|
||||
| `DashboardService`板块轮动方法 | 业务服务 | 板块轮动页 | 按职责机械移动 | `app/backend/features/rotation/service.py` | 2个方法AST、真实API与原版一致 | 已移动 |
|
||||
| Tushare天梯与轮动构造函数 | 公共数据计算 | 市场天梯、板块轮动 | 原位置保持唯一实现 | `app/backend/data/providers/tushare_client.py` | 2个构造函数AST与原版一致 | 已归位 |
|
||||
|
||||
处置只允许:`原样保留`、`移动`、`合并重复`、`待定`、`确认废弃`。
|
||||
|
||||
@@ -87,6 +90,16 @@
|
||||
- 回档:标签`xiaobai-preservation-slice-03-20260731`。
|
||||
- 完整证据:`docs/migration/evidence/slice-03/README.md`。
|
||||
|
||||
已完成切片:`slice-04-ladder-rotation`。
|
||||
|
||||
- 原版基线:提交`b3555d2`,即切片03回档点。
|
||||
- 迁移范围:2个板块轮动服务方法;市场天梯继续使用切片02已归位的原Tushare数据构造实现。
|
||||
- 兼容边界:`DashboardService`通过`RotationServiceMixin`保持所有原调用;天梯不制造空服务或第二套计算。
|
||||
- API与错误:天梯与9日轮动历史JSON完全一致;成分股两版均返回同一Tushare外部失败语义。
|
||||
- 验收:252项Python测试、4项切片源码等价测试、45项Playwright测试及两个真实页面流程通过。
|
||||
- 回档:标签`xiaobai-preservation-slice-04-20260731`。
|
||||
- 完整证据:`docs/migration/evidence/slice-04/README.md`。
|
||||
|
||||
## 决策记录
|
||||
|
||||
| 日期 | 决策 | 原因 |
|
||||
|
||||
Reference in New Issue
Block a user