# 阶段 8 验收记录

## 交付范围

- 集合竞价：盘前归档、9:15 至 9:25 动态观察、9:25 选定和盘后归档状态；重点异动、我的自选、全部候选、竞价一字四组数据及成交额多日对比。
- 题材库：题材排名、行情状态、成分股明细和题材悬浮日 K/分时预览；行情缺失与成分股缺失分别表达。
- 人气热榜：同花顺、东方财富和双榜共识独立呈现；单一来源不会伪装成双榜共识。
- 龙虎榜：官方上榜数、游资操作明细、未识别席位和游资档案；档案采用左侧列表与右侧详情，不打开长弹窗。

## 数据与生命周期

- 外部行情仍只通过 `DataGateway` 进入业务层。正式计算使用 iFinD 动态竞价和 Tushare 权威归档数据，公开网页源不进入确定性计算。
- 动态竞价不可用时不会把前一交易日归档伪装成当日实时结果；携带旧归档时明确标记日期、状态和说明。
- 竞价一字板使用供应商给出的当日真实涨停价判定，因此同时覆盖新规 ST 10% 涨跌幅，不在业务代码硬编码 5%。
- 竞价成交额摘要与多日图形使用同一个标准化股票集合，避免同日数字口径不一致。
- 龙虎榜区分无上榜、明细缺失、席位全部未识别、请求不可用和部分/完整识别状态，不用统一空态掩盖数据链路问题。
- 席位别名持久化后直接重算已归档操作，不重新请求外部数据。

## 账号边界

- 竞价市场快照不保存任何用户私有字段。
- “我的自选”在响应时依据当前已认证账号单独读取并合成，两个账号无法读取彼此的自选记录。
- 自选股表由独立的版本 6 Migration 建立，避免修改已经执行的历史迁移。

## 自动验收

- Ruff：通过。
- Pytest：58 项通过，其中包含竞价生命周期、口径、四类龙虎榜状态、Migration 前进/回退和自选股跨账号隔离。
- Vue TypeScript 检查：通过。
- Vitest：2 个文件、5 项通过。
- Vite 生产构建：通过。
- Playwright：6 项通过，覆盖阶段 4 至 8 的完整回归、日间/夜间、1920x1080 和 390x844 视口。
- 浏览器控制台无未处理错误，390px 页面无横向溢出。
- 敏感值扫描：已提供账号密码和令牌未进入 `next/`。
- `git diff --check`：通过。

## 视觉证据

- `auction-light-1920x1080.jpg`：集合竞价日间桌面视图。
- `popularity-dark-1920x1080.jpg`：人气热榜夜间桌面视图。
- `dragon-profiles-dark-390x844.jpg`：游资档案夜间移动视图。

## 减法证据

- 四个页面共用唯一市场洞察服务、统一表格列定义和现有行情预览组件，没有复制页面专属 API 客户端或图表实现。
- 竞价共享归档与用户自选在服务端边界合成，不建立每用户一份重复市场快照。
- 新增页面最长 108 行，页面样式 168 行；后端最长纯计算模块 492 行，均在章程门禁内。
- 没有复制旧系统巨型文件、供应商客户端、通用 CRUD、通用缓存或兼容层。

## 剩余边界

- 阶段 9 才迁移智能选股、36 套策略、自定义选股和持续跟踪，本阶段没有预建空策略框架。
- 外部数据是否可用仍取决于管理员凭据和供应商权限；缺少权威数据时保持失败关闭，不生成模拟结果。
- NAS 生产容器保持不变，最终切换仍需人工明确确认。
