134 lines
9.4 KiB
Markdown
134 lines
9.4 KiB
Markdown
|
|
# 观察读数包与加固包评审(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_stat,make 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))"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**模拟仓 155,09-15 上午 09:37 之后。** 预期四张表都打出来,第一张有 09-15 的占比,第二张有路由分布,第三张写没有转空离场实弹。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /home/factor/project/tradingSystem && make consensus-review DAYS=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**09-17 第一次正式复核之前**,把第五节的前两条修掉,不然复核读数会被误读、交接会被误导。
|
|||
|
|
|
|||
|
|
## 八、下一步
|
|||
|
|
|
|||
|
|
1. 收盘后部署观察读数包与加固包,按第七节判收,读数回填到开发节点记录。
|
|||
|
|
2. 修第五节前两条,一起随下一次部署上。
|
|||
|
|
3. 盘中确认包与页面收尾包按规格书第四节在 09-17 起推进。盘中确认包动工前要拍板点第二条的答复。
|
|||
|
|
4. 拍板点第三条(策略票网格买入腿)与第四条(选股打分)仍待答复。
|