行为
0002-Sprint2交付物Checklist¶
| Story ID | 编号 | 验收标准原文 | 预期结果 | 通过状态 |
|---|---|---|---|---|
| S2-01 | ① |
config.yaml 新增 data.raw_paths(字典结构)与 duckdb.memory_limit(默认 "40GB")节点 |
Settings 可解析 data.raw_paths 与 storage.duckdb_memory_limit
|
✅ |
| S2-01 | ② | DuckDB SQL 绝对禁止 SELECT *,对 fund_basic_info 必须硬编码 SELECT fund_id, fund_name, fund_type, create_date,对净值表仅取核心 3 列 |
SQL 中无 SELECT *,columns 参数显式声明 |
✅ |
| S2-01 | ③ | Arrow Schema 包含上述 4 列 + 净值 3 列(fund_type 仅作临时审计流转,严禁带入最终落盘) |
提取阶段 6 列,落盘阶段 4 列 | ✅ |
| S2-01 | ④ | S1 遗留核销:首个 PR 必须物理删除 S1 阶段的占位 Mock 测试代码,CI 全绿 |
tests/test_sprint1_placeholder.py 不存在 |
✅ |
| S2-01 | ⑤ | 单测:Mock 小 CSV 验证列裁剪与 JOIN 正确性 |
test_extract_raw_to_arrow_success 通过 |
✅ |
| S2-02 | ① |
segment_id 截断处严格递增,同基金内从 0 开始 |
单测验证递增与从 0 开始 | ✅ |
| S2-02 | ② | 建仓期(12周)剔除严格锚定且仅作用于 segment_id == 0,segment_0 被完全吞噬后 segment_1 仍保留 |
test_s202_segment_0_erased_but_segment_1_retained 通过 |
✅ |
| S2-02 | ③ |
cumulative_net_value ≤ 0 的行被剔除 |
test_s202_nav_le_zero_physical_removal 通过 |
✅ |
| S2-02 | ④ | 异常值(单周涨跌幅绝对值 >50%)置 NULL,判定基准基于"本周原始有值且上周原始有值"的真实相邻周,ffill 填充值不参与判定 |
test_s202_long_gap_recovery_no_false_positive 通过 |
✅ |
| S2-02 | ⑤ | 单测覆盖 segment_0 被建仓期完全吞噬及长缺失 ffill 恢复首周免于误杀 | 全部 TestS202 用例通过 | ✅ |
| S2-03 | ① | 存活期计算 = 该基金所有段有效周数之和,< 52 周整体剔除 |
test_survival_filtering 通过 |
✅ |
| S2-03 | ② |
data/processed/ 下产出 net_value_YYYY.parquet,显式指定 row_group_size=100000
|
Parquet 文件存在且 row_group_size 正确 | ✅ |
| S2-03 | ③ | 落盘 Schema 仅含 4 列 fund_id(String), net_value_date(Date), cumulative_net_value(Float64), segment_id(UInt32),临时列 fund_type 落盘前必须被显式丢弃 |
test_schema_locked_and_float64 通过 |
✅ |
| S2-03 | ④ |
cumulative_net_value 全链路强制映射为 Float64,严禁使用 Decimal |
DuckDB columns 声明 DOUBLE + Arrow cast float64 | ✅ |
| S2-03 | ⑤ |
create_duckdb_view() 严禁依赖持久化状态,必须动态扫描年份文件拼接生成 |
test_create_duckdb_view_success 通过 |
✅ |
| S2-04 | ① | 落盘后即刻按年份文件逐个计算 SHA-256,产出 data/metadata/processed_hash.json
|
各 Parquet 文件 SHA-256 已记录 | ✅ |
| S2-04 | ② | 产出 data/metadata/data_audit.json,严格符合 5 大根节点 Schema,whitelist_retention_rate 分母取原始 CSV 物理总行数 |
JSON 结构含 pipeline/input/filtering/cleaning/output | ✅ |
| S2-04 | ③ | 压测日志包含 DuckDB/Arrow 转换/Polars 状态机三个维度的 peak_memory_gb,总峰值 ≤ 40GB |
真实压测总峰值 1.449 GB | ✅ |
| S2-04 | ④ | 若 retention_rate < 15%,M2 标记"带风险通过",在 Redmine 建立 High 级别 Bug 单 |
当前 retention_rate ≈ 34.17%,无需标记 | ✅ |
| S2-05 | ① |
docs/data_contract.md 沉淀 Parquet 4 列 Schema、审计 JSON Schema 定义及 Float64 选型依据 |
文档已落盘,Schema 引用自动生成产物 | ✅ |
| S2-05 | ② | 产出 ADR 0003-s2-full-arrow-exception.md,固化 FW-3 豁免边界、内存预估及下游禁用声明 |
ADR 已落盘,编号 0003 | ✅ |
| S2-05 | ③ | S2-01 至 S2-05 任务卡片在 Redmine 逐条填入验收标准 | 本 Checklist 已提供 | ✅ |
| S2-05 | ④ | CI 软预警检查通过(src/ 变更已同步 docs/ 变更) |
check_src_docs_sync.sh 已集成至 deployment.yaml |
✅ |
由 Huarui Lin 更新于 大约 14 小时 之前 · 2 修订