Files
xiaobaifupan/docs/governance/code-reduction.md
T

18 KiB

app/代码减法账本

基线:xiaobai-preservation-complete-20260801
工作目录:只允许修改webapp/app/;原版根目录和冻结的next/只读
目标:删除重复实现和历史补丁,不改变功能、视觉、交互、动画、计算、权限、API或数据行为

固定规则

  1. 每批只处理一个明确边界,先证明重复或无消费者,再修改。
  2. 新共享实现必须在同一提交删除全部被替代实现;禁止只加一层包装。
  3. 运行代码总量原则上不得增加;测试和证据代码单独统计。
  4. 迁移期源码相等测试不得简单删除。发生已批准的结构重构时,必须替换成行为、错误语义和 唯一所有权契约。
  5. 每批通过领域测试、全量候选测试、独立导出测试和受影响的浏览器流程后才建立Git检查点。
  6. CSS最后处理;没有逐页日间、夜间和多视口截图证据,不删除视觉规则。

批次记录

批次 边界 基线问题 目标 状态
CR-01 LLM供应商传输 问师、问天、复盘助手和策略编译各自构造HTTP请求、解析响应和读取错误 只保留backend/llm/transport.py一个网络出口 已完成
CR-02 HTTP精确POST委托 27个端点重复使用“比较路径、调用无参数处理器、返回”三行分支 用公开/受保护两张显式映射统一委托,同时保留复杂路由的原控制流 已完成
CR-03 股票市场后缀转换 Tushare业务与iFinD图表各保留一份完全相同的沪深京代码转换函数 图表复用bootstrap/config.py::tushare_code,只保留一份函数体 已完成
CR-04 数值归一化策略 四个业务模块分别保留两组完全相同的数值转换函数体 backend/data/numbers.py集中拥有两种既有语义,消费者保留原局部别名 已完成
CR-05 根级兼容入口 正式后端仍有五处通过迁移兼容模块反向导入规范实现 正式代码改用规范路径;兼容入口只服务原公开导入契约 已完成
CR-06 紧凑日期显示 Tushare与选股引擎各保留一份完全相同的YYYYMMDD显示转换 bootstrap/config.py拥有唯一格式策略,消费者保留原局部别名 已完成
CR-07 数据Provider组装 核查网关、容器和业务服务是否重复创建外部数据客户端 固化唯一创建位置及兼容例外,不改数据源语义 已完成
CR-08 NDJSON流式传输 问师与复盘助手重复维护响应头、事件写入、完成、断线及关闭流程 HTTP共享层拥有唯一流式连接生命周期 已完成
CR-09 应用服务门面 两个仅服务股池iFinD补全的方法仍错位在全局DashboardService 原函数体机械归位到PoolServiceMixin 已完成
CR-10 Repository所有权 五行行业阶段覆盖的三项持久化方法仍错位在根级数据库门面 原函数体机械归位到问天Repository,兼容数据继续保留 已完成

CR-01验收口径

  • 四个功能模块不得包含urllib.request/chat/completions
  • 非流式与流式请求的URL、鉴权、User-Agent、SSE累积和空响应行为保持不变。
  • 各功能原有错误类型和用户可见错误文案保持不变。
  • LLMGateway的会员、额度、主辅回退、首字后不中途换模型和审计规则保持不变。
  • 架构清单必须登记唯一传输入口;完整测试和真实主模型最小调用通过。

CR-01结果

  • 四个功能模块的运行代码由572行降至422行;新增唯一传输实现129行,生产代码净减少21行、 约1.4 KB。行数不是主要收益,关键是5处/chat/completions请求只剩1处。
  • 三套重复HTTP错误正文解析合并为一套;各功能原有错误类型和用户可见文案由专项测试固定。
  • 迁移期4个“Agent文件逐字相等”断言没有直接删除,而是替换为共享传输唯一所有权、提示词模块 归属、SSE行为和兼容模块对象契约。
  • 候选311项、纯app/导出248项、45项Playwright通过;24个JavaScript文件、架构/API注册表和 SQLite完整性检查通过。
  • 使用候选数据库中加密保存的主模型完成真实非流式与流式最小调用,分别成功返回完整响应和 4个流式分片。调用未输出密钥或模型正文。
  • 本批不修改页面、CSS、提示词、业务计算、会员额度、模型回退、数据库或部署。

回档基线为xiaobai-preservation-complete-20260801;本批检查点为 xiaobai-reduction-01-llm-transport-20260801

CR-02验收口径

  • 仅纳入没有路径参数、请求体解析或专属异常分支的精确POST端点;其余路由保持原样。
  • 公开注册/登录端点继续在鉴权前分发;受保护端点继续严格执行登录、CSRF、注册表权限、处理器。
  • 27个映射路径必须都由权威API注册表解析,处理方法必须真实存在,公开与受保护集合不得重叠。
  • API路径、功能归属、访问角色、状态码、错误正文和静态页面绕过鉴权行为保持不变。
  • API清单生成器必须结构化读取显式映射;架构清查复用API清单,不再维护第二套路由发现规则。

CR-02结果

  • 2个公开端点和25个受保护端点改为显式委托映射,原来的79行重复分支被43行映射、分发与调用替代; backend/application.py净减少36行,规范化源码约减少1.0 KB。
  • 带正则路径参数、请求体读取、查询参数转换或特殊异常语义的GET、POST、DELETE端点未改动。
  • 架构清查删除了自行扫描精确/正则API路径的第二套规则,改为消费权威api.config.json;API注册表的 53个精确路径、11个正则路径、功能归属和权限均未变化。
  • 原版231项、候选315项、纯app/导出252项、45项Playwright通过;24个JavaScript文件、 API/架构注册表、Git空白检查和SQLite完整性检查通过。
  • 本批不修改前端、CSS、业务计算、数据源、数据库结构、LLM、会员规则或部署。

本批基线为xiaobai-reduction-01-llm-transport-20260801;检查点为 xiaobai-reduction-02-http-dispatch-20260801

CR-03验收口径

  • 图表模块不再定义第二份市场后缀转换函数,仍保留原局部名称和两个调用点。
  • 深市、沪市、北交所的既有映射结果保持不变;不借本批修正或扩展代码规则。
  • 原图表文件除该函数外的所有顶层定义继续与原版AST逐项相等。
  • 原版_stock_market_code函数的参数和函数体必须与唯一共享实现AST相等,运行时别名必须指向 同一个函数对象。

CR-03结果

  • 删除backend/features/market/charts.py中第二份10行定义,以1行导入别名复用共享实现,生产代码 净减少9行;全仓后端只剩一份沪深京后缀转换函数体。
  • 未合并实时聚合、东方财富图表、iFinD和Tushare的HTTP传输;它们的缓存、错误、重试和降级语义 不同,仅有外形相似,证据不足以安全抽象。
  • 原有迁移期整文件相等断言被等价范围断言、共享函数AST断言和唯一对象断言替代,没有降低门禁。
  • 原版231项、候选317项、纯app/导出254项、45项Playwright通过;API/架构注册表、 24个JavaScript文件、Git空白检查和SQLite完整性检查通过。
  • 本批不修改图表请求、数据来源、缓存、时间范围、行情计算、前端、CSS、数据库或部署。

本批基线为xiaobai-reduction-02-http-dispatch-20260801;检查点为 xiaobai-reduction-03-market-symbol-20260801

CR-04验收口径

  • 只合并参数、函数体和运行结果完全一致的数值转换函数,不借本批改变任何业务计算或异常默认值。
  • finite_number继续拒绝NaN与正负无穷;non_nan_number继续只拒绝NaN并保留正负无穷。
  • Tushare与智能选股必须复用有限数策略;市场洞察与情绪引擎必须复用非NaN策略,并继续暴露原局部 _number名称以保持兼容。
  • 实时行情和图表转换器的空值、默认值或参数签名语义不同,必须继续独立保留,不能因名称相同而合并。
  • 原版函数参数和函数体分别与共享实现AST相等;四个消费者的局部别名必须指向对应的唯一函数对象。

CR-04结果

  • 删除Tushare、智能选股、市场洞察和情绪引擎中的四份重复函数体,新建两种明确命名的共享策略;生产 代码净减少约12行,全仓AST扫描不再发现完全相同的函数定义。
  • 将可复用的函数及模块AST契约归入测试辅助层,原有迁移保持性测试改为“未改范围保持相等、被替换 函数与共享实现相等、运行时唯一对象”三重断言,没有降低门禁。
  • 实时行情backend/data/realtime.py::_number与图表backend/features/market/charts.py::_number 被明确保留;它们不是本批重复实现,也未改变行为。
  • 58项定向测试、41项保持性/治理测试、原版231项、候选320项、纯app/导出257项和45项 Playwright通过;24个JavaScript文件、API/架构注册表、Git空白检查和SQLite完整性检查通过。
  • 本批不修改前端、CSS、接口、数据来源、行情口径、选股条件、数据库、LLM、权限或部署。

本批基线为xiaobai-reduction-03-market-symbol-20260801;检查点为 xiaobai-reduction-04-numeric-normalization-20260801

CR-05验收口径

  • 逐项扫描根级Python入口、生产代码、测试、工具和动态导入;没有消费者或兼容责任的入口才能删除。
  • 规范后端不得经由screeneradvanced_strategiestushare_clientserver兼容入口 间接访问已经归位的实现。
  • 所有根级模块继续保持原导入名称、导出对象及模块对象身份,既有启动命令和第三方维护脚本不受影响。
  • api_access、选股Repository的惰性sentiment_engine导入及根级database.py属于已登记边界, 分别留到HTTP、Repository阶段处理,不在本批跨边界修改。

CR-05结果

  • 审计确认21个根级兼容入口均有测试、工具、启动或原公开导入契约消费者,因此本批没有冒险删除文件。
  • 容器、策略编译器、选股引擎及数据同步命令的五处导入改为规范模块路径,正式代码不再通过四个根级 兼容模块反向进入实现;运行代码行数未增加。
  • 特性边界测试取消选股引擎旧例外,并新增全后端兼容导入门禁;只允许两项已登记过渡边界,后续代码 无法重新引入隐式根级依赖。
  • 候选321项、纯app/导出258项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite 完整性检查通过;本批不涉及页面、CSS或浏览器行为。
  • 本批不修改业务计算、策略公式、数据源、API、数据库、LLM、权限、前端或部署。

本批基线为xiaobai-reduction-04-numeric-normalization-20260801;检查点为 xiaobai-reduction-05-compatibility-boundaries-20260801

CR-06验收口径

  • 只合并参数、函数体和异常行为完全相同的日期/文本转换;名称相似但空值、未来日期、错误文案或 输入格式不同的函数不得合并。
  • Tushare与选股引擎继续暴露局部_display_date名称,并分别指向唯一共享实现。
  • 原版两个_display_date函数必须分别与共享实现AST相等,所有原调用结果保持不变。
  • 市场洞察的日期显示函数会清理连字符并容忍空值,语义不同,必须继续独立保留。

CR-06结果

  • 删除Tushare与选股引擎内两个重复日期函数体,新增display_compact_date唯一策略;生产代码总 行数不增加,重复函数体由两份降为一份。
  • 架构清单登记日期格式唯一所有权;保持性测试改为未改范围AST相等、共享函数AST相等和运行时 对象身份三重契约,没有放宽原迁移门禁。
  • normalize_date、市场洞察日期显示、实时行情时间格式和会员日期边界因语义不同均原样保留。
  • 候选321项、纯app/导出258项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite 完整性检查通过;本批不涉及页面、CSS或浏览器行为。
  • 本批不修改日期输入规则、业务计算、选股结果、接口、数据库、数据源、LLM、权限或部署。

本批基线为xiaobai-reduction-05-compatibility-boundaries-20260801;检查点为 xiaobai-reduction-06-date-formatting-20260801

CR-07验收口径

  • iFinD、图表、实时观察器和Provider适配器必须只在build_data_gateway创建,并由容器共享。
  • Tushare必须继续通过实时Token供应器按需创建,不能为了减少对象数量缓存过期Token。
  • 市场服务中为原版隔离测试桩保留的一处TushareClient(self.token)是明确兼容例外,不得被误判为 第二条正式数据链路。
  • 不得合并Tushare、iFinD、东方财富和腾讯的传输、缓存、重试或降级逻辑。

CR-07结果

  • 全后端构造点扫描确认iFinD、MarketChart、东方财富图表和实时观察器均只有网关一个创建位置; ApplicationContainer暴露的是同一对象引用,没有第二份客户端。
  • Tushare Provider使用动态Token供应器,市场服务只有一处已登记测试兼容回退;本批没有发现可安全 删除的生产实现,因此不为追求行数强行修改运行代码。
  • 架构清单新增Provider创建所有权,自动测试会在未来出现第二个未登记构造点时失败。
  • 候选322项、纯app/导出259项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite 完整性检查通过;本批不涉及页面、CSS或浏览器行为。
  • 本批不修改请求频率、缓存、重试、Token更新、数据源选择、计算口径、API、数据库或前端。

本批基线为xiaobai-reduction-06-date-formatting-20260801;检查点为 xiaobai-reduction-07-provider-ownership-20260801

CR-08验收口径

  • 只合并NDJSON响应头、事件序列化、完成事件、业务错误事件、客户端断线和连接关闭这些传输行为。
  • 问师继续直接输出原事件字典;复盘助手继续把文本分片包装为delta/content事件。
  • 两个功能各自的业务异常类型、请求体错误状态码、错误正文和流创建时机保持不变。
  • _write_stream_event与连接生命周期必须只由backend/http/handler.py拥有,应用大类和功能HTTP 模块不再保留第二份实现。

CR-08结果

  • 删除问师和复盘助手各16行重复流式控制流,并将应用大类中的10行事件写入方法归入HTTP共享层; 新共享实现29行、两个调用适配共3行,生产代码净减少10行。
  • 新增专项测试固定四个响应头、中文NDJSON序列化、增量顺序、完成事件、业务错误事件和关闭状态。
  • 候选324项、纯app/导出261项及45项Playwright通过;24个JavaScript文件、API/架构注册表、 Git空白检查和SQLite完整性检查通过。
  • 本批不修改提示词、模型选择、会员计次、流式正文、前端解析、API路径、数据库或数据源。

本批基线为xiaobai-reduction-07-provider-ownership-20260801;检查点为 xiaobai-reduction-08-ndjson-transport-20260801

CR-09验收口径

  • 只有消费者全部属于单一领域、且能够按原函数体机械移动的方法才从应用门面移出。
  • _ifind_field_ifind_row_code继续保持静态/类方法签名、字段优先级、大小写规则和代码正则。
  • 账号委托属于稳定公开门面;系统设置属于跨领域协调;后台刷新留到CR-11,本批均不得删除或重写。
  • 移动后DashboardService必须继续通过Mixin解析同名方法,调用点和返回值不变。

CR-09结果

  • 将iFinD字段匹配和股票代码提取两个方法从应用大类机械移动到股池服务,原版与迁移方法AST逐项 相等;应用大类不再直接拥有股池专属实现。
  • 连同迁移期遗留空行,backend/application.py减少32行,股池服务增加24行,生产代码净减少8行。
  • 候选324项、纯app/导出261项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite 完整性检查通过;本批不涉及页面、CSS或浏览器行为。
  • 本批不修改字段匹配、涨跌停原因补全、接口、数据源、缓存、数据库、权限或前端。

本批基线为xiaobai-reduction-08-ndjson-transport-20260801;检查点为 xiaobai-reduction-09-service-facade-20260801

CR-10验收口径

  • 只移动调用方、数据表和业务含义均明确属于单一领域的方法;数据库连接、事务和返回值必须保持不变。
  • list_sector_phase_overridessave_sector_phase_overridedelete_sector_phase_override必须由 backend/features/heaven/repository.py拥有,并继续通过ReviewDatabase的Mixin解析。
  • 不修改表结构、迁移顺序、时间格式、排序、冲突更新或删除结果语义。
  • wencai_saved_queries及其三个方法属于已登记的账户隔离兼容数据;即使前端入口已取消,也必须保留。

CR-10结果

  • 将五行行业阶段覆盖的查询、保存和删除三个方法从根级database.py机械移动到问天Repository; 调用名称、SQL、事务边界、时间值和返回结果均未改变。
  • 根级数据库门面不再直接拥有问天领域的持久化实现,问财历史兼容表和方法完整保留,未扩大删除范围。
  • 34项Repository、问天、账户隔离、清理契约及迁移定向测试通过;候选324项、纯app/导出261项、 24个JavaScript文件、API/架构注册表、Git空白检查和SQLite完整性检查通过。
  • 本批不修改页面、CSS、API、数据库结构、行情、数据源、业务计算、LLM、权限或后台任务。

本批基线为xiaobai-reduction-09-service-facade-20260801;检查点为 xiaobai-reduction-10-repository-ownership-20260801

人工验收记录

  • 2026-08-01:用户检查CR-02与CR-03运行结果,确认未发现明显异常。本记录仅表示本轮可见功能与 页面使用未发现明显回归,不替代后续批次各自的自动测试和人工抽查。