tradingSystem/docs/观察读数包与加固包评审_2026-09-14.md

134 lines
9.4 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-09-14
> 评审对象是《下一阶段开发方案与规格书_2026-09-14》里观察读数包、加固包、文档包三个工作包的落地
> 对应提交 f2d6b37、e21b73b、b1ebb36。写法遵守 `.claude/output-styles/readable-chinese.md`。
> 读完第二节就知道能不能部署。第五节是发现,第七节是部署与判收建议。
---
## 一、评审做了什么
1. 读了三个提交的全部差异,二十三个文件。逐行读了四个新文件:落表服务、单表仓库、复核脚本、第三十一批单测。
2. 在开发机用旧虚拟环境跑了全量单测。
3. 核实了单测覆盖不到的七处接线,清单在第五节末尾。这些地方单测用的是手造数据,接错了只有真机才会暴露,所以逐处对着源码看了一遍。
4. 在模拟仓 155 只做只读检查:代码版本、镜像指纹、容器状态。没有改任何东西。
## 二、一句话结论
两个代码工作包按规格书做完了,质量达标,可以在今天收盘后部署到 155。没有发现必须改了才能部署的问题。
有三处要在 09-17 第一次复核之前修正,都是读数口径与文档一致性的问题,不是代码缺陷。另有四条不阻塞的小建议。
## 三、对照规格书的完成度
| 规格书条目 | 状态 | 证据 |
|---|---|---|
| 观察读数包第 1 件,新表 pms_consensus_stat | 完成 | 建表语句是第 21 张,表数哨兵已改 |
| 观察读数包第 2 件,动作引擎打标签 | 完成 | 四个标签常量,跳过分无评析与看空两类,观察与增持门各一类,只在开关开着的分支里打 |
| 观察读数包第 3 件,归类落表 | 完成 | 检查点写路由与装配两类,转空实弹随时写,试算不写,登记进软失败名单 |
| 观察读数包第 4 件,映射覆盖 | 完成 | 映射重建后写覆盖行与逐只无读数行 |
| 观察读数包第 5 件,复核脚本与 make 目标 | 完成 | 四张表都有,目标名 consensus-review |
| 观察读数包第 6 件,日报小节 | 完成 | 取数失败写空,不拖垮日报 |
| 加固包第 1 件,去重集清除条件 | 完成 | 抽成纯函数,只在明确为多时清除,加三例 |
| 加固包第 2 件,持仓行转多留痕 | 完成 | 与候选同一来源,加一例 |
| 加固包第 3 件,弱表态开关 | 完成 | 已登记,默认开即旧行为,加两例 |
| 加固包第 4 件,时钟用例 | 完成 | 改成十分钟前,任何时刻都过 |
| 文档包README 与 CLAUDE.md 的影子模式说法 | 完成 | 两处都改成「以页面横幅为准」并写清两套实例现状 |
| 文档包CLAUDE.md 入库 | 完成 | |
| 文档包,台账 013 | 完成 | 口径写得清楚,见第五节第一条的一处修正 |
| 文档包,开发节点记录 | 完成,有一处内部不一致 | 见第五节第二条 |
| 文档包,台账 012、014 与接口契约 | 未做,随对应工作包 | 符合规格书安排 |
拍板点的状态:第一条策略层总开关,节点记录写已确认有意打开。第五条 README 说法,已按建议改。第七条新表承载观察读数,已按建议做。其余五条仍待拍板。
## 四、验证读数
| 项目 | 读数 |
|---|---|
| 开发机全量单测 | 三十二批全部通过,最后一行 ALL SUITES PASS总数 846 例 |
| 第二十四批 | 在 10:5x 跑通过。用例已改相对时刻,不再依赖墙上时钟 |
| 模拟仓 155 代码 | 仍是 969d189镜像指纹一致四容器健康。本阶段代码未部署盘中不部署是对的 |
| 155 容器时间 | 北京时间,与开发机一致 |
## 五、评审发现
### 要在 09-17 复核前修正的三处
**第一,「增持门拦截次数」的口径与实现对不上。**
检查点是两分钟窗口,扫描每分钟一跳,一只票在一个检查点里会被记两次。一天四个检查点,一只票最多记八次。台账 013 写「增持门拦截次数用累计次数算,不是行数」,复核脚本第二张表也用累计次数。这个数既不是被拦的轮数,也不是命中的检查点数,读的人会误解。
建议改脚本第二张表用只数,累计次数只当诊断信息。台账 013 的口径那一句同步改。若一定要「几个检查点仍被拦」这个数,要把窗口收成一分钟并保证记到一次,那需要跨轮状态,不值得为此加复杂度。
**第二,开发节点记录那条节点内部不一致。**
09-14 节点的「还欠着什么」第二条写 README 影子模式说法待改、CLAUDE.md 待入库。而追加这条节点的同一个提交已经把这两件做了。「做了什么」里也没提文档包。下一次交接读到会以为这两件还没做。
建议把这两项从欠账里删掉,在「做了什么」里补一段文档包做了什么。
**第三,早上两次映射重建都写逐只无读数行。**
06:30 与 08:40 各重建一次映射各写一遍逐只无读数行。06:30 缺读数、08:40 补拉后有了读数的票06:30 那一行留着不删。复核脚本第一张表的占比用覆盖行算,覆盖行每次覆盖写,不受影响。但若有人按逐只无读数的行数看,会偏高。
建议逐只行只在 08:40 那次写,或在脚本第一张表注明只看占比。优先级低。
### 四条不阻塞的小建议
1. 跳过原因按子串「买方评析」分成两类。合议路由是唯一来源且在同一仓库,现在没问题。日后改了文案会静默归错类。可让合议路由顺带返回一个类别字段,标签直接用它。
2. 复核脚本第四张表把「合议交人而人采纳」算作对不上。交人本来就是让人决定,人采纳不是分歧。真正要盯的是合议看多而人驳回。建议把交人被采纳单列成信息行,不计入对不上。
3. 落表入口收了 params 参数但没用。无妨,删掉或注明留给盘中确认包用。
4. 复核脚本取提议用固定上限五百条,三天窗口够用。若把窗口调到三十天可能不够,可按天数放大上限。
### 核实过、没有问题的七处
写出来是为了下次不必再查。
1. 持仓扫描的跳过项在落表之前已并入总的跳过列表,位置在 proposal_service.py 第 182 行。增持门标签能落表。
2. 转多留痕来源函数返回的键就是 at持仓行的转多留痕接得上。
3. 提议表有裁决时刻列,硬数字已解码成字典,裁决状态枚举就是 ACCEPTED 与 DECLINED取提议的函数支持含已归档。复核脚本第四张表用的都对。
4. 新表不存在时写失败被判为「SQL 本身错」而不是「连不上库」,不会把代理库源拖进冷却,不影响同进程的其他数据库操作。
5. 参数中心对存了空串的字符串参数原样返回空串。检查点参数设空即只留转空实弹,回退成立。
6. 候选处置快照复用扫描函数但不经过总入口,不会触发落表。
7. 聚合查询与手动展开的 IN 在既有仓库里有先例,单表守卫放行。落表的 SQL 已在单测里过了一遍守卫。
六个开关的逐字回旧也核过:标签只在开关开着的分支里打;弱表态开关默认真即旧行为;合议全关时落表入口不产生任何行,只有转空实弹例外,而那是既有行为。
## 六、做得好的地方
1. 完全按规格书附录甲做。类别、表结构、检查点、软失败名单、哨兵,一处不漏。
2. 单测覆盖了规格书列的每一条,二十例。既有两批各加三例,没有另起炉灶。
3. 更新子句只用 VALUES 引用插入值并加了断言钉住。09-11 那个真机坑不会重犯。
4. 三个提交各自能独立回退,提交信息说行为。
5. 文档包顺手把 CLAUDE.md 的影子模式说法也改了。规格书只要求改 README这一步方向对。
## 七、部署与判收建议
**今天收盘后部署,先经审批。** 建议在容器内时间 15:40 之后,避开 15:10 日终结算、15:20 净值快照、15:30 日报三个调度位。要重建容器并建新表,按服务器铁律先列命令拿批准。
**模拟仓 155仓库根目录。** 预期 make test 最后一行 ALL SUITES PASS建表输出 21 张表,其中有 pms_consensus_statmake stale 指纹一致。
```bash
cd /home/factor/project/tradingSystem && git pull --ff-only && make deploy && make test
```
**模拟仓 155明天 09-15 早上 08:45 之后。** 预期打印当天一行覆盖记录codes 是相关票数states 是覆盖只数。
```bash
cd /home/factor/project/tradingSystem && docker exec pms-web python -c "from app.repo import consensus_stat_repo as r; import json; rows=r.list_range(20260915, 20260915, kinds=['map_cover']); print(json.dumps(rows, ensure_ascii=False, default=str))"
```
**模拟仓 15509-15 上午 09:37 之后。** 预期四张表都打出来,第一张有 09-15 的占比,第二张有路由分布,第三张写没有转空离场实弹。
```bash
cd /home/factor/project/tradingSystem && make consensus-review DAYS=1
```
**09-17 第一次正式复核之前**,把第五节的前两条修掉,不然复核读数会被误读、交接会被误导。
## 八、下一步
1. 收盘后部署观察读数包与加固包,按第七节判收,读数回填到开发节点记录。
2. 修第五节前两条,一起随下一次部署上。
3. 盘中确认包与页面收尾包按规格书第四节在 09-17 起推进。盘中确认包动工前要拍板点第二条的答复。
4. 拍板点第三条(策略票网格买入腿)与第四条(选股打分)仍待答复。