diff --git a/openspec/changes/introduce-rust-codeguard-cli/verification.md b/openspec/changes/introduce-rust-codeguard-cli/verification.md index 632de952..0a484524 100644 --- a/openspec/changes/introduce-rust-codeguard-cli/verification.md +++ b/openspec/changes/introduce-rust-codeguard-cli/verification.md @@ -2074,3 +2074,7 @@ TDD 先复现报告漏洞:把源码 finding 的主定位、原生身份及白 目标集成测试先因无内容违规失败,接线后 Core 2/2、真实 Git/CLI 15/15 通过。额外使用本机 `ssh-keygen` 生成的真实 Ed25519 私钥暂存到普通 `notes.md`:首次执行发现合法零填充格式漏报,修正后同一暂存对象命中 `repository_policy.unencrypted_openssh_ed25519_private_key`,且不回显内容。`cargo fmt --all --check`、`git diff --check` 通过。全工作区测试在可用空间降至 801 MiB 时被中断,不作为通过证据;清理仅限本仓 Cargo dev 构建产物后可用空间约 20 GiB。完整 CI 仍待本次变更远端验证。其他私钥格式、签发工具身份、完整交付义务、Git Hook/pre-push/CI 与三宿主真实接入仍缺,3.5/4.6/11.5/12.12 等总体任务不勾选。 首轮 [PR #5 CI](https://github.com/full-stack-plugins/codeguard/actions/runs/36517224229) 编译及 Linux WASM 资源边界通过,但全量测试在 crate 依赖契约处失败:白名单未记录新引入的 base64 纯解码依赖。已将其限定为 core 正式依赖及 CLI 测试夹具依赖,补充“其它 crate/依赖种类仍禁止”的反例。第二轮 [CI 36517569232](https://github.com/full-stack-plugins/codeguard/actions/runs/36517569232) 的 workspace build、Linux WASM 资源边界与完整 `cargo test --workspace --all-targets` 全部通过;分层脚本也通过。它证明当前 PR 的全量回归,不扩展为多平台或真实宿主门禁验收。 + +## 2026-09-29 暂存对象部分失败保留发现 + +`git_index_safety` 以前在任一暂存 blob 超过读取预算时丢弃所有内容观察。真实 Git 混合样本先红后绿:超 8 MiB 对象单独 unresolved,同一 index 中已核对 OID 的 `.codeguard/findings` 私钥 finding 仍出现在本地与公开 JSON;执行保持 3/incomplete/not_evaluated。受控 Git 65 个不同 OID 的第二批坏响应证明前 64 个已独立核对证据保留,第 65 个未完成。目标 Git 契约 17/17 通过,宿主事件契约 18 通过、2 项因本机 Ruff 条件跳过;CLI Clippy `-D warnings`、fmt 与 OpenSpec strict 通过。[PR #6](https://github.com/full-stack-plugins/codeguard/pull/6) 的最终 [CI 36518917839](https://github.com/full-stack-plugins/codeguard/actions/runs/36518917839) 全部通过,合并提交 `0940b028cfdd4d71a3c77390bea9a7f4f10b0d8a`。完整快照、其它坏响应组合、正式 Git/CI 门禁和跨平台验收仍缺,2.3/3.5/11.5 不勾选。 diff --git a/tests/acceptance/git-index-safety-preview.md b/tests/acceptance/git-index-safety-preview.md index d982e78d..6bd5f1dc 100644 --- a/tests/acceptance/git-index-safety-preview.md +++ b/tests/acceptance/git-index-safety-preview.md @@ -10,6 +10,8 @@ Rust CLI 的 `observe_index_safety` 通过受控原生 Git 进程读取仓库根 2026-09-29 内容增量采用红→绿:先增加在 `.codeguard/findings/CG-demo.md` 暂存结构化私钥、随后把工作树同一路径改为安全文本的反例,测试因无内容违规失败;接入 Rust 纯结构解析和已核对 Git blob 的路径映射后通过。Core 目标测试 2 项、真实 Git/CLI 目标测试 15 项通过;CRLF、空壳 PEM、无效 base64、截断、损坏填充和未暂存密钥均有反例。本机 `ssh-keygen` 生成真实 Ed25519 私钥的首次验收暴露合法“零填充”格式漏报;修正后同一真实暂存样本在普通 `notes.md` 路径命中稳定规则,CLI 仍为 `not_evaluated`。`cargo fmt --all --check` 与 `git diff --check` 通过;全工作区回归在磁盘可用空间降至 801 MiB 时主动中断,未声称通过,随后仅清理本仓可重建的 Cargo dev 构建产物,磁盘恢复至约 20 GiB。首轮 PR CI 因 crate 依赖白名单缺少 base64 失败;修正并增加限定依赖的反例后,[第二轮 CI](https://github.com/full-stack-plugins/codeguard/actions/runs/36517569232) 通过完整 workspace 构建、Linux WASM worker 测试与全量测试。它仍不证明正式门禁已完成。 -后续混合证据反例:同一真实 Git index 暂存 `.codeguard/findings/CG-demo.md` 中的结构化私钥和超过 8 MiB 的 `large.bin`。改动前对象大小预检整体报错,两个路径都列为 unresolved,私钥 finding 消失;改动后单独跳过超预算 OID,其余对象继续核对,保留一条私钥 finding、一条超预算 unresolved,CLI JSON 的 `verified_object_count=1`、`unresolved_object_count=1`、`delivery_decision=not_evaluated` 且退出 3。目标 Git/CLI 契约 16 项通过;完整工作区与 Linux CI 仍待本次提交验证。此修正仍不是完整内容扫描、原子 Git 快照或正式提交门禁。 +后续混合证据反例:同一真实 Git index 暂存 `.codeguard/findings/CG-demo.md` 中的结构化私钥和超过 8 MiB 的 `large.bin`。改动前对象大小预检整体报错,两个路径都列为 unresolved,私钥 finding 消失;改动后单独跳过超预算 OID,其余对象继续核对,保留一条私钥 finding、一条超预算 unresolved,CLI JSON 的 `verified_object_count=1`、`unresolved_object_count=1`、`delivery_decision=not_evaluated` 且退出 3。目标 Git/CLI 契约先以 16 项通过;此修正仍不是完整内容扫描、原子 Git 快照或正式提交门禁。 补充坏批响应反例:受控 Git 替身将 65 个不同 OID 的首批 64 个返回真实原生命令输出,第二批返回损坏对象头。观察保留前 64 个逐对象核对证据,仅把第 65 个路径列为 unresolved,标记对象读取未完成且 `objects_verified=false`;没有从此前局部成功推导完整结果。目标 Git/CLI 契约增至 17 项通过,其余异常响应和实际平台边界仍由后续验收覆盖。 + +[PR #6](https://github.com/full-stack-plugins/codeguard/pull/6) 最终 [CI 36518917839](https://github.com/full-stack-plugins/codeguard/actions/runs/36518917839) 通过仓库分层检查、全 workspace 构建、Linux WASM worker 资源边界与全量 `cargo test --workspace --all-targets`;合并提交 `0940b028cfdd4d71a3c77390bea9a7f4f10b0d8a` 与远端 `main` 一致。这证明该提交的回归门禁,不能替代多平台真实 Git/CI 入口、可信工具身份或完整质量义务验收。