tradingSystem/docs/开发接续_2026-10-12.md

11 KiB
Raw Blame History

PMS 开发接续与 Codex 迁移记录

日期为 2026-10-12,北京时间。开发入口已迁到根目录 AGENTS.md。本次整理完成了仓库规则与工作上下文的接续,下文保留接手时快照,最新进展见第七节。

用户在本次会话确认两件事。第一,原定 10-09 的服务器只读核对与离线探针均未执行。第二,先以当前仓库为准,不另找旧 Claude 会话资料。

一、当前开发基线

本机主分支是 main,提交为 fbe00144137c9b03a51c90c00e6b1bf1ccda3a77,日期是 2026-09-20。本次用 git ls-remote 直接核对代码服务器,远程 main 与本机相同。不能据此判断服务器运行的代码版本。

9 月 20 日交接里的模拟仓读数和真实仓版本都是历史快照。10 月 8 日命令结算分支的开发记录还记了一次隔离容器测试,但不是新版本部署。155 和 188 的当前运行状态均未在本次会话核对。

接手时已有以下未提交工作,本次保持内容不变。

文件 内容与状态
docs/复盘决定台账.md 已修改,新增台账 017。记录 09-22 把上游排序开关设回 False,等待约定时点再开。后续是否已重开,当前材料没有结论
docs/方案讨论稿_量化平台接入与急跌满仓预案_2026-10-08.md 未跟踪的讨论稿。已记第一轮反馈,仍有待拍板项
scripts/probe_crash_live.py 未跟踪的盘中只读探针。用户确认尚未执行
scripts/probe_both_offline.py 未跟踪的合并离线探针。用户确认尚未执行

根目录 AGENTS.md 在接手时也已存在但未跟踪,内容基本是 CLAUDE.md 的改名副本。本次在该文件上完成迁移。

二、接手时的两个未合入修复

两个工作树均位于 .claude/worktrees/,都应保留。每个工作树还有自己的未跟踪 AGENTS.md,本次未修改。向远程查询下面两个完整分支名时没有返回同名引用;不要删除本地分支或工作树。

分支 提交 改动 历史验证记录
claude/happy-almeida-0b0343 ead20bf 命令结算线按目标金额与方案金额取较小者,再扣未解锁批次金额。解决取整零头导致命令不能完成的问题 分支 DEVLOG.md 记载开发机与 155 断网隔离容器通过,新增 10 例。未部署,未真机判收
claude/great-herschel-e57674 01dbcdb 一字板方向结合昨收判定。一字涨停的卖单不再误按跌停顺延,一字跌停的买单继续拦截 分支 DEVLOG.md 记载开发机通过,新增 19 例。未部署,未真机判收

这些是旧会话留下的验证记录,本次没有重新运行这两个分支的业务测试,也没有完成代码复审。

合并之前有三件事要处理。

第一,两条分支都新增了 scripts/test_batch35_units.py,并改了 scripts/run_tests.py 和 DEVLOG.md。合并时必须为两批测试分别登记,不能用一边覆盖另一边。历史记录中的测试总数也不一致,要在最终合并版本上实跑统计。

第二,命令结算分支留下了未解锁批次的收尾问题。命令判为完成后,GATED 批仍可能阻挡策略自动挂载,而完成的命令不能再用撤销路径清理它们。该分支也改变了方案本身不足目标时的完成判定,缺口保留在进度里。这些行为需要在复审时明确。

第三,一字板分支没有解决盘中才封住、最高价不等于最低价的跌停买入问题。昨收所用 close_qfq 的复权基准也还需核实。不能把这次修复描述成已经补齐所有跌停买入保护。

三、接手时发现的问题

接手时的单测隔离缺口

scripts/test_wiring.py 的 install_fakes 没有替换 consensus_stat_repo。proposal_service.scan_and_route 会调用 consensus_stats.record_round,后者仍有真实仓储写路径。

9 月 20 日交接记录了测试污染 pms_consensus_stat 的四行假数据。本次只核对了代码缺口,没有连接数据库确认这些行的现状。修复并验证隔离前,不在带真实配置的服务器容器里执行全量测试。清理历史数据另列具体行,再按仓库纪律确认后操作。

排序轴协同要补当前读数

台账 017 已记录 09-22 关闭 PMS_PLAN_RANK_BY_UPSTREAM。原计划随后重新打开,并把 PMS_PLAN_TIERS 调为两档,但当前材料没有执行结果。10-16 前后的四周复核仍是历史方案中的计划,不能先假定切轴已完成。

后续核对至少需要三个事实:当前开关和档位白名单、上游计划的 rank_axis、名册快照的 rank_mode 与名次顺序。

时间口径有待校准

旧规则把数据库时间列统一写成 UTC。代码里 PMS 部分自有列是 DATETIME,由容器内 datetime.now() 写入,容器配置为北京时间。两个新探针都注意到了这个差异,准备通过心跳或快照校准。

探针尚未执行,不能把代码推断写成真机结论。后续读数要按具体列核对写入方式,并保留时区标注。

旧链路问题单独排期

9 月 20 日记录的开盘研判不可用、网格持仓对账差异、页面人工验收、盘中确认开关和真实仓准备包都还在旧交接中。10 月 8 日讨论稿记载当轮不查旧链路、宏观档位不改。本次迁移没有替这些事项重新排期或执行。

四、两个新方向停在哪里

量化平台接入仍处于讨论阶段。已有方向是先做接入契约、只读探针、每日快照和影子记录。量化因子最终作为第二意见还是独立来源,尚未形成最终执行方案。

偏冷区满仓操作也仍是讨论稿。尾盘预估、分档节奏、退出规则、名单篮子和参数恢复范围都需要继续讨论。此前的数字是方案初值,不是当前运行参数。

原定 10-09 的两项探针没有运行,不能跳到依赖探针结果的回测和实施结论。重新执行前需要重定时间,按脚本检查实际实例、查询范围与运行负荷。旧日期不会自动顺延成今天的容器操作授权。

五、本次迁移具体做了什么

AGENTS.md 成为唯一开发规则入口,保留三条铁律、单表访问纪律、ParamStore、密钥保护、双实例和部署边界。可读中文与页面偏好直接写入该文件,移除了不存在的 .Codex/output-styles/readable-chinese.md 引用。页面检查补全为枚举、接线、文案三道守卫。

CLAUDE.md 改为兼容入口,明确要求先读 AGENTS.md。历史设计文档与交接中的 Claude 名字保留,避免把历史记录改写成新事实。

.gitignore 排除旧 Claude 嵌套工作树,.dockerignore 排除开发代理本地目录,避免嵌套源码与本机配置进入运行镜像。工作树和分支本身仍保留。

当前仓库没有可迁移的 .claude/settings.json、项目 MCP 配置或项目技能目录。本次没有创建无实际用途的 Codex 配置,也没有修改全局账号设置。

Codex 使用仓库中的 AGENTS.md 加载项目规则,依据见 官方项目指令文档。本次会话也已实际收到根目录 AGENTS.md。以后在新会话中可要求先复述项目三条铁律和当前接续事项,核对读取的是新入口。

迁移改动目前保存在本地工作区,尚未提交或推送。后续提交必须同时包含 AGENTS.md 和 CLAUDE.md,以及它们引用的本接续记录,不能只提交兼容入口。业务讨论稿、探针和台账的原有修改应另行安排提交。

六、迁移阶段的验证与后续安排

本次验证限定为开发机静态检查。三道页面守卫均已通过,git diff --check 通过。两个探针仅做语法解析,未执行。迁移文档的本地链接检查通过,原有台账、讨论稿和两个探针的文件摘要与接手时一致。

三道页面守卫可以用以下命令复核,预期各自输出通过并以状态码零退出。

# 开发机,仓库根目录。
python3 scripts/test_page_enum_guard.py
python3 scripts/test_page_wiring_guard.py
python3 scripts/test_page_copy_guard.py
git diff --check

本次没有运行全量业务回归,没有部署服务器,也没有改运行参数。服务器状态仍标为未判收。

建议下一步先修复测试隔离缺口,再复审并整合两个现成修复;探针另定执行窗口,取得读数后继续两份方向的方案讨论。真实仓上线继续按 REAL_TRADING_DEPLOY_PLAN.md 的准备边界处理。

七、修复与整合进展

用户已要求先修复单测隔离,再复审整合两个分支,并择机部署。用户进一步确认,命令完成时取消未解锁批次。当前整合分支为 codex/test-isolation-integrate。

两个原始修复已按代码差异整合,保留原分支和工作树。ead20bf 的十例测试改为第三十六批,01dbcdb 的十九例测试改为第三十七批。第三十五批留给隔离回归,避免同名测试覆盖。

测试隔离修复补齐了 consensus_stat_repo 的四个内存入口,以及账本扫描、夜间定性、量比和资金流水等漏桩。全部测试经独立进程清除业务环境变量,在空临时目录运行,并在套接字连接前拦截外部访问。联网异常即使被业务代码捕获,进程仍返回失败。各批直接运行时也安装此护栏。

命令结算按命令目标与方案金额中的较小值计算,扣除未解锁批次。没有任何方案金额的非零目标不会误报完成。完成前先保存扣除金额,再把该命令的 GATED 方案改成 CANCELLED,最后写命令完成状态。写入失败时保留执行状态并报错,下一轮可按保存的金额继续结算。目标金额、缺口和取消的方案记录都保留。此逻辑只处理本次及后续结算,不批量改写历史已完成命令。

一字板修复按核实过日期的昨收识别方向,保留昨收不明时的保守回退。复审补了空值、陈旧值和无效价格不缓存,避免短暂失败影响全天。它仍只识别最高价、最低价和现价一致的一字板。盘中才封板的情况以及因子库前复权基准仍是原有边界,不能写成已经覆盖。

开发机用临时 Python 3.9 虚拟环境按 requirements.txt 安装依赖,经 scripts/run_tests.py 全量回归,41 批、983 例通过,包含三道页面守卫。旧总数 904 已过期,接手时实际为 941 例,本次新增 42 例。日志保存在开发机 /tmp/pms-integrated-fifth.log。容器运行时是 Python 3.11,仍需服务器断网容器验证。

155 已做主机与容器元数据只读核对。仓库在 /home/factor/project/tradingSystem,主分支仍为 fbe0014,四个 PMS 服务运行,网页健康检查通过。四个容器均有源码挂载,启动时间为 2026-09-18 11:51:59 北京时间,由 Docker 的 UTC 值换算。服务器有本地文件和 scripts/deploy.sh 的修改,部署时保留。188 未操作。

部署候选不含原有台账、讨论稿及两个探针。上线前需确认实例的运行参数与在途队列,在 155 断网临时容器通过后再重建镜像、重建四个 PMS 容器。本次没有 DDL 和依赖变更,无需重新建表。部署和真实交易行为尚未判收。