From 290973826340ebe5f979e1135c5733ee3001d212 Mon Sep 17 00:00:00 2001 From: baobao Date: Thu, 15 Oct 2026 12:44:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E6=8E=A5=E5=89=AF=E6=9C=AC=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVLOG.md | 9 ++ docs/PMS三项对账差异排查_2026-10-15.md | 84 +++++++++++++++++++ docs/交接_每日选股计划完善_2026-10-15.md | 54 ++++++++++++ ...�日选股计划完善方案与开发规格_2026-10-15.md | 7 ++ 4 files changed, 154 insertions(+) diff --git a/DEVLOG.md b/DEVLOG.md index 20e459a..9f6ef9f 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -1864,3 +1864,12 @@ docs/交接_2026-09-20.md(新)、docs/dev_preview/mock_preview.py 与 sample 用户已授权备份后恢复数量、成本、盈亏和执行进度。实现 app/core/ledger_repair.py、scripts/repair_ledger_history.py 和 db.session 的受控事务入口;原行比较、全部逐笔与运行参数守卫、行级审计、条件回退均在同一事务边界内。ledger_service 的成本重算改用剩余成本减已实现金额,保持相同摊薄口径并消除三位均价反乘误差。 本地配置隔离且禁网:test_batch40 的 21 例通过,全量 44 批通过。生产备份和完整预判见 docs/PMS三项对账差异排查_2026-10-15.md;真实读数仅作离线预演,尚未写账,部署和判收后续追加。原未提交台账 017、讨论稿和探针未纳入本提交。 + + +## 2026-10-15 12:40 · 历史逐笔修复部署与真机判收 + +0871885 已推送并在 155 拉取,四个容器用同一已断网验证镜像重建。12:37:27 页面/通道启动,12:39:33 调度恢复。镜像 sha256:22422dc46784ff87c8ccfc6f9a2ae05ba8ee111eb18e3f1a369f9d913279ff0b,指纹 01251315d8d1;回退标签 pms:rollback-before-history-repair-20261015。 + +先备份后写入,批号 HIST_c036a684cab040387321396e。134 笔成交恢复 61 个真实批次并将 33 个重复或 RECON 批次归零留痕;24 条父指令进度、活跃网格余量同步恢复。122 行修改与 123 条审计在同一事务提交,独立读回原值比较通过;重复执行返回 already_applied 且审计数量不变。三票恢复为 700/1900/1400 股,成本 44.109/55.060/23.704,毛盈亏 -6762.70/-1684.25/16.86。对账 diffs=[]、severity=OK,健康及通道正常。完整证据与不可还原边界见三项差异排查文档及四仓交接。 + +真实超目标成交 1300 股保留事实,七条误判完成指令暂停剩余执行;未改原始成交、游标和历史报表。费用、历史峰值、旧轮次原批次及全组合历史绩效未伪造恢复。自然新成交与次日首晨版尚待真实事件判收。automation-2 已更新结果并保留 10-16 07:25,不增加五日观察。 diff --git a/docs/PMS三项对账差异排查_2026-10-15.md b/docs/PMS三项对账差异排查_2026-10-15.md index 90a135c..aef7ed5 100644 --- a/docs/PMS三项对账差异排查_2026-10-15.md +++ b/docs/PMS三项对账差异排查_2026-10-15.md @@ -60,3 +60,87 @@ WebSocket 逐笔回报均 processed=1,汇总委托全部已进入 PMS_REPLAY_C 写回只在受影响子单无在途、无未处理逐笔时进行。短暂停止 pms-beat 与 pms-worker,保留通道接收能力;所有快照比较和更新位于同一数据库事务,每条 SQL 仍经过表名前缀与单表守卫。事务写入审计记录;备份指纹不符、数据已变或中途失败均不提交。重复执行同一批号返回已完成。回退必须先比较修复后字段,若已有新成交则拒绝覆盖。写完只读核对,再恢复调度。 预判:重建后数量分别为 700、1,900、1,400;全部相关子单逐笔量等于累计量;虚假买入批次和 RECON 调整不再贡献成本或盈亏;指令真实进度不会因修复自动生成新单;原始成交、回放游标、策略阈值和明日启用门槛不变。测试覆盖金额、部分成交、漏笔、匹配歧义、并发、幂等、失败回滚及旧指令不复活。生产读回后逐条判收。 + + +## 10-15 12:40 历史账本修复完成与判收 + +本节取代前文“三项历史差异尚未修复”的当前状态。用户明确批准先备份、逐笔核对并恢复数量、成本、盈亏及指令执行进度。已在 155 模拟仓完成,188 未操作。 + +### 备份、部署和写回 + +功能提交 `0871885`,Python 指纹 `01251315d8d1`。本地配置隔离禁网和 155 候选镜像 `--network none` 均通过全部 44 批测试,新批次 40 有 21 例。未将用户原有未提交台账 017、讨论稿或探针纳入提交。 + +先于任何写账保存完整备份,再在午间暂停 beat/worker,拉取已提交版本并重建四容器。web/ws 于 12:37:27 启动,worker/beat 于 12:39:33 恢复。四容器同镜像 `sha256:22422dc46784ff87c8ccfc6f9a2ae05ba8ee111eb18e3f1a369f9d913279ff0b`,标签 `pms:history-repair-0871885`;上一镜像留为 `pms:rollback-before-history-repair-20261015`。 + +155 宿主 `~/pms_logs/` 的证据如下,JSON 文件权限为 600。 + +| 文件 | 内容或 SHA256 | +| --- | --- | +| historical-repair-backup-20261015-1225.json | 初始完整备份,81cfc59600d7ca07de7fc4b83b7c5b153719d0ea248be21fd9d910bcfc32e636 | +| history-repair-before-write-20261015.json | 12:37:55 写前完整备份,d1b3eeaede0ea418ec071fa593ee6a98177a55433ee0201b502ff80ff6226f02 | +| history-repair-preview-20261015.json | 逐笔映射、每笔卖出分配、逐日数量金额、全部目标列和原值 | +| history-repair-after-write-20261015.json | 写后完整备份,8463f0da2e1d152e7606c38607918b05555481f4ecbd15b482a326951ebd3606 | +| history-repair-apply-20261015.log / history-repair-verify-20261015.json | 实际提交及独立读回判收,全部检查通过 | +| history-repair-build-20261015.log / history-repair-tests-20261015.log / history-repair-deploy-20261015.log | 候选构建、断网测试及容器重建 | + +修复批号 `HIST_c036a684cab040387321396e`。同一事务校验原行、完整逐笔和有效参数,修改 122 行,保存 122 条逐行原值审计和 1 条完成记录。再次执行同一备份返回 already_applied,审计数仍 122+1。原始成交、回放游标、方案、命令、手续费流水、旧日报净值及其他股票原行均未被改写。 + +### 实际恢复结果 + +| 股票 | 恢复数量 | T+1 可卖量 | 摊薄成本(元) | 账期已实现盈亏(元) | 可追溯起点 | +| --- | ---: | ---: | ---: | ---: | --- | +| 002050.SZ | 700 | 600 | 44.109 | -6762.70 | 2026-09-22 | +| 002979.SZ | 1900 | 1900 | 55.060 | -1684.25 | 2026-09-21 | +| 688100.SH | 1400 | 0 | 23.704 | 16.86 | 2026-10-14 | + +成本沿用 PMS 的含已实现盈亏摊薄口径,盈亏为原批次核销规则下的毛额,不含费用。134 笔成交对应 61 个真实买入批次;33 个重复汇总或 RECON 批次归零留痕,原 ID 保留。逐笔成交与 39 个留存子单的累计数量一致,累计均价差异最大 0.004964 元,处于 QMT 两位小数舍入范围内;其中 2 个子单属于 688100 的已闭合旧轮次,未混入当前账期。 + +24 条父指令恢复实际成交量、成交均价,并在 progress 中增加逐笔证据、原进度、剩余量及超额量。七条原误判 CONFIRMED 的指令改为 CANCELLED,含义为“历史修复暂停剩余执行”;其子单都已终态,无需撤单,也没有向 QMT 发送撤单或新单。仍在执行的 002050 DCA 指令实际进度为 100/300,保持原生命周期。 + +002979 的 `STR20261012093212_002979SZ_g` 目标 1300 股,两个真实子单累计买入 2600 股,保留超额 1300 的事实。这是实际执行异常,无法通过删账撤销,后续须单独排查历史出手并发/重试链路;本次没有反向交易。688100 活跃网格第 3 档恢复为真实剩余 1000 股,批次成本 23506.51 元、均价 23.50651;原仅记 700 股/16471 元。已取消的旧策略未恢复。 + +12:40 真机健康 200、db_ok=True、calendar_degraded=False,QMT ONLINE、last_seq=acked_seq=1226583、last_error 为空,待入账 0。独立对账返回 diffs=[]、errors=[]、severity=OK。历史 streak=14 是尚未到日终重置的旧计数,不是仍有三项差异。既有 ws_first 源覆盖警告仍为 562590.SH、688825.SH 两票,单列保留,不混同已修复差异。 + +### 明确不能还原或未判收的部分 + +1. 134 笔逐笔费用为空,无法还原真实扣费与净盈亏;费用流水原为空,未补零冒充真实费用。 +2. 缺完整盘中行情和当时账本,历史安全垫峰值无法准确恢复,保留原值并标明限制。 +3. 688100 的 08-27 买 800、09-01 卖 800 的旧轮次可核对成交毛差 330.47 元,但原父指令和批次已不在当前账本;无法恢复原始批次分配与完整决策链,不把该旧轮次利润写进本轮。 +4. 历史日报和全组合净值受旧错账影响,缺少重建全组合所需的全部原始状态,本次保持原档案。修复预演提供逐票逐日数量、成交净额和批次盈亏,不能将其冒充当时实际报表或已修复全历史绩效。 +5. 防双记代码的自然新成交判收仍需真实事件;不得制造成交来验收。真实超目标成交和两个事实源覆盖分歧仍单列待查。 + +### 后续和回退 + +`automation-2` 已更新修复结论,保持 ACTIVE 和北京时间 10-16 07:25。首个完整晨版通过后启用已创建且停止的 XXL 137,再开启 155 的 PMS_PLAN_VERSION_RECHECK。当前该参数仍 False,ws、propose_only、旧传导排序及档位和仓位参数保持;不增加额外五日模拟观察。版本一致、顺序、自然传播十二分钟、失败守成和无重复指令仍须实际事件判收。 + +手工入口 `scripts/repair_ledger_history.py` 开头列有 backup/preview/apply/rollback 跑法。回退须读取审计并比较修复后原行,后续有新交易或状态变化会拒绝覆盖;不得通过切旧镜像恢复旧账,更不得直接用旧备份覆盖新的成交。回退保留新旧审计与计划版本。 + + +### 父指令进度逐条核验 + +| 父指令 | 原记成交量 | 真实成交量 | 真实均价 | 写后状态 | 剩余量 / 超额量 | +| --- | ---: | ---: | ---: | --- | --- | +| INS_20260918_002050SZ_OPEN_001 | 622 | 500 | 36.160 | CONFIRMED | 0 / 0 | +| STR20260923100400_002050SZ_g | 3277 | 1900 | 35.936 | CONFIRMED | 0 / 0 | +| STR20260923130400_002050SZ_g | 616 | 500 | 36.031 | CONFIRMED | 0 / 0 | +| STR20260928093600_002050SZ_g | 3544 | 1900 | 35.995 | CONFIRMED | 0 / 0 | +| STR20260928094700_002050SZ_g | 2000 | 1900 | 35.985 | CONFIRMED | 0 / 0 | +| STR20260928094900_002050SZ_g | 3609 | 1900 | 35.844 | CONFIRMED | 0 / 0 | +| STR20260930095702_002050SZ_g | 2183 | 1900 | 36.028 | CONFIRMED | 0 / 0 | +| INS_20260930_002050SZ_OPEN_100000 | 1600 | 800 | 35.032 | CANCELLED | 800 / 0 | +| INS_20261009_002050SZ_EXIT_103100 | 2711 | 1400 | 32.213 | CANCELLED | 1300 / 0 | +| INS_20261012_002050SZ_EXIT_93100 | 1346 | 700 | 33.044 | CANCELLED | 600 / 0 | +| INS_20261015_002050SZ_DCA_001 | 200 | 100 | 30.679 | DISPATCHED | 200 / 0 | +| INS_20260921_002979SZ_OPEN_001 | 307 | 200 | 54.470 | CANCELLED | 100 / 0 | +| STR20260923094502_002979SZ_g | 1401 | 1300 | 54.192 | CONFIRMED | 0 / 0 | +| STR20260923095800_002979SZ_g | 291 | 200 | 54.249 | CONFIRMED | 0 / 0 | +| STR20260924093702_002979SZ_g | 2438 | 1300 | 54.210 | CONFIRMED | 0 / 0 | +| STR20260924094001_002979SZ_g | 1458 | 1300 | 54.351 | CONFIRMED | 0 / 0 | +| STR20260924094200_002979SZ_g | 1683 | 1300 | 54.260 | CONFIRMED | 0 / 0 | +| INS_20261012_002979SZ_EXIT_001 | 2600 | 1300 | 54.178 | CANCELLED | 1300 / 0 | +| STR20261012093212_002979SZ_g | 2600 | 2600 | 53.677 | CONFIRMED | 0 / 1300 | +| INS_20261015_002979SZ_EXIT_95100 | 3900 | 2000 | 52.681 | CANCELLED | 1900 / 0 | +| INS_20261014_688100SH_OPEN_001 | 800 | 400 | 24.240 | CANCELLED | 400 / 0 | +| STR20261015094200_688100SH_g | 1023 | 700 | 23.571 | CONFIRMED | 0 / 0 | +| STR20261015094500_688100SH_g | 524 | 400 | 23.620 | CONFIRMED | 0 / 0 | +| STR20261015100700_688100SH_g | 1236 | 700 | 23.482 | CONFIRMED | 0 / 0 | diff --git a/docs/交接_每日选股计划完善_2026-10-15.md b/docs/交接_每日选股计划完善_2026-10-15.md index b8c8913..4a8b16d 100644 --- a/docs/交接_每日选股计划完善_2026-10-15.md +++ b/docs/交接_每日选股计划完善_2026-10-15.md @@ -222,3 +222,57 @@ SHA256 `8e0badf4d771fbf8a3227250c6cc2c2bf3c8234dda2fc33a31f0ab00920f5501`)。 消费必须来自正常 received/consumed 记录,预览读取不充作实际消费。自然新评析才能测实际传播时延; 不得为验收采纳提议或制造交易。若该时点还没有消费或自然修订证据,调整同一心跳后续核验时间继续。 当前历史账本差异不能被记录为已解决,但不以额外模拟天数代替具体技术验收。 + + +## 10-15 12:40 历史账本修复完成与判收 + +本节取代前文“三项历史差异尚未修复”的当前状态。用户明确批准先备份、逐笔核对并恢复数量、成本、盈亏及指令执行进度。已在 155 模拟仓完成,188 未操作。 + +### 备份、部署和写回 + +功能提交 `0871885`,Python 指纹 `01251315d8d1`。本地配置隔离禁网和 155 候选镜像 `--network none` 均通过全部 44 批测试,新批次 40 有 21 例。未将用户原有未提交台账 017、讨论稿或探针纳入提交。 + +先于任何写账保存完整备份,再在午间暂停 beat/worker,拉取已提交版本并重建四容器。web/ws 于 12:37:27 启动,worker/beat 于 12:39:33 恢复。四容器同镜像 `sha256:22422dc46784ff87c8ccfc6f9a2ae05ba8ee111eb18e3f1a369f9d913279ff0b`,标签 `pms:history-repair-0871885`;上一镜像留为 `pms:rollback-before-history-repair-20261015`。 + +155 宿主 `~/pms_logs/` 的证据如下,JSON 文件权限为 600。 + +| 文件 | 内容或 SHA256 | +| --- | --- | +| historical-repair-backup-20261015-1225.json | 初始完整备份,81cfc59600d7ca07de7fc4b83b7c5b153719d0ea248be21fd9d910bcfc32e636 | +| history-repair-before-write-20261015.json | 12:37:55 写前完整备份,d1b3eeaede0ea418ec071fa593ee6a98177a55433ee0201b502ff80ff6226f02 | +| history-repair-preview-20261015.json | 逐笔映射、每笔卖出分配、逐日数量金额、全部目标列和原值 | +| history-repair-after-write-20261015.json | 写后完整备份,8463f0da2e1d152e7606c38607918b05555481f4ecbd15b482a326951ebd3606 | +| history-repair-apply-20261015.log / history-repair-verify-20261015.json | 实际提交及独立读回判收,全部检查通过 | +| history-repair-build-20261015.log / history-repair-tests-20261015.log / history-repair-deploy-20261015.log | 候选构建、断网测试及容器重建 | + +修复批号 `HIST_c036a684cab040387321396e`。同一事务校验原行、完整逐笔和有效参数,修改 122 行,保存 122 条逐行原值审计和 1 条完成记录。再次执行同一备份返回 already_applied,审计数仍 122+1。原始成交、回放游标、方案、命令、手续费流水、旧日报净值及其他股票原行均未被改写。 + +### 实际恢复结果 + +| 股票 | 恢复数量 | T+1 可卖量 | 摊薄成本(元) | 账期已实现盈亏(元) | 可追溯起点 | +| --- | ---: | ---: | ---: | ---: | --- | +| 002050.SZ | 700 | 600 | 44.109 | -6762.70 | 2026-09-22 | +| 002979.SZ | 1900 | 1900 | 55.060 | -1684.25 | 2026-09-21 | +| 688100.SH | 1400 | 0 | 23.704 | 16.86 | 2026-10-14 | + +成本沿用 PMS 的含已实现盈亏摊薄口径,盈亏为原批次核销规则下的毛额,不含费用。134 笔成交对应 61 个真实买入批次;33 个重复汇总或 RECON 批次归零留痕,原 ID 保留。逐笔成交与 39 个留存子单的累计数量一致,累计均价差异最大 0.004964 元,处于 QMT 两位小数舍入范围内;其中 2 个子单属于 688100 的已闭合旧轮次,未混入当前账期。 + +24 条父指令恢复实际成交量、成交均价,并在 progress 中增加逐笔证据、原进度、剩余量及超额量。七条原误判 CONFIRMED 的指令改为 CANCELLED,含义为“历史修复暂停剩余执行”;其子单都已终态,无需撤单,也没有向 QMT 发送撤单或新单。仍在执行的 002050 DCA 指令实际进度为 100/300,保持原生命周期。 + +002979 的 `STR20261012093212_002979SZ_g` 目标 1300 股,两个真实子单累计买入 2600 股,保留超额 1300 的事实。这是实际执行异常,无法通过删账撤销,后续须单独排查历史出手并发/重试链路;本次没有反向交易。688100 活跃网格第 3 档恢复为真实剩余 1000 股,批次成本 23506.51 元、均价 23.50651;原仅记 700 股/16471 元。已取消的旧策略未恢复。 + +12:40 真机健康 200、db_ok=True、calendar_degraded=False,QMT ONLINE、last_seq=acked_seq=1226583、last_error 为空,待入账 0。独立对账返回 diffs=[]、errors=[]、severity=OK。历史 streak=14 是尚未到日终重置的旧计数,不是仍有三项差异。既有 ws_first 源覆盖警告仍为 562590.SH、688825.SH 两票,单列保留,不混同已修复差异。 + +### 明确不能还原或未判收的部分 + +1. 134 笔逐笔费用为空,无法还原真实扣费与净盈亏;费用流水原为空,未补零冒充真实费用。 +2. 缺完整盘中行情和当时账本,历史安全垫峰值无法准确恢复,保留原值并标明限制。 +3. 688100 的 08-27 买 800、09-01 卖 800 的旧轮次可核对成交毛差 330.47 元,但原父指令和批次已不在当前账本;无法恢复原始批次分配与完整决策链,不把该旧轮次利润写进本轮。 +4. 历史日报和全组合净值受旧错账影响,缺少重建全组合所需的全部原始状态,本次保持原档案。修复预演提供逐票逐日数量、成交净额和批次盈亏,不能将其冒充当时实际报表或已修复全历史绩效。 +5. 防双记代码的自然新成交判收仍需真实事件;不得制造成交来验收。真实超目标成交和两个事实源覆盖分歧仍单列待查。 + +### 后续和回退 + +`automation-2` 已更新修复结论,保持 ACTIVE 和北京时间 10-16 07:25。首个完整晨版通过后启用已创建且停止的 XXL 137,再开启 155 的 PMS_PLAN_VERSION_RECHECK。当前该参数仍 False,ws、propose_only、旧传导排序及档位和仓位参数保持;不增加额外五日模拟观察。版本一致、顺序、自然传播十二分钟、失败守成和无重复指令仍须实际事件判收。 + +手工入口 `scripts/repair_ledger_history.py` 开头列有 backup/preview/apply/rollback 跑法。回退须读取审计并比较修复后原行,后续有新交易或状态变化会拒绝覆盖;不得通过切旧镜像恢复旧账,更不得直接用旧备份覆盖新的成交。回退保留新旧审计与计划版本。 diff --git a/docs/每日选股计划完善方案与开发规格_2026-10-15.md b/docs/每日选股计划完善方案与开发规格_2026-10-15.md index 97c19a4..478b08f 100644 --- a/docs/每日选股计划完善方案与开发规格_2026-10-15.md +++ b/docs/每日选股计划完善方案与开发规格_2026-10-15.md @@ -160,3 +160,10 @@ python plan_health.py Codex 心跳 automation-2 负责 10-16 07:25 的接续检查和必要后续验证,不能当作五分钟业务调度。 PMS 三项旧对账差异的防双记修复 e9afc7a 已部署;旧批次成本、盈亏及执行进度仍需有证据的独立修复,不把日终数量归零差额当历史修复完成。 详细实例、测试、证据快照及待判收项见同日交接最后一节。 + + +## 10-15 历史修复补充规格与判收 + +历史修复遵循“完整备份—逐笔编译—前置原行比较—事务写回—独立读回”,不能只调整持股差额。真实买入须以数量、价格、父指令和入账时间唯一对应批次;重复汇总批次须有下游汇总证据;逐笔数量须等于子单累计数量。卖出沿既有批次核销次序重建成本与盈亏,费用缺失不伪造。所有 SQL 维持单表守卫。原误判完成但未足量的父指令暂停剩余执行,不自动复活旧单;真实超额成交保留事实。 + +155 已部署 0871885 并恢复三票数量、成本、盈亏和 24 条父指令进度。134 笔成交、122 行原值审计,重复执行幂等,独立读回无差异。本地与候选镜像全部 44 批通过。费用、历史峰值、已删除旧轮次批次与历史全组合绩效的限制见同日交接最后一节。原始成交、回放游标和历史报表不改写。明日 07:25 首晨版核验和通过后启用 XXL 137 / 提议重核的安排不变。