From 293ad6d0bc146003fb09c9fe79c6ef8d19b2cb5b Mon Sep 17 00:00:00 2001 From: shaofl <2899218482@qq.com> Date: Fri, 24 Jul 2026 01:32:53 -0700 Subject: [PATCH] docs: record refactor step D1 (registry PR #86 + panel freeze PR #87) --- AGENTS.md | 4 +++- CLAUDE.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 17ac0a9..a7b29fe 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -57,7 +57,7 @@ data → universe → factors(特征) → alpha(合成/预测) → portfolio(+ri ## 开发约定 - **交流中文**;代码/注释/commit message 用**英文**。 -- **Git**:feature 分支 + PR。**PR #1(P0+P1)、#2(P2-1)、#3(P2-2)、#4(进度文档)、#5(P2-3)、#6(进度文档)、#7(P2-4)、#8(进度文档)、#9(P3-1)、#10(进度文档)、#11(P3-2)、#12(P3-3)、#13(进度文档)、#14(P3-4)、#15(进度文档)、#16(P3-5)、#17(进度文档)、#18(P3-6)、#19(P3-7)、#20(进度文档)、#21(P3-8)、#22(进度文档)、#23(P4-1)、#24(进度文档)、#25(P4-2)、#28(tushare 权限/限频探测 + capability registry)、#29(I1–I4 分钟级 intraday pipeline,4 commit 一 PR)、#30(进度文档)、#31(P4-3 因子支撑端点缓存 + 21:00 data updater,2 commit 一 PR)、#33(P-I5a 事件驱动回测架构重构 + opt-in 分钟尾盘 event model,4 commit 一 PR)、#35(P-I5b 分钟尾盘执行期 raw stk_limit 涨跌停可行性,4 commit 一 PR)、#37(P-I5c MMP 分钟因子端到端 opt-in alpha)、#39(P-I5d MMP 五分位分组回测 standalone,含 I5c plumbing)、#41(数据层 D1 契约文档 + token 解析去重)、#43(数据层 D2 TushareCache specs/parsers 拆分)、#45(数据层 D3 report-only 数据质量层)、#47(数据层 D3b default-off `data-update` 质量报告钩子)、#49(数据层 D4 coverage ledger 批量写 + 进程内查找缓存)、#51(数据层 D5 opt-in 有界并发 + 全局限频器)、#53(P-I5e MMP 五分位 CSI300 独立泛化检验,负结果)、#55(P-I5f 分钟尾盘执行流动性/容量诊断,report-only)、#57(数据层 schema 注册表 + default-off drift 守卫)、#59(数据层 全A 增量 auto-warm + systemd 定时,default-off)、#61(数据层 全A 历史回填 `data-backfill`,分块/续跑/失败隔离)、#62(进度文档)、#63(因子评估契约层 `analytics/eval/` + StandardFactorEvaluator + dashboard + PR-C 因子,4 commit 一 PR)、#64–#73(PR-D…PR-M 十个分钟因子复现,**一因子一分支一 PR**)、#74(因子评估契约 v0.8 + v0.9 判定门修复)、#75(尾盘执行价 VWAP + 分钟持有期收益复权)、#76(报告披露修正 + I5f 名义按真实规模重测)、#77(`adj_factor` 下降质量检查)、#78(#76 的 follow-up:扫描式正则守卫被七种改写实测证否 → 闸门描述改单一来源)、#79(十一因子改 14:51 VWAP exec-to-exec 基准,**评审未返回、靠自查合并**)、#82(闸门/成交价描述全仓清扫,12 处;#78 守卫射程不足的修正)、#80(进度文档)、#84(因子层重构 D0 纸面契约:availability policy 常量 + 预指派表 + 性质编目)均已 merge 到 `main`**;**OPEN 未合并:#38**(见 P-I5d 处置,未获授权关闭)。commit 用 conventional 格式,**无 attribution**(不加 Co-Authored-By)。 +- **Git**:feature 分支 + PR。**PR #1(P0+P1)、#2(P2-1)、#3(P2-2)、#4(进度文档)、#5(P2-3)、#6(进度文档)、#7(P2-4)、#8(进度文档)、#9(P3-1)、#10(进度文档)、#11(P3-2)、#12(P3-3)、#13(进度文档)、#14(P3-4)、#15(进度文档)、#16(P3-5)、#17(进度文档)、#18(P3-6)、#19(P3-7)、#20(进度文档)、#21(P3-8)、#22(进度文档)、#23(P4-1)、#24(进度文档)、#25(P4-2)、#28(tushare 权限/限频探测 + capability registry)、#29(I1–I4 分钟级 intraday pipeline,4 commit 一 PR)、#30(进度文档)、#31(P4-3 因子支撑端点缓存 + 21:00 data updater,2 commit 一 PR)、#33(P-I5a 事件驱动回测架构重构 + opt-in 分钟尾盘 event model,4 commit 一 PR)、#35(P-I5b 分钟尾盘执行期 raw stk_limit 涨跌停可行性,4 commit 一 PR)、#37(P-I5c MMP 分钟因子端到端 opt-in alpha)、#39(P-I5d MMP 五分位分组回测 standalone,含 I5c plumbing)、#41(数据层 D1 契约文档 + token 解析去重)、#43(数据层 D2 TushareCache specs/parsers 拆分)、#45(数据层 D3 report-only 数据质量层)、#47(数据层 D3b default-off `data-update` 质量报告钩子)、#49(数据层 D4 coverage ledger 批量写 + 进程内查找缓存)、#51(数据层 D5 opt-in 有界并发 + 全局限频器)、#53(P-I5e MMP 五分位 CSI300 独立泛化检验,负结果)、#55(P-I5f 分钟尾盘执行流动性/容量诊断,report-only)、#57(数据层 schema 注册表 + default-off drift 守卫)、#59(数据层 全A 增量 auto-warm + systemd 定时,default-off)、#61(数据层 全A 历史回填 `data-backfill`,分块/续跑/失败隔离)、#62(进度文档)、#63(因子评估契约层 `analytics/eval/` + StandardFactorEvaluator + dashboard + PR-C 因子,4 commit 一 PR)、#64–#73(PR-D…PR-M 十个分钟因子复现,**一因子一分支一 PR**)、#74(因子评估契约 v0.8 + v0.9 判定门修复)、#75(尾盘执行价 VWAP + 分钟持有期收益复权)、#76(报告披露修正 + I5f 名义按真实规模重测)、#77(`adj_factor` 下降质量检查)、#78(#76 的 follow-up:扫描式正则守卫被七种改写实测证否 → 闸门描述改单一来源)、#79(十一因子改 14:51 VWAP exec-to-exec 基准,**评审未返回、靠自查合并**)、#82(闸门/成交价描述全仓清扫,12 处;#78 守卫射程不足的修正)、#80(进度文档)、#84(因子层重构 D0 纸面契约:availability policy 常量 + 预指派表 + 性质编目)、#85(进度文档)、#86(因子层重构 D1:registry + PanelField requires + FactorSpec 契约 v1.0)、#87(因子层重构 D1 面板冻结:14 因子 raw 基线 + manifest)均已 merge 到 `main`**;**OPEN 未合并:#38**(见 P-I5d 处置,未获授权关闭)。commit 用 conventional 格式,**无 attribution**(不加 Co-Authored-By)。 - **不过度设计**:按路线图 MVP 先打通一条端到端链路,再加层(architecture.html §11,Phase 0→3)。 - **secrets** 一律走外部 `.config.json`;repo `.gitignore` 已排除数据产物(`*.parquet`等)、缓存、`tmp/`(仅留架构文档)。 - 文件小而专(<800 行),immutable 优先。 @@ -366,6 +366,8 @@ data → universe → factors(特征) → alpha(合成/预测) → portfolio(+ri - **五项拍板决策**(2026-07-23 用户逐项确认):① 全线深度(bitwise 验收退役 → 语义对账四腿;旧 demo 锚保到 D1 末 → D2 冻 provisional → D6 转正);② 运营形态 = **日频 14:50 决策 / 14:51 执行**(当前侧重投研;实时 = 决策点批处理 + 同一 cache,不建流式引擎);③ 存量机器全部迁移(真实目标 = 杀第二条因子取数路径,编排/分析逻辑留代码);④ 收官全量重评估 **只跑 exec**(close 口径从评估契约退役,decision-view 因子簿关闭 with_book close(d) 混用活缺陷);⑤ 爆炸半径 = 因子侧全重写,data 层与 runtime 事件引擎/fills 与 `analytics/eval` 统计裁决核**保留**。设计文档 `tmp/design/factor_refactor_design_v3.md`(v3.2,SER8 同步)。 - **对抗性审查**(8 角色 Opus 4.8 max effort + 20 kill agent,~3.07M tokens):53 发现,20 HIGH/CRIT 经交叉证伪 **1 存活 / 6 削弱 / 13 被杀**;24 条修订 R1–R25 折入 v3.2(综合报告 `tmp/design/review_round3_v32_revision_list.md`,含被杀档案**禁翻烧饼**)。唯一完整存活的 HIGH 是设计文档自身的事实错误:「峰/岭/谷分类 ≥5 处重复」与代码相反——实为 author-once 单点定义(`intraday_volume_prv.py::peak_mask_for_symbol`,6 模块 import 复用),已更正并撤回 #78 援引;primitives 层理由重述为 surface 蔓延 + 延迟承重(实测 11 因子朴素逐读 ≈58s vs 共享读 ≈17.6s)。审查另发现当前 `main` 潜在缺陷:**回测 `_build_cache` 不传 fina 400 天 `recent_tail_overrides`**(仅 data-update 路径有),晚披露财务在纯回测 read-through 下可能漏抓——修复排入 D3 前置。 - **D0(PR #84,纯附加 +1148/−0,无引擎代码)**:`data/availability_policy.py`(§1.3 policy 表代码常量单一来源:**字段级 market_daily**——decision 视图仅 `open` 当日合法;3 处 DOMAIN ASSUMPTION 显式标注;修订视界从调用方传入的 config 值派生、**禁硬编码 14/400**、fina 缺 override 即 raise;端点封闭性 `require_known_source`;视图×基准配对合法性;`adjustment`/`overnight_boundary` 三值枚举单一来源)+ 30 测试(含对 `data/cache` 端点常量的真 drift guard、frozen 真赋值断言、bool-混入-int 守卫的 mutation 有牙实证)+ `docs/factors/refactor_d0_contract.md`(收官 14 因子 adjustment/overnight_boundary **预指派表**带 file:line 证据——9 RETURNS_INVARIANT / 5 NONE / 0 PRICE_LEVEL,`valley_price_quantile` = CROSSED_DISCLOSED,另发现 `minute_ideal_amplitude` 以 raw close 跨日池化排序 → CROSSED_DISCLOSED 候选、偏差测量义务留 D2;11 类性质**双向编目**,107 个既有测试引用逐一核实存在,NET-NEW 性质钉 D 格:adjustment→D3、overnight_boundary→D2、单点填≡批量填→D4、视图隔离→D1/D3/D4)。 + - **D1(PR #86 + #87,整步已关账)**:① registry + requires(PR #86,+1751/−69)——`factors/registry/`(register/build/requirements + 显式 builtin 列表 + 三时点命名校验)、`PanelField`(endpoint-only,构造期 `require_known_source`)、FactorSpec **契约 v1.0**(三个必填声明维 requires/adjustment/overnight_boundary,值域引用 D0 枚举;既有 metaclass 双检/预注册/property-spec 全不削弱)、18 个 Factor 类全部落声明(14 收官因子照 D0 表逐行、21 行参数化测试锁死;日频因子逐类带证据派生)、`qt/pipeline._build_factors` if/elif 链退役为纯 `registry.build()`。**因子数学零改动三重证**:compute 文件删除行仅 4 条相同 import / 评审逐 hunk 扫 `def compute` 零命中 / phase0 锚逐字不变。评审 APPROVE-WITH-NITS(1 MEDIUM 经裁定为 diff 基线假象——分支切在 #85 之前,三点 diff 证实未碰 AGENTS/CLAUDE;1 LOW 前瞻记录)。两处披露的行为差异:unknown 因子名提前到 config 解析期报错;旧链对每因子 eager 算 `int(params.get("window",20))` 的 accidental ValueError 不再复现(实证无依赖)。gates:1879 passed / ruff / 31 configs / 锚不变 / secret 0。 + - ② **面板冻结**(PR #87,v3.2 §五第 4 腿/R11,D5 逐格对账的唯一基线):`qt/panel_freeze.py`(**零公式重抄**——分钟因子调各 runner 私有 `_load_*_panel`、常数从 runner 模块对象引用、书因子走 `_build_book_factors`;canonical content hash = sha256(排序索引串行化+float64 原始字节),NaN payload 归一、±0.0 保留区分;原子写;`--resume` 从严——读回文件也重过 process+对账+重算哈希)+ 23 测试(NaN payload mutation 证据、写中途失败原子性实测)+ manifest 入 git(producing SHA 钉 `3669c90`——**先跑后 commit** 使 run 时 tracked 树逐位 = main;provenance 规则原文在案)。真实 run:14/14 面板(网格 1,158,912/1,159,263 行,CSI500 996 成分 1210 交易日,2.79 亿行 raw 1min),`stk_mins_live_calls=0`,**写盘前对账 11/11**(mismatch 即 raise 不落盘;书因子无覆盖字段可对账、照实披露不假装,证据换双跑+跨 run 同哈希+全网格行数恒等),确定性双跑 3/3 跨进程一致;两段 run(会话限额 60min 杀首段 → resume)与首段日志丢失(`_make_logger` truncate)均如实披露。评审 **APPROVE 零发现(含 LOW,本轮首次)**:逐参数镜像比对调用点、14/14 行 doc↔json 程序化核对、3 面板盘上重算哈希、独立 secret 扫描 17 文件 0 命中。gates:**1902 passed** / ruff / 锚不变 / 31 configs。 - 验收:独立对抗评审 **APPROVE-WITH-NITS**(0 CRIT/HIGH/MED,1 LOW 当场修 + mutation 证据 rc=1/rc=0);lead 独立重跑 gates:pytest **1806 passed**(= 1776 + 30)、`ruff` clean、`validate-config` 31/31、phase0 锚 **0.9600/0.8408 不变**、diff secret scan 0。执行流程:实现与验收均由 subagent 承担、lead 把控(含 5h 窗 <10% 不开新 subagent 的节流规则)。 - ✅ 质量门(**当前 `main` @ `f432dc5` 实测**:`python -m pytest -p no:warnings` **1776 passed**、`ruff` clean、`validate-config` **31/31 配置逐个 OK**、`run-phase0`(demo)**ic 0.9600 / annual 0.8408 不变**)。构成对得上:`aa19968` 实测 **1740** → #78 加 2(含钉住破折号闭合的那条)= **1742** → #79 加 34(两个新测试文件,0 个既有测试被挤掉)= **1776**。新增测试分组(`--collect-only` 实数,`aa19968` 口径):**因子评估契约层 contract=337 + standard=113 + figures=7 / 十一因子(factor + eval runner,21 文件)=421 / PR#75 exec-vwap-basis=46 / D3 market quality 15→21(含 #77 `decreasing_adj_factor` 及其相对-vs-绝对尺度 mutation 测试)**。历史分组(旧 793 基线):`pytest` **793 passed**(P0=97 / P1=78 / P2-1=22 / P2-2=22 / P2-3=14 / P2-4=8 / P3-1=10 / P3-2=18 / P3-3=16 / P3-4=15 / P3-5=22 / P3-6=27 / P3-7=25+1 throttle / P3-8=8 / P4-1=28 / P4-2=17 / **intraday I1 schema=14 + feed=9 / I2 cache=10 / I3 aggregate=13 / I4 execution=10 / P4-3 cache=10 + updater=7 / P-I5a event-backtest=19 / P-I5b exec-feasibility=16 / P-I5c mmp-minute=18 / P-I5d mmp-quintile=19 / P-I5e 仅 config(无新测试,`test_cache_config` 的 config glob 自动 +1)/ P-I5f intraday-liquidity=17(+ `test_cache_config` config glob 自动 +1)/ D1 token-dedup index-feed +2 / D2 cache-modularization +5 / D3 data-quality market=15 + intraday=12 + report=14 / D3b data-update-quality=18 / D4 coverage-ledger-scaling=13 / D5 scheduler=9 + concurrency=12 / schema-registry-guard=62 / all-A-incremental=12 / all-A-backfill=22**);当时 `ruff` clean、`validate-config` 20 配置(data_update + phase_i5a…phase_i5f)+ `run-phase0`(demo)均 OK(**ic 0.9600 / annual 0.8408 自 P0 起从未变过**)。 - ⚠️ 剩余(已显式披露):日线 only、demo 路径非真数据、旧三因子无信号(P3-3/P3-4 实证;但其组合在 2024-2026 holdout 上 SSE50/CSI300/CSI500 全正、CSI500 高达 +17.8%——小样本/regime 翻转的持续例证);value/低波信号获得**独立样本符号级确认**(P3-7 SSE50/CSI300 量级衰减;P3-8 CSI500 泛化成立且更强),组合级盈利能力仍未确立(排名跨 cell 翻转);subset 报告文件名已可配置(P3-8 起不再互覆盖)。**分钟因子侧新增披露**:十一个复现因子全部 EXPLORATORY、**封顶 Watch,无一到 Adopt**,1× 费率下净多空为正的只有 2 个(PR-F/PR-L,且 PR-L 扛不住 2×)——**IC 强 ≠ 可交易**;MMP 的唯一正面证据(I5d)在修正引擎上退化、I5e 负结果加强;I5f 的容量结论已按**真实 100 万名义**重写(1000 万口径的"约半数不足"作废);**日频除权审计已完成**(GENUINE、无 vintage 接缝、评估池暴露 1/603,258,不重述任何因子结果),**分钟路径的复权缺陷已在 PR #75 修**;exec-to-exec 改基准已随 **PR #79 合并**,close-to-close 与 exec 两套 artifact 并存;⚠️ **#79 的 code review 未返回、靠自查合并**,其"未独立核"清单(五条 mutation 声称 / 十一个 runner 改动是否机械等同 / `execution_capacity` 透传)仍待后续检查——若查出问题,重述 exec 基准数字而非 close-to-close;schema 守卫**仍未接** live `data-update` 暖跑路径;HTML compendium(`artifacts/reports/factor_compendium.html`)**还读 v0.8 结果,待按最终结果修订**。 diff --git a/CLAUDE.md b/CLAUDE.md index 17ac0a9..a7b29fe 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -57,7 +57,7 @@ data → universe → factors(特征) → alpha(合成/预测) → portfolio(+ri ## 开发约定 - **交流中文**;代码/注释/commit message 用**英文**。 -- **Git**:feature 分支 + PR。**PR #1(P0+P1)、#2(P2-1)、#3(P2-2)、#4(进度文档)、#5(P2-3)、#6(进度文档)、#7(P2-4)、#8(进度文档)、#9(P3-1)、#10(进度文档)、#11(P3-2)、#12(P3-3)、#13(进度文档)、#14(P3-4)、#15(进度文档)、#16(P3-5)、#17(进度文档)、#18(P3-6)、#19(P3-7)、#20(进度文档)、#21(P3-8)、#22(进度文档)、#23(P4-1)、#24(进度文档)、#25(P4-2)、#28(tushare 权限/限频探测 + capability registry)、#29(I1–I4 分钟级 intraday pipeline,4 commit 一 PR)、#30(进度文档)、#31(P4-3 因子支撑端点缓存 + 21:00 data updater,2 commit 一 PR)、#33(P-I5a 事件驱动回测架构重构 + opt-in 分钟尾盘 event model,4 commit 一 PR)、#35(P-I5b 分钟尾盘执行期 raw stk_limit 涨跌停可行性,4 commit 一 PR)、#37(P-I5c MMP 分钟因子端到端 opt-in alpha)、#39(P-I5d MMP 五分位分组回测 standalone,含 I5c plumbing)、#41(数据层 D1 契约文档 + token 解析去重)、#43(数据层 D2 TushareCache specs/parsers 拆分)、#45(数据层 D3 report-only 数据质量层)、#47(数据层 D3b default-off `data-update` 质量报告钩子)、#49(数据层 D4 coverage ledger 批量写 + 进程内查找缓存)、#51(数据层 D5 opt-in 有界并发 + 全局限频器)、#53(P-I5e MMP 五分位 CSI300 独立泛化检验,负结果)、#55(P-I5f 分钟尾盘执行流动性/容量诊断,report-only)、#57(数据层 schema 注册表 + default-off drift 守卫)、#59(数据层 全A 增量 auto-warm + systemd 定时,default-off)、#61(数据层 全A 历史回填 `data-backfill`,分块/续跑/失败隔离)、#62(进度文档)、#63(因子评估契约层 `analytics/eval/` + StandardFactorEvaluator + dashboard + PR-C 因子,4 commit 一 PR)、#64–#73(PR-D…PR-M 十个分钟因子复现,**一因子一分支一 PR**)、#74(因子评估契约 v0.8 + v0.9 判定门修复)、#75(尾盘执行价 VWAP + 分钟持有期收益复权)、#76(报告披露修正 + I5f 名义按真实规模重测)、#77(`adj_factor` 下降质量检查)、#78(#76 的 follow-up:扫描式正则守卫被七种改写实测证否 → 闸门描述改单一来源)、#79(十一因子改 14:51 VWAP exec-to-exec 基准,**评审未返回、靠自查合并**)、#82(闸门/成交价描述全仓清扫,12 处;#78 守卫射程不足的修正)、#80(进度文档)、#84(因子层重构 D0 纸面契约:availability policy 常量 + 预指派表 + 性质编目)均已 merge 到 `main`**;**OPEN 未合并:#38**(见 P-I5d 处置,未获授权关闭)。commit 用 conventional 格式,**无 attribution**(不加 Co-Authored-By)。 +- **Git**:feature 分支 + PR。**PR #1(P0+P1)、#2(P2-1)、#3(P2-2)、#4(进度文档)、#5(P2-3)、#6(进度文档)、#7(P2-4)、#8(进度文档)、#9(P3-1)、#10(进度文档)、#11(P3-2)、#12(P3-3)、#13(进度文档)、#14(P3-4)、#15(进度文档)、#16(P3-5)、#17(进度文档)、#18(P3-6)、#19(P3-7)、#20(进度文档)、#21(P3-8)、#22(进度文档)、#23(P4-1)、#24(进度文档)、#25(P4-2)、#28(tushare 权限/限频探测 + capability registry)、#29(I1–I4 分钟级 intraday pipeline,4 commit 一 PR)、#30(进度文档)、#31(P4-3 因子支撑端点缓存 + 21:00 data updater,2 commit 一 PR)、#33(P-I5a 事件驱动回测架构重构 + opt-in 分钟尾盘 event model,4 commit 一 PR)、#35(P-I5b 分钟尾盘执行期 raw stk_limit 涨跌停可行性,4 commit 一 PR)、#37(P-I5c MMP 分钟因子端到端 opt-in alpha)、#39(P-I5d MMP 五分位分组回测 standalone,含 I5c plumbing)、#41(数据层 D1 契约文档 + token 解析去重)、#43(数据层 D2 TushareCache specs/parsers 拆分)、#45(数据层 D3 report-only 数据质量层)、#47(数据层 D3b default-off `data-update` 质量报告钩子)、#49(数据层 D4 coverage ledger 批量写 + 进程内查找缓存)、#51(数据层 D5 opt-in 有界并发 + 全局限频器)、#53(P-I5e MMP 五分位 CSI300 独立泛化检验,负结果)、#55(P-I5f 分钟尾盘执行流动性/容量诊断,report-only)、#57(数据层 schema 注册表 + default-off drift 守卫)、#59(数据层 全A 增量 auto-warm + systemd 定时,default-off)、#61(数据层 全A 历史回填 `data-backfill`,分块/续跑/失败隔离)、#62(进度文档)、#63(因子评估契约层 `analytics/eval/` + StandardFactorEvaluator + dashboard + PR-C 因子,4 commit 一 PR)、#64–#73(PR-D…PR-M 十个分钟因子复现,**一因子一分支一 PR**)、#74(因子评估契约 v0.8 + v0.9 判定门修复)、#75(尾盘执行价 VWAP + 分钟持有期收益复权)、#76(报告披露修正 + I5f 名义按真实规模重测)、#77(`adj_factor` 下降质量检查)、#78(#76 的 follow-up:扫描式正则守卫被七种改写实测证否 → 闸门描述改单一来源)、#79(十一因子改 14:51 VWAP exec-to-exec 基准,**评审未返回、靠自查合并**)、#82(闸门/成交价描述全仓清扫,12 处;#78 守卫射程不足的修正)、#80(进度文档)、#84(因子层重构 D0 纸面契约:availability policy 常量 + 预指派表 + 性质编目)、#85(进度文档)、#86(因子层重构 D1:registry + PanelField requires + FactorSpec 契约 v1.0)、#87(因子层重构 D1 面板冻结:14 因子 raw 基线 + manifest)均已 merge 到 `main`**;**OPEN 未合并:#38**(见 P-I5d 处置,未获授权关闭)。commit 用 conventional 格式,**无 attribution**(不加 Co-Authored-By)。 - **不过度设计**:按路线图 MVP 先打通一条端到端链路,再加层(architecture.html §11,Phase 0→3)。 - **secrets** 一律走外部 `.config.json`;repo `.gitignore` 已排除数据产物(`*.parquet`等)、缓存、`tmp/`(仅留架构文档)。 - 文件小而专(<800 行),immutable 优先。 @@ -366,6 +366,8 @@ data → universe → factors(特征) → alpha(合成/预测) → portfolio(+ri - **五项拍板决策**(2026-07-23 用户逐项确认):① 全线深度(bitwise 验收退役 → 语义对账四腿;旧 demo 锚保到 D1 末 → D2 冻 provisional → D6 转正);② 运营形态 = **日频 14:50 决策 / 14:51 执行**(当前侧重投研;实时 = 决策点批处理 + 同一 cache,不建流式引擎);③ 存量机器全部迁移(真实目标 = 杀第二条因子取数路径,编排/分析逻辑留代码);④ 收官全量重评估 **只跑 exec**(close 口径从评估契约退役,decision-view 因子簿关闭 with_book close(d) 混用活缺陷);⑤ 爆炸半径 = 因子侧全重写,data 层与 runtime 事件引擎/fills 与 `analytics/eval` 统计裁决核**保留**。设计文档 `tmp/design/factor_refactor_design_v3.md`(v3.2,SER8 同步)。 - **对抗性审查**(8 角色 Opus 4.8 max effort + 20 kill agent,~3.07M tokens):53 发现,20 HIGH/CRIT 经交叉证伪 **1 存活 / 6 削弱 / 13 被杀**;24 条修订 R1–R25 折入 v3.2(综合报告 `tmp/design/review_round3_v32_revision_list.md`,含被杀档案**禁翻烧饼**)。唯一完整存活的 HIGH 是设计文档自身的事实错误:「峰/岭/谷分类 ≥5 处重复」与代码相反——实为 author-once 单点定义(`intraday_volume_prv.py::peak_mask_for_symbol`,6 模块 import 复用),已更正并撤回 #78 援引;primitives 层理由重述为 surface 蔓延 + 延迟承重(实测 11 因子朴素逐读 ≈58s vs 共享读 ≈17.6s)。审查另发现当前 `main` 潜在缺陷:**回测 `_build_cache` 不传 fina 400 天 `recent_tail_overrides`**(仅 data-update 路径有),晚披露财务在纯回测 read-through 下可能漏抓——修复排入 D3 前置。 - **D0(PR #84,纯附加 +1148/−0,无引擎代码)**:`data/availability_policy.py`(§1.3 policy 表代码常量单一来源:**字段级 market_daily**——decision 视图仅 `open` 当日合法;3 处 DOMAIN ASSUMPTION 显式标注;修订视界从调用方传入的 config 值派生、**禁硬编码 14/400**、fina 缺 override 即 raise;端点封闭性 `require_known_source`;视图×基准配对合法性;`adjustment`/`overnight_boundary` 三值枚举单一来源)+ 30 测试(含对 `data/cache` 端点常量的真 drift guard、frozen 真赋值断言、bool-混入-int 守卫的 mutation 有牙实证)+ `docs/factors/refactor_d0_contract.md`(收官 14 因子 adjustment/overnight_boundary **预指派表**带 file:line 证据——9 RETURNS_INVARIANT / 5 NONE / 0 PRICE_LEVEL,`valley_price_quantile` = CROSSED_DISCLOSED,另发现 `minute_ideal_amplitude` 以 raw close 跨日池化排序 → CROSSED_DISCLOSED 候选、偏差测量义务留 D2;11 类性质**双向编目**,107 个既有测试引用逐一核实存在,NET-NEW 性质钉 D 格:adjustment→D3、overnight_boundary→D2、单点填≡批量填→D4、视图隔离→D1/D3/D4)。 + - **D1(PR #86 + #87,整步已关账)**:① registry + requires(PR #86,+1751/−69)——`factors/registry/`(register/build/requirements + 显式 builtin 列表 + 三时点命名校验)、`PanelField`(endpoint-only,构造期 `require_known_source`)、FactorSpec **契约 v1.0**(三个必填声明维 requires/adjustment/overnight_boundary,值域引用 D0 枚举;既有 metaclass 双检/预注册/property-spec 全不削弱)、18 个 Factor 类全部落声明(14 收官因子照 D0 表逐行、21 行参数化测试锁死;日频因子逐类带证据派生)、`qt/pipeline._build_factors` if/elif 链退役为纯 `registry.build()`。**因子数学零改动三重证**:compute 文件删除行仅 4 条相同 import / 评审逐 hunk 扫 `def compute` 零命中 / phase0 锚逐字不变。评审 APPROVE-WITH-NITS(1 MEDIUM 经裁定为 diff 基线假象——分支切在 #85 之前,三点 diff 证实未碰 AGENTS/CLAUDE;1 LOW 前瞻记录)。两处披露的行为差异:unknown 因子名提前到 config 解析期报错;旧链对每因子 eager 算 `int(params.get("window",20))` 的 accidental ValueError 不再复现(实证无依赖)。gates:1879 passed / ruff / 31 configs / 锚不变 / secret 0。 + - ② **面板冻结**(PR #87,v3.2 §五第 4 腿/R11,D5 逐格对账的唯一基线):`qt/panel_freeze.py`(**零公式重抄**——分钟因子调各 runner 私有 `_load_*_panel`、常数从 runner 模块对象引用、书因子走 `_build_book_factors`;canonical content hash = sha256(排序索引串行化+float64 原始字节),NaN payload 归一、±0.0 保留区分;原子写;`--resume` 从严——读回文件也重过 process+对账+重算哈希)+ 23 测试(NaN payload mutation 证据、写中途失败原子性实测)+ manifest 入 git(producing SHA 钉 `3669c90`——**先跑后 commit** 使 run 时 tracked 树逐位 = main;provenance 规则原文在案)。真实 run:14/14 面板(网格 1,158,912/1,159,263 行,CSI500 996 成分 1210 交易日,2.79 亿行 raw 1min),`stk_mins_live_calls=0`,**写盘前对账 11/11**(mismatch 即 raise 不落盘;书因子无覆盖字段可对账、照实披露不假装,证据换双跑+跨 run 同哈希+全网格行数恒等),确定性双跑 3/3 跨进程一致;两段 run(会话限额 60min 杀首段 → resume)与首段日志丢失(`_make_logger` truncate)均如实披露。评审 **APPROVE 零发现(含 LOW,本轮首次)**:逐参数镜像比对调用点、14/14 行 doc↔json 程序化核对、3 面板盘上重算哈希、独立 secret 扫描 17 文件 0 命中。gates:**1902 passed** / ruff / 锚不变 / 31 configs。 - 验收:独立对抗评审 **APPROVE-WITH-NITS**(0 CRIT/HIGH/MED,1 LOW 当场修 + mutation 证据 rc=1/rc=0);lead 独立重跑 gates:pytest **1806 passed**(= 1776 + 30)、`ruff` clean、`validate-config` 31/31、phase0 锚 **0.9600/0.8408 不变**、diff secret scan 0。执行流程:实现与验收均由 subagent 承担、lead 把控(含 5h 窗 <10% 不开新 subagent 的节流规则)。 - ✅ 质量门(**当前 `main` @ `f432dc5` 实测**:`python -m pytest -p no:warnings` **1776 passed**、`ruff` clean、`validate-config` **31/31 配置逐个 OK**、`run-phase0`(demo)**ic 0.9600 / annual 0.8408 不变**)。构成对得上:`aa19968` 实测 **1740** → #78 加 2(含钉住破折号闭合的那条)= **1742** → #79 加 34(两个新测试文件,0 个既有测试被挤掉)= **1776**。新增测试分组(`--collect-only` 实数,`aa19968` 口径):**因子评估契约层 contract=337 + standard=113 + figures=7 / 十一因子(factor + eval runner,21 文件)=421 / PR#75 exec-vwap-basis=46 / D3 market quality 15→21(含 #77 `decreasing_adj_factor` 及其相对-vs-绝对尺度 mutation 测试)**。历史分组(旧 793 基线):`pytest` **793 passed**(P0=97 / P1=78 / P2-1=22 / P2-2=22 / P2-3=14 / P2-4=8 / P3-1=10 / P3-2=18 / P3-3=16 / P3-4=15 / P3-5=22 / P3-6=27 / P3-7=25+1 throttle / P3-8=8 / P4-1=28 / P4-2=17 / **intraday I1 schema=14 + feed=9 / I2 cache=10 / I3 aggregate=13 / I4 execution=10 / P4-3 cache=10 + updater=7 / P-I5a event-backtest=19 / P-I5b exec-feasibility=16 / P-I5c mmp-minute=18 / P-I5d mmp-quintile=19 / P-I5e 仅 config(无新测试,`test_cache_config` 的 config glob 自动 +1)/ P-I5f intraday-liquidity=17(+ `test_cache_config` config glob 自动 +1)/ D1 token-dedup index-feed +2 / D2 cache-modularization +5 / D3 data-quality market=15 + intraday=12 + report=14 / D3b data-update-quality=18 / D4 coverage-ledger-scaling=13 / D5 scheduler=9 + concurrency=12 / schema-registry-guard=62 / all-A-incremental=12 / all-A-backfill=22**);当时 `ruff` clean、`validate-config` 20 配置(data_update + phase_i5a…phase_i5f)+ `run-phase0`(demo)均 OK(**ic 0.9600 / annual 0.8408 自 P0 起从未变过**)。 - ⚠️ 剩余(已显式披露):日线 only、demo 路径非真数据、旧三因子无信号(P3-3/P3-4 实证;但其组合在 2024-2026 holdout 上 SSE50/CSI300/CSI500 全正、CSI500 高达 +17.8%——小样本/regime 翻转的持续例证);value/低波信号获得**独立样本符号级确认**(P3-7 SSE50/CSI300 量级衰减;P3-8 CSI500 泛化成立且更强),组合级盈利能力仍未确立(排名跨 cell 翻转);subset 报告文件名已可配置(P3-8 起不再互覆盖)。**分钟因子侧新增披露**:十一个复现因子全部 EXPLORATORY、**封顶 Watch,无一到 Adopt**,1× 费率下净多空为正的只有 2 个(PR-F/PR-L,且 PR-L 扛不住 2×)——**IC 强 ≠ 可交易**;MMP 的唯一正面证据(I5d)在修正引擎上退化、I5e 负结果加强;I5f 的容量结论已按**真实 100 万名义**重写(1000 万口径的"约半数不足"作废);**日频除权审计已完成**(GENUINE、无 vintage 接缝、评估池暴露 1/603,258,不重述任何因子结果),**分钟路径的复权缺陷已在 PR #75 修**;exec-to-exec 改基准已随 **PR #79 合并**,close-to-close 与 exec 两套 artifact 并存;⚠️ **#79 的 code review 未返回、靠自查合并**,其"未独立核"清单(五条 mutation 声称 / 十一个 runner 改动是否机械等同 / `execution_capacity` 透传)仍待后续检查——若查出问题,重述 exec 基准数字而非 close-to-close;schema 守卫**仍未接** live `data-update` 暖跑路径;HTML compendium(`artifacts/reports/factor_compendium.html`)**还读 v0.8 结果,待按最终结果修订**。