fix(resource): 统一 ResourceQuery 路径匹配契约

This commit is contained in:
2026-09-19 07:59:31 +08:00
parent 045d598400
commit 56ad014199
5 changed files with 367 additions and 85 deletions
+19 -12
View File
@@ -2,7 +2,7 @@
> 基线:`experiment`
>
> 当前已知基线提交:`37d49c9793d25288fd2fcc60b95c1ba55bdf7623`
> 当前已知基线提交:`045d598400f9435051bb9554e06e123d0d8a3704`
>
> 工程原则:不以“最小修复”为目标。所有修复与新功能优先考虑长期可维护性、可用性、安全性、明确契约、回归测试和后续扩展成本;避免无关重构,但一旦处理一个问题,应完整收口其工程边界。
@@ -168,7 +168,7 @@ transition、generation race、过期和失败失效回归,并验证现有 CDN
# T02 — ResourceRepository 查询契约统一
**类型:** P2
**状态:** Ready
**状态:** Done
## 问题
@@ -179,7 +179,7 @@ transition、generation race、过期和失败失效回归,并验证现有 CDN
```text
* 不跨 /
** 可以跨 /
? 匹配一个字符
? 匹配一个 Unicode scalar value
```
当前 Rust matcher、SQLite LIKE 转换以及 `list()` / `count()` 的实际过滤语义并不完全一致。
@@ -225,12 +225,23 @@ list(query).len() != count(query)
## 关系
**Hard Blocker**
**历史 Hard Blocker(已满足)**
```text
T02 → T13
```
## 完成记录
已将 `ResourceQuery.path_pattern` 收口为 `bat-core` 共享的 Unicode scalar
matcher`*``?` 不跨 `/``**` 支持跨 `/``**/` 可匹配根目录和任意深度目录,
`/`、大小写、`%``_``\` 均按字面量处理,空路径/空模式和连续通配符都有确定语义;
匹配使用有界动态规划,不再使用按字节递归回溯。InMemory 与 SQLite 共用同一最终判定,
SQLite 仅下推安全候选过滤,不再把 SQL `LIKE` 当作正式 glob 语义;包含路径或 metadata
后置过滤的 `count()` 会复用完整查询结果,保证与 `list()` 精确相等,无后置过滤时保留
SQL COUNT 快速路径。已补齐 `*``**``?`、分隔符、Unicode、特殊字面量、无匹配、
组合过滤、稳定 ID 顺序以及 InMemory/SQLite list/count parity 回归测试。
---
# T03 — SQLite Schema Migration 体系化
@@ -828,7 +839,7 @@ T09/T10 ─→ T11 增加 AssetBundle/Patch 真实验证
# T13 — G-011 ResourceRepository 查询扩展
**类型:** Feature
**状态:** Blocked by T02
**状态:** Ready
## 目标
@@ -844,9 +855,7 @@ T09/T10 ─→ T11 增加 AssetBundle/Patch 真实验证
## 依赖
**Hard BlockerT02**
## 完成记录
前置任务 T02 已完成,查询 contract 已满足。
# T14 — G-012 Translation Memory 后续扩展
@@ -1025,7 +1034,7 @@ resource bootstrap
│ │ │
▼ ▼ ▼
T02 ResourceRepository ──Hard──→ T13 G-011
T02 ResourceRepository ──Hard──→ T13 G-011(历史前置关系,已满足)
T03 SQLite Migration ──Hard──→ T04 TM Trust ──Hard──→ T14 G-012
@@ -1069,12 +1078,12 @@ Stable Resource / Release / AssetBundle Platform
## Ready
```text
T02 — ResourceRepository 查询契约统一
T05 — bat.sock 本地 IPC 安全与资源边界
T06 — AssetBundle / ZIP Parser Resource Budget
T07 — Durable Atomic State Write
T11 — Official Smoke / 长期运行证据
T14 — Translation Memory 后续扩展
T13 — G-011 ResourceRepository 查询扩展
```
T11 可以现在就开始采集,但 T01 后的数据才作为新的正式 distribution integrity evidence。
@@ -1089,8 +1098,6 @@ T10 ← T09
T12 ← 推荐 T06/T08
T13 ← T02
T15 ← 推荐 T03
T16 ← 推荐 T03