# 切片 06：智能选股、自定义选股与策略持续跟踪

> 基线：`cf2aad2`（切片 05）
> 回档标签：`xiaobai-preservation-slice-06-20260731`
> 结论：源码、API、数据库、真实页面和全量回归通过；最终视觉仍等待全站人工验收

## 1. 原实现归位

本切片只机械移动原版选股实现，没有从`next/`取用代码，也没有改写策略、因子、权重、排序、
盘后候选或跟踪逻辑。

| 原位置 | 新的唯一实现位置 | 兼容方式 |
|---|---|---|
| `app/screener.py` | `app/backend/features/screener/engine.py` | 根级模块指向同一模块对象 |
| `app/advanced_strategies.py` | `app/backend/features/screener/strategies.py` | 根级模块指向同一模块对象 |
| `app/llm_strategy.py` | `app/backend/features/screener/compiler.py` | 根级模块指向同一模块对象 |
| `DashboardService`选股入口 | `app/backend/features/screener/service.py` | `ScreenerServiceMixin` |
| `ReviewDatabase`选股持久化方法 | `app/backend/features/screener/repository.py` | `ScreenerRepositoryMixin` |
| 原策略持续跟踪服务 | `app/backend/features/screener/tracking.py` | 容器直接导入唯一实现 |

四个同时服务公共行情与选股的方法归入`MarketRepositoryMixin`，没有复制第二套实现：
`upsert_stock_master`、`list_stock_master`、`upsert_daily_bars`、`daily_bars_for_date`。

## 2. 源码与接口等价

- `test_preservation_slice_screener.py`逐项验证选股引擎、29套策略定义、自然语言策略编译器、
  13个服务方法、25个选股持久化方法和跟踪服务与原版等价。
- 三个根级兼容模块与正式模块暴露同一模块及类对象；原类不再重复保留已移动方法。
- 原版与迁移版的`/api/screener/setup`、`/api/screener/tracking`和`/api/screener/run`
  状态码及业务JSON一致。
- 差分仅规范化策略启动刷新和顺序执行必然变化的数组顺序与`updated_at`；其他字段仍逐项比较。
- 请求与差分结果见`api-requests.json`和`api-diff.json`。

## 3. 数据库差分

- 两个临时副本均为62个schema对象，结构完全一致。
- 13张关键表逐行一致，覆盖约143万条日线、77万条技术指标和51万条竞价因子。
- `screener_runs`两边均为251行；会话和运行时间戳只在临时副本内规范化。
- 正式`data/review.db`和`app/data/review.db`未写入测试策略、测试会话或差分时间戳。
- 完整表计数与哈希见`database-diff.json`。

## 4. 真实浏览器检查

- 已登录迁移版真实服务，分别检查阶段选股、策略选股、自定义选股和策略持续跟踪。
- 阶段选股显示退潮、置信度92%、匹配策略和262日因子就绪状态；策略选股载入29套策略。
- 自定义选股保留因子权重、过滤条件、公式入口、手动执行和独立候选结果。
- 跟踪页只展示手动加入的候选，批次、标的、T+1/T+3进度、胜率和移除操作均正常。
- 各检查状态无横向溢出、无加载遮罩残留，浏览器控制台无错误。
- 截图SHA-256：
  - `curated-screener.jpg`：`529ecd0947b34b42eb63d166c6804b0041e26fa362a171e4d0d7b584e073c05e`
  - `custom-screener.jpg`：`7f31f50d44bc63a488277be0a74232e2ac256779d0accda42b96cc1eef88cc6e`
  - `tracking.jpg`：`b19b1bc0cd4a98c29500917676bdcc4cc9a430a0c72dea8aff1110ad911db6e3`

## 5. 自动验证与保留边界

| 验证 | 结果 |
|---|---:|
| 原版`python -m unittest discover -s tests -q` | 231项通过 |
| 迁移版`python -m unittest discover -s tests -q` | 265项通过 |
| `python -m unittest tests.test_preservation_slice_screener -q` | 7项通过 |
| `npx.cmd playwright test --reporter=dot` | 45项通过 |
| `git diff --check` | 通过 |

- Windows下由Playwright自行创建静态服务器时存在子进程不退出的测试基线问题；复用独立的8876
  测试服务器后45项用例在2.1分钟内通过并正常返回退出码0。
- 选股引擎保留原版数据客户端依赖，边界测试将其与普通页面Service区分；后续只可在不改变行为且有
  独立差分证据时治理该依赖。
- 前端资产保持原位置，切片10再按页面职责归档；本切片没有改DOM、CSS、动画或交互。
- 没有删除待定代码、没有修改正式数据库、没有切换Docker/NAS。
