16 · 源码地图与阅读路线
这是一张导航图,不是文件清单。请选择一个问题,从入口追到副作用或输出,再回头看测试。
按能力定位
| 想理解的能力 | 首读 | 继续追踪 | 测试/证据 |
|---|---|---|---|
| 命令路由 | mole | lib/core/commands.sh | tests/cli.bats |
| 删除安全 | lib/core/file_ops.sh | app_protection*.sh、sudo.sh | tests/core_safe_functions.bats |
| Clean | bin/clean.sh | lib/clean/*.sh | tests/clean*.bats |
| Uninstall | bin/uninstall.sh | lib/uninstall/batch.sh、brew.sh | tests/uninstall*.bats |
| Purge | bin/purge.sh | lib/clean/project.sh | tests/purge*.bats |
| Optimize | bin/optimize.sh | catalog.sh、outcomes.sh、tasks.sh | tests/optimize*.bats |
| Analyze | cmd/analyze/main.go | model.go、scanner.go、delete.go | cmd/analyze/*_test.go |
| Status | cmd/status/main.go | metrics*.go、process_watch.go、view.go | cmd/status/*_test.go |
| 安装更新 | install.sh | lib/manage/update.sh | installer/update Bats |
| 发布 | .github/workflows/release.yml | Makefile、minos check | release assets + attestation |
路线 A:审查一次删除
- 从具体命令找到候选如何生成。
- 找
should_protect_path、白名单与运行状态判断。 - 找
mole_delete的调用参数,确认 mode 来源。 - 进入
safe_remove/safe_sudo_remove,检查副作用前复检。 - 回到
log_operation与 deletion log,确认结果如何记录。 - 查 Bats 中对应危险路径、symlink、祖先权限与 dry-run 用例。
不要在“上层已经过滤”处停止。安全审查的终点是最后一个 rm、rename、Trash 或系统命令。
路线 B:新增一个 Clean 目标
- 选择已有
lib/clean生态模块,不在bin/clean.sh堆清单。 - 明确目标是缓存叶、容器根还是用户数据。
- 添加运行中应用 guard 与必要超时。
- 让候选进入
safe_clean,不要直接rm。 - 验证父子去重、大小与 dry-run 汇总。
- 为保护/白名单/缺失路径/活跃进程编写测试。
路线 C:新增 Optimize 任务
- 在 catalog 注册唯一 action 与 handler。
- 证明任务适合自动执行,写清描述与白名单名称。
- handler 检测前提:sudo、应用状态、电源、网络能力。
- 所有返回分支设置一个且仅一个 outcome。
- Dry run 不产生副作用,但应报告 would-apply。
- 验证总 outcome 数与目录一致。
路线 D:调试 Go TUI
先区分四层:采集/扫描产生数据,cache 决定鲜度,update 消费消息改变 model,view 只渲染。UI 错位优先检查 path identity 与排序;数字不准优先检查采集与缓存覆盖;卡顿优先检查 limiter、外部命令超时和 full/fast 频率。
顶层关键文件
molelib/core/common.shlib/core/file_ops.shbin/clean.shbin/uninstall.shcmd/analyze/main.gocmd/status/main.goinstall.sh
完成一轮源码阅读的标准
如果你能准确回答以下问题,就已经越过“浏览文件名”的阶段:
- 哪个函数最终产生副作用,它在最后一刻重查了什么?
- 哪些信息是缓存的,缓存陈旧时 UI/命令如何表现?
- 用户授权的作用域是什么,是否会意外放宽系统保护?
- 一项操作没有发生时,系统能否区分无需改变、跳过、不可用和失败?
- 发布物的 checksum 从哪里来,安装器如何把它锚定到构建身份?
至此,全书从 CLI 输入走到了源码贡献与审查路径。建议回到最感兴趣的命令,沿本章路线对照固定提交实读一次。