# repo22 当前总体进度 更新时间:2026-08-09 UTC 状态报告代码基线:`cd0e985b5ac54a4b7acb7042422329ad1729fb3e` 本报告记录的是上述基线上的阶段性状态。测试结果、问题状态和统计会随后续 提交继续更新,不能将本文视为 TC001-TC156 已完成全量回归的声明。 ## 目标与执行范围 repo22 的目标是在 FreeBSD 15 amd64 上提供只读 EROFS 内核模块,并以可复现 fixture、真实 KLD、真实 mount/read/errno 和完整清理证据验证声明的功能边界。 当前执行约束如下: - 只修改和提交 `repo-community/repo22`,fixture、VM overlay、KLD 和原始日志仅 放在 `/work/build` 或 guest 临时目录。 - 不建设或使用 CI、runner、自动 PASS wrapper;每个 TC 必须逐份对照对应 Markdown 手工执行。 - host 侧 `mkfs.erofs`、`dump.erofs`、`fsck.erofs` 和静态源码审查只作为 fixture 或分析证据,不能替代 FreeBSD 内核动态结果。 - 每批测试形成独立 manual report,记录 commit、构建配置、KLD SHA256、guest 版本、命令、可观察输出或 errno、fixture hash 和清理状态。 - 每批完成后提交并 push 到 `xdm/main`;并行批次若使远端前进,则 fetch、rebase 自己的 test-only 提交后正常 push,禁止 force push。 ## 已完成实现与审查 当前源码已覆盖 superblock、compact/extended inode、plain/inline/chunk 数据、 目录/namecache、xattr/ACL/metabox、LZ4/MicroLZMA/DEFLATE/ZSTD、fragment、 multi-device、NFS export、pager 和多项 fail-closed 边界检查。功能声明的准确边界 以 `docs/features.md` 为准。 主要 feature 批次包括: - `29a215dd`:POSIX ACL 与完整 xattr namespace 集成。 - `545d35bd`:xattr、long prefix、shared xattr 和 metabox 边界加固。 - `96e22cc`:cold nested namei 与目录结构校验修复。 - `4ef680df`、`78182686`:真实 multi-device、slot mapping、flatdev 和 extent 映射审查修复。 - `2354b448`:NFS export、稳定句柄和相关 vnode 路径。 - `c208bf1f`:压缩映射 P0 收口,包括多算法、partial reference 和 extent 路径。 - `9a3604fb`:metadata/VFS 语义收口,包括 inline bounds、special `rdev`、pager、 namei、NFS generation 和真实压缩占用统计。 关键收尾与工程对齐提交: | Commit | 已完成内容 | |---|---| | `c881f656` | 修复 48-bit superblock union、`OFF_MAX`、大 hole 内存和大目录索引等最终 metadata 边界;建立 TC150-TC153 与三份未决 issue。 | | `4d51ca9e` | 停止跟踪 `build/obj`、生成头和架构 symlink,避免构建产物进入正式提交。 | | `89594551` | 将 KLD 构建布局、源文件命名、架构门控和 `WITH_ZSTDIO` 方式与 FreeBSD/Linux 上游职责对齐。 | | `2f2ac5a8` | 更新 README、architecture、refactoring plan/status,使构建、BSD API 差异和功能边界与源码一致。 | | `077b37ab` | 删除会伪造覆盖或无条件 PASS 的旧 runner/wrapper,加入字段断言的 fixture transformer 与 FreeBSD probe,修订关键 TC 文档。 | | `cd0e985b` | 完成最终 review finding:per-inode NFS generation、显式 extent 物理地址溢出检查、compact/extended timestamp 校验,并直接动态执行 TC154-TC156。 | 上述工作也包含多轮 code review 和 style review:源文件职责、函数顺序和磁盘 ABI 尽量贴近 Linux EROFS;FreeBSD vnode、pager、NFS、GEOM 和 `dev_t` 差异采用 FreeBSD 15 原生接口;磁盘长度、加法、移位和 signed/unsigned 转换按 fail-closed 原则处理。 ## 已有动态验证 `tests/results/manual/` 中保留了各 feature 在对应历史 commit 上的真实 FreeBSD 15 动态证据。它们证明对应变更批次曾执行内核路径,但不能替代当前 final source 的 TC001-TC156 全量重跑。 | 批次 | 主要动态证据 | 当前解释 | |---|---|---| | 压缩 | compact/full LZ4、legacy full index、partial reference、MicroLZMA、DEFLATE、ZSTD、fragment、ztailpacking 和多种边界 source/hash compare | 历史 feature 证据存在;G5/G6 尚需在本轮 exact KLD 重跑。 | | xattr/ACL/metabox | inline/shared/long-prefix xattr、ACL、metabox carrier 和 corruption errno | 历史 feature 证据存在;G4 尚未启动。 | | directory/namei/pager | cold nested lookup、目录 padding、special `rdev`、真实 mmap/page fault 和 inline bounds | 历史 feature 证据存在;G1/G3 将按当前文档重跑。 | | multi-device | 外部 provider、显式 slot、flatdev、unified address、fragment 和 orphan/error 路径 | 历史 feature 证据存在;G7 尚未启动。 | | NFS | getfh/fhopen、同镜像重挂、同 md 替换、ESTALE、background/stress cleanup | 历史 feature 证据存在;G8 尚未启动。 | | final review | TC150-TC152 动态 PASS;TC153 明确 SHELVED | 结果来自 `c881f656` 前后的 final-review 批次,不是 156 项全量 PASS。 | 当前 final source `cd0e985b` 的直接动态证据是 `tests/results/manual/2026-08-09T0557Z-review-fixes/manual-test-report.md`: - FreeBSD 15.0-RELEASE-p8 amd64 上 `WITH_ZSTDIO=0` KLD SHA256 为 `d6e755c7a75dd5043b603d58215ae3e7c8f29318b31dc1885aa9bb070d6e57a5`。 - `WITH_ZSTDIO=1` KLD SHA256 为 `b442f9f05af1d1a76801690c83c9a40ec6fc739adb0663e7dacaf837eeb2ecf3`。 - TC154、TC155、TC156 均在该 final source 上直接动态 PASS,分别覆盖 per-inode NFS generation、explicit extent `pa + plen` overflow 和 inode timestamp validation。 - 该批结束时 EROFS mount、KLD 和 md provider 均已清理。 ## 本轮八组全量回归 TC 编号范围为 TC001-TC156,共 156 项。以下集合经计数检查为总数 156、重复 0、 遗漏 0。 | 组 | 精确集合 | 数量 | 当前状态 | |---|---|---:|---| | G1 | TC001, TC007, TC009, TC011-TC014, TC019-TC040, TC147, TC150, TC151 | 32 | 已启动;正在修订文档和确定性 fixture,尚未形成 final-source 32 项结论。 | | G2 | TC002, TC008, TC010, TC015-TC018, TC112-TC116, TC119 | 13 | 已启动;使用独立 worktree/VM,尚未形成 13 项结论。 | | G3 | TC041-TC066, TC141, TC148, TC149, TC153 | 30 | 未启动。 | | G4 | TC005, TC067-TC083, TC117, TC134-TC140, TC142 | 27 | 未启动。 | | G5 | TC003, TC084-TC092 | 10 | 未启动。 | | G6 | TC004, TC102-TC110, TC143-TC146, TC155 | 15 | 未启动。 | | G7 | TC006, TC093-TC101, TC118 | 11 | 未启动。 | | G8 | TC111, TC120-TC133, TC152, TC154, TC156 | 18 | 未启动。 | G1/G2 的“已启动”只表示执行代理、工作目录和任务集合已经建立,不表示其中任何 TC 已在本轮计为 PASS。G8 中 TC154/TC156、G6 中 TC155 虽已有 `cd0e985b` 直接 证据,仍需由对应全量组在最终统计中明确引用或按组要求重跑,不能导致重复计数。 ## 已完成与未完成 已完成: - 核心 feature 实现、针对性 code review、FreeBSD 15 API 对齐和构建布局收口。 - 多个历史 feature 批次的真实 KLD 动态验证与清理记录。 - 当前 final source 的双配置构建和 TC154-TC156 直接动态验证。 - 移除旧 CI 风格 runner/wrapper,建立“逐 Markdown 手工执行”的验收规则。 - 三项已知验证缺口均有详细 issue,没有把未执行或环境受限结果标成 PASS。 未完成: - TC001-TC156 在同一 final-source 基线族上的八组全量手工回归与最终汇总。 - G1/G2 的文档修订、fixture 固化、exact KLD 执行、逐 TC 报告和 push。 - G3-G8 的启动、独立环境分配、执行和结果提交。 - TC010 所需 16 TiB 级合格 provider、TC153 大目录内核路径、explicit extent mapped compressed payload 的正向 fixture。 ## Issue 索引 检查时 `issues/` 只有以下三份已跟踪文档,没有未提交 issue 文件或真实 issue 改动,因此本状态提交不修改 `issues/`。 | Issue | 状态 | 影响 feature | Shelved 原因 | |---|---|---|---| | `issues/TC010-48bit-statfs-large-provider.md` | SHELVED - environment unavailable | 48-bit block count、primary provider size validation、`statfs(2)`/`df` 总量和 root/block union 选择 | 非零 `blocks_hi` 在 4 KiB block 下至少要求 16 TiB GEOM provider;当前 vnode md 流程没有已验证、可安全清理的合格 provider。小 provider 拒绝和 TC150 fallback 都不能替代正向结果。 | | `issues/TC153-large-directory-block-index-validation.md` | SHELVED - kernel validation incomplete | 超大目录二分索引、cold lookup、`EINTEGRITY` 传播和 negative namecache 正确性 | 已有可复现 FLAT_PLAIN fixture,但尚未在 FreeBSD fixed/pre-fix KLD 上完成冷查找对照;host 生成和静态审查不足以计 PASS。 | | `issues/extent-metadata-fixture-unavailable.md` | SHELVED - positive fixture unavailable | explicit compressed extent parser、4/8/16/32-byte record、物理/逻辑高位、binary search、partial reference/fragment 映射 | erofs-utils 1.8.6 和已试 1.9.3 均不生成真实 mapped explicit-record payload。TC152 hole 与 TC155 overflow 只覆盖部分 header/negative 分支,不能替代正向压缩数据读取。 | ## 风险与依赖 - 并行组共享远端 `xdm/main`,每批 push 前必须重新 fetch/rebase 并确认没有覆盖其他 组的 TC、helper、report 或 issue。 - FreeBSD VM、SSH 端口、qcow overlay、md unit 和 mount point 必须按组隔离;任何 guest 残留都会污染后续动态证据。 - erofs-utils 的格式生成能力限制 explicit extent 等正向 fixture,必要时只能使用 字段自检、CRC32C-aware 的 structured transformer,不能手工猜偏移。 - 48-bit 大 provider、memory pressure、NFS stress 和性能 TC 对环境容量及稳定性要求 较高,环境不足时必须使用 `SHELVED/ISSUE` 或 `ENVIRONMENT-UNAVAILABLE`,不能 降低判据。 - 历史报告跨多个 commit。最终统计必须只接受对应 exact KLD 的本轮动态结果,或 明确标注尚未重跑,禁止把旧 HEAD 结果直接升级为全量 PASS。 ## 下一步 1. 完成 G1/G2 文档和 fixture 修订,构建各自 exact KLD,逐 TC 手工执行并提交报告。 2. 每个先完成的组 fetch/rebase 最新 `xdm/main`,严格 pathspec 提交并正常 push。 3. 启动 G3/G4,随后按环境和依赖启动 G5-G8;压缩、multi-device、NFS 使用隔离 VM。 4. 对任何 kernel behavior failure 立即停止 PASS 计数,新增或更新有事实依据的 issue。 5. 八组结束后汇总 156 项,检查总数、重复、遗漏、KLD/image/source hash 和全部清理 证据,再发布 final-source 全量结论。