# repo22 第三次总体进度报告

更新时间：2026-08-09 UTC

权威验证快照：`12351cbb0a593474f4fcef68ffc5218d9c99dd46`

最终源码基线：`fcc85b93d5f8fd9671686bd68bf3b086c8bd25cf`

## 总体结论

本轮要求的 feature 全面验证、FreeBSD/Linux 行为差异审查、code review 和
style/可维护性优化已经完成。161 个可执行 Markdown 测试均已执行并形成受控
手工证据，最终为 160 PASS、1 PARTIAL、0 FAIL、0 KERNEL-FAIL、0 ENV。

唯一未完全关闭的是 TC146 的 explicit compressed extent mapped-payload 正向
fixture。该问题已按用户授权详细记录并搁置，不是已观察到的 kernel failure，
也不影响其他 160 个 TC 的结论。本轮目标因此完成，剩余工作属于已批准搁置项
或后续可选增强。

CI 和自动化 kernel-test harness 不在本轮范围内，未实现也未宣称完成。

## 已完成内容

- 完成 TC001-TC161 的规格、执行报告和覆盖矩阵机械审计；TC000 只作为模板。
- G1-G8 的 156 个表格行覆盖 TC001-TC156，恰好一次，无重复、无遗漏。
- 完成 TC157-TC161 独立回归，覆盖 explicit extent 全局顺序、48-bit compressed
  block count、special vnode 组合 setattr、dot-omitted `OFF_MAX` cookie 和 `nm`
  失败传播。
- TC010 的 16 TiB-plus statfs、TC060 的 FreeBSD pathconf、TC153 的超大目录索引
  均已动态验证并转为 RESOLVED。
- 完成 superblock、inode、data、directory/namecache、xattr/ACL/metabox、压缩、
  multi-device、NFS、pager、错误路径和边界算术的多轮独立 review。
- 保留 Linux EROFS 的磁盘 ABI、命名、函数顺序和职责拆分作为维护参照，同时以
  FreeBSD vnode、GEOM、pager、NFS、ACL、`dev_t` 和 errno 语义为行为权威。
- 修正 README 的 NFS stale 承诺：generation 来自 superblock seed 和 inode
  metadata；metadata-identical payload-only replacement 不保证 `ESTALE`。
- 清理 repo22 内全部 ignored build/object/image/repro/Python bytecode 产物；最终
  guest 的 EROFS mount、md、EROFS KLD 和 DTrace KLD 计数均为零。

## 最终验证统计

| 状态 | 数量 | 说明 |
| --- | ---: | --- |
| PASS | 160 | 具备对应 dated manual report 的 FreeBSD 15 手工证据 |
| PARTIAL | 1 | TC146；HEAD2/interlaced PASS，explicit mapped payload 未完成 |
| FAIL / KERNEL-FAIL | 0 | 无开放 kernel 行为失败 |
| ENV | 0 | 无环境阻塞 |
| SHELVED test case | 0 | TC146 的子项不另计为 TC |

G1-G8 证据来自多个源码提交，不能表述为所有旧 TC 都运行在最终 KLD 上。最终
`fcc85b93d` 基线接受了 TC157-TC161、相关回归以及双配置 build/load/mount smoke。

## 最终构建

FreeBSD 15 kernel `-Werror` 双配置均成功：

| 配置 | KLD SHA256 |
| --- | --- |
| `WITH_ZSTDIO=0` | `15fda9d334132cd81769ce4dff4f8411a6e2b4cf7531c352530d0de85f42a2d2` |
| `WITH_ZSTDIO=1` | `23782dc0ce7da188807d35020bf2d8c6044b796c5c9a8746b398ba784cd6ad4e` |

TC161 的私有 `nm` shim 正确使构建失败且不发布新 KLD；移除 shim 后使用
`/usr/bin/nm` 的正常重建 exit 0。两个最终 KLD 均完成独立加载和只读挂载 smoke。

## Code Review 结论

最终独立复核未发现 P0/P1。已修复的最后一批问题包括：

- 16/32-byte explicit extent table 全局严格顺序验证；
- extended compressed inode 的完整 48-bit `blocks_hi` 解码；
- special vnode size 与其他 setattr 字段组合时的 false success；
- dot-omitted 目录在 `OFF_MAX` 的 cookie/offset overflow；
- `build.sh` 对 `nm` 自身失败的可靠传播；
- NFS generation 文档与真实实现边界不一致。

从社区第三方维护者视角，未发现仍需消除的非必要 Linux/FreeBSD 结构、命名或
职责差异。保留的差异均来自 FreeBSD kernel API、锁、provider、pager、NFS 或
权限模型要求。

## 未完成与搁置

唯一批准搁置项是
[explicit mapped extent payload](../../issues/extent-metadata-fixture-unavailable.md)：

- erofs-utils 1.8.6 不能生成或独立验证该新格式；
- 已尝试工具能力扫描、`--max-extent-bytes`、structured conversion、ABI/control
  flow 对照以及多类负向 fixture；
- TC157 已证明 16/32-byte unordered table fail closed，但不能替代 mapped payload
  的 source-identical 正向读取；
- 首个非零 `lstart` 和极大 extent-count 性能边界也保留为可选覆盖风险。

## 后续执行计划

1. 等待可生成并独立验证 explicit mapped-payload 的上游工具或可信 fixture。
2. 获得 fixture 后补充 4/8/16/32-byte 正向 record、partial reference、high words、
   binary-search transition 和 final fragment 动态覆盖，使 TC146 从 PARTIAL 转 PASS。
3. 如后续项目另行启动 CI，再基于现有 Markdown 断言设计自动化；不得把当前手工
   PASS 记录直接转换成无条件自动 PASS。
4. 后续源码变更继续执行受影响 TC、双配置 build、module smoke、scoped Git hygiene
   和独立 review，不要求无差别重跑与改动无关的全部历史环境。

## 相关提交

正式八组手工验证：

- G1 `9ae22009f23a65320730072a780998e80aa9b728`
- G2 `aed7b68b79a5bd4115913f8361821c86fd58d2e2`
- G3 `381349b3847209a67d669264ac54a50a3599915c`
- G4 `f383bbbbff301a6bde18894f03ab88a8c0cc885a`
- G5 `c566d8ac6bf8e801082bbccf108451f6ee46ad40`
- G6 `f11fff5b8e8050e1017ed86f0bcf71042b2b45aa`
- G7 `f3ab2096fea3942317deb83fa051c84d3c124ec2`
- G8 `6f336d0a7387c8f110b19abad6e96f3ea17dba2e`

最终源码与验证收口：

- `f27b524a35b1c960be7e81884f9b928d9ac907e9`：metadata boundary 修复。
- `67d3c057fbcad5adc765ab9927da511e3221ac8f`：explicit extent header 解码修复。
- `fcc85b93d5f8fd9671686bd68bf3b086c8bd25cf`：TC157-TC161 规格与 helper。
- `12351cbb0a593474f4fcef68ffc5218d9c99dd46`：最终手工报告、覆盖、issue 和 README 汇总。

逐项证据见
`tests/results/manual/2026-08-09T1804Z-final-review-independent/manual-test-report.md`；
最终统计口径见 `docs/TEST_REPORT.md` 和 `tests/TEST-COVERAGE-MATRIX.md`。
