# 切片 10：前端 Shell、页面、样式与移动端职责归位

> 基线：`38de3de`（切片 09）
> 回档标签：`xiaobai-preservation-slice-10-20260731`
> 结论：源码、静态资产、API、数据库、桌面/移动页面及动画差分通过；最终视觉仍等待全站人工验收

## 1. 原实现归位

本切片只移动和拆分原版前端源码，没有从`next/`取用代码，也没有重写页面、样式、动画、交互或响应式规则。

| 原位置 | 新位置 | 处理方式 |
|---|---|---|
| `static/index.html` | `app/frontend/index.html` | 原 DOM 骨架，仅调整静态资源路径和拆分脚本加载顺序 |
| `static/app.js` | `app/frontend/app.js`、`pages/*/page.js`、`pages/market/runtime.js`、`shared/export.js` | 按连续源码行机械拆分 |
| `static/styles.css`等公共样式 | `app/frontend/styles/` | 字节级移动 |
| `static/wentian-v2.css` | `app/frontend/pages/heaven/page.css` | 字节级移动 |
| `static/ui-core.js` | `app/frontend/shared/ui-core.js` | 字节级移动 |
| `static/heaven-loading-v2.js` | `app/frontend/pages/heaven/loading-v2.js` | 字节级移动 |
| `static/pages/`、`shared/`、`vendor/` | `app/frontend/`同职责目录 | 字节级移动 |

`app/backend/bootstrap/config.py`现在只把静态根目录从`app/static/`切换到`app/frontend/`。原`app/static/`已不再存在，避免形成两套可被误改的前端实现。

## 2. 源码与静态资产等价

- 原`static/app.js`共 9,283 行，SHA-256 为`c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6`。
- 所有拆分文件中的保真源码片段按原行号重组后，SHA-256仍为同一值，9,283行无遗漏、无重排、无内容变化。
- 七层原版样式、问天样式、加载动画、共享脚本、页面注册脚本及Lucide供应商文件在移动后保持字节一致。
- `index.html`的差异仅限资源新路径和两个机械拆分脚本入口；反向替换后与原版逐字符一致。
- 浏览器请求仍只有`shared/api.js`一个`fetch`出口。
- 完整行号映射见`frontend-source-map.json`；拆分工具为`app/tools/split_frontend_runtime.py`，可重复验证但不用于运行时构建。

## 3. API 与数据库差分

- 同一管理员账号和同一固定日期下，对原版与迁移版执行21个全站只读请求。
- 请求覆盖账号、行情、情绪、轮动、竞价、题材、人气、龙虎榜、选股、问师、问天、复盘与提醒；状态码和规范化业务JSON全部一致。
- 两个数据库副本均包含62个schema对象，schema哈希一致。
- 21张关键表的记录数、顺序和规范化内容逐行一致；`screener_strategies`仅排除每次初始化可能更新的`updated_at`。
- 完整结果见`api-requests.json`、`api-diff.json`和`database-diff.json`，两份差分文件的`all_equal`均为`true`。

## 4. 真实浏览器差分

- 1920×1080日间模式检查情绪周期、智能选股、观势、观气、观心介绍及观心呼吸。
- 1920×1080夜间模式检查情绪周期的背景、字体、表格、几何和横向溢出。
- 390×844检查情绪周期与观势：移动Shell、底部五入口、页面纵向滚动、无横向溢出及问天特效均一致。
- 观势星空节点90个、观气100个、观心110个；三页八卦节点均为2个。
- 观势与观气保留`wt-tw`和`wt-spin`动画；观心呼吸保留`heart-incense-burn`、`heart-incense-glow`及动态波纹。
- 观气五行行业为5组且默认折叠；观心介绍到呼吸流程可正常进入。
- 原版和迁移版检查流程均未产生新增控制台error或warn。
- 动画帧、焦点框和动态状态文字属于采样瞬时状态，因此截图文件哈希不要求相同；可见布局几何、计算样式、节点、动画名称和交互结果必须一致，本次均通过。
- 两个服务使用相同主机名、不同端口时会共享并覆盖登录Cookie；曾导致迁移版切页被误判为失效。逐服务重新登录后行为一致，该问题属于并行验收环境限制，不是产品回归。
- 2026-08-01像素复核发现`frontend-migrated-auction-light-1920x1080`实际截取了登录状态失效页，
  不能证明集合竞价视觉等价，文件已重命名为`INVALID-login-session`。集合竞价仍有切片05真实页面、
  本切片源码/样式保真、API及Playwright证据，但最终视觉明确留待人工验收，不以替代证据冒充
  本切片截图差分。
- 机器可读记录见`browser-acceptance.json`，截图均保存在本目录。

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

| 验证 | 结果 |
|---|---:|
| 前端专项测试 | 85项通过 |
| 原版`python -m unittest discover -s tests -q` | 231项通过 |
| 迁移版`python -m unittest discover -s tests -q` | 294项通过 |
| `npx.cmd playwright test --reporter=dot` | 45项通过（2.3分钟） |
| 全部拆分后JavaScript执行`node --check` | 通过 |
| `git diff --check` | 通过 |

- `demo_data.py`、`frontend/heaven-loading.js`、五个疑似无引用前端函数和`wencai_saved_queries`继续保留到切片11逐项审计。
- 没有修改`next/`、正式数据库、Docker/NAS或`8765`服务。
- 自动差分只能证明已检查范围一致；依据迁移总纲，未经用户最终人工确认不得宣称全站视觉已经完全等价。
