Skip to content

Commit 0ea342f

Browse files
authored
feat(engine): 建立 Legacy/Rust 引擎边界,并同步 codeguard-skills v0.1.3 (#83)
* docs(rust-cli): 补充命令架构、误报白名单、遗留差分与项目初始化规格 补齐 introduce-rust-codeguard-cli 变更的设计文档与规格缺口: - command-architecture / static-check-catalog / false-positive-allowlist: 命令面、静态检查目录与已知误报处置 - legacy-delta-20260924 / legacy-v1-protocol-map:遗留实现与 v1 协议映射, 明确哪些是迁移债、哪些是已完成 - project-initialization:项目初始化能力规格 - architecture / technical-design / coverage-and-acceptance / remediation-workflow 与各 specs 同步更新,新增 implementation-coverage 汇总覆盖情况 本次提交与 Agent Plugins 可移植布局迁移无关,单独成commit 以便独立回滚。 * feat(plugin): 迁移到 Agent Plugins v1.0.0 可移植布局 此前仅发布各客户端专属清单(.codex-plugin/、.zcode-plugin/、kimi.plugin.json), 不符合 Agent Plugins 规范。符合规范的客户端会因缺少根清单而整体拒绝该插件, 其中的 68 个技能一个也加载不到(§5.1/§5.3:缺清单是致命错误,不是警告)。 - 新增根 plugin.json:$schema 常量 + name 约束 + 封闭字段集;客户端专属的 interface 等数据移入 extensions["com.openai"] / extensions["ai.nanoco.nanoclaw"] - version 取基础版本,+codex.<stamp> 构建元数据留在兼容通道 - 新增客户端扩展目录,让非可移植的 commands/hooks/agents 对注册表客户端可见: - 新增 `com.github.copilot/`(VS Code 与 GitHub Copilot 共用) - 新增 `dev.openhands/`(OpenHands) 根目录副本保留,Codex/ZCode/Kimi 通道不受影响 - 新增 scripts/validate_portable_plugin.py:纯标准库、无网络,按发布 schema 校验清单、技能发现与镜像漂移 - 新增 docs/portable-migration.md 记录迁移内容与客户端覆盖 校验:19/19 包通过规范校验;4655 个测试,红色套件 9 个且全部为迁移前既有失败, 本次迁移零新增失败。 仓库内同步调整: - scripts/check_architecture.py:把 scripts/validate_portable_plugin.py 登记进 SCRIPT_ROLES(角色 entry),否则未分类顶层脚本会触发架构门禁。 * docs: 将 Rust 规范与设计迁移至 codeguard 独立仓库 * feat(engine): 建立 Legacy/Rust 引擎边界,结论签发方显式化 插件与独立 Rust 内核各自都能给出检查结论,但此前没有一处声明"谁签发"。 两者的退出码语义也不相同:Legacy 的 3 是参数错误,Rust 的 3 是检查未完成—— 按同一张表翻译会把"没跑完"读成"通过"。 - `scripts/codeguard/engine.py`:登记两个引擎与其权威性,提供退出码翻译表。 未知码一律按 UNVERIFIED 阻塞(fail closed)。 - `scripts/engine_report.py` + `codeguard engine`:只读报告签发方与 Rust 组件 探测结果。Legacy 无 --version(未知子命令退出 1),Rust 以 report_type=version 的 JSON 应答,两者可无歧义区分。 - `resolve_authoritative(rust_available=True)` 仍返回 Legacy:二进制存在 不改变权威性,Rust 在能力矩阵 gap 清空前不能签发质量结论。 - 新增 `engine` 子命令并登记进 SCRIPT_ROLES / CORE_DEPENDENCIES。 13 项契约测试覆盖:两引擎退出码不共享语义、仅 0 可通过、未知码 fail closed、 探测到 Rust 仍不夺权、Legacy 形态不被误判为 Rust。 架构门禁 / run_all 144 / 可移植性校验均绿;unittest discover 645 项中唯一 失败为 test_add_all_widens_to_three_lanes,已 stash 验证为预先存在。 * chore(skills): 同步 codeguard-skills v0.1.3,重新对齐引擎契约 lock 由 v0.1.2 / 2c0c807 升至 v0.1.3 / 33d737f,68 个受管技能快照与摘要整体刷新。 本次同步带入源仓的引擎契约修正:新增 `codeguard/references/operations/engine-contract.md` 作为双引擎命令面的唯一权威对照,并修正 5 个技能与 Rust 内核的调用不一致—— `fix` / `dockerfile` / `--lang` / `--ecosystem` / `--severity` / `--json` 在 Rust 侧不存在。 与本仓新增的 `codeguard engine` 边界报告配套:Rust 组件对所有质量路径固定返回 退出码 3(未完成),不能签发质量结论;`codeguard-check` 的状态语义因此新增 INCOMPLETE,以区分"未完成"与"通过"。 验证:架构门禁 OK / run_all 144 通过 / 可移植性 PASS / skill_vendor check PASS / unittest discover 645 项中唯一失败为预先存在的 test_add_all_widens_to_three_lanes。 * style: 修复 ruff EXE001 与冗余 noqa engine_report.py 有 shebang 但缺执行位;三个 # noqa: E402 在本仓 ruff 配置下 E402 并未启用,属冗余抑制。移除后 `ruff check hooks scripts tests` 全绿。
1 parent 7b1a5d7 commit 0ea342f

89 files changed

Lines changed: 860 additions & 2063 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎bin/codeguard‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# # 退出码: 0 通过 / 1 无法验证 / 2 存在漏洞 / 3 参数错误
1111
# codeguard dockerfile [--json] [path] # Dockerfile 安全风险检查(hadolint + trivy config)
1212
# codeguard detect [path] # 检测项目语言
13+
# codeguard engine [--format human|json] # 报告由哪个引擎签发质量结论
1314
#
1415
# 安装到 PATH:
1516
# ln -s "$(pwd)/bin/codeguard" /usr/local/bin/codeguard
@@ -39,6 +40,9 @@ case "$cmd" in
3940
detect)
4041
exec python3 "$ROOT/scripts/detect_lang.py" "${1:-.}"
4142
;;
43+
engine)
44+
exec python3 "$ROOT/scripts/engine_report.py" "$@"
45+
;;
4246
init)
4347
cat >&2 <<'EOF'
4448
[codeguard] 项目初始化引导:
@@ -53,7 +57,7 @@ EOF
5357
;;
5458
*)
5559
echo "codeguard: 未知子命令 '$cmd'" >&2
56-
echo "可用: check | fix | cve | dockerfile | detect | java-plan | init" >&2
60+
echo "可用: check | fix | cve | dockerfile | detect | java-plan | engine | init" >&2
5761
exit 1
5862
;;
5963
esac

‎docs/rust-cli/README.md‎

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
# Codeguard Rust CLI 设计文档
1+
# Rust 文档已迁移
22

3-
状态:设计基线,尚未实现。日期:2026-09-24。源码核对基线:`03ebb24`;后续实现必须重新核对工作树和已合并规格。
3+
Rust CLI 的设计文档、进行中的 OpenSpec change、任务与验收记录已整体迁至独立 [codeguard 仓库](https://github.com/full-stack-plugins/codeguard)。本页仅作导航,不维护第二份 Rust 规范或任务。
44

5-
| 文档 | 回答的问题 |
6-
|---|---|
7-
| [架构文档](architecture.zh-CN.md) | 产品目标、模块边界、检查流程、低误报机制、权威边界 |
8-
| [技术方案](technical-design.zh-CN.md) | 命令、数据协议、适配器、执行器、配置、缓存、分发与兼容实现 |
9-
| [语言迁移与验收](coverage-and-acceptance.zh-CN.md) | 57 个条目的迁移、类别覆盖、评测方法、验收证据 |
10-
| [持久问题与修复工作流](remediation-workflow.zh-CN.md) | 项目内 codeguard 目录、问题记录、待办任务、智能体修复与复检闭环 |
11-
| [OpenSpec proposal](../../openspec/changes/introduce-rust-codeguard-cli/proposal.md) | 为什么变更及变更范围 |
12-
| [OpenSpec design](../../openspec/changes/introduce-rust-codeguard-cli/design.md) | 架构决策、兼容性、实施顺序和待验证事项 |
13-
| [OpenSpec tasks](../../openspec/changes/introduce-rust-codeguard-cli/tasks.md) | 可执行任务、依赖和完成证据 |
5+
- [中英文架构与技术方案](https://github.com/full-stack-plugins/codeguard/tree/main/docs)
6+
- [逐指令、初始化、修复闭环、白名单与迁移设计](https://github.com/full-stack-plugins/codeguard/blob/main/docs/README.zh_CN.md)
7+
- [唯一 OpenSpec change 与任务](https://github.com/full-stack-plugins/codeguard/tree/main/openspec/changes/introduce-rust-codeguard-cli)
148

15-
本次需求的唯一规范性事实源为 `openspec/changes/introduce-rust-codeguard-cli/specs/`。这些说明文档展开设计,不创建第二套任务状态。仓库 `openspec/specs/` 与 [当前架构](../current-architecture.md) 仍描述已落地的旧运行时;本 change 未实施前不得宣称 Rust 行为已经生效。
16-
17-
本次验收记录见 [verification.md](../../openspec/changes/introduce-rust-codeguard-cli/verification.md)。文档校验成功不代表二进制、扫描器或宿主运行验收成功。
9+
本插件的旧运行时及宿主规范仍在本仓 `openspec/specs/`;Rust 集成接口在新仓维护,宿主实际接线仍由本插件实现和验收。迁移于 2026-09-28 在本地完成;远程链接须随两仓后续提交推送生效。

‎docs/rust-cli/architecture.zh-CN.md‎

Lines changed: 0 additions & 207 deletions
This file was deleted.

0 commit comments

Comments
 (0)