15 KiB
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 和依赖变更,无需重新建表。部署结果见下一节。两项修复在真实行情中的触发行为仍未判收。
八、155 模拟仓已完成部署
2026-10-12 北京时间 12:16:07,155 的四个 PMS 服务完成重建。用户已明确批准 155 条件部署,并确认允许推送到当前 origin。主分支和整合分支均已推送修复提交 55e2ed6aa32012d4c09649836120c0622c19624f。原始 Claude 分支和工作树仍保留。部署后的本节与流水账作为另一次纯文档提交保存。
部署前先在服务器临时目录展开该提交,通过 docker run --rm --network none 运行完整测试,没有生产 .env。实际使用 Python 3.11.9,41 批、983 例通过。随后在正式项目目录快进代码,执行 make build 和 make up。没有执行建表,没有修改运行参数,没有操作 188。155 的 scripts/deploy.sh 只有服务器本地可执行位修改,已原样保留。服务器原有未跟踪文件也保留。
运行态判收为真机见过。四个容器均为运行状态,重启计数为零,启动时间均为上述北京时间。四者镜像相同,为 sha256:63e786de910adc5dd5ded41368922114cc40dc759dc6b472a5fcda60b032ee45。另外用无挂载临时容器读取镜像内代码指纹,结果为 18d7286b926a,与提交快照、服务器工作树一致,因此没有仅凭源码挂载后的指纹一致判断上线成功。
12:16 至 12:18 的检查见网页健康状态为 ok,数据库连通,交易日历正常。QMT 通道为 ONLINE,回报水位继续推进,无重同步标记,无在途子委托,无待入账回报。四服务启动后日志没有 ERROR、CRITICAL 或 Traceback。调度正常完成任务,午休交易任务按 not_in_session 跳过。部署后的 make test 再次输出 ALL SUITES PASS,41 批、983 例通过。
本次只读确认的运行参数如下。这是 2026-10-12 午休的快照,后续仍以页面和参数表为准。
| 参数 | 读数 |
|---|---|
PMS_TABLE_PREFIX |
空,模拟仓自有表 |
PMS_DISPATCH_MODE |
ws |
PMS_QMT_WS_ENABLED |
True |
PMS_AUTONOMY |
full |
PMS_SELF_DECIDE |
full |
PMS_GLOBAL_BUY_HALT / PMS_GLOBAL_EXEC_HALT |
均为 False |
PMS_PLAN_RANK_BY_UPSTREAM |
False |
PMS_PLAN_TIERS |
强传导 |
部署时没有 GATED 方案。尚未终态的两条父指令中,一条没有下发子委托,另一条已有子委托为 FILLED。它们没有被部署脚本撤销或改写。新结算与一字板修复在真实行情中的触发效果仍未判收,不能用测试通过代替实盘事件判收。
155 的回退引用为 codex/predeploy-20261012,指向 fbe0014。旧镜像保留为 pms:rollback-20261012-fbe0014。若需要回退,要同时切回该源码和旧镜像,再重建四服务;155 挂载源码,只换镜像不能回退。回退不是本次已执行的动作,不对账本做逆向写入。
开发机证据日志为 /tmp/pms-integrated-fifth.log、/tmp/pms-deploy-55e2ed6.log、/tmp/pms-postdeploy-tests.log。服务器部署前断网回归日志为 /tmp/pms-codex-55e2ed6.wfe1Da/test.log。这些临时日志不是长期归档,关键结果已记录在本文和 DEVLOG.md。
另核实宿主机系统时间为 UTC,容器时间为北京时间。部署脚本的窗口判断已显式用北京时间。PMS 通道心跳的 DATETIME 原值与容器北京时间同步,不能再给该字段一律加八小时;其他数据库时间列仍需按各自写入路径校准。
剩余事项不变:四行历史假读数未清理,两项探针未执行,盘中才封板与因子库前复权基准仍未补充验证,188 真实仓继续等待原准备条件。