Files
LanMountainDesktop/docs/archive/auto_commit_md/20260528_ebe35d6.md
2026-06-08 03:54:33 +08:00

3.6 KiB
Raw Blame History

Git 提交分析报告

基本信息

提交信息摘要

fix(launcher): extract startup subsystem and harden IPC detection

变更统计

指标 数值
变更文件数 14
新增行数 1990
删除行数 1535
净变化 +455

详细变更分析

概述

此提交将启动子系统从庞大的 LauncherFlowCoordinator 中提取出来,形成独立的、职责更清晰的模块,并加强了 IPC 检测机制。

新增文件

1. 启动子系统核心组件

  • HostActivationPolicy.cs - 主机激活策略
  • HostStartupMonitor.cs - 主机启动监控器
  • PublicIpcConnection.cs - 公共 IPC 连接
  • StartupDiagnostics.cs - 启动诊断
  • StartupSuccessTracker.cs - 启动成功跟踪器
  • StartupTimeoutPolicy.cs - 启动超时策略

2. 分部类文件

  • LauncherFlowCoordinator.HostStartupMonitor.cs - 主机启动监控器分部类
  • LauncherFlowCoordinator.LaunchOrchestrator.cs - 启动协调器分部类
  • LauncherFlowCoordinator.UiPresenter.cs - UI 展示器分部类

3. 测试文件

  • HostActivationPolicyTests.cs - 主机激活策略测试
  • StartupSuccessTrackerTests.cs - 启动成功跟踪器测试

主要变更的文件

  • LauncherFlowCoordinator.cs - 大幅简化1612行 → 更少)
  • LauncherMultiInstancePolicyTests.cs - 更新命名空间引用
  • LauncherStartupTimeoutPolicyTests.cs - 更新测试以引用新文件

核心功能改进

1. 提取启动子系统

  • 将启动相关逻辑从 LauncherFlowCoordinator 中分离
  • 形成独立的、可测试的组件
  • 每个组件职责单一清晰

2. 主机激活策略 (HostActivationPolicy)

  • ShouldProbeExistingHostBeforeLaunch() - 决定是否在启动前探测现有主机
  • IsExistingHostReadyForLauncherDecision() - 检查现有主机是否准备好
  • IsRecoverableActivationFailure() - 判断激活失败是否可恢复
  • 退出码分类方法

3. 启动成功跟踪器 (StartupSuccessTracker)

  • 支持多种启动策略(前台、重启后台、重启托盘)
  • 根据不同阶段判断启动成功
  • 提供恢复成功状态构建

4. 启动超时策略 (StartupTimeoutPolicy)

  • 软超时30秒
  • 硬超时120秒
  • IPC 连接超时配置
  • 重试间隔配置

5. 启动诊断 (StartupDiagnostics)

  • 可通过环境变量 LMD_LAUNCHER_STARTUP_DIAG=1 启用
  • 记录启动事件到 JSONL 文件
  • 追踪 Shell 状态变化

6. 加强 IPC 检测 (PublicIpcConnection)

  • 带退避的连接尝试
  • 更好的错误处理
  • 超时控制

代码审查要点

优势

  1. 更好的模块化:代码组织更清晰,每个组件职责单一
  2. 可测试性提升:提取出的组件都有对应的测试
  3. 诊断能力增强:新增启动诊断功能,便于问题排查
  4. IPC 检测更健壮:带退避的重试机制,超时配置更精细
  5. 代码可读性:庞大的协调器被拆解,更易理解和维护

潜在风险

  1. 回归风险:大规模重构可能引入隐藏的 bug
  2. 组件协调:需要确保新组件之间的交互正确
  3. 测试覆盖:需要确保所有路径都有充分的测试

建议

  1. 完整测试启动流程,包括各种边缘情况
  2. 测试多实例场景
  3. 测试重启场景(托盘、后台等)
  4. 启用启动诊断,验证诊断功能正常
  5. 测试超时场景