Skip to content

Commit 3a99f2f

Browse files
authored
refactor(layering): 首批下移工具适配层,并加装分层门禁与首个 CI (#1)
四 crate 的设计意图是 core(契约)← runtime(执行)← adapters(工具适配) ← cli(组装),但实际倒挂:adapters 已持有 ESLint/Checkstyle/Cargo/Go 的诊断 类型,其身份映射逻辑却住在二进制 crate,使 cli 顶层模块达 145 个、远超 core。 本 PR 不做一次性大搬迁(diff 无法审阅),而是先搬最干净的一族并装上门禁: - 4 个 *_finding_identity(eslint/cargo_build/go/rustdoc,共 332 行)从 codeguard-cli 迁至 codeguard-adapters。四个模块本就直接依赖 adapters 的诊断 类型,跨 crate 后改为 crate 根 re-export;eslint 的 validate_records 由 pub(crate) 提升为 pub。cli 顶层模块 145 → 141,adapters 61 → 65。 - scripts/check_layering.py + layer-baseline.json:把倒挂变成显式债务。 cli 中剩余的 13 个领域形态模块(9 个 *_probe、2 个 *_module_graph、 npm_input_state、tool_identity)逐条登记归属与理由,额度只减不增—— 新增未登记的领域模块会失败,模块下移后基线未同步收紧也会失败。 两个方向都做了负向验证。 - .github/workflows/ci.yml:本仓此前没有任何 CI,995 个测试无自动门禁。 门禁跑 layering check + build + test。 关于固定语料的一个坑:corpus_integrity 会按 sha256 校验来自 codeguard-plugin@9e4adb1 的真实文件,只建空目录不够(实测摘要不匹配), CI 必须把该 commit 检出到兄弟目录。 验证:995 通过 / 0 失败(重构前后一致,无测试增减)。
1 parent 5020605 commit 3a99f2f

20 files changed

Lines changed: 238 additions & 20 deletions

‎.github/workflows/ci.yml‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: codeguard
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
gate:
13+
# ubuntu-latest 预装稳定版 Rust;Cargo.toml 声明 rust-version = 1.85 / edition = 2024。
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
17+
18+
- name: Check out corpus evidence source
19+
# 固定语料按 sha256 校验来自插件仓的真实文件(provenance.source_ref =
20+
# codeguard-plugin@9e4adb1),因此必须把该 commit 检出到兄弟目录;
21+
# 只建空目录不够,会因摘要不匹配而失败。
22+
run: |
23+
git clone --quiet https://github.com/full-stack-plugins/codeguard-plugin.git ../codeguard-plugin
24+
git -C ../codeguard-plugin checkout --quiet 9e4adb1
25+
26+
- name: Verify crate layering debt does not grow
27+
run: python3 scripts/check_layering.py
28+
29+
- name: Build workspace
30+
run: cargo build --workspace --all-targets
31+
32+
- name: Run test suite
33+
run: cargo test --workspace --all-targets
34+
35+
- name: Explain remaining layering debt
36+
if: always()
37+
run: python3 scripts/check_layering.py --explain

crates/codeguard-cli/src/cargo_build_finding_identity.rs renamed to crates/codeguard-adapters/src/cargo_build_finding_identity.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! 编译发现身份绑定原生源码范围;不靠诊断顺序给其它问题续用身份。
22
3-
use codeguard_adapters::CargoBuildDiagnostic;
3+
use crate::CargoBuildDiagnostic;
44
use serde_json::{Value, json};
55
use sha2::{Digest, Sha256};
66

crates/codeguard-cli/src/eslint_finding_identity.rs renamed to crates/codeguard-adapters/src/eslint_finding_identity.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//! 原生 ESLint 发现到脱敏任务输入的稳定投影;不赋予策略或报告来源权威。
2-
use codeguard_adapters::EslintDiagnostic;
2+
use crate::EslintDiagnostic;
33
use serde_json::{Value, json};
44
use sha2::{Digest, Sha256};
55
use std::{collections::BTreeMap, path::Path};
@@ -103,7 +103,7 @@ pub fn project_eslint_findings(
103103
}
104104

105105
/// 复核脱敏任务输入的稳定投影;消息摘要只验证形状,不自证原生来源。
106-
pub(crate) fn validate_records(
106+
pub fn validate_records(
107107
relative: &str,
108108
absolute: &str,
109109
source: &[u8],

crates/codeguard-cli/src/go_finding_identity.rs renamed to crates/codeguard-adapters/src/go_finding_identity.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Go 原生诊断的局部稳定身份;行号用于定位,源码字节摘要用于本轮归属复核。
22
3-
use codeguard_adapters::GoVetFinding;
3+
use crate::GoVetFinding;
44
use serde_json::{Value, json};
55
use sha2::{Digest, Sha256};
66

‎crates/codeguard-adapters/src/lib.rs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,3 +355,11 @@ mod tests {
355355
assert!(parse_legacy_registry(r#"{"languages":[]}"#).is_err());
356356
}
357357
}
358+
mod cargo_build_finding_identity;
359+
pub use cargo_build_finding_identity::cargo_build_finding_record;
360+
mod eslint_finding_identity;
361+
pub use eslint_finding_identity::{project_eslint_findings, validate_records};
362+
mod go_finding_identity;
363+
pub use go_finding_identity::go_finding_record;
364+
mod rustdoc_finding_identity;
365+
pub use rustdoc_finding_identity::rustdoc_finding_record;

crates/codeguard-cli/src/rustdoc_finding_identity.rs renamed to crates/codeguard-adapters/src/rustdoc_finding_identity.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! 文档发现身份绑定原生源码范围;不靠诊断顺序给其它问题续用身份。
22
3-
use codeguard_adapters::RustdocFinding;
3+
use crate::RustdocFinding;
44
use serde_json::{Value, json};
55
use sha2::{Digest, Sha256};
66

‎crates/codeguard-cli/src/eslint_workbench.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! ESLint 局部原生观察到既有修复队列的连接;没有审批或关闭权威。
2+
use codeguard_adapters::project_eslint_findings;
23
use crate::{
3-
eslint_finding_identity::project_eslint_findings,
44
eslint_lint_arguments::EslintLintArguments,
55
eslint_probe_request::EslintProbeRequest,
66
eslint_probe_result::EslintProbeResult,

‎crates/codeguard-cli/src/go_lint_command.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use crate::check_budget::parse_check_timeout;
44
use crate::discovery::discover;
5-
use crate::go_finding_identity::go_finding_record;
5+
use codeguard_adapters::go_finding_record;
66
use crate::work_sync::{save_local_report, sync_local_workspace};
77
use crate::workspace_refresh::read_workspace_baseline;
88
use codeguard_adapters::{GoVetParseState, legacy_registry, parse_go_vet_json};

‎crates/codeguard-cli/src/lib.rs‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ mod eslint_directory;
1414
mod eslint_discovery;
1515
#[cfg(unix)]
1616
mod eslint_effective_settings;
17-
pub mod eslint_finding_identity;
1817
#[cfg(unix)]
1918
mod eslint_lint_arguments;
2019
#[cfg(unix)]
@@ -71,7 +70,6 @@ pub use signed_approval_verifier::verify_signed_approval;
7170
pub use signed_prior_approval_input::SignedPriorApprovalInput;
7271
pub use verified_approval_snapshot::VerifiedApprovalSnapshot;
7372
pub mod cargo_audit_command;
74-
pub mod cargo_build_finding_identity;
7573
pub mod cargo_build_repair_brief;
7674
#[cfg(unix)]
7775
pub mod check_budget;
@@ -95,7 +93,6 @@ pub mod false_positive_decision;
9593
pub mod git_index_safety;
9694
#[cfg(unix)]
9795
pub mod git_index_safety_command;
98-
pub mod go_finding_identity;
9996
#[cfg(unix)]
10097
pub mod go_lint_command;
10198
pub mod init_command;
@@ -154,7 +151,6 @@ pub mod rust_comments_command;
154151
pub(crate) mod rust_cve_task_recheck;
155152
#[cfg(unix)]
156153
pub mod rust_lint_scan;
157-
pub mod rustdoc_finding_identity;
158154
pub mod rustdoc_repair_brief;
159155
#[cfg(unix)]
160156
pub(crate) mod rustdoc_task_recheck;

‎crates/codeguard-cli/src/rust_build_command.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! 原生 Cargo/check 类型检查观察;完整项目策略与修复任务仍独立核验。
22
3-
use crate::cargo_build_finding_identity::cargo_build_finding_record;
3+
use codeguard_adapters::cargo_build_finding_record;
44
use crate::cargo_build_repair_brief::cargo_build_repair_brief;
55
use crate::check_budget::{
66
budget_record, parse_check_timeout, resolve_project_default, select_check_timeout,

0 commit comments

Comments
 (0)