@@ -7269,7 +7269,7 @@ MTR94 v0.42.58完整C/D已核、done/complete;93继承精确94覆盖而done/co
72697269
72707270**Task type:** `implementation`
72717271
7272- **Lifecycle / Acceptance:** `pending` / 空
7272+ **Lifecycle / Acceptance:** `in-progress` / `remote- pending`(8AC/3VER、ER-05 R6真实Claude/Codex双PASS与bump后完整C已核;tag/Release后待Docker D)
72737273
72747274**Description:** 实现无delta Git PACK的结构校验和原始对象解码。输出不是可信identity;SHA1/SHA256对象身份验证正式由98负责,两hash原始bytes fixture回归仍保留。新增`ceres::traces::pack_decode`内部模块,接受明确hash kind和有界输出sink契约,保留原始payload;接口不接入HTTP/SSH,也不直接发布。96自身交付完整结构解析轴,生产wire安全准入由97封闭后才允许98/11消费。
72757275
@@ -7294,22 +7294,24 @@ MTR94 v0.42.58完整C/D已核、done/complete;93继承精确94覆盖而done/co
72947294
72957295**ER-03 依赖决策(root,2026-10-23):** 不新增/提升 `flate2` 直接依赖;逐对象膨胀复用 git-internal 公开的 `internal::zlib::stream::inflate::ReadBoxed::new_with_kind`,把其 `Read` 输出接入本模块的有界 sink。PACK 的 magic/version/count/trailer/截断/尾随垃圾与两种 delta 拒绝仍由本模块自行实现;该复用不改变 I/R、AC/VER 或依赖边。
72967296
7297+ **2026-10-23 实际A/B(本轮):** 新模块 `ceres::traces::pack_decode` 落地并由 `ceres::traces::mod` 真实注册;解码器显式接收 `HashKind`,复用 git-internal 公开 `ReadBoxed::new_with_kind` 逐对象流式膨胀,按 ≤64 KiB 分块写入 `PackSink`,全程不缓存整个 pack、不派生 OID。真实 git fixture(`git init --object-format=sha1|sha256` + `git hash-object -w` + `git -c pack.window=0 -c pack.depth=0 pack-objects --stdout`)覆盖普通 blob、非 UTF-8 blob、真正入包的 empty tree 与含 `gpgsig` 的 commit;SHA1/SHA256 两 hash 逐对象字节与类型全等,trailer 实际校验通过。拒绝矩阵:magic、version、count±1、trailer、截断、尾随垃圾、对象 size 变长整数溢出(`SizeOverflow`),以及两种真实 git delta 包:默认 pack 含 REF_DELTA(type 7)、`--delta-base-offset` pack 含 OFS_DELTA(type 6),测试先逐对象扫描 pack header 断言目标类型存在,再分别断言解码返回 `Delta`。A:`pack_structure_` 过滤 8/8 通过、exit0(含「声明长度大于实际流且无 trailer」的 inflate-time EOF 用例)。错误映射:底层耗尽/payload 提前结束与 header/trailer 截断为 `Truncated`;完整 zlib 流但声明长度更大为 `Size{declared,actual}`;损坏 deflate 为 `Inflate`;底层 IO 错误保留其种类;size 变长整数按位移/加法溢出拒绝(`SizeOverflow`)。VER-3 手工核:新模块仅被 `tests` 使用,HTTP/SSH/RepoHandler 无新调用,sink 预算留给 97。ER-05 经 6 轮收敛为 R6 真实 Claude/隔离 Codex 双 `VERDICT: PASS`(无 P0/P1)。完整 C(bump 0.42.65 后最终树):`cargo +nightly fmt --all --check`、`cargo clippy --all-targets --all-features -- -D warnings`、`source .env.test && cargo test --all`(20 targets、3028 passed、0 failed、3 原有 ignored、0 filtered)、`cargo build`、`cargo build --tests` 均 exit0、0 警告/0 错误(`/tmp/mtr96_C.log`、`/tmp/mtr96_test.log`)。提交、tag/Release 与 D 随后取得。
7298+
72977299**Acceptance criteria:**
72987300
7299- - [ ] AC-1: PACK magic正确。
7300- - [ ] AC-2: PACK版本被支持。
7301- - [ ] AC-3: 声明对象count与实际对象数一致。
7302- - [ ] AC-4: pack trailer校验失败时拒绝。
7303- - [ ] AC-5: 截断PACK拒绝。
7304- - [ ] AC-6: 尾随垃圾拒绝。
7305- - [ ] AC-7: ref-delta拒绝。
7306- - [ ] AC-8: ofs-delta拒绝。
7301+ - [x ] AC-1: PACK magic正确。
7302+ - [x ] AC-2: PACK版本被支持。
7303+ - [x ] AC-3: 声明对象count与实际对象数一致。
7304+ - [x ] AC-4: pack trailer校验失败时拒绝。
7305+ - [x ] AC-5: 截断PACK拒绝。
7306+ - [x ] AC-6: 尾随垃圾拒绝。
7307+ - [x ] AC-7: ref-delta拒绝。
7308+ - [x ] AC-8: ofs-delta拒绝。
73077309
73087310**Verification:**
73097311
7310- - [ ] VER-1: `source .env.test && cargo test -p mega2 --lib ceres::traces::pack_decode::tests::pack_structure_valid_ -- --test-threads=1`(new;cfg(test)调用生产decoder;真实Git hash-object/pack-objects生成SHA1/SHA256 fixture,含原始header/gpgsig/非UTF8,逐对象比原bytes)。
7311- - [ ] VER-2: `source .env.test && cargo test -p mega2 --lib ceres::traces::pack_decode::tests::pack_structure_reject_ -- --test-threads=1`(new;从真实pack逐项修改magic/version/count/trailer/截断/尾随;真实Git产生两种delta包并确认确实含目标delta后断言拒绝)。
7312- - [ ] VER-3: 手工审查可见性及调用图:新模块只向受控后继暴露内部接口;HTTP/SSH/普通RepoHandler没有新调用。记录待97完成的sink约束,不声称96独自具备可暴露wire接收能力。
7312+ - [x ] VER-1: `source .env.test && cargo test -p mega2 --lib ceres::traces::pack_decode::tests::pack_structure_valid_ -- --test-threads=1`(new;cfg(test)调用生产decoder;真实Git hash-object/pack-objects生成SHA1/SHA256 fixture,含原始header/gpgsig/非UTF8,逐对象比原bytes)。
7313+ - [x ] VER-2: `source .env.test && cargo test -p mega2 --lib ceres::traces::pack_decode::tests::pack_structure_reject_ -- --test-threads=1`(new;从真实pack逐项修改magic/version/count/trailer/截断/尾随;真实Git产生两种delta包并确认确实含目标delta后断言拒绝)。
7314+ - [x ] VER-3: 手工审查可见性及调用图:新模块只向受控后继暴露内部接口;HTTP/SSH/普通RepoHandler没有新调用。记录待97完成的sink约束,不声称96独自具备可暴露wire接收能力。
73137315
73147316**Dependencies:** `MTR-95, MTR-93`。消费限定:MTR-95仅为串行发布边;MTR-93中07/09/45当前资格及既有HashKind契约。不得把96自身PASS当作97预算门通过。
73157317
0 commit comments