docs: PLAN 附录 F 补记 A13/A38/A39 与验证基础设施(测试规模 1742/89)
This commit is contained in:
+23
-18
@@ -719,6 +719,8 @@ connection-manager/integrations/migration)两份完整报告,以及测试质
|
||||
| `68e4731` | **B-6 ③ + 测试介质** | ③ meta 增加 `owner`,陈旧实例 `checkpoint()` 抛 `STALE_INSTANCE` 拒绝覆盖新实例的写入(实测修复前会**静默**抹掉);同时修复 `SharedMemoryBackend` 的跨实例可见性缺陷(私有拼接缓存使介质退化为"每实例一份快照",此前所有多实例用例都跑在错误介质上) |
|
||||
| `6a0cfeb` | **PC-2 真崩溃注入** | e2e 的 `crashPage()` 原本只是 `win.__ms = null; page.close()` —— **优雅关闭**,所有"崩溃恢复"用例测的其实是"正常关闭后重开"(CI 注释却声称覆盖 CDP `Page.crash`)。现改用 CDP `Page.crash` 终止渲染进程,并新增两个真实窗口:`createWritable().write()` 中途、`close()` 原子替换前(copy-on-write 的核心不变量)。实测要点:崩溃后 `page.isClosed()` 仍为 false;OPFS 数据在同 context 内跨崩溃保留 |
|
||||
| `567d150` | **A37 列引用** | 未限定列可作比较操作数(`WHERE x = y` / `ON k = k` 此前 PARSE_ERROR,列对列比较被迫写限定形态);新增 WHERE / JOIN ON 的列存在性校验 —— `$col` 引用不存在的列此前**静默返回空集**(`WHERE id = oops` → `[]`),现报 `COLUMN_NOT_FOUND`;顺带解除 `schema ↔ validation` 循环依赖 |
|
||||
| `85f0f17` | **A13 自引用外键** | 删除 6 处 `refTableName === tableName) continue`(memory 3 + aria 3):自引用外键的删除级联/置空/更新级联/预检四条路径全部失效,`DELETE root` 只删根、子树永久悬挂。A14(传递链)经实测**审计结论有误**——`ON UPDATE CASCADE` 链正常,已固化为护栏 |
|
||||
| `97b9fa4` | **A38/A39 压缩** | A38 `compression` 在页面化路径(默认)被静默忽略 → 改为切页前整体压缩,并修正 `SSTableMeta.totalSize` 必须写压缩长度(否则会被 0 填充撑大);A39 `compressLZ4` 逐位置扫描 O(n²)(60KB 伪随机 2345ms)→ 4 字节哈希链(6ms,390×),输出格式不变并保留线性参考实现作对照。连带修正 OPFS mock 忽略库名导致的**跨库共享文件树** |
|
||||
|
||||
### 三值逻辑根治(A15 / PB-2,提交 `4ab04df`)
|
||||
|
||||
@@ -760,13 +762,14 @@ connection-manager/integrations/migration)两份完整报告,以及测试质
|
||||
**验证**:新增 `tests/v080-sql-three-valued.test.ts` —— 26 条 SQL 语义矩阵 ×
|
||||
4 引擎(memory/disk/hybrid/aria)+ UPDATE/DELETE 写路径,共 **104 断言**。
|
||||
|
||||
**测试规模**:1304 → **1686 通过 / 87 套件**;新增
|
||||
`tests/v080-savepoint.test.ts`、`tests/v080-atomicity.test.ts`、
|
||||
`tests/v080-subscribe.test.ts`、`tests/v080-correlated.test.ts`、
|
||||
`tests/v080-sql-three-valued.test.ts`、`tests/v080-unified-validation.test.ts`、
|
||||
`tests/v080-query-layer.test.ts`、`tests/v080-single-pipeline.test.ts`、
|
||||
`tests/v080-kvstore-commit-point.test.ts`、`tests/version-contract.test.ts`、
|
||||
`tests/helpers/storage-harness.test.ts`。
|
||||
**测试规模**:1304 → **1742 通过 / 89 套件**(另 e2e 14 项)。新增:
|
||||
`tests/v080-savepoint.test.ts`、`v080-atomicity.test.ts`、`v080-subscribe.test.ts`、
|
||||
`v080-correlated.test.ts`、`v080-sql-three-valued.test.ts`、
|
||||
`v080-unified-validation.test.ts`、`v080-query-layer.test.ts`、
|
||||
`v080-single-pipeline.test.ts`、`v080-kvstore-commit-point.test.ts`、
|
||||
`v080-column-resolution.test.ts`、`v080-foreign-key.test.ts`、
|
||||
`tests/engine/aria-compression.test.ts`、`version-contract.test.ts`、
|
||||
`helpers/storage-harness.test.ts`
|
||||
|
||||
**关键修复均做过变异验证**:把修复回退到修复前的行为,对应用例必须失败
|
||||
(例:KVStore ①2 项、②3 项)。这是"测试真的能拦住回归"与"测试只是陪跑"的
|
||||
@@ -796,10 +799,10 @@ connection-manager/integrations/migration)两份完整报告,以及测试质
|
||||
| ~~P1~~ | ~~A22/A23/A25/A26/A27/A29/A30/A36 查询层~~ | ✅ `841db2e` |
|
||||
| ~~P0~~ | ~~**B-3 单管线**(builder 只产出 AST)~~ | ✅ `b20d47b` |
|
||||
| ~~P0~~ | ~~**B-6 KVStore 三处止血**~~ | ✅ `edd9f1d` + `68e4731` |
|
||||
| P1 | A13/A14 自引用外键失效、ON UPDATE CASCADE 只一层 | 待做 |
|
||||
| ~~P1~~ | ~~A13 自引用外键失效~~ | ✅ `85f0f17`(A14 传递链实测正常,非缺陷) |
|
||||
| ~~P1~~ | ~~A35 JOIN NULL 键~~ | ✅ `841db2e`(JOIN 的 NULL 键不成立,且与右表有无索引无关) |
|
||||
| ~~P1~~ | ~~A37 未限定列名 / WHERE 列存在性~~ | ✅ `567d150` |
|
||||
| P1 | A38/A39 `compression` 被 pageStorage 遮蔽、`compressLZ4` O(n²) | 待做 |
|
||||
| ~~P1~~ | ~~A38/A39 压缩被遮蔽 / O(n²)~~ | ✅ `97b9fa4` |
|
||||
| P1 | A40/A41 Aria `close()` 活跃事务守卫、`dropTable` DDL 原子性 | 待做 |
|
||||
| P0 | **B-6 存储单一提交点(manifest)** | 部分(KVStore 三处止血已完成;Aria 见 A40/A41) |
|
||||
| P1 | **B-4 统一表达式求值器**(CASE 正则切分、聚合表达式、列引用) | 部分(聚合与列引用已统一,见文末说明) |
|
||||
@@ -808,13 +811,15 @@ connection-manager/integrations/migration)两份完整报告,以及测试质
|
||||
| — | PC-4/PC-5 契约测试 + 属性测试 | 部分(跨引擎参数化已用于 A1/A2/A15/B-1/B-3) |
|
||||
| — | PG 文档与站点全量同步 | 待做 |
|
||||
|
||||
**下一步建议**:A13/A14(外键传递闭包:自引用外键与多层 ON UPDATE CASCADE)
|
||||
→ A38/A39(`compression` 被 pageStorage 遮蔽、`compressLZ4` O(n²))→ A40/A41
|
||||
(Aria `close()` 活跃事务守卫、`dropTable` DDL 原子性)→ B-4 统一表达式求值
|
||||
(CASE 正则切分整类)→ B-5 结构化 AST → PG 文档与站点同步。
|
||||
**下一步建议**:A40/A41(Aria `close()` 活跃事务守卫、`dropTable` DDL 原子性)
|
||||
→ B-4 统一表达式求值(CASE 的正则切分整类)→ B-5 结构化 AST + 输出列序号
|
||||
→ PG 文档与站点同步。
|
||||
|
||||
**关于 B-4/B-5 的现状**:二者的"载体"已在其他修复中先行落地 ——
|
||||
`parseAggregateExpression` / `resolveColumnValue`(B-4 的聚合与列引用部分)、
|
||||
`sqlCompare`/`encodeValueKey`(统一值语义)、`normalizeUnprefixedReferences`
|
||||
(统一引用归一化)。剩余部分(CASE 的正则切分、输出列序号)影响面小于
|
||||
A13/A14 与 A38~A41,故排序在后。
|
||||
**已完成的验证基础设施(本轮重点)**:
|
||||
- PC-2 真崩溃注入(CDP `Page.crash`)+ OPFS `createWritable` 的两个写入窗口;
|
||||
- `FaultyBackend` 字节级故障注入(撕裂/bit-flip/掉电/写失败);
|
||||
- **变异验证**成为回归套件的标准做法:把修复回退到修复前的行为,对应用例
|
||||
必须失败。本轮 A15/B-6(①②③)/A13/A38/A39 全部通过该检查 ——
|
||||
这是"测试真能拦住回归"与"测试只是陪跑"的分界线。
|
||||
- 测试介质的两处**忠实性**缺陷已被修正(`SharedMemoryBackend` 跨实例可见性、
|
||||
OPFS mock 的目录语义)—— 它们此前让"多实例/多库"的验证跑在错误语义上。
|
||||
|
||||
Reference in New Issue
Block a user