tradingSystem/docs/提议采纳失败排查_2026-10-16.md

66 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 提议采纳失败排查与修复
记录时间:2026-10-16 14:05,北京时间。仅操作155模拟仓,188未操作。
## 事实与原因
科士达13:27因依据变化完成重新评估。用户13:39:02再次确认时依据相同,version_check=passed,生成唯一指令 INS_20261016_002518SZ_OPEN_001,600股。操作日志276和动作账本6796对应成功。13:59仍PROPOSED、执行0股。本次自然操作补齐“依据未变直接通过”的验收,未由开发助手采纳。
瑞芯微13:40:00被重新研判拒绝。共享研判审计的created_at原值为05:40:00 UTC,与PMS北京时间响应吻合。结论PMS_REJECT;只读缓存确认把握度72。原理由为“实时主力净占比-4.04%且历史多次净流出,250日高位赔率-0.40,5日看空,开新仓证据反对。”这是当时研判系统的判断,不是本次开发重新作出的投资建议。
旧代码在重核拒绝时只返回“新版重新评估未通过”,真实原因仅放在details,页面不展示。旧提议也没有保存本次失败,继续显示上午“需人工确认”的意见。由13:39:10重新取计划到13:40响应约50秒。本次请求是明确的业务拒绝,未见请求超时。另发现潜在等待缺陷:浏览器60秒超时早于后端研判90秒上限。
## 修复内容与边界
功能提交4f6b192。失败原因按原返回内容提取,区分规则、研判、策略和候选不足。最近失败保存在现有提议JSON,以原内容和WAIT_USER状态做条件更新。原数量、原批准依据和提议状态保持。失败不生成指令,不写影响自动判断的拒绝账本。具体错误由原操作日志记录。已失败提议须重新核验,不能因组合恰好回到旧值而复用旧批准。
确认框保留错误信息,卡片提供再次查看入口。新版建议在同一框显示数量及理由,清空旧选择后重新确认。等待期间防止重复点击,并说明正在核验。浏览器等待为有效研判超时加60秒,最低120秒;当前为150秒。未收到结果时不自动重发,也不声称后端已经失败。没有改动准入、仓位、交易时段、研判结论或执行规则。
13:40旧失败没有自动补写回原提议。其原因已从审计找回并记在本报告。新失败记录从上线后生效,不以新检查冒充旧检查。
## 测试、部署与实测
本地24个专项、44批隔离禁网回归通过,含三页面守卫。前端Node替身覆盖错误保留、更新后确认、未知结果、重复点击和异常释放。155候选镜像在--network none下运行全部44批测试通过。
13:59:00四容器统一重建为sha256:6ee444e1c734dc454a8564c9e6ae8f05c5e0c4b25ba9282049f61234a1db10af,标签pms:proposal-feedback-4f6b192。镜像与运行容器Python指纹均为63b3e303084e。四个变更源码的SHA与本地一致。页面SHA为4ba2ed96f0b207ac2a7b6b2bfb952d956420f85d05e61b28ef85ec257e1c8543。开发机Python总指纹包含两个既有未跟踪探针,不能与纯归档镜像直接混比。
13:59:33前后15项参数、三票数量成本毛盈亏、24条历史指令进度、当日指令、提议及成交记录一致。修复审计仍122+1。对账diffs=[]、errors=[]、severity=OK、streak=0。QMT ONLINE、resync_flag=0、last_error空,last_seq=1245545。健康正常、db_ok=true、交易日历未降级。原两处事实源覆盖差异仍单列,不改ws_first。
浏览器独立标签核验页面正常、既有风格保持、错误日志为空。用户原标签及未提交确认框保留。自动审批拒绝打开“采纳”确认框,理由是会话不允许代点采纳。因此未在真实页面提交或代测采纳;确认框交互由离线替身验证。上线后自然失败提示的完整浏览器效果仍待正常用户事件,不能用只读页面检查替代。原心跳14:30接续,不为验收制造交易。
## 可复核命令
```bash
# 开发机 · tradingSystem 根目录;预期24 tests、OK
/private/tmp/pms-codex-20261012-venv/bin/python scripts/unit_test_guard.py scripts/test_batch38_units.py
node scripts/test_proposal_dialog.cjs
```
```bash
# 155模拟PMS机 · ~/project/tradingSystem;只读,核对自然用户事件
cd ~/project/tradingSystem
docker exec -e PYTHONPATH=/app -i pms-web python < ~/pms_logs/verify_proposal_rejection_20261016.py
```
## 证据与回退
证据在155 ~/pms_logs/。proposal-feedback-build-20261016.log、proposal-feedback-tests-20261016.log记录候选镜像验证;proposal-feedback-deploy-20261016.log记录重建。proposal-feedback-before-deploy-20261016.json和after-deploy文件为运行参数账本;events-before和events-after为提议、指令、成交与历史修复审计;before-20261016.sha256保存写前摘要;comparison文件保存逐项对照。proposal-web-20261016-1345.log和proposal-rejection-audit-20261016.json为本次问题证据。日志展示先脱敏,不打印鉴权参数。
回退镜像pms:rollback-before-proposal-feedback-20261016,指向a33ecb004e285ed7991b1492477e222703d1ec89892e36ee7cb51ee2d555b3c8。155挂载/app,回退须开发机反向提交后服务器git pull,再以匹配镜像重建四容器;不能只换镜像。保留新增检查记录、真实成交和七条历史取消状态,不以回退为由恢复续单。
## 14:45 追加:明确否决后撤下旧提议
用户14:20自然确认已看到具体否决,但旧提议仍待确认。本次按用户意见修正生命周期,取代上文所有失败都保留状态的范围。功能60de23e:明确研判拒绝、策略放弃或可核验资格失效转EXPIRED并标记withdrawn;暂时性不足和来源不可用继续等待。状态与拒绝账本同事务,原JSON防并发。旧已保存拒绝由既有扫描收尾,不新增模型调用。实际拒绝原因不再拼接在途名额背景。
30专项、44批本地及候选镜像禁网回归、Node交互替身与三页面守卫通过。14:39:51四容器统一镜像befb6246f3d8a4e5d5c4b6c8e2f3823a5875ef7d9acfe32e578ff0fe4fb80a46,指纹3777e125a88a。14:40:01正常扫描撤下瑞芯微,原100股及旧批准依据不变,保留原14:20检查时间,唯一拒绝账本6858,没有对应指令。14:45重复读回仍唯一。没有记录的历史重问基线为空,不用上午191元旧价冒充14:20行情。
14:40部署前后15参数、三票数量成本毛盈亏、其他提议、当日指令数量进度、成交行及122+1修复审计保持。24条历史指令仅既有WAIT时刻推进一分钟,执行数量、金额、子单不变。七条历史取消保持。QMT ONLINE、resync_flag=0、last_error空,对账diffs=[]、errors=[]、severity=OK。只读浏览器确认待确认0条,候选正常且无错误。用户原标签旧框保留,刷新可见新版;未代点采纳。确认框撤下分支由离线交互覆盖,实际撤下与列表已在线核验。
证据在155 ~/pms_logs/proposal-withdraw-*。回退标签pms:rollback-before-proposal-withdraw-20261016指向6ee444e;绑定挂载需源码反向提交、pull及配套重建。保留撤下和交易历史,不恢复旧提议或暂停指令。完整本轮判收与历史边界见四仓交接14:45节。
```bash
# 155模拟PMS机 · ~/project/tradingSystem;只读,瑞芯微EXPIRED且withdrawn,拒绝仅一条,无对应买入指令
cd ~/project/tradingSystem
docker exec -e PYTHONPATH=/app -i pms-web python < ~/pms_logs/withdraw-records-20261016.py
```