Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions openspec/changes/introduce-rust-codeguard-cli/verification.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 不勾选。
4 changes: 3 additions & 1 deletion tests/acceptance/git-index-safety-preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 入口、可信工具身份或完整质量义务验收。
Loading