Commit Graph

594 Commits

Author SHA1 Message Date
claude_dev 7e9319b166 docs(data): spec§18 root vs admin 终局论证入档 [nas]——应用户「root的数据不可修改设计更好吗」:root属主写保护=半吊子幻觉(admin不能覆写但能删,删看目录权限rwxrwxrwx,03:00链先rm再拉workaround实证),防住原地改防不住删了重建;root跑采集代价全天候=root进程admin杀不动(Synology sudo交互密码自动化做不了,本设计验收含kill-9续跑项root方案连测试都无法执行)+venv装包盯跑全要root陪跑+外网爬虫最大权限;不可改性交给正确工具=append-only协议(dt分区只追加/tmp+rename/id键控)+可再生性(源站都在断点可重拉,语料=全体系唯一可完全再生数据类),如需防篡改层验收后加DSM快照/每周tar+校验和(对任何属主生效)——结论admin落地 [nas]
CI/CD / test (push) Successful in 25s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 8s
2026-09-06 20:07:17 +08:00
claude_dev 3d3ddb5f57 docs(data): 全局下载方案与存放位置总表§18.8+CLAUDE.md语料路径行 [nas]——应用户「不想搞好几套下载方案和存放位置」:不是几套,是一条规则两台机器=每类数据唯一权威源+唯一权威位置(§14.2既定原则)+采集发起位置跟随权威位置;数值类(行情/估值/报表/事件面板)权威=VPS既有8任务家族不变,文本语料类(新闻/公告)权威=NAS(用户三约束唯一决定:不上VPS+东财IP限流+不绑docker);§18.8收齐现势10行任务总表(bs-daily/xt-eod/idx-eod/ak四频率/vintage/NAS03:00链/corpus)并注明§14.5为历史快照,存放=VPS data/数值权威+NAS /volume1/stock副本+大体积历史+语料唯一权威+Mac无生产数据,corpus不是第三种根=既有数据根新子目录;CLAUDE.md关键路径加corpus行(全session可见) [nas]
CI/CD / test (push) Successful in 23s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 9s
2026-09-06 20:01:39 +08:00
claude_dev b90f258100 docs(data): spec§18存量不迁移澄清+admin权限逐项实测 [nas]——应用户问「有必要全改admin吗/admin确定有权限吗」:①存量脚本一个不迁(03:00链等root任务照旧,没坏不动;admin仅新corpus任务选型;目录/时间窗/管道三隔离零冲突)②admin权限逐项实测=/volume1/stock建目录写删全通(rwxrwxrwx+ACL admin属主)+venv --copies在volume1建成stdlib OK+pip user-site既有+CI部署路径无障碍③新坑入档:venv建/tmp会Permission denied(DSM /tmp特殊限制+会被清空)——设计本就落volume1;④设计内零root依赖,例外走人工sudo逃生门 [nas]
CI/CD / test (push) Successful in 26s
CI/CD / nas-deploy (push) Successful in 1s
CI/CD / nas-verify (push) Successful in 10s
2026-09-06 19:57:30 +08:00
claude_dev 0157094da2 docs(data): spec§18补admin与独立任务论证 [nas]——应用户问「为何不统一root/为何单独建定时任务」:admin三理由=03:00链root属主坑在案(admin覆盖须先rm再拉)+语料库admin侧操作密集(venv/盯跑/删分区)属主即零摩擦+最小权限出网爬虫不必root,成本为零;独立任务三理由=失败不连坐(对内行情同步vs对外慢爬马拉松,corpus卡死不拖死行情链,断路器饿死同款教训)+属主部署管道不同(sync脚本root地盘CI不覆盖vs corpus走CI的repo路径)+06:00避开03:00链跑道且00时档公告已入库全吃到 [nas]
CI/CD / test (push) Successful in 0s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 9s
2026-09-06 19:52:37 +08:00
claude_dev fe5d0f00a6 docs(data): 06:00晨窗调度依据实测固化 [nas]——应用户问「基本面数据白天被更新的可能性有多大」:深市0904全市场600条公告发布时刻实测=盘中(09-15时)3条0%+盘后15-20时46%+00时档54%(巨潮深夜批处理「半夜鸡叫」实锤);新闻当日条目盘中27%盘后晚间73%;结论=公告白天更新概率≈0且主体在零点档,T+1晨06:00拉取=前日公告100%入账,优于任何傍晚方案(17:30收工会漏19-20时18%+00时54%);新闻对日频消费零损失;spec§18.3+报告各补一段 [nas]
CI/CD / test (push) Successful in 27s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 10s
2026-09-06 19:50:19 +08:00
claude_dev 14d3531f77 docs(data): 语料库spec§18修订——用户两条反馈落地 [nas]——①断点续传钦点加固:unit粒度marker+原子写+杀进程重启即从未完成unit续跑+漏日自愈(公告T-1~T两天窗/新闻recent-100天然覆盖数日缺口)+daily幂等可重跑,验收加5b条(kill -9重启续跑实证);②解绑docker(用户:「不要和docker绑定,避免docker重启就失败」):采集进程改NAS宿主机直跑,运行时=/volume1/stock/corpus/venv(--copies自举,DSM自带Python3.8.12+pip实测可用x86_64,依赖锁cp38版),容器重启/升级/停用零影响;先例=现有DSM 03:00同步链(id=2,crontab实证7条任务在跑)宿主机直跑多年零docker,本设计沿同模式改admin跑避root属主坑;验收加docker全停下照跑实证;T1改venv自举 [nas]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 10s
CI/CD / nas-verify (push) Successful in 9s
2026-09-06 19:45:18 +08:00
claude_dev 92e63ee27c docs(data): 基本面语料库NAS采集设计spec§18+三摸底实测报告 [nas]——用户拍板六项范围(除公告PDF全量):新闻标题+摘要级/全文级/历史回补+公告元数据回补2000起/每日增量/定期业绩类PDF;硬约束=存储采集全NAS不上VPS(家宽IP与VPS东财限流零冲突)+采集限于00:30-17:30+慢爬;设计=1脚本corpus_download.py+1调度入口sanguo-corpus-daily 06:00(daily+backfill两lane串行,--until 17:30墙钟自停);数据模型=id键控(dt=发现日分区,无today文件名语义,天然免疫0902/0904式错标)+append-only短窗去重;回补顺序=公告meta→新闻meta→新闻全文→PDF(新→旧,容量闸门:/volume1实测645G空闲,每50GB自查,<200G暂停升级);失败语义吸收09-01/09-05教训(确定性错跳过不烧重试不连坐);探测优先能拿多深拿多深+depth_summary记录;附三摸底报告(聚宽136字段原料层≈100%已有/巨潮2000年起130万条年/东财3年硬顶/存储大头PDF 520G年) [nas]
CI/CD / test (push) Successful in 23s
CI/CD / nas-deploy (push) Successful in 0s
CI/CD / nas-verify (push) Successful in 8s
2026-09-06 13:49:46 +08:00
claude_dev 90b37ce27f feat(live): 成交回报回执日志①——09-04守恒缺口观测件 [vps]——根因件:002633/002836缺口复盘发现引擎会话当日成交视图行缺+时间字段中途退化None,QMT行dump全打查询时刻即铁证,事后无从对「哪笔什么时候以什么形态被看到」;用户钦点观测机制「再出现时根因可查」,dev契约:任何处理/匹配/去重之前打[trade-receipt] tid/order/acc/sym/vol/px/t_raw/recv八字段(②解析此格式,拼写冻结);实现=with_trade_receipt包装QmtBroker.get_trades(bullet_trade轮询制无成交推送回调,_Callback仅桥接断连,broker.get_trades是柜台行进本进程唯一咽喉,引擎同步/a窄修/b宽修全经它),与with_connect_retry同款实例级包装源码零改动;铁律=t_raw原样照记None也记/日志永不抛逐行try-except包死/get_trades原异常照抛行为不变;量控=观测层变化检测非处理层去组:同tid签名(t_raw+量+价+单号)不变不重打,退化即重打(捕获09-04形态),行照常流向消费方;③结论免改:vt_tradeid三条归因路径已承载柜台成交号(即时=引擎trades键/a窄修=trade_id/b宽修=eod:前缀),既有测试已钉(test_live_reconcile.py:123,206+test_live_instance_ledger.py:236),②按tid比回执↔live_trades即闭环;TDD 7新测先红后绿(caplog须set_level(INFO)坑)+598全绿
CI/CD / test (push) Successful in 13s
CI/CD / nas-deploy (push) Successful in 46s
CI/CD / nas-verify (push) Successful in 9s
vps-deployed
2026-09-06 11:14:29 +08:00
claude_dev 67a2e49f21 feat(live): 成交回报回执②回执↔账本闭环比对器——用户钦点「再出现时根因可查」:09-04实证柜台有成交/台账无行/引擎会话视图无行且时间退化,「推送到达→回调处理→落库」三跳全静默无法定位故障点;观测契约三层=①引擎侧trade-receipt指纹行(策略session实现,tag/字段名以本模块解析器为准)+②本模块parse+compare:有回执无账行=引擎处理丢(直接证据),柜台有成交无回执=柜台没推(EOD恒等式层),③账本行带柜台成交号硬键(替换会退化的时间五元组);原则宁缺勿错:tid=NONE不做模糊匹配硬凑,如实分列;ledger_only为信息项(回执上线前旧行/repair行)不判脏;TDD 8测先红(模块不存在)后绿 [vps]
CI/CD / test (push) Successful in 28s
CI/CD / nas-deploy (push) Successful in 4s
CI/CD / nas-verify (push) Successful in 12s
2026-09-06 10:53:24 +08:00
claude_dev 694a0d2238 fix(data): ak-weekly 断路器饿死修复=_safe_northbound_em+类型调序 [vps]——09-05 03:00 首跑 rc=2 根因:akshare stock_hsgt_individual_em 对无北向数据标的(~1117/2883,301xxx 等)在 data_json[result][pages] 抛 TypeError NoneType not subscriptable→failed→30 连败断路器→跳过后续类型,share_capital/top_holders/gdhs 全饿死(gdhs 目录至今不存在);端点健康(600519 返 1683 行,09-06 晨复测);修=①_safe_northbound_em 子串匹配 not subscriptable 返空 df 带 9 列 schema→走无北向持仓 empty 写空+done 既定语义不耗重试/断路器(同 _safe_top_10_em 手法)②weekly wrapper 调序 gdhs,share_capital,top_holders,northbound 最大最险者殿后防再连累③顺手 BOM;TDD 2 新测先红后绿+217 全绿;双脚本已 scp 生效位+Parse/py_compile 预检过;gdhs 手动补跑另行 [vps]
CI/CD / test (push) Successful in 23s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 13s
2026-09-06 08:29:58 +08:00
claude_dev c728f2368c feat(data): hot_rank 挂载+wrapper 时间守卫 [vps]——墙测量5轮收官用户拍板方案A:emappdata 夜间开窗(22:28 实测 OK,晨午4轮全 FAIL),19:30 档失败零连带(单 unit 失败不触断路器 rc 仍 0,不写不标次夜自愈),首夜起 gap_check 即免费持续测量;三处同步=wrapper --types+PANEL_TYPES+EVENT_PANEL_TYPES(15类),零文件=零告警首日成功即成基线;时间守卫=param -Force+非 19:00-23:59 拒绝执行留痕 guard.log(治盘前手动误跑两犯:09-02 08:08/09-04 08:00,盘前拉当日=昨日态错标+marker 锁死当晚真数据);TDD 2 测翻新(白名单拒→放行+注册断言)先红后绿+806 全绿;VPS Parse 预检过+双脚本已 scp 生效位+wall_probe.py 已删 [vps]
CI/CD / test (push) Successful in 0s
CI/CD / nas-deploy (push) Successful in 5m3s
CI/CD / nas-verify (push) Successful in 11s
2026-09-04 18:46:46 +08:00
claude_dev 6adb40e7a0 fix(live): 恒等式逐票对账补负向幻影——09-04 收盘联检实证:002633买缺100(正向孤儿,已列)+002836卖缺300(负向幻影,漏列),旧代码unattr_positions只遍历snap_pos.items(),快照没有的票永不被遍历到,单看票单会把修账做成半拉子(只补孤儿不补幻影);修=双端键并集sorted(set(snap_pos)|set(inst_pos)),正向孤儿/负向幻影都入列(002836当日在报告里只有MV差对不上数才现形);残差拆腿同步定性:-1535=100×002633收盘15.35-300×002836收盘10.23,100%来自两笔引擎未报成交,修账后应归零;TDD 1新测先红后绿+21全过 [vps]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 14s
CI/CD / nas-verify (push) Successful in 18s
2026-09-04 18:29:07 +08:00
claude_dev e2902cdf1f fix(data): ak_events_wrapper 修启动级语法错+加BOM——09-03 19:30首跑即死(rc=1零日志=解析期死亡):真根因=line14 (Get-Date).AddDays(-1) -Format yyyyMMdd 为非法PS语法(表达式后不能接命令参数),无BOM时GBK误读把报错行号搅到13误导视线;修=.ToString('yyyyMMdd')+前置UTF-8 BOM根治PS5.1对无BOM中文文件的GBK误读隐患;三向hash已证本地=git=VPS无部署损坏;教训=ps1改动部署前必须Parser预检(VPS已验PARSE_OK);今晚手动补跑13类+margin_sse 0902(T-1窗首验) [vps]
CI/CD / test (push) Successful in 14s
CI/CD / nas-deploy (push) Successful in 3m1s
CI/CD / nas-verify (push) Successful in 19s
2026-09-04 07:59:19 +08:00
claude_dev 029ea34aec feat(live): 引擎启动期行情腿自检quote_preflight——09-03行情事故定位件:momentum 9:30六笔卖单fail-closed忽略+18/22探针零单,引擎进程内取价失败但独立探针.SH格式全通(dev反证,我先前的「服务死」误判收回:get_full_tick须.SH后缀+subscribe须xtdata.run(),两个坑全踩);需进程内直接证据区分「引擎会话坏vs服务坏」:boot时broker交易腿连接后一笔get_full_tick(510500.SH)留痕OK/EMPTY/EXC,永不抛不阻断;今晚23:05轮换后新进程即出证据,明早9:30三灯(momentum重试/small_cap调仓/9:35探针)前置诊断;3新测+591绿 [vps]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 14s
2026-09-03 13:51:26 +08:00
claude_dev 37d8f85d21 feat(strategy): 情绪温度计四指标——涨停池三件套首轮Python化,消费provider.get_limit_pool出口(get_limit_pool/get_event_panel双端8/8已验);四口径契约与数据session 09-03对齐并逐条钉进测试:①炸板率=zbgc/(zt+zbgc)按行数,回封票(zt内break_count>0)留分母勿扣②dtgc空=0跌停合法值③history按trade_date对齐,某池某日无行按0计不丢日④连板高度=consecutive_boards之max(to_numeric吸字符串)+行业集中度用industry现成列(空串/NaN剔除);三接口=compute纯函数+daily单日快照(date=None最新落盘日)+history区间校准表;只算不判,阈值待23日真实数据校准后另定;10新测+588全绿 [vps]
CI/CD / test (push) Successful in 21s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 14s
2026-09-03 08:58:49 +08:00
claude_dev 99355bfbea docs: 活文档§17 首夜巡查修正——margin_sse T+1 结构根治/NAS 同步链扩容/回灌纪律/VPS 部署终态(同批同步,防失传) [nas]
CI/CD / test (push) Successful in 0s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 14s
2026-09-02 23:09:19 +08:00
claude_dev 564160db11 fix(data): margin_sse 拆 T-1~T 两天窗——巡查实锤 SSE 融资融券 T+1 供应,当晚拉当天结构性永败 43 天(用户批准结构修) [vps]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 5s
CI/CD / nas-verify (push) Successful in 6s
07-22 起慢性失血实锤: margin_sse 最后非空文件 20260721,之后 30 个交易日
全被旧码标成 空文件+done 锁死(每晚 19:30 拉当天,SSE 当日数据未发布→
空响应→akshare Length mismatch 崩→旧码转 empty 落盘+marker)。

已处置(同批): --force 回补 20260722~20260901 全区间 30/30 ok 59865 行;
本 commit=结构根治: wrapper 把 margin_sse 从 13 类当日批拆出,单独
--start T-1 --end T 两天窗——每晚稳定写昨日(数据已发布),当天失败不写
不标(新语义),次晚同窗自动重试补上,单晚漏跑自愈;两段 exit code 合并
任一非零即非零。0902 今晨已过 19:30,明晚首验(写 0902+0903)。

生效位=VPS scripts(手动 scp,CI 不覆盖 VPS)。
2026-09-02 22:47:21 +08:00
claude_dev ab8f4e3782 fix(nas): sync_parquet_daily 扩到 A 档 13 类+gdhs 全量拉——巡查实锤 TYPES 写死旧 4 类,明晨 03:00 快照族/涨停池到不了 NAS [nas]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 20s
09-02 巡查发现: sync_parquet_daily.sh TYPES 硬编码 dragon_tiger/block_trade/
margin_sse/restricted,今晚 19:30 A 档首夜产出(快照族 6 类+涨停池×3)不在拉取
清单,明晨同步后 NAS 回测侧依旧零文件(provider §16 出口在 NAS 断供)。

修: TYPES 扩到 13 类(+zt_pool×3/fund_flow×2/ths×2/xueqiu_hot/sina_sector,
7 天滚动窗逻辑不变);gdhs=per-period(季度末日期永不落 7 天窗)单独全量拉
(dir /b 枚举后逐文件 scp,≤10 文件幂等,周六 ak-weekly 产出)。

生效位=/volume1/stock(scripts/nas_sync/),CI 不覆盖,需手动部署 NAS;部署后
手动跑一轮验证=顺带把今晚首夜数据提前送 NAS(不等明晨 03:00)。
2026-09-02 22:31:23 +08:00
claude_dev 7f01c5fe9a ci: 补 4966d30 环境标签(subject 尾,CI 定检 %s) [vps]
CI/CD / test (push) Successful in 23s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 15s
4966d30 的 [vps] 误置 body 末尾,enforce-label 只查 subject 行(ci-cd.yml
git log --format=%s)→ run#1038 rerun 红在标签步(pytest 未跑)。本空 commit
使 push range(4966d30..HEAD)重查通过;nas-deploy checkout 本 commit 即含
全部变更。后续 commit 标签一律放 subject 尾(规范模板:<type>(<scope>):
<desc> [vps])。
2026-09-02 11:04:58 +08:00
claude_dev 4966d30a11 feat(provider): A档截面数据使用层出口——泛型底座+涨停池门面双层接口
CI/CD / test (push) Failing after 3s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
09-02任务①落地。§15采集的14类panel数据此前零读取出口,策略/因子session
想用只能手搓parquet路径;经业界对照(dsa get_limit_up_pool/tushare
limit_list_d U/D/Z参数化/聚宽per-domain/OpenBB TET)定稿「泛型底座+域
语义门面」:

①get_event_panel(event_type,date/start+end,trading_days_only=True):
保真底座,白名单14类统一通道(=采集注册表口径,hot_rank未挂载不入列),
返回akshare原样中文列+trade_date(文件名合成);缺文件=合法缺失→空df;
trading_days_only默认用get_trade_days滤非交易日——治快照族「周中法定
假日文件=上一交易日态复制品」的区间双计数(采集层只按周一~五落盘,
周六根本无文件,风险面=周中假日);=False按周一~五枚举(=采集口径)

②get_limit_pool(kind=zt|zbgc|dtgc,...):涨停池门面(温度计/炸板率/行业
集中度消费契约),kind三合一←tushare limit_list_d;英文标准列
code/consecutive_boards/seal_amount/break_count/industry…(键名对齐dsa);
映射表基于VPS真实parquet实测(dtgc实测含动态市盈率/封单资金/板上成交额/
连续跌停/开板次数,与文档口径有差);akshare改中文列名时本层吸收漂移,
有行缺源列→DataSchemaError fail-fast;真空日(dtgc 0跌停空文件无列)
→仍返标准列空表schema稳定

③实现=TET Fetcher(fetchers/event_panel.py双Fetcher同文件,price.py先例),
FETCHERS注册表+event_panel/limit_pool两键(未来MCP出口零成本);base.py
新增_DateRangeParams跨字段校验(date/start+end互斥二选一);LocalUnified
Provider(回测)与SanguoMiniQmtProvider(实盘,委托self._unified)双侧同款
——方法面钉死测试强制无缺口,双侧同schema支持副本对照;miniQMT/QMT/
PTrade均无此类接口(业界惯例=外部源补),实盘同读本地文件

测试:21新测试(白名单fail-fast/日期语义/保真读/假日滤/门面schema/
列漂移fail-fast/真空日空表/注册表)+全量793绿;活文档§16+§15指引行 [vps]
2026-09-02 10:43:11 +08:00
claude_dev 8c6a3f90d0 fix(strategy): channel_test盘外轮换改锚固定9:35——09-02 dev巡检实锤5d0a0bf副作用:随启随验「盘外不注册」×运维规则「轮换放23:05后」=每次boot都盘外→永不注册→测试通道停摆(live_18/22零任务,调度恢复又因存档模块路径vs runtime副本错配恒失败,守卫再拦回退注册,三重叠加清空);考古澄清:四固定任务自08-20 147a49d随启随验上线即有意退出live(probe_all一轮覆盖rotate/T1/swap),非本次回归;修=盘外boot改锚固定9:35(历史主调仓时刻,盘中由构造保证),盘中boot仍now+90s快验不变,执行侧守卫保留为末道防线;原「盘外不注册」测试按新规格改写为断言注册9:35;25/25+557绿 [vps]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 3s
CI/CD / nas-verify (push) Successful in 7s
2026-09-02 10:25:36 +08:00
claude_dev 66e741b6bb docs: 数据设计文档活文档化+§15 A档截面数据域增补——用户约定(09-02):唯一数据设计文档,每次架构变更同批更新(防长期失传);决策=更新原2026-07-21融合spec不新建(三层框架仍成立/引用链不断/少一份文档),头部状态从「设计草案」翻为活文档声明+最后更新日期;§15沿用「日期节追加新节覆盖旧节」惯例:15.1单脚本红线 15.2十一数据域清单表(源/集群/调度/行数/回补能力) 15.3东财墙模型(每IP每~40min窗口1发/cyq数学死/换域答案) 15.4语义与防线(panel_gap_check两档+panel契约) 15.5消费契约(炸板率口径/列名schema) [nas]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 14s
2026-09-02 09:41:02 +08:00
claude_dev 46a0569b9a feat(data): A档全量落地——热度三件+股东户数收尾(用户批「按此方式实施,nas验证后推vps」);①xueqiu_hot雪球5633行+sina_sector新浪行业49行对账源进ak-events 19:30(同款快照语义)②hot_rank东财人气榜fetcher/注册先行,wrapper挂载留待恢复窗测量拍板(墙未定论不带不确定单元上线防缺日告警噪音)③gdhs股东户数进ak-weekly周六窗=per-period新形状:build_gdhs_units只枚举距今>90天季度末(披露守卫,防未披露期拉空走真空+done语义被marker锁死永不重拉的09-02设计坑),单次全市场5342行,marker去重无新期零网络;vintage缺日名单+2快照族(hot_rank留位);+6测试(注册/None/df契约/gdhs守卫两形态/缺日名单)215全绿 [vps]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 16s
2026-09-02 09:16:14 +08:00
claude_dev 00cfd45d1a feat(data): A档第二批接入——新浪资金流×2+同花顺行业/概念榜进ak-events 19:30(用户批方案A);东财push2墙死后免费无墙替代源双机实测秒级零限流(新浪行业资金流90行带净额/领涨股+概念387行,同花顺行业90行×12列+概念375行);快照族语义显式化:端点无date参数无历史回补,19:30采集=收盘终态,节假日拉到上交易日快照接受重复由消费方按交易日历过滤;vintage缺日检查扩全panel族并分档——可回补族(zt_pool×3)近窗洞给回补指引,快照族洞即永久告警查当晚日志无回补指引,旧洞不刷告警防疲劳;+5测试(注册/None/df契约×2+快照族永久洞语义)29绿 [vps]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 12s
2026-09-02 08:57:39 +08:00
claude_dev 020d7cda4b feat(data): vintage自检扩涨停池缺日防线——策略session共识「断档=不可逆损失须尽快」;per-date家族语义=每工作日(含节假日,空数据也写空文件)应有1个parquet,文件缺=当晚schtask漏跑=洞;洞≤42日历日(≈30交易日回补窗)→告警点名缺日+手动--start/--end回补指引,滑出窗=永久缺只入json不刷告警(防永久exit3疲劳);检查窗=首文件日→昨天(当日19:30才落盘不算洞);panel块进vintage_status.json契约(additive零破坏);+4测试(近窗洞告警/连续无洞/永久洞静默入json/目录缺不崩)13绿 [vps]
CI/CD / test (push) Successful in 22s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 15s
2026-09-02 08:17:02 +08:00
claude_dev db789d6e9c feat(data): akshare事件类扩涨停池三件套——daily_stock_analysis调研落地第一步;双机实测(Mac+VPS生产IP)分流:push2ex集群(zt_pool/zbgc/dtgc)连打多轮全稳可用,push2 clist集群(行业/概念榜/板块资金流/主力资金)与push2his(cyq筹码/个股资金流)每IP长窗暗配额(首发200第二发起全reset,30s/镜像轮换/换头均不过)判敌对弃采;zt_pool 83只/zbgc 6只/dtgc 2只真实行数实证,dtgc空数据=当日真无跌停走既有写空+done语义;三类型进PER_DATE_TYPES家族(ak-events 19:30同窗+3单次调用<1min),零新schtask零新目录零新依赖;+4测试(注册/None契约/df契约/真空df落盘) [vps]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 13s
CI/CD / nas-verify (push) Successful in 14s
2026-09-02 08:07:31 +08:00
claude_dev de9efec87e docs: 002646孪生丢笔修账证据包入库——QMT同秒孪生成交事件+盘中API明细双丢(晚间视图才补全)致台账缺1笔600股;证据=订单filled 8900vs台账8300+全账户40持仓唯一差异+恒等式4242=600×7.07精确归位;修账已执行(用户21:00批准):backup API备份+INSERT repair行+live_17 23:41重放,快照8900与QMT精确一致;08-27同型案在档,同秒孪生=QMT损耗模式 [nas]
CI/CD / test (push) Successful in 6s
CI/CD / nas-deploy (push) Successful in 1m2s
CI/CD / nas-verify (push) Successful in 12s
2026-09-01 23:54:53 +08:00
claude_dev e012342d0d fix(data): register脚本对齐VPS现场命名+ak-monthly改XML注册——09-01晚实测暴露脚本漂移:08-20 schtask重组已改名ak-daily/ak-monthly/ak-weekly(wrapper不变)但本脚本没跟上,重跑旧脚本=拿过期地图改现场:①复活与ak-weekly完全重复的ak-stock(同wrapper同周六03:00会双开并发,已现场删除)②ak-quarter行「/m月份列表+/d SAT」在zh-CN schtasks报「/D选项无效」根本没注册上;修=①任务名对齐现场六件套(daily19:00/events19:30/weekly周六03:00/monthly首周六02:00/vintage09:00/index16号19:50)②monthly改嵌XML(ScheduleByMonthDayOfWeek Weeks=1 Saturday,Out-File Unicode+Schtasks /create /xml,绕开zh-CN星期名限制)③头注释记命名史+事故链防重演;现场已同款修完(ak-monthly next=9/5首周六,顺带周末全规模预演新代码) [vps]
CI/CD / test (push) Successful in 21s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 20s
2026-09-01 20:49:35 +08:00
claude_dev 7b7667e0ac fix(live): EOD对账重启兜底归因——remark指纹重建本实例订单集+实例唯一label注入;09-01 002646终局实锤:引擎订单注册表=进程内存态(轮换重启即失,runtime持久化只恢复策略/账本),新进程18:49 EOD报「本实例=0」→无守恒缺口→记日,当日15:05后才补全的迟到成交永久失联(get_trades内部本就是query_stock_trades,重试环与直查同源都不缺接口,缺的是归因锚);修=①runner_live经live_config注入strategy_name=live_{id},订单remark(bt:live_17:hash)实例唯一(此前六实例适配文件同名,label全为live_strateg不可分;仅对注入后新单生效)②eod_reconcile补_own_orders_remarked:broker.get_orders(QMT当日订单,带remark)按前缀筛本实例→shim补进own_by_broker(setdefault,engine自己的单优先),状态复用broker._map_order_status,is_buy缺失弃用(宁漏勿错);_PENDING不重建(EOD兜底已覆盖当日全量,省一条风险面);+4重启形态测试+1注入缝钉子,557绿 [vps]
CI/CD / test (push) Successful in 11s
CI/CD / nas-deploy (push) Successful in 5s
CI/CD / nas-verify (push) Successful in 10s
2026-09-01 19:18:22 +08:00
claude_dev 8bcca3146b fix(data): vintage自检补覆盖率撕裂告警——VPS真数实测暴露v1盲区:cashflow洗库中段8%vs两表100%但max_period同为Q2'26,仅看max报了OK漏掉撕裂;补=三报表coverage最大-最小>50pp告警(三报表同批披露稳态应同步,中段/某表大面积失败即触发);+1真形态测试 [vps]
CI/CD / test (push) Successful in 7s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 10s
2026-09-01 19:17:03 +08:00
claude_dev 5d0a0bf6d3 fix(strategy): channel_test探针盘后下单双守卫——09-01 18:48轮换重启实锤:随启随验run_daily锚定now+90s=18:50,探针16笔真单盘后全挂柜台(~107万买单冻结排队次日集合竞价);且run_daily为每日重复锚定,08-30周日13:07重启即埋下「每天13:09盘后风格漂移」隐患,jq_strategy调度恢复失败回退注册当前时刻是第三路径;修=①注册侧:锚点落非交易时段(工作日09:25-11:35/12:55-15:05)不注册+大声告警②执行侧:probe_all首行守卫,盘外触发整轮跳过零下单(兜调度错锚/回退路径);墙钟抽_now()可注入,测试autouse钉盘中防CI时段漂移;+3守卫测试+11边界参数化;25/25 [vps]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Failing after 12m28s
2026-09-01 19:04:40 +08:00
claude_dev 8dc3f494b7 feat(data): 静态表调度挪周末+vintage盘前自检——③sanguo-ak-quarter月内1号02:00改财报月首个周六02:00(/d SAT,周六02:00→周一09:30有55h跑道;旧排程7.5h夜窗连单表8h都装不下,09-01注册后首爆16h+穿整个交易日,09:32决策窗撞balance(94%Q2'26)/income(0%)vintage撕裂致value ROE归零清仓;月内1-4号读旧但一致,策略配对修复侧兼容)④新增static_vintage_check.py每日09:00自检:三报表最大报告期+覆盖率盘点(REPORT_DATE列裁剪扫描),跨表撕裂/估值断更(>48h)告警exit 3,原子落vintage_status.json供策略盘前预判(策略session协作契约);register加sanguo-ak-vintage+新wrapper;+8测试 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 8s
CI/CD / nas-verify (push) Successful in 14s
2026-09-01 19:03:53 +08:00
claude_dev aa7e7b8eba fix(data): 静态表下载两隐患根治——①北交所白烧重试跳过(东财三报表端点SH920xxx必败'NoneType'错,09-01季频洗库实测340股×3表×3retry+退避白烧≈5h;对齐top_holders BJ_PREFIXES同款跳过,valuation/financial_abstract实测BSE有数据不跳)②fetch失败语义修正:15个fetcher不再经_df_or_empty把重试耗尽(None)转空df→空parquet覆盖旧好数据+标done永不重试(09-01实证340空文件全BSE属侥幸,主板瞬时故障会真毁数据);改返None交download_one_unit既有failed分支=不写不标保旧数据复跑重试,真空df才写空+done;test_top_holders一处旧契约断言同步(失败返None);+8测试钉死 [vps] 2026-09-01 19:03:47 +08:00
claude_dev 3b3f7d689c fix(provider): value ROE 配对改公共报告期交集治财报季 vintage 错位清仓——09-01 09:32 value_selection_ex 月度窗口 L3=0 全清仓实锤:roe_series 构建=income/balance 各自 latest-4 再硬 REPORT_DATE 匹配,财报季一表领先一季(balance 已带 2026 中报而 income 未刷新,ak-quarter 马拉松 09:32 时 94%/0% 撕裂)两窗错开一格只交 3 期→策略 len>=4 全体不过→821 只零候选→卖 600276/603288 共 1.23 万股趴 483k 现金;修=两表各取 2 倍缓冲→REPORT_DATE 公共交集回最近 4 季(同季重述取最新 notice),策略层 len>=4 契约不变,原版+_ex 同受益;+3 回归(领先一季仍满 4 期/领先季绝不跨季错配/对齐两表语义不变);538 绿 [vps]
CI/CD / test (push) Successful in 17s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 12s
2026-09-01 18:59:32 +08:00
claude_dev 9f264f8bd0 fix(provider): sqlite连接改thread-local根治跨日存活跨线程崩——09-01 09:30 live_19实录:引擎首次跨日存活后回调线程变化(连接建于线程19932/用在线程4184),_connect单例连接跨线程复用直接ProgrammingError→momentum_timing牛熊分界不可用跳过当日调仓(安全降级但每日复发直到重启);修=threading.local每线程各持连接(fetchers四处ctx._connect()零改动);影子引擎0例中招;2新测试复现同款报错文案钉死 [vps]
CI/CD / test (push) Successful in 19s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 12s
2026-09-01 12:54:30 +08:00
claude_dev 1d9265b922 fix(live): 废单告警补第二肢治柜台级拒单盲区——08-31 T+1探针实锤:柜台拒单不进QMT当日订单API(query_stock_orders 15笔全SUCCEEDED不含被拒卖单),订单状态永停非终态,原告警等柜台报rejected结构性等不到;新肢=当日自提交订单EOD仍非终态且零成交→疑似废单(提交侧自证,不依赖QMT报状态;正常撤单已到终态不计,部分成交残量仍归守恒管);两肢合并入rejected_orders带why字段区分;+2测试(疑似单命中/撤单与跨日不误报);全量1368绿 [vps]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 19s
CI/CD / nas-verify (push) Successful in 18s
2026-09-01 12:17:08 +08:00
claude_dev b695874b3c fix(live): 守恒/废单跨日过滤属性错位根治——订单时间字段误读不存在的datetime(bullet_trade Order实为add_time,全字段扫描实锤)恒None→跨日过滤从不生效,引擎跨交易日存活时历史终态订单全进当日守恒对比(台账只记当日行)→每日假缺口告警+重试刷到23:00;09-01进程将首次跨日存活必首发作;两处同修(守恒+废单清单),测试替身datetime_=改回add_time_=(08-29周末提交曾喂不存在的datetime=把bug锁进断言)+新增昨日终态订单零缺口回归;531绿 [vps]
CI/CD / test (push) Successful in 6s
CI/CD / nas-deploy (push) Successful in 27s
CI/CD / nas-verify (push) Successful in 17s
2026-08-31 18:32:20 +08:00
claude_dev 6710591d44 fix(web): 因子域三页主按钮观感统一——BatchEval/New/LeaderboardDetail 的 .btn.primary 原为青实底深字+glow 旧观感(用户反馈「批量评估和因子分析里的按钮样式都不太对」),统一替换为排行榜「发起新评估」同款(青软底 var(--cyan-soft)+荧光青字 var(--brand)+半透描边,el-button--primary 观感);Result.vue 无主按钮不动 [nas]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 9s
CI/CD / nas-verify (push) Successful in 8s
2026-08-30 19:19:25 +08:00
claude_dev 4ab83097ec fix(data): constituent_unified中证1000(000852)全0修复+current锚点三重防线——000852的1233条成分全in_current=0(因子池端点显示0只);根因=08-16 idx-monthly STEP0的fetch_akshare_current(000852)瞬时网络失败被「非致命warning」吞→announce_union重写丢current锚点→migrate全标was_removed,而snapshot兜底对两指数均为csindex超时placeholder从未起作用;数据修复(已执行)=akshare现拉1000只append进announce_union+正规migrate/merge重建,VPS主库1673条cur=1000精确达标,全21指数diff仅000852,NAS sync_tables已同步同态,全0扫描为空;代码防线=①fetch重试3次②空解析raise大声(列定位失败不再静默返空)③_carry_forward_current失败时沿用旧parquet current行锚点只增不丢(000852/932000两块接线);6新测试钉死三防线 [vps]
CI/CD / test (push) Successful in 10s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 12s
2026-08-30 12:49:13 +08:00
claude_dev 81b5b558a6 fix(live): 部署滚动重启QMT会话竞态根治双层——P1 runner_live connect退避重试5×10s(08-30实录live_17/20重拉后connect=-1整引擎退出静默缺仓,会话回收秒级重试即免疫,失败清理QmtBroker自带重试安全)+P0 重启脚本杀后等30s会话回收+引擎数核验追平杀前DB期望追不平exit 1红灯(vps_count_engines.py经promote部署,expected须杀前取);VPS实测双模式6/6;全量1359绿 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 7s
CI/CD / nas-verify (push) Successful in 9s
2026-08-30 12:46:48 +08:00
claude_dev ea1d41b04c fix(live): day_count隔日恢复+1双计修正(落盘值已含自增,恢复直取saved_count) [vps]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 10s
CI/CD / nas-verify (push) Successful in 10s
2026-08-30 11:54:03 +08:00
claude_dev 5cc326dd4a fix(factor): output_dir建目录兜底——VPS(Windows)首跑/tmp/factor不存在tears静默失败 [vps]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 13s
API路径output_dir硬编码/tmp/factor是容器/NAS约定;Windows解析为当前盘根
\tmp\factor,首跑不存在且tears/心跳open直写不建目录→FileNotFoundError
→tears标注json_error静默降级+心跳全丢。os.makedirs exist_ok幂等修复,
赶上统一推vps班车。factor全套测绿
2026-08-30 10:53:34 +08:00
claude_dev 51c400030b fix(web): 生成tears按钮任务状态化防重复提交(用户08-30补充) [nas]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 7s
痛点:点击生成→progress→返回详情页按钮仍可点,重复生成同类任务。
方案:每因子记task_id(localStorage factorTearsTask.v1),按钮三态——
无任务「生成tears报告」/进行中「分析进行中·查看进度→」(跳progress复用)/
已完成「✓查看tears报告→」(跳result复用);failed或tears缺失(修复前旧
失败任务getTearsData探测404)自动清态恢复可重新生成;任务404(已清理)同。
mounted/watch factor刷新态;build绿
2026-08-30 10:48:45 +08:00
claude_dev ad2270821c fix(web): 进度页时间线越界+因子任务日志空(用户08-30验收两处) [vps]
CI/CD / test (push) Failing after 14m58s
CI/CD / nas-deploy (push) Has been skipped
CI/CD / nas-verify (push) Has been skipped
①时间线:原「末节点flex 0 0 auto+bar宽100%相对本节点」=4号点贴屏幕右缘、
3号bar越界伸出容器 → 全节点等宽flex:1(dot落各等分区中心),bar改
left:calc(50%+16px)/width:calc(100%-32px)精确连接相邻dot。
②因子任务日志空:log端点读的{db目录}/{tid}.log因子任务从不写 → 心跳
追加流水:_report_progress同时append [HH:MM:SS] stage·detail 到
{tid}.progress.log,/task/{id}/log factor_前缀优先返流水(行情加载i/N、
因子i/M、tears✓即用户要看的运行过程);189测+build绿
2026-08-30 10:46:05 +08:00
claude_dev 20be2d5152 fix(web): 因子分组双竖排平齐+排行榜主按钮观感对齐(用户08-30两项) [nas]
CI/CD / test (push) Successful in 5s
CI/CD / nas-deploy (push) Successful in 12s
CI/CD / nas-verify (push) Successful in 15s
①FactorPicker:左列=alpha101+builtin(小类拼列)右列=alpha158(大类独占),
两竖排大体平齐(原grid顺排builtin孤悬左下右下留白);flex双列,未知类别归左列。
②Leaderboard「发起新评估」:荧光青实底+冷白字对比不足(浅底浅字看不清)→
对齐el-button--primary观感(新建模拟盘同款):青软底+荧光青字+青描边。
npm run build绿
2026-08-30 10:24:29 +08:00
claude_dev 8f4f564733 feat(factor): 进度页心跳判活+因子列表默认折叠(用户08-30反馈两项) [vps]
CI/CD / test (push) Successful in 4s
CI/CD / nas-deploy (push) Successful in 11s
CI/CD / nas-verify (push) Successful in 7s
痛点:因子分析分钟级运行,进度条停着看不出进行中还是死掉;240因子罗列乱。
①跨进程心跳链路:analyzer._report_progress 写 {output_dir}/{tid}.progress
(stage/detail/ts;IO故障静默——锦上添花不能伤主流程),埋点=行情加载i/N逐只
+因子特征+逐因子i/M+tears✓+完成;runner._factor_worker 透传 task_id
(默认空串兼容旧调用);GET /task/{id} 合并 _read_factor_progress(factor_
前缀才读,age=距上次活动秒数)。
②Progress.vue终端风重构:心跳区=呼吸灯(绿≤30s/琥珀≤180s静默期/红更久,
prefers-reduced-motion停动画)+「Xs前·detail」+运行时长秒表+步骤%大数字;
因子步骤=行情加载→因子计算→逐因子分析→完成(心跳stage驱动);回测/优化
保持原5步推导+进度条;useTask/TaskStatus 透传 progress。
③FactorPicker默认折叠:groups max-height 128px两行预览+渐隐底边+
「展开全部N个因子▾」按钮,搜索时自动展开。
+5测试(_report_progress写/静默/心跳读roundtrip/非factor/损坏JSON),323绿+build绿
2026-08-30 10:17:19 +08:00
claude_dev 557479b848 feat(factor): New/Result两页终端风重构落地(方案B设计稿v2用户拍板'开工') [nas]
CI/CD / test (push) Successful in 3s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 9s
后端3小端点(sanguo_factor/universe_pools.py+routes):/factor/universe/pools
池清单(白名单6指数+当前成分数,in_current=1池语义≠回测并集口径)/pool/{key}
成分(code+name读constituent_unified)/search?q=(代码前缀OR名称子句DISTINCT
LIMIT10);cfg=None兜底同analyzer;+6单测+2端点测(⚠️首版误覆盖batch_eval的
universe.py,git恢复后改名universe_pools,292测全绿)

前端:①New.vue终端风重写——FactorPicker(搜索+三色分组点选+已选托盘,
240因子弃下拉)+UniversePicker(三层输入:预设池一键选[跨行业30前端常量+
6指数池走后端]/搜索combobox防抖250ms带名称候选/chips池可删+复制+清空,
批量粘贴折叠兜底)+原生date input禁未来+跨度显示+校验前置(禁用+原因文案);
要素零变化(query.factor预填/hydrate回填/≥1因子+≥2标的/混合分隔)。
②Result.vue外壳——5格metric-strip(最优ICIR正红负绿/最优因子青)+IC明细
终端表格(右对齐tabular-nums,|t|≥2加粗,最优因子行青标+左青条)+tears区
tabs终端化(TearsPanel本体不动)。③factorSamples.ts常量:跨行业30只
(code+name)详情页一键直达与New页预设共用同源(LeaderboardDetail改引,
删本地重复清单)。npm run build绿(vue-tsc+rolldown)
2026-08-30 09:59:38 +08:00
claude_dev 271adedbb5 docs(factor): 设计稿v2——标的池textarea改三层输入(用户反馈'太原始') [nas]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
参考聚宽/万得选股器+收件人式tags input,把'手打代码'变'点选':
①预设池一键选:跨行业30/沪深300/中证500/1000/2000/全A主板+创业板(cs_rank族
因子300+只才不失真,手贴不现实)
②搜索加自选:代码/名称模糊→候选下拉(代码·名称·行业·已选标记)点选加入
③chips已选池:600519贵州茅台✕可删标签+计数徽标+复制清单+清空;
批量粘贴收进折叠兜底入口(能力保留不再是主入口)
配套说明:后端3小端点(池清单/池成分读constituent_unified/标的搜索),
New.vue拆UniversePicker.vue组件,预估1天
Chrome实测:池载入54只+按钮点亮/搜茅台候选带已选标/chips渲染/校验联动全通
2026-08-30 09:48:09 +08:00
claude_dev d1d48896a9 docs(factor): New/Result两页终端风设计稿v1(可交互,任务#12方案B) [nas]
CI/CD / test (push) Successful in 2s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
照 tears-compare-mockup 流程先出稿拍板再实现。三tab:
①提交页New:因子多选从Element下拉改「搜索+分组点选」面板(240因子下拉翻页难)
+三类别色chip(101青/158紫/builtin琥珀)+已选托盘chips可删/清空(同对比托盘交互)
+标的池mono textarea实时计数徽标+跨行业30只预设(与详情页一键直达同样本便于复现)
+区间禁未来+跨度显示+提交校验前置(未满足禁用+原因文案)
②结果页Result外壳:5格metric-strip(最优ICIR红/最优因子青)+IC明细终端表格
(右对齐tabular-nums,IC/ICIR/t正红负绿,|t|≥2加粗,全局最优行青标+左青条)
+tears区块虚线占位示意(新版TearsPanel已上线本次不动)
③实现说明:范围/交互变化/拆分预估(New半天+Result1-2小时,纯前端零后端)
种子合成数据mulberry32;charset声明防file://乱码;本机Chrome实测两tab+交互OK
2026-08-30 09:41:49 +08:00
claude_dev 8eba3e1cf1 fix(factor): tears对秩类离散因子必空根治(qcut duplicates+quantiles=10) [vps]
CI/CD / test (push) Successful in 1s
CI/CD / nas-deploy (push) Successful in 6s
CI/CD / nas-verify (push) Successful in 8s
alpha16实锤(08-30用户验收factor_b7f3a2e8无图表):cs_rank(ts_cov(cs_rank,cs_rank,5))
截面值高度并列(中位日25值仅6唯一,-19.5×12/-5×9)→alphalens quantize_factor的
pd.qcut(x,q)不传duplicates(默认raise)→Bin edges must be unique→no_raise吞成全NaN
→binning丢100%(303/303日期全抛)→merged空→IC全'No valid IC values'+tears
IndexError+报告空=页面无图表。该形态下此类因子tears永远不可能成功。

修复三件:
①tears_data.py加pd.qcut duplicates='drop'幂等patch(与demean pandas2 patch同位,
_SANGUO flag防重入)——并列值并入少数分位,quantile_keys动态短化前端已容错
②analyzer get_clean调用前import tears_data激活模块级补丁(原import在IC后=补丁
晚到)+quantiles默认5→10显式传参(对齐tears页D1..D10设计与排行榜decile口径)
③build_tears_data qkeys防御:<2组多空退化零序列/0组空Series,不再IndexError

+回归测试:离散并列因子走真实alphalens binning(原测试自合成factor_quantile
绕过该路径=漏掉此bug的原因);RED→GREEN双向验证(无patch merged空(0,3)97.5%
bin丢/有patch绿)。factor+api 123绿;NAS容器30只股端到端:binning丢0.0%、
merged 7732行、tears三周期出数(ic_mean 5D=-0.0014)
2026-08-30 09:36:21 +08:00