e22f0e0aa8
spec §18.7 T2(corpus 栈唯一新脚本,单脚本红线): - daily 四段: 公告增量(巨潮 T-1~T 两天窗自愈)/新闻增量(search-api 带摘要, (art_code,stock_code) 复合键=同稿多股 meta 多行)/新闻全文(昨日新 art_code, art_code 全局一条)/当日 PDF(五类服务端码 category 码+业绩快报标题谓词—— 实测 yjkb 码不存在,无效码被服务端静默忽略返回全量,故走客户端标题过滤) - 断点: unit marker tmp+rename;--until 墙钟=完成当前 unit 后 rc=3;--limit 冒烟 绝不落 marker(5m 09-17 教训) - 单实例锁: fcntl.flock(state/corpus.lock)——跨容器语义(bind mount 同 inode, 内核持有/进程死自动释放);5m 的 pid 活性检测在 docker run --rm 各自独立 PID namespace 下失效,corpus 换 flock(让路契约同款,锁忙 rc=3) - id 去重双层: IdLedger 全局账本(state/ids_*.parquet int64 hash,满足 §18.5 announcement_id 全局无重)+RecentIndex 近30日分区索引(兜账本flush周期崩溃窗) - 失败语义: 传输错 unit 不标done;真空=合法done;4xx确定性跳过不烧重试; 域名连续错×10或429冷却它域继续;rc 0完成/1致命/2限流/3墙钟或锁 - 股票池: 巨潮 szse_stock.json(实测含退市000003+北交920001,6247条)A前缀过滤, 非NAS副本库——orgId 为按股查询硬前提且退市覆盖更全(spec 偏差T6回写) - 测试 36 个全 mock 零网络零写死日期;全套 253 绿