release: v0.2.4 里程碑快照(孤儿提交,无父;树 = dev 68362e5)
CI / fmt (rustfmt --check) (push) Waiting to run
CI / clippy (ubuntu-latest) (push) Waiting to run
CI / clippy (windows-latest) (push) Waiting to run
CI / test (ubuntu-latest) (push) Waiting to run
CI / test (windows-latest) (push) Waiting to run
CI / build release (ubuntu-latest) (push) Waiting to run
CI / build release (windows-latest) (push) Waiting to run
CI / runtime smoke (ubuntu x64, xvfb) (push) Waiting to run
CI / runtime smoke (macos arm64, probe) (push) Skipped
CI / update-e2e (windows x64) (push) Waiting to run
GPU evidence / GPU 判据自测(不需 GPU;跳过 ≠ 已验证) (push) Waiting to run
GPU evidence / GPU 证据 — 探测可用产物与硬件适配器 (push) Waiting to run
Guards / core 零 UI 守门 (push) Waiting to run
Guards / presenter 零 UI 守门 (push) Waiting to run
Guards / design 零第三方依赖守门 (push) Waiting to run
Guards / unsafe 落点守门(集合必须恰好等于期望) (push) Waiting to run
Guards / 文件行数 ≤400 守门 (push) Waiting to run
Guards / 依赖许可与来源(cargo-deny) (push) Waiting to run
Release guard / 发布标记语义守门(push tag → 稳定版) (push) Waiting to run
Signing status(播报,不是门禁) / 判据自测(三行/退出码/变异重放/接线) (push) Waiting to run
Signing status(播报,不是门禁) / 签名就绪度(播报) (push) Waiting to run
Release / 选槽位(默认四个:Windows 两档 + Linux 两档) (push) Waiting to run
CI / fmt (rustfmt --check) (push) Waiting to run
CI / clippy (ubuntu-latest) (push) Waiting to run
CI / clippy (windows-latest) (push) Waiting to run
CI / test (ubuntu-latest) (push) Waiting to run
CI / test (windows-latest) (push) Waiting to run
CI / build release (ubuntu-latest) (push) Waiting to run
CI / build release (windows-latest) (push) Waiting to run
CI / runtime smoke (ubuntu x64, xvfb) (push) Waiting to run
CI / runtime smoke (macos arm64, probe) (push) Skipped
CI / update-e2e (windows x64) (push) Waiting to run
GPU evidence / GPU 判据自测(不需 GPU;跳过 ≠ 已验证) (push) Waiting to run
GPU evidence / GPU 证据 — 探测可用产物与硬件适配器 (push) Waiting to run
Guards / core 零 UI 守门 (push) Waiting to run
Guards / presenter 零 UI 守门 (push) Waiting to run
Guards / design 零第三方依赖守门 (push) Waiting to run
Guards / unsafe 落点守门(集合必须恰好等于期望) (push) Waiting to run
Guards / 文件行数 ≤400 守门 (push) Waiting to run
Guards / 依赖许可与来源(cargo-deny) (push) Waiting to run
Release guard / 发布标记语义守门(push tag → 稳定版) (push) Waiting to run
Signing status(播报,不是门禁) / 判据自测(三行/退出码/变异重放/接线) (push) Waiting to run
Signing status(播报,不是门禁) / 签名就绪度(播报) (push) Waiting to run
Release / 选槽位(默认四个:Windows 两档 + Linux 两档) (push) Waiting to run
本批内容见 CHANGELOG.md 的 0.2.4 段。按 D41 用孤儿快照推 main,保留「公开史只有里程碑」的模型。
This commit is contained in:
commit
a5d1dec495
1580 files changed
+320938
No files matched your search
@@ -0,0 +1,87 @@
|
||||
//! 内存诊断端口(`DiagnosePort` 的测试替身)。
|
||||
|
||||
use crate::port::{
|
||||
CrashDiagnosis, DiagnosePort, DiagnosisCandidate, ExitSummary, FixAction, FixActionKind,
|
||||
PortResult,
|
||||
};
|
||||
|
||||
/// 内存诊断端口(固定返回一份规则结论)。
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct MockDiagnose {
|
||||
report: Option<CrashDiagnosis>,
|
||||
}
|
||||
|
||||
impl Default for MockDiagnose {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
report: Some(Self::forge_missing_library()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl MockDiagnose {
|
||||
/// 构造使用默认结论的端口。
|
||||
#[must_use]
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// 让端口对所有会话返回「会话不存在」。
|
||||
#[must_use]
|
||||
pub fn unavailable() -> Self {
|
||||
Self { report: None }
|
||||
}
|
||||
|
||||
/// 默认结论:Forge 缺库(对应 analyse/02 的高发场景)。
|
||||
#[must_use]
|
||||
pub fn forge_missing_library() -> CrashDiagnosis {
|
||||
CrashDiagnosis {
|
||||
session_id: String::new(),
|
||||
source: "rules".to_string(),
|
||||
needs_more_info: false,
|
||||
candidates: vec![DiagnosisCandidate {
|
||||
id: "integrity.forge_missing_library".to_string(),
|
||||
severity: "error".to_string(),
|
||||
category: "integrity".to_string(),
|
||||
confidence: 0.86,
|
||||
message_key: "diagnose.cause.integrity.forge_missing_library".to_string(),
|
||||
message: "Forge 启动缺少 bootstraplauncher 库,通常是版本组件未下载完整"
|
||||
.to_string(),
|
||||
detail: "在实例上重装 Forge 组件(或先用官方启动器补全一次再回来)".to_string(),
|
||||
evidence: vec![
|
||||
"java.lang.NoClassDefFoundError: cpw/mods/bootstraplauncher/BootstrapLauncher"
|
||||
.to_string(),
|
||||
],
|
||||
fix_actions: vec![FixAction {
|
||||
kind: FixActionKind::Reinstall,
|
||||
tool: "component.reinstall".to_string(),
|
||||
label: "重装该版本的 Forge 组件".to_string(),
|
||||
args: [("component".to_string(), "forge".to_string())]
|
||||
.into_iter()
|
||||
.collect(),
|
||||
}],
|
||||
}],
|
||||
secondary: Vec::new(),
|
||||
evidence: vec!["Description: Mod loading failure".to_string()],
|
||||
exit: ExitSummary {
|
||||
code: Some(1),
|
||||
exit_type: Some("application_error".to_string()),
|
||||
silent_failure: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DiagnosePort for MockDiagnose {
|
||||
fn diagnose(&self, session_id: &str) -> PortResult<CrashDiagnosis> {
|
||||
self.report.clone().map_or_else(
|
||||
|| Err(format!("会话 `{session_id}` 不存在")),
|
||||
|report| {
|
||||
Ok(CrashDiagnosis {
|
||||
session_id: session_id.to_string(),
|
||||
..report
|
||||
})
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user