d165e2a808
Phase 1(并行验证方案,2026-08-15用户定案):只加新接口不动老接口;Phase 2策略 session copy策略副本改调_ex在NAS回测对照;验证通过后Phase 3老接口内部委托。 - fetchers/base.py: 4个QueryParams strict校验(frequency/fq/count/日期/空列表 非法即ValidationError;extra=forbid防拼错参数被静默吞)+DataSchemaError+ validate_df_schema(DataFrame级:核心列缺失/全空fail-fast;空df=合法缺失) - fetchers/price.py: PriceFetcher(get_price_ex)+PanelFetcher(closes_panel_ex) extract SQL原样搬e7f9426生产版(UNION ALL 340×索引优化保留) - fetchers/constituent.py: 查询失败raise(老接口log+返[]静默) - fetchers/fundamentals.py: fields短路+ThreadPool原样搬 - provider挂4个_ex方法(显式签名,老API零变化,策略层无感) - 测试25个:等价性9(_ex vs老接口同参数assert_frame_equal逐值一致,含qfq/ panel长表/count/fields/缺失标的)+strict 13+Optional契约3(high_limit/paused 补默认=2026-08-15用户定案显式契约,非兜底) 与OpenBB有意差异:DataFrame级校验非逐行pydantic(5128只×全历史不可接受); extract读本地不打网络;已知妥协=qfq因子二次读库在transform内(Phase 3归一)。 fetchers 25 passed+老接口回归68 passed。 [vps]