Files
xiaobaifupan/app/docs/migration/保真迁移账本.md
T

467 lines
49 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 小白复盘保真迁移账本
> 当前状态:正式源码独立化收口自动验收通过,等待建立并推送最终回档提交
本账本是上下文恢复和人工审计的连续记录。任何迁移提交必须在同一提交中更新本文件及
`保真迁移状态.json`
## 固定事实
- 原版根目录是唯一产品和视觉基线。
- `next/`已被用户否决并冻结,不进入后续迁移。
- 新目标目录由用户批准为`app/`,最终作为正式程序目录。
- 后续采用原代码保真式迁移,不重新实现,不更换技术栈。
- 2026-07-30用户授权在既定约束内自主完成全部迁移,阶段性差异仍必须阻断后续切片。
## 当前检查点
| 日期 | 提交或标签 | 事件 | 结论 |
|---|---|---|---|
| 2026-07-30 | `xiaobai-next-rejected-20260730` | 冻结失败的`next/`实现 | 禁止部署或继续开发 |
| 2026-07-30 | `xiaobai-preservation-migration-charter-20260730` | 建立保真迁移总纲、状态和恢复协议 | 尚未开始新迁移 |
| 2026-07-30 | `41329943c4878fc09ed82ec376eb93ab151e4092` | 完成只读资产清查并由用户批准`app/`结构 | 开始切片00 |
| 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 |
| 2026-07-31 | `xiaobai-preservation-slice-05-20260731` | 集合竞价、题材库、人气热榜与龙虎榜原实现归位 | 自动、API、数据库与浏览器差分通过,进入切片06 |
| 2026-07-31 | `xiaobai-preservation-slice-06-20260731` | 智能选股、自定义选股与策略持续跟踪原实现归位 | 自动、API、数据库与浏览器差分通过,进入切片07 |
| 2026-07-31 | `xiaobai-preservation-slice-07-20260731` | 问师、模型Skill与LLM流式链路原实现归位 | 自动、API、数据库、Skill与浏览器差分通过,进入切片08 |
| 2026-07-31 | `xiaobai-preservation-slice-08-20260731` | 问天、观势、观气与观心原实现归位 | 自动、API、数据库、动画与浏览器差分通过,进入切片09 |
| 2026-07-31 | `xiaobai-preservation-slice-09-20260731` | 复盘、自选、交易日志、提醒与复盘助手原实现归位 | 自动、API、数据库、账户隔离与浏览器差分通过,进入切片10 |
| 2026-07-31 | `xiaobai-preservation-slice-10-20260731` | 前端Shell、页面、CSS、动画与移动端职责归位 | 源码重组、自动、API、数据库、桌面、夜间、移动端与动画差分通过,进入切片11 |
| 2026-07-31 | `xiaobai-preservation-slice-11-candidate-20260731` | 不确定代码审计、全量验收与人工交接准备 | 自动、API、数据库和浏览器验收通过;等待人工确认,未切换部署 |
| 2026-07-31 | `xiaobai-preservation-slice-11-audit-candidate-20260731` | 逐项目标审计并修复候选维护工具旧路径 | 302项测试、24个脚本、45项Playwright、21项API与62项schema差分通过;仍等待人工确认 |
| 2026-08-01 | `xiaobai-preservation-slice-11-audit-candidate-standalone-20260801` | 独立维护与截图证据复核 | 正式仓库305项、独立导出242项测试通过;撤销无效竞价截图;仍等待人工确认 |
| 2026-08-01 | `xiaobai-preservation-complete-20260801` | 用户逐页逐功能验收并完成迁移收尾 | 视觉与功能保真通过;试删确认废弃;本地交付完成,部署未切换 |
| 2026-08-03 | 工作区未提交 | 完成11项核心热点治理及历史保真审计脚手架退役 | 356项Python、全部当前JavaScript、SQLite完整性及46项Playwright通过;等待人工验收 |
| 2026-08-03 | `xiaobai-standalone-closure-20260803` | 正式源码独立化收口与最终回档 | 永久文档归位、父目录依赖清零、289项Python及46项Playwright通过;提交与推送执行中 |
## 资产处置登记
开始清查后,每个资产必须登记,禁止只记录已迁移项而遗漏未处理项。
| 原位置/符号 | 类型 | 消费者 | 处置 | 新位置 | 等价证据 | 状态 |
|---|---|---|---|---|---|---|
| 原版运行源文件(排除`next/`、日志、缓存、构建产物和正式数据库) | 运行资产 | 全站 | 原样保留后逐项移动 | `app/` | 388项受控资产哈希一致;231项Python与45项Playwright测试通过 | 已复制 |
| `next/` | 失败实现 | 无正式消费者 | 原样保留但禁止迁移 | - | 用户冻结决定 | 已冻结 |
| `demo_data.py` | 旧演示代码 | 无运行、动态、配置或兼容消费者 | 确认废弃 | 切片10标签可单项恢复 | 全量自动、API、数据库、浏览器及用户人工验收通过 | 已删除 |
| `static/heaven-loading.js` | 旧动画 | 页面只加载`heaven-loading-v2.js` | 确认废弃 | 切片10标签可单项恢复 | 问天三页加载动画、45项Playwright及用户人工验收通过 | 已删除 |
| `commonReviewColumns`等5个前端函数 | 无引用符号 | 定义外引用为0 | 确认废弃 | 切片10标签可按原行号恢复 | 审计白名单比较、24个JS语法、浏览器流程及用户人工验收通过 | 已删除 |
| `wencai_saved_queries`及其方法 | 历史兼容数据 | 旧库兼容与用户隔离 | 原样保留 | `app/backend/database/`兼容区 | schema及关键表差分一致;清理契约持续保护 | 保留 |
| 现有7层CSS | 视觉运行资产 | 全部页面和主题 | 原样保留后逐页归档 | `app/frontend/` | 必须通过截图与计算样式差分 | 保留 |
| `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与原版一致 | 已归位 |
| `MarketInsightsService` | 共享市场洞察服务 | 集合竞价、题材库、人气热榜 | 整体机械移动,保留唯一共享实现 | `app/backend/features/market/insights.py` | 22个方法AST与原版一致;根级模块为同一类对象别名 | 已移动 |
| `DashboardService`竞价、题材、人气与龙虎榜方法 | 业务服务 | 切片05四类页面与API | 按职责机械移动 | `app/backend/features/auction/``themes/``popularity/``dragon_tiger/` | 8个方法AST、7个真实API与原版一致 | 已移动 |
| `ReviewDatabase`竞价、人气与龙虎榜方法 | 持久化 | 市场洞察及后续智能选股 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/auction/repository.py``popularity/repository.py``dragon_tiger/repository.py` | 7个方法AST一致;62个schema对象及5张关键表逐行一致 | 已移动 |
| Tushare游资名录与龙虎榜实现 | 公共数据计算 | 龙虎榜与游资档案 | 原位置保持唯一实现 | `app/backend/data/providers/tushare_client.py` | 2个方法AST与原版一致 | 已归位 |
| 选股引擎、策略库与公式编译器 | 业务计算 | 阶段、策略、自定义选股 | 整体机械移动并保留兼容别名 | `app/backend/features/screener/engine.py``strategies.py``compiler.py` | 原版AST/源码等价;根级模块为同一模块对象 | 已移动 |
| `DashboardService`选股方法 | 业务服务 | 选股三个工作区 | 按职责机械移动 | `app/backend/features/screener/service.py` | 13个方法AST及3个真实API一致 | 已移动 |
| `ReviewDatabase`选股方法 | 持久化 | 因子、策略运行、候选与跟踪 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/screener/repository.py` | 25个方法AST一致;62个schema对象及13张关键表逐行一致 | 已移动 |
| `StrategyTrackingService` | 业务服务 | 手动候选持续跟踪 | 保持唯一实现并调整容器导入 | `app/backend/features/screener/tracking.py` | 类定义AST、真实API与浏览器行为一致 | 已归位 |
| `mentor_agent.py`与问师服务 | 业务服务 | Skill发现、问师上下文与流式回答 | 整体机械移动并保留兼容别名 | `app/backend/features/mentor/` | Agent文件哈希、8个服务方法AST、2个真实API及浏览器行为一致 | 已移动 |
| 问师消息与偏好方法 | 持久化 | 用户对话、置顶和排序 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/mentor/repository.py` | 5个方法AST一致;相关表逐行一致 | 已移动 |
| `llm_stream.py`与模型访问方法 | 公共模型能力 | 问师、问天、复盘助手与策略编译 | 移入唯一模型边界并保留兼容别名 | `app/backend/llm/` | 流式文件哈希一致;21个服务方法与既有用户边界一致 | 已移动 |
| 公开`游资skills` | 运行资产 | 问师模型库 | 原样保留 | `app/游资skills/` | 190个文件逐路径和SHA-256一致 | 已复制 |
| `heaven_agent.py``heaven_engine.py`与问天服务 | 业务计算 | 观势、观气、观心 | 机械移动并保留兼容别名 | `app/backend/features/heaven/` | Agent文件哈希、引擎定义AST、20个服务方法、6个API及真实动画页面等价 | 已移动 |
| 问天历史方法 | 持久化 | 三类解读历史与当日解运复用 | 按职责机械移动 | `app/backend/features/heaven/repository.py` | 5个方法AST一致;62个schema对象及6张关键表逐行一致 | 已移动 |
| `assistant_agent.py`与复盘服务 | 业务服务 | 我的复盘、自选、交易日志与复盘助手 | 机械移动并保留兼容别名 | `app/backend/features/review/` | Agent文件哈希、8个服务方法AST、5个真实API及会员/非会员页面等价 | 已移动 |
| 复盘、自选、交易日志与助手消息方法 | 持久化 | 用户私有复盘数据 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/review/repository.py` | 13个方法AST一致;相关表逐行一致;浏览器账户隔离通过 | 已移动 |
| 提醒编排与提醒持久化方法 | 业务服务/持久化 | 提醒中心与策略跟踪提醒 | 按职责机械移动 | `app/backend/features/alerts/` | 5个服务方法、6个Repository方法AST及真实API一致 | 已移动 |
| `static/app.js` | 前端总运行时 | 全站页面、状态、交互与动画 | 按原连续行机械拆分 | `app/frontend/app.js``pages/*/page.js``pages/market/{breadth,charts,entity-detail,stock-detail,preview,search,bindings}.js``shared/export.js` | 9,283行重组SHA-256与原版一致;完整基线及浏览器测试通过 | 已移动 |
| `static/index.html` | 前端DOM骨架 | 全站 | 只调整资源路径和拆分脚本加载 | `app/frontend/index.html` | 反向替换路径与脚本后逐字符一致;浏览器差分通过 | 已移动 |
| `static/styles.css`等七层样式 | 视觉运行资产 | 全部页面、主题和移动端 | 字节级移动 | `app/frontend/styles/``app/frontend/pages/heaven/page.css``app/frontend/shared/tokens.css` | 逐文件SHA-256一致;桌面、夜间和移动端计算样式一致 | 已移动 |
| `static/ui-core.js`、页面/共享脚本和供应商资产 | 前端共享/第三方资产 | Shell、页面注册、通用组件与图标 | 字节级移动 | `app/frontend/shared/``pages/``vendor/` | 逐文件SHA-256一致;45项Playwright和真实浏览器差分通过 | 已移动 |
处置只允许:`原样保留``移动``合并重复``待定``确认废弃`
## 切片记录
每个切片记录以下内容:原版基线、复制范围、必要路径调整、差异测试、人工验收、未关闭问题和回档提交。
已完成切片:`slice-00-exact-runtime-copy`
- 原版基线:提交`41329943c4878fc09ed82ec376eb93ab151e4092`
- 复制范围:确认参与运行、测试、部署和维护的原版文件;排除`next/`和运行产物。
- 允许改动:新目录中的路径配置、测试根目录和端口;不得改业务实现。
- 验收:新目录独立启动,231项Python测试、45项Playwright测试、数据库副本和静态资产哈希验证。
- 回档:本切片建立独立Git提交并推送Gitea。
- 完整证据:`docs/migration/evidence/slice-00/README.md`
- 资产清单:`docs/migration/原版资产清单.json`388项,0项哈希差异。
已完成切片:`slice-01-startup-http-accounts-system`
- 原版基线:提交`4083dce`,即切片00原样副本。
- 迁移范围:进程入口、应用组装、HTTP传输、账号安全、账号/会员业务、账号/系统设置持久化。
- 兼容边界:根级`server.py``app_config.py``security.py`继续保留原导入和命令入口。
- API与数据库:API/功能注册表哈希一致;原版与副本数据库均为36表、62个schema对象且schema哈希一致。
- 验收:236项Python测试、5项切片专项测试、45项Playwright测试全部通过;前端运行资产未改动。
- 回档:标签`xiaobai-preservation-slice-01-20260731`
- 完整证据:`docs/migration/evidence/slice-01/README.md`
已完成切片:`slice-02-market-search-charts-data`
- 原版基线:提交`4002f09`,即切片01回档点。
- 迁移范围:30个公共行情服务方法、11个行情持久化方法及Tushare/iFinD/图表/实时观察实现。
- 兼容边界:四个根级数据模块保留模块别名;未迁移功能继续使用旧导入且指向同一实现。
- 等价证明:41个方法AST逐项一致,三个数据文件哈希一致,图表定义AST一致,静态资产哈希一致。
- 验收:241项Python测试、6项切片源码等价测试、45项Playwright测试及真实服务搜索/详情流程通过。
- 既存状态:原版和迁移版的实时分时在当前环境均返回相同外部请求失败,不作为迁移回归处理。
- 回档:标签`xiaobai-preservation-slice-02-20260731`
- 完整证据:`docs/migration/evidence/slice-02/README.md`
已完成切片:`slice-03-sentiment-pools-performance`
- 原版基线:提交`a426432`,即切片02回档点。
- 迁移范围:情绪计算引擎、2个情绪服务方法、6个股池原因与iFinD事件补全方法、2个原因覆盖持久化方法。
- 兼容边界:根级`sentiment_engine.py`保留同一模块对象别名;股池生成仍使用切片02的原Tushare总览实现。
- API与数据库:原版`8784`和迁移版`8785`的总览、情绪历史JSON完全一致;两库schema均为62项且哈希一致。
- 验收:248项Python测试、6项切片源码等价测试、45项Playwright测试及六个真实页面流程通过。
- 回档:标签`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`
已完成切片:`slice-05-auction-themes-popularity-dragon-tiger`
- 原版基线:提交`814e757`,即切片04回档点。
- 迁移范围:共享市场洞察服务、竞价/题材/人气入口、龙虎榜与游资档案服务、7个相关持久化方法。
- 兼容边界:根级`market_insights.py`保留同一类对象别名;竞价与人气共用候选热度逻辑,不复制第二套实现。
- API与数据库:7个真实API逐字段一致,仅排除每次请求必然变化的`request_id`;62个schema对象与5张关键表完全一致。
- 验收:258项Python测试、6项切片源码等价测试、45项Playwright测试及四个真实页面流程通过。
- 回档:标签`xiaobai-preservation-slice-05-20260731`
- 完整证据:`docs/migration/evidence/slice-05/README.md`
已完成切片:`slice-06-screener-custom-tracking`
- 原版基线:提交`cf2aad2`,即切片05回档点。
- 迁移范围:完整选股引擎、29套高级策略、策略编译器、13个页面服务方法、25个持久化方法及持续跟踪。
- 兼容边界:三个根级模块指向正式模块对象;选股引擎保留原版数据客户端依赖,不为通过边界测试改写算法。
- API与数据库:3个真实API业务JSON一致;62个schema对象和13张关键表逐行一致。
- 验收:原版231项、迁移版265项Python测试、7项切片源码等价测试、45项Playwright及四个真实工作区通过。
- 回档:标签`xiaobai-preservation-slice-06-20260731`
- 完整证据:`docs/migration/evidence/slice-06/README.md`
已完成切片:`slice-07-mentor-skills-llm-streaming`
- 原版基线:提交`4bab921`,即切片06回档点。
- 迁移范围:问师Agent、Skill注册表、8个服务方法、5个持久化方法、模型解析、额度、回退、流式累积器和调用审计。
- 兼容边界:根级`mentor_agent.py``llm_stream.py`指向正式模块对象;系统管理继续独占模型池配置。
- API与数据库:2个真实API完全一致;62个schema对象及5张关键表逐行一致;190个公开Skill文件哈希一致。
- 验收:原版231项、迁移版273项Python测试、8项切片源码等价测试、45项Playwright及真实问师页面通过。
- 回档:标签`xiaobai-preservation-slice-07-20260731`
- 完整证据:`docs/migration/evidence/slice-07/README.md`
已完成切片:`slice-08-heaven-trend-fortune-heart`
- 原版基线:提交`2919229`,即切片07回档点。
- 迁移范围:问天Agent、历法/卦象引擎、20个服务方法、5个持久化方法及3个HTTP入口。
- 兼容边界:根级`heaven_agent.py``heaven_engine.py`指向正式模块对象;原动画、DOM、JS与CSS未改动。
- API与数据库:6个固定输入真实API完全一致;62个schema对象及6张关键表逐行一致。
- 验收:原版231项、迁移版280项Python测试、7项切片源码等价测试、45项Playwright及1080P三模式动画页面通过。
- 回档:标签`xiaobai-preservation-slice-08-20260731`
- 完整证据:`docs/migration/evidence/slice-08/README.md`
已完成切片:`slice-09-review-watchlist-notes-journal-alerts-assistant`
- 原版基线:提交`b3df070`,即切片08回档点。
- 迁移范围:复盘助手Agent、5个提醒编排方法、8个复盘编排方法、19个持久化方法及5个HTTP入口。
- 兼容边界:根级`assistant_agent.py`指向正式模块对象;提醒与交易日志旧服务继续作为唯一底层实现;包导出采用延迟加载以切断初始化循环。
- API与数据库:5个固定输入真实API完全一致;62个schema对象及8张关键表逐行一致。
- 验收:原版231项、迁移版287项Python测试、7项切片源码等价测试、45项Playwright及1920×1080会员/非会员真实页面通过。
- 回档:标签`xiaobai-preservation-slice-09-20260731`
- 完整证据:`docs/migration/evidence/slice-09/README.md`
已完成切片:`slice-10-frontend-shell-pages-components-css-mobile`
- 原版基线:提交`38de3de`,即切片09回档点。
- 迁移范围:完整前端DOM、9,283行运行时、页面脚本、共享脚本、七层CSS、问天加载动画、供应商资产及移动端规则。
- 兼容边界:运行时只切换静态根目录和资源路径;原DOM、样式、动画及JS源码内容不重写。
- 源码证明:原`app.js`与全部拆分片段重组后的SHA-256均为`c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6`
- API与数据库:21个全站只读API全部一致;62个schema对象和21张关键表逐行一致。
- 验收:85项前端专项、原版231项、迁移版294项Python测试、45项Playwright2.3分钟),以及1920×1080日间/夜间、390×844移动端和问天动画真实浏览器差分通过。
- 验收限制:同主机不同端口共享登录Cookie,双服务比较必须逐服务重新登录;动态动画帧、焦点和状态文字不以截图文件哈希作为唯一标准。
- 回档:标签`xiaobai-preservation-slice-10-20260731`
- 完整证据:`docs/migration/evidence/slice-10/README.md`
已完成切片:`slice-11-uncertain-code-audit-final-acceptance-handoff`
- 原版基线:提交`dec3cd12365df5e7d4c391369f14c457cf56d7d9`,即切片10回档点。
- 审计范围:`demo_data.py`、旧问天加载动画、5个无引用前端函数及`wencai_saved_queries`兼容责任。
- 处置:前3类先进入可单项回档的候选试删,并在2026-08-01人工验收后确认废弃;
`wencai_saved_queries`表和方法因旧库兼容与用户隔离继续保留。
- 保护方式:全部历史前端源码测试统一使用审计白名单比较,只允许登记的原`app.js`行号缺失,其他差异仍会失败。
- API与数据库:21个全站只读API全部一致;62个schema对象和21张关键表逐行一致。
- 验收:原版231项、迁移版302项Python测试、24个JavaScript语法检查和45项Playwright通过;桌面日间/夜间、390×844五个移动入口和问天三页真实检查通过。
- 部署边界:未改正式数据库、`.env``8765`、Docker或NAS;原版仍是正式运行基线。
- 候选回档:标签`xiaobai-preservation-slice-11-candidate-20260731`;最终完成标签
`xiaobai-preservation-complete-20260801`;试删恢复能力继续由切片10标签保留。
- 完整证据:`docs/migration/evidence/slice-11/README.md`
- 维护交接:`docs/migration/人工维护与本地切换指南.md`
严格完成审计补充:
- 发现候选`verify_baseline.py`、架构清单和原样资产清单仍带有旧`static/`、候选`docs/`
`app/app`路径假设;产品运行不受影响,但人工接管命令不可用,因此属于迁移目标缺口。
- 修复后统一验证命令检查302项Python测试、两个生成注册表、24个前端脚本、Git空白、SQLite
完整性和45项Playwright,并在Windows上显式管理8876测试服务器生命周期。
- 21个固定API使用同一数据库时点重新比较全部一致;数据库62个schema对象和21张关键表一致,
仅按既有规则排除内置策略启动校准的`updated_at`
- 候选自身的16页、64类路由匹配、36张表、数据/LLM/CSS入口和热点文件登记在
`app/config/architecture-inventory.json`;逐项结论见`completion-audit.md`
- 严格审计回档标签为`xiaobai-preservation-slice-11-audit-candidate-20260731`。该标签只代表自动
候选;最终人工验收与删除裁决记录在完成标签中。
- 2026-08-01跨日复验发现原版与候选共用的一项实时详情测试夹具依赖运行日,进入周六后会把
非交易日误作预期合并日;两版测试夹具同步固定到明确工作日,产品代码和日期规则未改。
- 跨日修复后统一验收再次通过302项Python测试、24个JavaScript文件、SQLite完整性和45项
Playwright;新增候选回档标签`xiaobai-preservation-slice-11-audit-candidate-20260801`
-`app/`导出在系统临时目录成功运行统一维护命令:242项候选测试、注册表、24个JavaScript
文件和SQLite检查通过;正式仓库保真套件为305项Python测试及45项Playwright通过。
- 日常前端契约不再隐式读取旧`static/app.js`,只有迁移差分断言保留原版依赖;架构热点大小
按归一化UTF-8统计,CRLF/LF跨环境结果一致。
- 切片10集合竞价候选截图实际为登录失效页,已重命名并撤销证明力;九组有效截图像素差异
低于动态渲染噪声阈值。2026-08-01用户随后在真实登录状态下逐页浏览并测试全部功能,确认
视觉与功能迁移成功;发现的问题几乎都属于原版遗留问题,未发现阻止验收的迁移回归。
## CSS核心治理:`styles.css`
- 治理基线:提交`cc5fb8d`,标签`xiaobai-reduction-14-css-same-file-duplicates-20260802`
- 目标:一次性消除基础样式、历史页面样式和多轮覆盖混杂,不把旧债转移到新的补丁文件。
共享规则归入`frontend/shared/`,页面规则归入对应`frontend/pages/<feature>/foundation.css`
- 已永久删除:`styles.css``renovation.css``redesign-v2.css``design-system.css`
`theme.css``pages/heaven/page.css`;没有建立`legacy.css``override.css``fix.css`
- 最终加载契约:`tokens.css`之后只加载9个共享所有者和13个页面所有者,共22个正式CSS;
不再存在历史后置层。同一`selector + @media/@supports/@scope上下文`只有一个定义和一个
文件所有者,页面ID不能跨页面泄漏,未加页面作用域的Shell/控件根选择器只能位于共享层。
- 规模结果:治理输入为861,341字节、8,569条`selector/context`规则;最终为712,217字节、
5,754条规则,净删除149,124字节和2,815条规则。含`tokens.css`的最终源码为47,557个
物理行;该数字高于
混合压缩格式的旧文件,是因为统一改为一条声明一行,不能作为重复度指标。
- 临时资产:合并器、旧版对照HTML、旧CSS副本及浏览器临时基线均已删除;历史恢复只依赖
Git基线和标签,不在生产目录保留第二套CSS。
- 结构门禁:覆盖唯一加载顺序、历史层不存在、所有者标头、全局选择器/上下文唯一性、
页面ID归属、共享根归属、禁用补丁文件名、规则数和体积上限。
- 浏览器等价:真实`8797`运行页已完成拆分前后4K夜间情绪周期直接视觉对照,结构、图表、
表格、颜色和滚动位置一致;现行页面的日间/夜间、1920×1080、3840×2160与390×844
由端到端测试覆盖。全站最终视觉仍须用户在真实数据状态下人工验收,不以自动测试代替。
- 自动验收:统一命令`python tools/verify_baseline.py --e2e`已通过,包括341项单元/契约测试、
46项真实浏览器测试、全部JavaScript语法检查、API/架构注册表、数据库完整性及补丁格式检查。
- 未触碰:业务功能、DOM、JavaScript、数据口径、数据库、LLM、Docker/NAS、`next/`及其
冻结状态均未改变。
## HTML核心治理:`frontend/index.html`
- 治理目标:一次性消除16个主页面和1个内部页面集中在入口HTML的问题,不重写页面、
不用JavaScript字符串保存DOM,也不保留第二套隐藏页面结构。
- 机械拆分:原页面连续DOM区间按既有功能所有权归入12个真实`pages/<feature>/page.html`
五类股池共属`pools`,智能选股与策略持续跟踪共属`screener`。Shell、摘要条、状态栏和
全局弹窗继续由`index.html`唯一持有。
- 唯一装配:`index.html`只加载`bootstrap.js`;页面片段路径和既有脚本执行顺序只登记在
`pages.config.js`。Bootstrap先并行取得静态片段,按原DOM顺序直接插入`.app-main`,再按
原顺序加载运行脚本,不增加影响Flex/Grid直接子关系的包装节点。
- 启动契约:动态脚本并行下载但以`async=false`保持原执行顺序;全部运行脚本执行后发布
唯一`runtime-ready`状态。原入口只做一项精确登记的必要调整:若DOMContentLoaded尚未
发生则监听一次,若装配完成时文档已就绪则直接初始化,避免异步装配遗漏启动事件。
- 规模结果:`index.html`由1,908行降为655行;页面结构分布到12个功能片段。HTML总量没有
伪装成删除,因为本次治理解决的是所有权集中,而不是删除产品界面。
- 保真证据:片段重组后的完整页面区域与原版对应82,575个字符逐字符一致;原`app.js`
除上述精确启动替换外仍通过既有9,283行源码重组保真测试,页面ID、DOM层级、动画与业务
实现未被改写。345项Python单元/契约测试和46项Playwright浏览器测试全部通过。
- 结构门禁:入口不得出现`workspace-view`根节点;每个注册视图必须只存在于一个片段;
片段禁止脚本;页面ID全局唯一;运行脚本顺序只允许一个注册所有者;业务数据请求继续
仅通过`shared/api.js`,Bootstrap只允许读取同源静态片段。
- 未触碰:CSS视觉规则、业务功能、数据口径、数据库、LLM、Docker/NAS和冻结的`next/`
## 前端启动核心治理:`frontend/app.js`
- 治理目标:一次性消除入口脚本同时持有应用状态、主题、账户、管理后台、仪表盘、表格、
全站反馈以及16页控件事件的问题,不把原单体整体改名转移到另一个大文件。
- 入口结果:`frontend/app.js`由1,943行降为101行,只保留初始化、认证后启动、初始路由、
页面挂载协调和唯一绑定调度;入口内不再定义页面业务事件、共享状态、主题、后台管理、
仪表盘或通用表格实现。
- 共享所有权:状态与DOM句柄归入`shared/context.js`,API/Shell/页面生命周期组装归入
`shared/application.js`,反馈与动效归入`shared/feedback.js`,行情仪表盘与日期归入
`shared/dashboard.js`,认证和账户归入`shared/session.js`,系统管理归入`shared/admin.js`
主题归入`shared/theme.js`,通用表格归入`shared/table.js`。每项职责只有一个正式所有者,
没有建立`legacy``compat``override``fix`转存层。
- 页面所有权:原单一`bindEvents`已删除;12个功能页面在自身`page.js`注册一次性控件绑定,
公共行情悬浮窗和详情绑定当时归入`pages/market/runtime.js`,后续已按下节治理为七个窄职责文件。`pages/runtime.js`负责防重绑定,
`app.js`不再逐页枚举选择器或事件。
- 保真边界:除跨页事件绑定函数的结构化拆分外,原业务函数主体按源码范围机械迁移;旧
事件注册逐项归入对应所有者。保真测试会精确剥离登记过的页面绑定扩展后再与母版比较,
不以文件存在或测试自洽代替母版差分。
- 结构门禁:限制入口不超过120行;禁止状态创建、API/Shell组装、仪表盘、主题、后台和
表格实现回流入口;验证每个功能页面具有唯一绑定所有者;验证共享职责只有一个定义文件。
- 自动验收:348项Python单元/契约测试、全部JavaScript语法检查、API注册表、架构清单、
SQLite完整性和Git空白检查通过;46项Playwright浏览器测试全部通过(约2.5分钟)。
- 未触碰:HTML与CSS视觉结果、业务计算、API数据口径、数据库、LLM、Docker/NAS及冻结的
`next/`均未改变。本轮仍需用户在真实数据与登录状态下做最终人工功能确认。
## 行情前端运行时核心治理:`frontend/pages/market/runtime.js`
- 治理目标:一次性消除行情图表、个股详情、板块/题材/指数详情、悬浮行情、全局搜索、
市场宽度和事件绑定集中在一个运行时文件的问题,不建立兼容入口或换名后的新单体。
- 所有权结果:原`runtime.js`永久删除;现由`breadth.js``charts.js``entity-detail.js`
`stock-detail.js``preview.js``search.js``bindings.js`分别唯一持有七类职责,加载顺序只在
`pages.config.js`登记。最大文件为`preview.js`的455个物理行,其余均不超过392行。
- 有效代码审计:55个具名函数全部具有静态消费者,没有把无法证明无用的行情逻辑当作垃圾删除。
拆分前工作树为1,392个物理行,拆分后七文件合计1,404行;增加的12行只来自更细的原版源码
范围标记和文件边界,不是第二实现、包装层或业务代码膨胀。
- 保真证据:原9,283行`static/app.js`仍可由当前全部源码范围逐字符重组,现有行情函数主体、
DOM、Canvas绘制、API路径、事件顺序和错误处理未改写。注册表缓存版本同步提升,避免浏览器
刷新后继续加载已删除的旧运行时。
- 结构门禁:禁止恢复`pages/market/runtime.js`;七个文件必须按固定顺序唯一注册;每类核心
函数只能存在于指定所有者;任一市场运行时文件不得超过500个物理行。
- 自动验收:统一命令`python tools/verify_baseline.py --e2e`通过,包括349项Python单元/契约
测试、39个JavaScript语法检查、API/架构注册表、SQLite完整性、Git空白检查和46项真实
浏览器测试(约2.3分钟)。
- 未触碰:视觉样式、页面DOM、后端业务、数据口径、数据库、LLM、Docker/NAS和冻结的`next/`
本轮仍需用户在真实登录与数据状态下做最终人工功能确认。
## 智能选股引擎核心治理:`backend/features/screener/engine.py`
- 治理目标:消除因子目录、外部同步、技术指标、因子构建、公式、阶段识别、选股执行和回测
集中在一个引擎文件的问题,同时保留原策略公式、定时任务、API、数据库副作用和前端行为。
- 所有权结果:`engine.py`缩减为129行兼容门面;真实实现分别由`catalog.py``data_sync.py`
`indicators.py``factors.py``formula.py``regime.py``selection.py``backtest.py`唯一持有。
领域模块不再反向依赖兼容门面。
- 规模说明:原单体为2,203行,拆分后的八个所有者与兼容门面合计2,456行;增加的253行来自
独立模块导入、类边界和窄委托,不包含第二套策略、因子或算法实现。本轮解决职责集中,未以
删除产品公式伪装代码减量。
- 保真证据:所有迁移方法和辅助函数与原版逐项AST相同;公共`ScreenerEngine`
`FactorDataService`、目录常量、公式编译函数及根级兼容导入保持同一对象和原调用契约。
- 结构门禁:兼容门面不得超过180行;领域模块不得依赖门面;每项计算只允许一个源码所有者;
禁止重新合并为单体引擎。
- 自动验收:353项Python测试和46项Playwright浏览器测试通过;架构/API注册表、JavaScript、
SQLite完整性和Git空白检查通过。用户仍需在真实数据状态下做最终人工功能确认。
## Tushare客户端核心治理:`backend/data/providers/tushare_client.py`
- 治理目标:消除HTTP请求、市场总览、实时宽度、指数、申万行业、通用板块、龙虎榜、个股详情、
交易日和涨跌停数据集中在一个Provider文件的问题,不改变方法签名、字段、单位、日期、缓存、
异常、降级或数据源语义。
- 所有权结果:公共`TushareClient`仍是唯一可构造类型,`tushare_client.py`缩减为68行,只保留
dataclass字段、共享缓存状态和领域Mixin组合。传输、总览、指数、申万行业、板块、龙虎榜、
个股、交易日及通用转换分别由九个`tushare_*.py`模块唯一持有。
- 规模说明:原单体为2,165行,拆分后的领域模块与门面合计2,293行;增加的128行来自独立文件
的导入和类声明。最大所有者为644行,没有第二套`TushareClient`或重复方法体;一次性机械
拆分脚本已删除。
- 保真证据:原类全部31个方法、18个顶层辅助函数和11个dataclass/共享缓存字段均与原版逐项
AST一致;根级兼容模块、`DataGateway`、测试子类及`patch.object(TushareClient, "query")`
继续指向同一个公共类和异常类型。
- 结构门禁:门面不得超过100行且不得定义业务方法;任一领域所有者不得超过700行;领域模块
不得反向依赖门面;原方法必须完整且不重复地分布在登记所有者中。
- 自动验收:354项Python测试、46项Playwright浏览器测试、全部JavaScript语法、API/架构注册表、
SQLite完整性和Git空白检查通过。未修改前端、数据库、正式数据、Docker/NAS或冻结的`next/`
用户仍需在真实行情和页面状态下做最终人工功能确认。
## 问天服务核心治理:`backend/features/heaven/service.py`
- 治理目标:消除手工六爻补录、趋势推演、市场上下文采集、观气/观心记录与LLM解读集中在一个问天服务文件的问题,不改变API、参数、返回字段、计算口径、数据库副作用、模型调用或前端行为。
- 所有权结果:`service.py`由1,304行缩减为15行无方法组合门面;手工数据校验与六爻安全门唯一归属`manual.py`,趋势组装、市场模式、来源及质量校验唯一归属`trend.py`,个股/指数/行业上下文唯一归属`market_context.py`,个人气场、卦象、历史记录及智能解读唯一归属`readings.py`
- 规模说明:四个实现所有者分别为412、358、338、220行,连同15行门面合计1,343行;比原文件增加39行,全部来自四组独立导入和类边界,没有委托包装、第二实现或兼容转存层。一次性机械拆分脚本已删除。
- 保真证据:20个问天服务方法逐项与原版AST比较;现有有意适配的`_heaven_reading_identity`保持当前生效实现。测试同时强制每个方法只归属一个文件、门面不得定义服务方法、领域模块不得反向依赖门面、每个所有者不得超过500行。
- 自动验收:66项问天专项测试、354项全量Python测试及统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误。
- 未触碰:前端DOM/CSS/动画、HTTP路由、数据表与正式数据、LLM协议与提示词、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实观势、观气、观心流程中做最终人工确认。
## 市场洞察核心治理:`backend/features/market/insights.py`
- 治理目标:消除共享交易上下文、集合竞价评分与数据准备、竞价结果编排、题材库和人气热榜集中在一个市场洞察文件的问题,不改变API、参数、返回字段、评分、候选范围、缓存、数据库副作用或数据源降级语义。
- 所有权结果:`insights.py`由1,307行缩减为45行无方法公共门面;构造与共享上下文唯一归属`insights_context.py`,竞价评分与候选构造唯一归属`insights_auction_scoring.py`,竞价时段/成交额/自选/动态快照唯一归属`insights_auction_data.py`,竞价中心编排唯一归属`insights_auction.py`,题材库与详情唯一归属`insights_themes.py`,人气榜唯一归属`insights_popularity.py`
- 规模说明:六个实现所有者分别为84、355、318、221、222、156行,连同45行门面合计1,401行;比原文件增加94行,全部来自独立导入、类边界和公共门面的历史模块级兼容导出,没有委托包装、第二实现或业务代码复制。一次性机械拆分脚本已删除。
- 保真证据:原类全部22个方法逐项与原版AST比较,`_display_date`辅助函数保持原AST,公共`_number`仍指向统一数值标准化函数。测试强制每个方法只归属一个文件、门面不得定义业务方法、领域模块不得反向依赖门面、任一所有者不得超过400行。
- 自动验收:48项市场洞察专项及前端契约测试、354项全量Python测试和统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误。
- 未触碰:集合竞价、题材库、人气榜的前端DOM/CSS及交互,HTTP路由、数据库结构与正式数据、数据源策略、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实行情状态下做最终人工确认。
## 应用组合与HTTP协调核心治理:`backend/application.py`
- 治理目标:消除系统配置、账户委托、后台任务生命周期、74条API的跨领域解析与响应以及应用依赖装配集中在一个文件的问题,同时保持公共`DashboardService``RequestHandler``SERVICE`、API注册表、鉴权顺序、异常状态码和启动方式不变。
- 所有权结果:`application.py`由1,092行缩减为178行,只保留依赖导入、服务/请求处理器组合、当前构造函数和进程级服务实例。系统配置归属`features/system/service.py`,账户桥接归属`features/accounts/application.py`,任务生命周期归属`jobs/service.py`;公共鉴权、命名POST分派、feature遍历、静态回退和404归属`http/dispatch.py`15类端点解析与响应分别归属对应`features/<feature>/routes.py`
- 规模说明:组合根178行、统一分派器115行、三个应用服务所有者合计366行、15个feature路由所有者合计716行,总计1,375行,比原文件增加283行。增加部分来自19个独立模块的必要导入与类边界、各feature处理完成标志和统一分派循环;没有复制业务计算、保留第二套路由或增加兼容包装实现。物理行数增加,单文件职责和跨领域修改范围实质下降,此项不能表述为总代码减少。
- 路由保真:重新生成的API仍为74条,方法、路径、精确/正则匹配、功能归属和访问级别与拆分前逐项一致,`config/api.config.json`保持原SHA-256哈希。公共POST在认证前分派;受保护请求仍按认证、CSRF、权限的原顺序执行;静态页面仍绕过API权限检查。
- 结构门禁:`application.py`不得超过220行且仅允许`DashboardService.__init__``RequestHandler`不得直接定义HTTP方法;`http/dispatch.py`不得超过150行;每个feature路由文件不得超过120行、不得反向依赖`backend.application`或全局`SERVICE`;27个应用服务方法必须唯一归属于系统、账户或任务所有者。
- 自动验收:356项全量Python测试和统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误,一次性机械拆分脚本已删除。
- 未触碰:前端DOM/CSS/动画、API数据字段、业务计算、数据库结构与正式数据、数据源和LLM策略、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实登录和数据状态下做最终人工确认。
## 历史保真审计脚手架治理
- 治理目标:删除依靠复制数百行旧CSS片段、旧`app.js`行号和重组哈希证明保真的高维护机制,避免已退役的单体源码继续成为隐藏的第二套实现。
- 删除结果:`tests/preservation_helpers.py`由600余行降至115行,只保留当前页面/脚本装配、必要哈希和AST契约;生产JavaScript中的源码范围标记全部删除;一次性`tools/split_frontend_runtime.py`退役。
- 替代约束:当前脚本注册表和顺序、唯一符号所有者、页面DOM、API、JavaScript语法、CSS所有权、数据库完整性及Playwright交互成为持续维护边界。新增结构测试禁止历史标记、CSS回放表和旧拆分工具重新出现。
- 历史证据:`docs/migration/evidence/slice-10/frontend-source-map.json`继续保留,只用于说明当时如何完成机械拆分,不参与应用启动、日常测试或未来功能开发。
- 自动验收:356项Python测试通过;统一`py tools/verify_baseline.py --e2e`通过全部当前JavaScript语法、74条API注册表、架构清单、SQLite完整性和46项Playwright浏览器流程;`git diff --check`无空白错误。
- 未触碰:业务计算、API字段、DOM结构、CSS规则、动画、数据源、LLM、数据库内容、Docker/NAS及冻结的`next/`均未改变;生产JavaScript仅删除无运行效果的审计注释。
## 根目录兼容转发与运行产物治理
- 治理目标:解决`app/`根目录散落19个旧导入转发文件,以及日志、Python缓存和浏览器测试产物
分散在源码目录的问题;不改变业务实现、导入对象身份、API、数据库、前端或启动行为。
- 转发层删除:根目录Python文件由23个降为4个,只保留`api_access.py``database.py`
`server.py``sync_data.py`四个真实入口。19个兼容模块全部删除,生产代码和普通测试改为直接
导入`backend/`内的唯一实现;结构测试禁止这些旧模块或旧导入路径重新出现。
- 唯一实现修正:`backend/features/screener/repository.py`中仅剩的一处运行时旧路径回退已删除,
直接使用该模块原本已经导入的情绪领域实现,没有增加新的门面、包装或第二套业务逻辑。
- 运行产物边界:新增`runtime/`作为唯一运行产物目录,日志统一进入`runtime/logs/`Python字节码
缓存进入`runtime/cache/python/`Playwright结果进入`runtime/test-results/`;项目根目录不再生成
`*.log``tools/start_local.ps1`统一负责本地隐藏启动、PID记录、缓存和日志落点。
- 现有产物整理:历史8785/8797日志和浏览器测试结果已移入`runtime/`,源码树中32个旧
`__pycache__`目录在确认路径均位于`app/`后清除。`runtime/.gitignore`只保留目录边界,不提交
运行产物。
- 自动验收:352项Python测试和46项Playwright浏览器测试全部通过;74条API注册表、架构清单、
全部JavaScript语法、SQLite完整性及`git diff --check`均通过。测试数量减少来自删除只证明旧别名
存在的兼容测试,新增结构门禁继续验证19个旧文件不得回归。
- 未触碰:页面DOM/CSS/视觉/动画、API协议、业务计算、正式数据、数据库结构、数据源、LLM、
Docker/NAS及冻结的`next/`均未改变。提交与推送仍等待用户明确要求。
## 独立化收口
- 正式边界:`app/`成为唯一产品源码和运行目录;生产代码、测试选择、部署和维护不再读取父目录。
- 文档归位:完整产品规格、治理记录、迁移账本和证据整体进入`app/docs/`;新增当前维护指南与
文档索引,历史双版本切换指南明确标记为历史资料。
- 测试收口:10个只比较父目录旧源码的`test_preservation_*`及旧比较辅助模块退役;当前页面与
脚本装配辅助函数缩减为独立的`tests/frontend_test_helpers.py`。统一验收始终运行全部当前测试,
不再根据父目录文件是否存在静默改变测试集合。
- 工具收口:5个只服务迁移复制和新旧差分的脚本退出活动`tools/`;迁移方法和结果继续由Git历史
`docs/migration/evidence/`保存。
- 数据边界:`app/data/review.db`是唯一正式数据库;外层旧库最后写入停留在2026-08-01。
`.env`、数据库、私有Skill和`runtime/`均保持Git忽略,未进入提交。
- 独立扫描:活动源码、测试、工具和部署文档对`ROOT.parent``ORIGINAL_ROOT`、父级`static`
迁移比较工具的运行引用为0;历史文档中的旧路径仅作审计记录。
- 自动验收:289项Python测试、39个JavaScript文件语法、74条API、架构注册表、435MB SQLite
完整性及46项Playwright浏览器测试全部通过;`git diff --check`无空白错误。
- 后续边界:外层旧程序与失败的`next/`只待本回档点推送后清理;清理必须使用独立提交,不与
产品代码修改混合。Docker/NAS切换仍需用户单独批准。
## 决策记录
| 日期 | 决策 | 原因 |
|---|---|---|
| 2026-07-30 | 原版运行行为优先,规格书只用于盘点 | 防止再次依据文字重新开发 |
| 2026-07-30 | 不使用`next/`作为后续迁移起点 | 用户确认其视觉、布局和基础功能不可用 |
| 2026-07-30 | 目标结构确认前不创建业务目录 | 防止目录先行后再次补写功能 |
| 2026-07-30 | 目标目录确定为`app/` | 使用长期正式名称,不再建立新的版本式重写目录 |
| 2026-07-30 | 先建立原样可运行副本,再迁移目录职责 | 保证整理的是原件,而不是依据规格书重新实现 |
| 2026-07-30 | 不确定代码进入待删账本并延迟试删 | 删除必须能够单独回档并经自动与人工验收 |
| 2026-08-03 | `app/`成为唯一正式源码边界 | 用户确认结构重铸与迁移目标基本完成并要求独立化收口 |
| 2026-08-03 | 迁移比较脚手架退出日常测试 | 父目录删除后测试集合必须保持完整且确定,不能静默跳过 |
## 恢复工作检查
- [x] 已阅读`AGENTS.md`与保真迁移总纲。
- [x] 已读取状态JSON和本账本最后一项。
- [x] 已确认Git工作区和基线提交。
- [x] 已确认没有修改`next/`或正式数据。
- [x] 已说明当前切片及新旧等价证据。
- [x] 已在编辑前确认没有未关闭差异。