From 845d6f2d0b29e44c21a88a90e7d4b623edea42cd Mon Sep 17 00:00:00 2001 From: zlt Date: Mon, 14 Sep 2026 10:58:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=82=E5=AF=9F=E8=AF=BB=E6=95=B0=E5=8C=85?= =?UTF-8?q?=E4=B8=8E=E5=8A=A0=E5=9B=BA=E5=8C=85=E8=AF=84=E5=AE=A1=EF=BC=9A?= =?UTF-8?q?=E5=8F=AF=E9=83=A8=E7=BD=B2=EF=BC=8C=E4=B8=89=E5=A4=84=E8=AF=BB?= =?UTF-8?q?=E6=95=B0=E5=8F=A3=E5=BE=84=E4=B8=8E=E6=96=87=E6=A1=A3=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E6=80=A7=E8=A6=81=E5=9C=A8=2009-17=20=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8=E5=89=8D=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 逐行读了三个提交的差异与四个新文件,开发机全量单测 846 例 ALL SUITES PASS, 核实了七处单测覆盖不到的接线。结论是可以收盘后部署 155。要修的三处: 增持门拦截次数用累计次数会因两分钟窗口翻倍、DEVLOG 节点欠账写了已做的事、 早上两次映射重建都写逐只无读数行。另有四条不阻塞的小建议。 Co-Authored-By: Claude Fable 5.1 --- docs/观察读数包与加固包评审_2026-09-14.md | 133 ++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docs/观察读数包与加固包评审_2026-09-14.md diff --git a/docs/观察读数包与加固包评审_2026-09-14.md b/docs/观察读数包与加固包评审_2026-09-14.md new file mode 100644 index 0000000..ccc4eb1 --- /dev/null +++ b/docs/观察读数包与加固包评审_2026-09-14.md @@ -0,0 +1,133 @@ +# 观察读数包与加固包评审(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. 拍板点第三条(策略票网格买入腿)与第四条(选股打分)仍待答复。