交接副本同步

This commit is contained in:
baobao 2026-10-15 12:09:50 +08:00
parent e9afc7a3a3
commit 43cdc25881
4 changed files with 90 additions and 6 deletions

View File

@ -1849,3 +1849,11 @@ docs/交接_2026-09-20.md(新)、docs/dev_preview/mock_preview.py 与 sample
先跑回归复现 11 失败、1 新接口未实现错误;修复后 12 例和完整 43 批隔离、禁止联网测试通过。 先跑回归复现 11 失败、1 新接口未实现错误;修复后 12 例和完整 43 批隔离、禁止联网测试通过。
历史证据:155 的 ~/pms_logs/reconciliation-evidence-20261015-before-fix-v2.json,340982 字节,SHA256 8e0badf4d771fbf8a3227250c6cc2c2bf3c8234dda2fc33a31f0ab00920f5501。初次导出因方法名拼错失败,零字节初稿保留,v2 才是有效证据。 历史证据:155 的 ~/pms_logs/reconciliation-evidence-20261015-before-fix-v2.json,340982 字节,SHA256 8e0badf4d771fbf8a3227250c6cc2c2bf3c8234dda2fc33a31f0ab00920f5501。初次导出因方法名拼错失败,零字节初稿保留,v2 才是有效证据。
不修改历史批次、成本、已实现盈亏或指令状态。部署与自然回放判收待追加;历史修复的前提见 docs/PMS三项对账差异排查_2026-10-15.md。 不修改历史批次、成本、已实现盈亏或指令状态。部署与自然回放判收待追加;历史修复的前提见 docs/PMS三项对账差异排查_2026-10-15.md。
### 10-15 12:05 防双记部署判收
功能提交 e9afc7a 已部署 155。候选镜像断网全量 43 批通过,八笔实际委托的只读归属查验全部通过。
12:02:54 四服务重建,镜像 c17af17aeb09d151bbe932395b879add1ed336b16739703f9acc594bee30b3f1,Python 指纹 cc988cd762bf。
12:04:59 健康正常、QMT ONLINE、待入账及在途出口委托均 0,业务参数保持。午休无自然新成交,逐笔实际回放效果待事件判收。
三项历史数量差异仍在,未强制对账或回写成本与指令。完整证据与回退信息见同日每日计划交接末节。

View File

@ -36,3 +36,12 @@ WebSocket 逐笔回报均 processed=1,汇总委托全部已进入 PMS_REPLAY_C
日终 RECON 只调数量,并会把差额按行情价格当成新增或核销,不能修复被污染的原始成本、已实现盈亏和指令 exec_qty。 日终 RECON 只调数量,并会把差额按行情价格当成新增或核销,不能修复被污染的原始成本、已实现盈亏和指令 exec_qty。
因此不为消除告警直接 force 对账。先保存当前批次、原逐笔成交、汇总回放游标及指令快照,评估能否完整重建。 因此不为消除告警直接 force 对账。先保存当前批次、原逐笔成交、汇总回放游标及指令快照,评估能否完整重建。
历史已有 RECON 与过往双记相互叠加;冻结证据不足时不能伪造无误差历史。任何后续修复须另存可逆备份与调整依据。 历史已有 RECON 与过往双记相互叠加;冻结证据不足时不能伪造无误差历史。任何后续修复须另存可逆备份与调整依据。
## 12:05 实测结果
修复提交 e9afc7a 已于 12:02:54 部署 155 四个 PMS 服务。新增 12 例、开发机全量 43 批、候选镜像断网全量 43 批均通过。
真实八笔委托的只读归属核验全部正确。健康、数据库、QMT 通道正常,待入账和在途出口委托为零。
当前为午休,修复后自然新成交回放尚待事件验证;三项历史差异仍保留,不报告为清零。
原始证据文件 ~/pms_logs/reconciliation-evidence-20261015-before-fix-v2.json 的 SHA256 为 8e0badf4d771fbf8a3227250c6cc2c2bf3c8234dda2fc33a31f0ab00920f5501。
原始交易持仓表额外出现 562590.SH 与 688825.SH 属另一项事实源覆盖差异,继续按既有 ws_first 取实际持仓,不混同三项账本差异。

View File

@ -2,7 +2,7 @@
2026-10-15,北京时间。状态先行:基座、155 桥与 155 模拟 PMS 均已部署并重建相关容器。 2026-10-15,北京时间。状态先行:基座、155 桥与 155 模拟 PMS 均已部署并重建相关容器。
用户批准补齐旧排序配置,桥保持 transmission 与 CARD_SORT_BY_QUALITY=0;11:28:51 完成最终重建。 用户批准补齐旧排序配置,桥保持 transmission 与 CARD_SORT_BY_QUALITY=0;11:28:51 完成最终重建。
新版发布代码已生效,首个完整晨版待下个交易日核验。五分钟自动修订、提议版本核验和五日观察尚未启用;详细实机证据见末节。 新版发布代码已生效。已安排 10-16 07:25 核验首个完整晨版;XXL 任务 137 已创建且停止,判收后启用五分钟修订及 PMS 提议重核。用户已取消额外五日模拟观察。PMS 三项差异已定位为成交双记,防双记代码于 12:02:54 部署;历史账本尚未修复,详细证据见末节。
正式契约与实现原理见同目录《每日选股计划完善方案与开发规格_2026-10-15.md》。 正式契约与实现原理见同目录《每日选股计划完善方案与开发规格_2026-10-15.md》。
## 用户已决定的范围 ## 用户已决定的范围
@ -164,3 +164,61 @@ PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=backend /Users/baobao/.cache/codex-runtimes
`daily-plan-compat-tests-20261015.log`、`daily-plan-postdeploy-check-20261015.log`。 `daily-plan-compat-tests-20261015.log`、`daily-plan-postdeploy-check-20261015.log`。
本地补充回归为 `/private/tmp/bridge-deploy-compat-20261015.log`。PMS 最终读取追加到原 postdeploy-watch 日志。 本地补充回归为 `/private/tmp/bridge-deploy-compat-20261015.log`。PMS 最终读取追加到原 postdeploy-watch 日志。
此前连接问题出现在开发机到 155:2280,尝试从 178 到 155 也遇到相同限流;已恢复,之后部署持续使用开发机到 155 的 SSH 连接。 此前连接问题出现在开发机到 155:2280,尝试从 178 到 155 也遇到相同限流;已恢复,之后部署持续使用开发机到 155 的 SSH 连接。
## 10-15 12:05 接续决定、差异根因及修复部署
用户最新要求:先排查 PMS 三项对账差异,安排下个交易日核验首个完整晨版,通过后启用五分钟自动修订与提议重核。
当前实例本身就是模拟仓,不再增加五个交易日观察。本条覆盖前文、规格书与台账 064 的五日上线等待要求;
版本一致性、顺序、幂等、故障恢复和十二分钟传播的技术验收继续保留,五/十/二十日策略复盘口径不变。
### 三项差异
| 股票 | PMS / QMT 数量 | 核对结果 |
| --- | --- | --- |
| 002050.SZ | 800 / 700 | 同一委托重复买入 100。WS 为 73+27 股,汇总表又以 31.560 记 100;重复批次 1361。 |
| 002979.SZ | 0 / 1900 | 四个委托的 1300+500+100+100 股被 WS 与汇总各扣一遍,账本下限截断为零。 |
| 688100.SH | 2400 / 1400 | 700 买、400 卖、700 买被双记,净多 1000;重复部分还被误认外部 BASE。 |
八个委托的 instruction_id/order_id、broker_order_id/qmt_order_id 均逐笔相同,WS 全部 processed=1,
汇总全部已在 replay cursor.seen。原因是 ledger_service.replay_fills 的“汇总只兜外部成交”停留在注释,实际没有归属排除。
差异发生于本次计划部署前。另有 ws 与 trading_position 表的两个代码覆盖差异(562590.SH、688825.SH),
属于事实源分歧提示,与上面三项账本数量差异分列;本次仍按现行 ws_first 规则。
修复 e9afc7a 已推送并在 155 拉取。按出口身份分流,已归属 ws 的汇总只留跳过记录和 seen,等待逐笔;
身份读取失败或矛盾不落账不记 seen。无归属的外部人工成交保持原流程。新增 12 例,开发机隔离全量 43 批、
155 候选镜像 --network none 全量 43 批均通过。真机只读分类覆盖八笔实际委托,全部正确命中。
12:02:54 北京时间重建 pms-web、pms-worker、pms-beat、pms-ws,镜像为
`sha256:c17af17aeb09d151bbe932395b879add1ed336b16739703f9acc594bee30b3f1`,标签 `pms:replay-fix-e9afc7a`,
镜像与运行工作树 Python 指纹同为 `cc988cd762bf`。回退标签 `pms:rollback-before-replay-fix-20261015`。
12:04:59 /health 正常,db_ok=True、calendar_degraded=False,QMT ONLINE,seq/acked_seq 都为 1226149,
待入账与在途出口委托均为 0。ws、propose_only、信号优先 True、200 万、0.70、0.08 及完整计划筛选参数未变,
PMS_PLAN_VERSION_RECHECK 仍 False。午休正常返回 not_in_session;修复后自然成交回放尚待真实事件判收。
历史账本没有直接调平。日终 RECON 调数量不能还原被污染的成本、已实现盈亏和指令执行进度,不能声称账已修好。
需根据逐笔与可用历史批次快照另做可逆修复设计;证据不足部分显式保留不确定性,不虚构准确历史。
详细排查与修复规格在 tradingSystem 的 `docs/PMS三项对账差异排查_2026-10-15.md`,台账 019。
原始证据位于 155 `~/pms_logs/reconciliation-evidence-20261015-before-fix-v2.json`(340982 字节,
SHA256 `8e0badf4d771fbf8a3227250c6cc2c2bf3c8234dda2fc33a31f0ab00920f5501`)。首次导出的空文件是失败初稿,v2 才有效。
部署、候选镜像测试、判收分别见 `~/pms_logs/replay-fix-deploy-20261015.log`、
`replay-fix-tests-20261015.log`、`replay-fix-postdeploy-20261015.log`。服务器原有 deploy.sh 修改与未跟踪文件未覆盖。
### 已建立的接续入口
- Codex 心跳 `automation-2`,名称“每日计划首个晨版核验与启用”,ACTIVE,按北京时间每天 07:25。
首次预期 2026-10-16,155 日历确认该日为交易日且未降级。不是业务修订调度,不替代 XXL。
完成启用与必要技术验收后暂停;等待期间只报告实质变化,不能加回五日观察条件。
- XXL 平台 `http://192.168.16.165:8080/xxl-job-admin`,通用执行器,任务 **137“每日选股计划五分钟修订”**。
已复制既有 08:45 区制任务的通用 HTTP GLUE(Python3) 脚本并只改入口步骤为 plan-refresh;
A股交易日模式、07:20—15:10、间隔 300 秒,回调开启。已有鉴权值沿用,不写入文档。
当前 **已停止**,没有执行一次、没有提前启用;以后找到 137 启用即可,不重复创建。
- 原 07:10“知识图谱每日股票池生成”与 08:45“知识图谱每日股票池重检索”均保持启用,未改配置。
平台记录 10-15 07:10 构建成功,耗时 1 分 28 秒;08:45 成功,耗时 3 秒。
07:25 首版验收要逐项核对:实际行情日与今日 cutoff、schema/decision、morning 指针、冻结输入及有效配置、
全量名次、最新/日期/固定版本查询一致、旧版本不变、缺档不重构。通过后启用任务 137,核对下一次触发与回调结果,
随后仅用 ParamStore.set_param 打开 155 的 PMS_PLAN_VERSION_RECHECK。保持其余运行参数。
消费必须来自正常 received/consumed 记录,预览读取不充作实际消费。自然新评析才能测实际传播时延;
不得为验收采纳提议或制造交易。若该时点还没有消费或自然修订证据,调整同一心跳后续核验时间继续。
当前历史账本差异不能被记录为已解决,但不以额外模拟天数代替具体技术验收。

View File

@ -37,10 +37,10 @@
## 交付与运行边界 ## 交付与运行边界
四批为确定排序、不可变版本、消费与重核、研究与页面。先兼容读取,再发布,最后开启修订。 四批为确定排序、不可变版本、消费与重核、研究与页面。先兼容读取,再发布,最后开启修订。
本地验证不能代替部署验收。目标时延十二分钟,需上线测量。模拟实例需观察五个交易日。 本地验证不能代替部署验收。目标时延十二分钟,需上线测量。10-15 用户确认当前即为模拟仓,取消额外五个交易日观察;首个完整晨版通过后启用修订及重核。
容器与生产操作另按授权边界执行。避开 06:10 及 07:10 窗口。 容器与生产操作另按授权边界执行。避开 06:10 及 07:10 窗口。
版本至少保存一百二十个交易日。被未结束提议或持仓引用的记录继续保留。 版本至少保存一百二十个交易日。被未结束提议或持仓引用的记录继续保留。
本轮初始状态:尚未部署,尚未完成五日观察。验收实测在文末追加。 本轮初始记录为未部署;当前已部署,五日等待条件已由用户取消。验收实测在文末与交接追加。
## 开发人员实现说明 ## 开发人员实现说明
@ -129,7 +129,7 @@ python plan_health.py
``` ```
平台入口仍是 `/api/v1/xxl/daily-build?steps=plan-refresh`,使用既有 X-Job-Key 鉴权; 平台入口仍是 `/api/v1/xxl/daily-build?steps=plan-refresh`,使用既有 X-Job-Key 鉴权;
实际平台任务尚未创建。日检只读文件,0 正常、1 旧版/待修订/修订检查超十二分钟、2 缺档或结构损坏。 实际平台任务为 XXL 137“每日选股计划五分钟修订”,已创建但停止,首个完整晨版通过后启用。日检只读文件,0 正常、1 旧版/待修订/修订检查超十二分钟、2 缺档或结构损坏。
时段外不把停止检查误报成故障;窗口内没有今日晨版也会提示。 时段外不把停止检查误报成故障;窗口内没有今日晨版也会提示。
## 本地验收与分批上线 ## 本地验收与分批上线
@ -144,10 +144,19 @@ python plan_health.py
10-15 已获得本次容器操作批准;不把这次批准延伸为以后维护的常设授权。用户另批准补齐旧排序配置, 10-15 已获得本次容器操作批准;不把这次批准延伸为以后维护的常设授权。用户另批准补齐旧排序配置,
桥实际为 PLAN_RANK_AXIS=transmission、CARD_SORT_BY_QUALITY=0,保持原行为。今天旧计划字节不变。 桥实际为 PLAN_RANK_AXIS=transmission、CARD_SORT_BY_QUALITY=0,保持原行为。今天旧计划字节不变。
下一交易日首个完整晨版仍需核验,随后建立 XXL 五分钟任务并启用模拟仓核验;自动修订、核验和五日观察尚未开始。 下一交易日 10-16 07:25 由 Codex 心跳 automation-2 核验首个完整晨版;通过后启用已经创建且停止的 XXL 137,并打开模拟仓提议重核。额外五日模拟观察已取消。
模拟实例连续五个交易日每天记录:晨版与修订版本、输入及配置指纹、评析到达/发布/消费三个时刻、 按首版与后续实际修订事件记录(不再要求连续五个交易日):晨版与修订版本、输入及配置指纹、评析到达/发布/消费三个时刻、
消费顺序、信号优先原因、待核验股票、重新确认案例、失败恢复及重复指令计数。 消费顺序、信号优先原因、待核验股票、重新确认案例、失败恢复及重复指令计数。
目标为同版内容一致、旧版不变、正常传播不超过十二分钟、无并发重复指令。生产故障恢复与真实时延均待判收。 目标为同版内容一致、旧版不变、正常传播不超过十二分钟、无并发重复指令。生产故障恢复与真实时延均待判收。
回退优先暂停平台 plan-refresh 并关闭新核验控制,保留版本、报告对象与账本;继续提供最后一份完整计划。 回退优先暂停平台 plan-refresh 并关闭新核验控制,保留版本、报告对象与账本;继续提供最后一份完整计划。
禁止把回退解释为删除历史或恢复查询时局部覆盖评析。 禁止把回退解释为删除历史或恢复查询时局部覆盖评析。
## 10-15 补充决定
用户取消额外五日模拟观察,未取消具体技术验收。任务 137 以 A股交易日时间段模式配置 07:20—15:10、300 秒,
当前停止;07:10 与 08:45 原任务保持。首个完整晨版通过后直接按已授权范围启用修订及提议重核,失败则保留当前有效版本并修复。
Codex 心跳 automation-2 负责 10-16 07:25 的接续检查和必要后续验证,不能当作五分钟业务调度。
PMS 三项旧对账差异的防双记修复 e9afc7a 已部署;旧批次成本、盈亏及执行进度仍需有证据的独立修复,不把日终数量归零差额当历史修复完成。
详细实例、测试、证据快照及待判收项见同日交接最后一节。