fix(minute): 全量分钟服务落盘持仓库写锁 + 原子写临时名唯一化 + 基准状态暴露

- minute_refresh 落盘改持 repo._write_lock: 与 minute-batch 补拉/盘后同步
  同一纪律。此前服务是唯一不持锁的写者, 并发替换同一分区时后写者以过期
  基底覆盖丢整批行, 且共用固定名 tmp 会交错损坏且无自愈。实测增量轮落盘
  ~10ms, 锁占用可忽略
- _atomic_write_parquet 临时名加 uuid 后缀: 消除两写者共用同一 tmp 的
  交错损坏窗口; 崩溃孤儿 tmp 不匹配 *.parquet glob
- 服务每轮记录本地库 raw 基准状态 (status 新增 minute_basis_raw 字段),
  未迁移库一次性警告不刷屏; 插件契约文档补"full_minute 必须返回原始价"条款
- 修正头注释 clamp 漂移 ([3,300]→[3,120])

Signed-off-by: shy3130 <shy3130@qq.com>
This commit is contained in:
shy3130
2026-10-25 17:31:05 +08:00
parent d43a3021da
commit ddaab1fbf1
5 changed files with 266 additions and 6 deletions
+4
View File
@@ -234,6 +234,10 @@ provider 不应自行切换或回退到其他数据源。
> - `get_intraday_latest(symbols=None, count=3) -> pl.DataFrame` — **可选**,
> 稳态增量轮专用:尽量单请求返回全市场每只标的最新 `count` 根。未实现时
> 服务自动降级为仅修复轮,节奏下限抬到 60s(全天批量打不住 6s 节奏)。
> - **价格基准契约**:两个方法都必须返回**原始价(不复权)**。本地分钟库以 raw
> 基准落盘 (`.raw_basis` 标记),读取侧统一做前复权投影;返回已复权价格会与
> 本地存储混基准,产生静默的错误价格。服务状态面板的 `minute_basis_raw`
> 字段会暴露本地库的基准迁移状态。
>
> 两个方法的返回帧都过 `_enforce_minute_beijing_wallclock` 时区守卫(与
> `get_minute` 同纪律);失败抛异常或返回空 df 均按空轮处理,连续空轮触发