refactor: establish standalone application boundary
This commit is contained in:
@@ -0,0 +1,466 @@
|
||||
# 小白复盘保真迁移账本
|
||||
|
||||
> 当前状态:正式源码独立化收口自动验收通过,等待建立并推送最终回档提交
|
||||
|
||||
本账本是上下文恢复和人工审计的连续记录。任何迁移提交必须在同一提交中更新本文件及
|
||||
`保真迁移状态.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项Playwright(2.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] 已在编辑前确认没有未关闭差异。
|
||||
Reference in New Issue
Block a user