@namewta/speculo 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/dist/src/structured.js +1 -1
  3. package/dist/src/structured.js.map +1 -1
  4. package/package.json +1 -1
  5. package/template/workflows/ops/A-archive-and-learn/A-archive-and-learn.md +2 -0
  6. package/template/workflows/ops/H-computer-hygiene/H-computer-hygiene.md +105 -0
  7. package/template/workflows/ops/H-computer-hygiene/examples/README.md +9 -0
  8. package/template/workflows/ops/H-computer-hygiene/examples/linux/2026-09-14.environment.md +45 -0
  9. package/template/workflows/ops/H-computer-hygiene/examples/linux/2026-09-14.json +970 -0
  10. package/template/workflows/ops/H-computer-hygiene/examples/linux/2026-09-14.md +216 -0
  11. package/template/workflows/ops/H-computer-hygiene/examples/macos/2026-09-14.environment.md +45 -0
  12. package/template/workflows/ops/H-computer-hygiene/examples/macos/2026-09-14.json +970 -0
  13. package/template/workflows/ops/H-computer-hygiene/examples/macos/2026-09-14.md +216 -0
  14. package/template/workflows/ops/H-computer-hygiene/examples/windows/2026-09-14.environment.md +45 -0
  15. package/template/workflows/ops/H-computer-hygiene/examples/windows/2026-09-14.json +969 -0
  16. package/template/workflows/ops/H-computer-hygiene/examples/windows/2026-09-14.md +216 -0
  17. package/template/workflows/ops/H-computer-hygiene/references/00-sources.md +58 -0
  18. package/template/workflows/ops/H-computer-hygiene/references/01-safety.md +52 -0
  19. package/template/workflows/ops/H-computer-hygiene/references/10-windows.md +47 -0
  20. package/template/workflows/ops/H-computer-hygiene/references/11-macos.md +46 -0
  21. package/template/workflows/ops/H-computer-hygiene/references/12-linux.md +13 -0
  22. package/template/workflows/ops/H-computer-hygiene/references/20-toolchains.md +83 -0
  23. package/template/workflows/ops/H-computer-hygiene/references/21-path-migration.md +64 -0
  24. package/template/workflows/ops/H-computer-hygiene/references/22-repositories.md +35 -0
  25. package/template/workflows/ops/H-computer-hygiene/references/30-software-removal.md +41 -0
  26. package/template/workflows/ops/H-computer-hygiene/references/40-report-spec.md +54 -0
  27. package/template/workflows/ops/H-computer-hygiene/references/50-speculo-integration.md +26 -0
  28. package/template/workflows/ops/H-computer-hygiene/references/source-register.json +406 -0
  29. package/template/workflows/ops/H-computer-hygiene/rules/catalog.json +191 -0
  30. package/template/workflows/ops/H-computer-hygiene/scripts/hygiene.py +1348 -0
  31. package/template/workflows/ops/H-computer-hygiene/scripts/run.ps1 +7 -0
  32. package/template/workflows/ops/H-computer-hygiene/scripts/run.sh +5 -0
  33. package/template/workflows/ops/H-computer-hygiene/templates/config.example.json +13 -0
  34. package/template/workflows/ops/H-computer-hygiene/templates/maven-settings.fragment.xml +6 -0
  35. package/template/workflows/ops/H-computer-hygiene/templates/native-evidence.example.json +19 -0
  36. package/template/workflows/ops/H-computer-hygiene/tests/cli_smoke.py +65 -0
  37. package/template/workflows/ops/H-computer-hygiene/tests/make_examples.py +114 -0
  38. package/template/workflows/ops/H-computer-hygiene/tests/test_hygiene.py +486 -0
  39. package/template/workflows/ops/README.md +9 -3
  40. package/template/workflows/ops/common/rules/artifact-contract.md +2 -1
  41. package/template/workflows/ops/common/rules/closure-and-learning.md +2 -0
  42. package/template/workflows/ops/common/schemas/change-status.schema.json +2 -2
  43. package/template/workflows/ops/common/tools/validate-ops.mjs +29 -6
  44. package/template/workflows/ops/manifest.json +1 -1
@@ -0,0 +1,216 @@
1
+ # 2026-09-14 电脑环境与清理检测报告
2
+
3
+ **测试示例:SYNTHETIC_FIXTURE_NOT_YOUR_COMPUTER。数据来自隔离 fixture,不代表任何用户的真实电脑。**
4
+
5
+ 运行 ID:`bde8f8f47a90`;开始:2026-09-14T08:44:02.758384+00:00;完成:2026-09-14T08:44:02.766677+00:00。
6
+
7
+ ## 1. 结论与空间口径
8
+
9
+ 系统:**Windows / SIMULATED_ARCHITECTURE**。本次发现 6 条待复核事项;可选隔离候选 3 项,自动永久删除动作 **0** 项。检测没有启动包管理器、连接网络、卸载软件或修改环境配置。
10
+
11
+ Home 所在卷剩余:120.00 GiB / 512.00 GiB。测量范围内按文件标识去重的逻辑大小:174.09 KiB;这**不是可释放空间**。扫描不完整时是已观察下界;硬链接、克隆、压缩、稀疏文件及文件系统特性会影响实际释放量。
12
+
13
+ **隔离只是同卷重命名,不释放磁盘空间。** 缓存重新生成可能需要网络,mtime 不等于最后使用时间;所有删除、迁移、卸载和系统改动仍需逐项授权。
14
+
15
+ 执行环境线索:\{"fixture\_only": true\}。若在容器、SSH 主机或 WSL 中运行,报告针对该执行环境,不自动代表桌面宿主机。
16
+
17
+ ## 2. 覆盖范围与缺口
18
+
19
+ | 范围 | 状态 | 说明 |
20
+ | --- | --- | --- |
21
+ | environment | partial | Process PATH and curated path variables inspected; no shell evaluation, tool execution or effective-version proof. |
22
+ | configuration | partial | Known profile anchors and allowlisted Maven/npm path fields; no credentials, includes, project overrides, or effective execution. |
23
+ | storage | partial | Known defaults and declared locations; per-tree/global budgets; no full-disk crawl; custom tool defaults may be missed. |
24
+ | projects | partial | Authorized roots only; depth <= 3; repository content/state/remote ownership not verified. |
25
+ | applications/startup | SIMULATED-NOT-NATIVE | Synthetic application metadata only; no real registry, Applications, launchd or service reads. |
26
+ | loose-files/duplicates | partial | Downloads direct-child installers/archives/large-file metadata only. No content hashes, full-disk duplicate proof, Documents/Desktop traversal or personal-data deletion. |
27
+
28
+ 已访问元数据条目:38;全局预算耗尽:False。不是全盘完整性证明。
29
+
30
+ No complete disk or effective-tool-version claim.
31
+
32
+ Stat calls on an unrecognized remote filesystem may block; budgets are cooperative, not OS I/O deadlines.
33
+
34
+ No universal detection of bind mounts, macOS firmlinks, APFS clones or same-device remote mappings.
35
+
36
+ Metadata mtime is not last-use evidence; content-identical duplicates not proven.
37
+
38
+ Current user's report does not cover other users, WSL guest systems or all external volumes.
39
+
40
+ Disk capacity, architecture and application identity are illustrative fixture values, not real measurements.
41
+
42
+ ## 3. 优先处理清单
43
+
44
+ | ID | 风险 | 发现 | 证据 | 建议 |
45
+ | --- | --- | --- | --- | --- |
46
+ | F0001 | R1 | PATH 字面重复项 | \{"index": 3, "value": "~/bin-primary", "expanded": "~/bin-primary", "status": "exists", "linklike": false, "duplicate\_of": 1\} | 保留必要优先级,备份后只修改产生重复的配置来源。 |
47
+ | F0002 | R1 | PATH 目录当前不存在 | \{"index": 4, "value": "~/missing-bin", "expanded": "~/missing-bin", "status": "missing", "linklike": false\} | 排除未挂载磁盘、会话级 shims 与延迟创建路径后再移除。 |
48
+ | F0003 | R2 | java 有多个 PATH 命中 | \["~/bin-primary/java.exe", "~/bin-old/java.exe"\] | 在可信终端核实实际版本和主用管理器;多个路径不等于冗余安装。 |
49
+ | F0004 | R2 | JAVA\_HOME 出现在多个 profile 位置 | \[\{"path": "~/.profile", "line": 1\}, \{"path": "~/.zshrc", "line": 1\}\] | 只是静态出现记录,未证明重复赋值或加载顺序;人工核实生效 shell 后整合。 |
50
+ | F0005 | R2 | 项目位于易被清理的位置 | ~/Downloads/source-clone | 先保全仓库状态与唯一数据,再规划项目根;位置不规范不等于允许删除。 |
51
+ | F0006 | R2 | 同一项目有多个 Node 包管理锁文件 | \{"path": "~/Projects/example-web", "locks": \["package-lock.json", "pnpm-lock.yaml"\]\} | 确认实际管理器、迁移期和 CI 约束;不自动删除任一锁文件。 |
52
+
53
+ 风险:R0 观察;R1 缓存候选;R2 可能影响离线构建或应用;R3 系统/应用数据级;P 保护项。等级低不代表允许自动删除。
54
+
55
+ ## 4. PATH 与工具解析
56
+
57
+ | 序号 | 当前项 | 状态 | 重复于 |
58
+ | --- | --- | --- | --- |
59
+ | 1 | ~/bin-primary | exists | — |
60
+ | 2 | ~/bin-old | exists | — |
61
+ | 3 | ~/bin-primary | exists | 1 |
62
+ | 4 | ~/missing-bin | missing | — |
63
+
64
+ | 工具 | PATH 候选首项 | 全部命中 | 实际版本 |
65
+ | --- | --- | --- | --- |
66
+ | java | ~/bin-primary/java.exe | \["~/bin-primary/java.exe", "~/bin-old/java.exe"\] | 未执行,未知 |
67
+ | javac | — | \[\] | 未执行,未知 |
68
+ | mvn | — | \[\] | 未执行,未知 |
69
+ | mvnw | — | \[\] | 未执行,未知 |
70
+ | gradle | — | \[\] | 未执行,未知 |
71
+ | node | — | \[\] | 未执行,未知 |
72
+ | npm | — | \[\] | 未执行,未知 |
73
+ | npx | — | \[\] | 未执行,未知 |
74
+ | corepack | — | \[\] | 未执行,未知 |
75
+ | pnpm | — | \[\] | 未执行,未知 |
76
+ | go | — | \[\] | 未执行,未知 |
77
+ | rustc | — | \[\] | 未执行,未知 |
78
+ | cargo | — | \[\] | 未执行,未知 |
79
+ | rustup | — | \[\] | 未执行,未知 |
80
+ | python | — | \[\] | 未执行,未知 |
81
+ | python3 | — | \[\] | 未执行,未知 |
82
+ | uv | — | \[\] | 未执行,未知 |
83
+ | uvx | — | \[\] | 未执行,未知 |
84
+ | pip | — | \[\] | 未执行,未知 |
85
+ | pipx | — | \[\] | 未执行,未知 |
86
+ | mise | — | \[\] | 未执行,未知 |
87
+ | asdf | — | \[\] | 未执行,未知 |
88
+ | fnm | — | \[\] | 未执行,未知 |
89
+ | volta | — | \[\] | 未执行,未知 |
90
+ | nvm | — | \[\] | 未执行,未知 |
91
+ | pyenv | — | \[\] | 未执行,未知 |
92
+ | jenv | — | \[\] | 未执行,未知 |
93
+ | scoop | — | \[\] | 未执行,未知 |
94
+ | brew | — | \[\] | 未执行,未知 |
95
+ | winget | — | \[\] | 未执行,未知 |
96
+
97
+ PATH 查找不解析 shell alias/function、版本管理器 shim 内部逻辑或 IDE 环境;nvm 等函数型工具可能不会出现。
98
+
99
+ ## 5. 配置来源
100
+
101
+ | 路径 | 状态 | 允许记录的字段 |
102
+ | --- | --- | --- |
103
+ | ~/.profile | inspected | \{"declarations": \[\{"variable": "JAVA\_HOME", "line": 1, "value": "not recorded; no evaluation"\}\]\} |
104
+ | ~/.zshrc | inspected | \{"declarations": \[\{"variable": "JAVA\_HOME", "line": 1, "value": "not recorded; no evaluation"\}\]\} |
105
+ | ~/.m2/settings.xml | inspected | \{"localRepository": "~/.m2/repository", "sensitive\_sections\_recorded": false\} |
106
+ | ~/.cargo/config.toml | metadata-only | \{"note": "Potential configuration/credentials; content not exported. Effective values require trusted native queries."\} |
107
+
108
+ 当前进程的路径变量:
109
+
110
+ | 变量 | 值 |
111
+ | --- | --- |
112
+ | JAVA\_HOME | ~/old-jdk |
113
+ | GOCACHE | ~/AppData/Local/go-build |
114
+ | CARGO\_HOME | ~/.cargo |
115
+
116
+ 持久化环境(Windows 可读范围):
117
+
118
+ 没有记录;请结合覆盖范围判断是不存在还是未检查。
119
+
120
+ ## 6. 工具链、依赖与缓存完整清单
121
+
122
+ | 类型 | 路径 | 状态 | 逻辑大小 | 风险 | 证据来源 / 说明 |
123
+ | --- | --- | --- | --- | --- | --- |
124
+ | maven-local-repository | ~/.m2/repository | measured | 18.00 KiB | P | settings.xml declaration, not effective configuration proof; known default hypothesis; not proof of active use — May contain unpublished artifacts installed locally; never blanket-delete. |
125
+ | gradle-home | ~/.gradle | absent | 未知 | P | known default hypothesis; not proof of active use — Contains configuration, caches, wrapper distributions and possibly credentials. |
126
+ | cargo-home | ~/.cargo | measured | 59.00 B | P | known default hypothesis; not proof of active use; process environment: CARGO\_HOME — Contains config, credentials, installed binaries, registry and Git stores. |
127
+ | rustup-home | ~/.rustup | absent | 未知 | R2 | known default hypothesis; not proof of active use — Installed toolchains; remove by exact toolchain through rustup after checking pins. |
128
+ | go-workspace | ~/go | absent | 未知 | P | known default hypothesis; not proof of active use — Can contain source code and installed tools, not a disposable cache. |
129
+ | uv-cache | ~/AppData/Local/uv/cache | absent | 未知 | R2 | known default hypothesis; not proof of active use — Use native uv cache commands after version verification; no automated moves. |
130
+ | pnpm-store | ~/AppData/Local/pnpm/store | absent | 未知 | R2 | known default hypothesis; not proof of active use — Version-dependent default hypothesis; use pnpm store path to establish actual location. |
131
+ | npm-home | ~/AppData/Local/npm-cache | measured | 52.00 KiB | R2 | known default hypothesis; not proof of active use — May contain logs and other state; only \_cacache can qualify for quarantine. |
132
+ | nvm | ~/.nvm | absent | 未知 | R2 | known default hypothesis; not proof of active use — Version manager; includes per-version global packages. |
133
+ | volta | ~/.volta | absent | 未知 | R2 | known default hypothesis; not proof of active use — Version manager data; do not move without documented migration. |
134
+ | fnm | ~/AppData/Local/fnm | absent | 未知 | R2 | known default hypothesis; not proof of active use — Default hypothesis, verify with configuration. |
135
+ | mise | ~/AppData/Local/mise | absent | 未知 | R2 | known default hypothesis; not proof of active use — Support and path semantics must be checked against installed version. |
136
+ | asdf | ~/.asdf | absent | 未知 | R2 | known default hypothesis; not proof of active use — May contain plugins, shims and installed runtimes. |
137
+ | sdkman | ~/.sdkman | absent | 未知 | R2 | known default hypothesis; not proof of active use — Not assumed to support native Windows; WSL is a separate environment. |
138
+ | pyenv | ~/.pyenv | absent | 未知 | R2 | known default hypothesis; not proof of active use — Interpreters and virtualenvs may have absolute prefix references. |
139
+ | jdk-user | ~/.jdks | absent | 未知 | R2 | known default hypothesis; not proof of active use — Often IDE-managed; verify IDE ownership and project JDK pins. |
140
+ | bun | ~/.bun | absent | 未知 | R2 | known default hypothesis; not proof of active use — Runtime and package state; not a pure cache. |
141
+ | docker-user-state | ~/.docker | absent | 未知 | P | known default hypothesis; not proof of active use — Configuration may include authentication and contexts; no content export or automated deletion. |
142
+ | npm-content-cache | ~/AppData/Local/npm-cache/\_cacache | measured | 52.00 KiB | R1 | conservative default cache location — Recreation may need network; metadata age does not prove disuse. |
143
+ | pip-cache | ~/AppData/Local/pip/Cache | measured | 52.00 KiB | R1 | conservative default cache location — Recreation may need network; metadata age does not prove disuse. |
144
+ | go-build-cache | ~/AppData/Local/go-build | measured | 52.00 KiB | R1 | conservative default cache location; process environment: GOCACHE — Recreation may need network; metadata age does not prove disuse. |
145
+ | jdk-install | ~/old-jdk | absent | 未知 | R2 | process environment: JAVA\_HOME — |
146
+ | project-artifact-node\_modules | ~/Projects/example-web/node\_modules | measured | 38.00 B | R2 | authorized project inventory — Name is only a hint; may contain source, local-only data, editable installs or tracked outputs. Manual review only. |
147
+
148
+ 不完整测量与跳过:
149
+
150
+ 没有记录;请结合覆盖范围判断是不存在还是未检查。
151
+
152
+ ## 7. 项目、仓库与构建产物
153
+
154
+ | 项目 | 标记 | Git 类型 / 状态 | 构建产物候选 | 版本 pin / Node 声明 |
155
+ | --- | --- | --- | --- | --- |
156
+ | ~/Downloads/source-clone | \[\] | gitfile/worktree-or-submodule / unknown; Git commands not executed | \[\] | \{"packageManager": null, "pin\_files": \[\]\} |
157
+ | ~/Projects/example-web | \[".nvmrc", "package-lock.json", "package.json", "pnpm-lock.yaml"\] | directory / unknown; Git commands not executed | \["~/Projects/example-web/node\_modules"\] | \{"packageManager": "pnpm@9.0.0", "pin\_files": \[".nvmrc"\]\} |
158
+
159
+ 目录名相同不证明仓库冗余;未验证 Git 的未提交/未推送内容、worktree、submodule、LFS 和分支。`build`、`dist`、`target` 或 `.venv` 可能含独有数据,不提供自动删除动作。
160
+
161
+ ## 8. 软件、启动项与卸载残留线索
162
+
163
+ | 应用 | 版本 | 身份/路径 | 系统组件 | 处理方式 |
164
+ | --- | --- | --- | --- | --- |
165
+ | Example Editor | 1.0-fixture | HKCU/Uninstall/FIXTURE-EXAMPLE-ID | False | fixture candidate; not real software and never uninstalled |
166
+
167
+ 没有记录;请结合覆盖范围判断是不存在还是未检查。
168
+
169
+ 启动项或可执行文件缺失仅是残留线索,不证明可删除。软件冗余必须核实架构、插件、项目依赖、许可证和个人数据选择。
170
+
171
+ | 平台读取缺口 |
172
+ | --- |
173
+ | Real OS inventory intentionally disabled for this example. |
174
+
175
+ ## 9. 下载资料与大文件复核
176
+
177
+ | 文件 | 逻辑大小 | 修改时间 | 处理 |
178
+ | --- | --- | --- | --- |
179
+ | ~/Downloads/old-installer.zip | 17.00 B | 2026-09-14T08:44:02.758127+00:00 | manual ownership/backup/content review; not a deletion candidate |
180
+
181
+ 没有读取这些文件内容、计算重复文件哈希或证明安装包已不再需要。个人资料与备份默认保留。
182
+
183
+ ## 10. 可选隔离计划
184
+
185
+ | 动作 ID | 缓存 | 路径 | 逻辑大小 | 释放空间 |
186
+ | --- | --- | --- | --- | --- |
187
+ | Q-0dfe5f6cad | npm-content-cache | ~/AppData/Local/npm-cache/\_cacache | 52.00 KiB | 否 |
188
+ | Q-75b854ace3 | pip-cache | ~/AppData/Local/pip/Cache | 52.00 KiB | 否 |
189
+ | Q-f87c9bcd73 | go-build-cache | ~/AppData/Local/go-build | 52.00 KiB | 否 |
190
+
191
+ 计划有效期 24 小时,绑定主机与元数据快照。仅支持默认位置中结构可识别的 npm 内容缓存、pip 缓存和 Go 构建缓存;自定义路径、链接、硬链接、占位文件、扫描不全或近期变化会排除。执行前必须关闭相关工具,并以用户选中的 ID 审批。
192
+
193
+ ## 11. 原生清理与彻底卸载:待确认步骤
194
+
195
+ | 类别 | 风险 | 执行前要求 | 参考 |
196
+ | --- | --- | --- | --- |
197
+ | maven | R2 | 核实 settings.xml、-Dmaven.repo.local、IDE 与项目参数;本地仓库可能含未发布的 install 产物,先备份,不整体删除。 | 20-toolchains.md#java-maven-gradle |
198
+ | node-pnpm | R2 | 可信终端中核实 Node 管理器、npm cache/prefix 与 pnpm store path;按本地帮助选择原生命令,清理 store 前检查离线需求及正在运行的安装。 | 20-toolchains.md#node-npm-pnpm |
199
+ | go-rust-uv | R2 | 核实 go env、rustup toolchain list、uv 路径命令;保留 Cargo 配置/凭据/安装工具,不把 Cargo Home、.venv 或 SDK 当缓存。 | 20-toolchains.md |
200
+ | repositories | P | 对已授权且可信的仓库检查提交、推送、分支、worktree、submodule 和 LFS;未完成前不得删除仓库、.git、vendor、锁文件或虚拟环境。 | 22-repositories.md |
201
+ | software | R3 | 先按精确应用身份使用官方卸载器,再单独确认用户数据与残留;共享运行库、驱动、服务、插件不能按名称推断可删。 | 30-software-removal.md |
202
+ | system | R3 | 仅通过对应系统参考文档使用原生存储管理功能;不直接删除系统组件、快照、容器卷、WSL 磁盘或云同步文件。 | 10-windows.md / 11-macos.md / 12-linux.md |
203
+
204
+ 系统分流:Windows → `10-windows.md`;macOS → `11-macos.md`;Linux → `12-linux.md`。容器、WSL 和系统快照不计入可自动清理空间。
205
+
206
+ ## 12. 环境归一化、验证与回滚
207
+
208
+ 阅读同目录 `2026-09-14.environment.md`。该文件结合本机路径变量生成建议映射,不会修改 PATH 或持久化配置。按生态逐项验证,保留回滚副本;用户同意检测不等于同意迁移。
209
+
210
+ 隔离执行使用写前日志;恢复入口为 `hygiene.py restore`,若原路径已被工具重建会拒绝覆盖,需人工合并。真正永久删除后不能承诺自动回滚;备份、离线依赖和应用数据要在删除前另行确认。
211
+
212
+ ## 13. 证据、资料与隐私
213
+
214
+ 本报告事实来源为本次本地元数据、允许的配置字段和系统可读清单。官方核验入口见 `references/00-sources.md`;交付时未在线访问,不能当作已核实的最新命令支持。执行原生操作前须验证本机版本、帮助及供应商文档。
215
+
216
+ Markdown/公开 JSON 把当前 home 替换为 `~`,但软件清单、目录名、其他账户路径及项目名称仍可能敏感,分享前需复核。`.plan.json` 和执行 receipt 含真实绝对路径,应只保存在本机私密目录。Windows 文件权限继承父目录 ACL;本脚本不声称设置了专用 DACL。
@@ -0,0 +1,58 @@
1
+ # 官方资料核验登记册
2
+
3
+ ## 资料状态与证据等级
4
+
5
+ **以下是供实际执行时查证的官方入口,不是本次已阅读的网页文献。** 本次环境网页搜索不可用,GitHub 仓库文件亦未取得。访问时间和发布时间均未知;没有进行链接存活、页面内容、最新版本支持或跨来源交叉验证。不得把此文件改写成“已经全面联网调研”。
6
+
7
+ 本包的自动行为是保守的工程实现:本地元数据采集、保护规则、逐项审批、少数缓存隔离和恢复。参考文档中的工具行为是待本机版本核验的知识与建议,不是保证适用于所有版本的当前事实。路径默认值均为线索;工具真实配置优先于默认值假设。
8
+
9
+ 执行时优先看供应商当前文档及本机帮助,记录产品、版本、操作系统、体系结构、访问时间、适用命令与结论;仓库 wrapper、插件、实验性功能和不同主版本分开核实。固定版本页面仅证明该页面对应版本的说明,不代表当前最新版本。
10
+
11
+ | ID | 发布者 | 官方入口 | 需要核实的内容 | 本次状态 |
12
+ | --- | --- | --- | --- | --- |
13
+ | <a id="mav-1"></a>MAV-1 | Apache Maven | [Settings Reference](https://maven.apache.org/settings.html) | localRepository、用户/全局 settings 与私有仓库配置保护 | 未在线访问 / 未核验 |
14
+ | <a id="mav-2"></a>MAV-2 | Apache Maven | [Maven Wrapper](https://maven.apache.org/wrapper/) | 项目 wrapper、自行下载和版本固定,不能按普通 mvn 二进制对待 | 未在线访问 / 未核验 |
15
+ | <a id="grd-1"></a>GRD-1 | Gradle | [Directory Layout](https://docs.gradle.org/current/userguide/directory_layout.html) | Gradle User Home 不是纯缓存,daemon/wrapper/config 分开 | 未在线访问 / 未核验 |
16
+ | <a id="npm-1"></a>NPM-1 | npm | [npm cache](https://docs.npmjs.com/cli/v10/commands/npm-cache) | cache verify/clean 的版本、完整性、自修复与 force 语义;v10 页面不代表本机版本 | 未在线访问 / 未核验 |
17
+ | <a id="npm-2"></a>NPM-2 | npm | [Folders](https://docs.npmjs.com/cli/v10/configuring-npm/folders) | prefix、全局安装和 cache 的区别;以本机主版本文档复核 | 未在线访问 / 未核验 |
18
+ | <a id="pnp-1"></a>PNP-1 | pnpm | [pnpm store](https://pnpm.io/cli/store) | store path/status/prune 的本机可用性及离线影响 | 未在线访问 / 未核验 |
19
+ | <a id="pnp-2"></a>PNP-2 | pnpm | [Settings](https://pnpm.io/settings) | store-dir、PNPM_HOME、虚拟 store 与卷/硬链接关系 | 未在线访问 / 未核验 |
20
+ | <a id="nvm-1"></a>NVM-1 | nvm project | [nvm README](https://github.com/nvm-sh/nvm) | 函数型管理器、每版本全局包、npm prefix 冲突、与 nvm-windows 不同 | 未在线访问 / 未核验 |
21
+ | <a id="nvw-1"></a>NVW-1 | nvm-windows project | [nvm-windows README](https://github.com/coreybutler/nvm-windows) | NVM_HOME、NVM_SYMLINK、原生 Windows 安装与联接语义 | 未在线访问 / 未核验 |
22
+ | <a id="fnm-1"></a>FNM-1 | fnm project | [fnm README](https://github.com/Schniz/fnm) | shell 激活、会话路径、版本目录与本机支持 | 未在线访问 / 未核验 |
23
+ | <a id="vol-1"></a>VOL-1 | Volta | [Understanding Volta](https://docs.volta.sh/guide/understanding) | toolchain/shim/项目 pin 与全局工具隔离 | 未在线访问 / 未核验 |
24
+ | <a id="mis-1"></a>MIS-1 | mise | [Directories](https://mise.jdx.dev/directories.html) | 数据、配置、缓存目录变量;必须核对当前版本和 Windows 支持边界 | 未在线访问 / 未核验 |
25
+ | <a id="asd-1"></a>ASD-1 | asdf | [Configuration](https://asdf-vm.com/manage/configuration.html) | 数据目录、shims、配置和版本切换;实现版本差异 | 未在线访问 / 未核验 |
26
+ | <a id="sdk-1"></a>SDK-1 | SDKMAN! | [Usage](https://sdkman.io/usage) | JDK candidate 管理、默认/当前选择与平台支持 | 未在线访问 / 未核验 |
27
+ | <a id="go-1"></a>GO-1 | Go project | [Command go](https://go.dev/cmd/go/) | go env、go clean、GOCACHE、GOMODCACHE、GOPATH、GOENV | 未在线访问 / 未核验 |
28
+ | <a id="go-2"></a>GO-2 | Go project | [Go Toolchains](https://go.dev/doc/toolchain) | 项目 toolchain、GOTOOLCHAIN 与查询/构建触发下载的可能性 | 未在线访问 / 未核验 |
29
+ | <a id="rus-1"></a>RUS-1 | Rust project | [Cargo Home](https://doc.rust-lang.org/cargo/guide/cargo-home.html) | Cargo Home 的 bin、config、credentials、registry、git,不当成单一缓存 | 未在线访问 / 未核验 |
30
+ | <a id="rus-2"></a>RUS-2 | Rust project | [rustup Environment Variables](https://rust-lang.github.io/rustup/environment-variables.html) | RUSTUP_HOME、CARGO_HOME 和工具链环境 | 未在线访问 / 未核验 |
31
+ | <a id="rus-3"></a>RUS-3 | Rust project | [cargo clean](https://doc.rust-lang.org/cargo/commands/cargo-clean.html) | 项目构建产物清理,不等于清理全部 Cargo Home | 未在线访问 / 未核验 |
32
+ | <a id="uv-1"></a>UV-1 | Astral | [uv Cache](https://docs.astral.sh/uv/concepts/cache/) | cache clean/prune、缓存安全与原生命令选择 | 未在线访问 / 未核验 |
33
+ | <a id="uv-2"></a>UV-2 | Astral | [uv Storage](https://docs.astral.sh/uv/reference/storage/) | 缓存、工具、受管 Python、配置位置与变量支持 | 未在线访问 / 未核验 |
34
+ | <a id="uv-3"></a>UV-3 | Astral | [uv Environment Variables](https://docs.astral.sh/uv/reference/environment/) | UV_CACHE_DIR 等变量按实际版本核验 | 未在线访问 / 未核验 |
35
+ | <a id="pip-1"></a>PIP-1 | PyPA | [pip cache](https://pip.pypa.io/en/stable/cli/pip_cache/) | pip cache dir/info/purge 的本机支持、下载与 wheel 缓存 | 未在线访问 / 未核验 |
36
+ | <a id="py-1"></a>PY-1 | Python | [venv](https://docs.python.org/3/library/venv.html) | 虚拟环境中的绝对路径与不可普遍重定位性 | 未在线访问 / 未核验 |
37
+ | <a id="git-1"></a>GIT-1 | Git project | [git status](https://git-scm.com/docs/git-status) | 未提交状态只是仓库保全的一部分,不能替代未推送/分支检查 | 未在线访问 / 未核验 |
38
+ | <a id="git-2"></a>GIT-2 | Git project | [git worktree](https://git-scm.com/docs/git-worktree) | worktree 关联、gitfile 和原生 prune/remove 规则 | 未在线访问 / 未核验 |
39
+ | <a id="git-3"></a>GIT-3 | Git project | [git clean](https://git-scm.com/docs/git-clean) | 预览与删除含义;忽略文件也可能是重要数据,禁止默认 -fdx | 未在线访问 / 未核验 |
40
+ | <a id="win-1"></a>WIN-1 | Microsoft | [Free up drive space in Windows](https://support.microsoft.com/windows/free-up-drive-space-in-windows-85529ccb-c365-490d-b548-831022bc9b32) | 存储设置、临时文件和系统清理入口 | 未在线访问 / 未核验 |
41
+ | <a id="win-2"></a>WIN-2 | Microsoft Learn | [Clean Up the WinSxS Folder](https://learn.microsoft.com/windows-hardware/manufacture/desktop/clean-up-the-winsxs-folder) | 原生组件存储维护,不能直接删除 WinSxS | 未在线访问 / 未核验 |
42
+ | <a id="win-3"></a>WIN-3 | Microsoft Learn | [winget uninstall](https://learn.microsoft.com/windows/package-manager/winget/uninstall) | 精确 ID、来源和卸载命令,不按模糊名称匹配 | 未在线访问 / 未核验 |
43
+ | <a id="win-4"></a>WIN-4 | Microsoft Learn | [setx](https://learn.microsoft.com/windows-server/administration/windows-commands/setx) | 持久化变量写入与展开/长度等风险,不用于盲目覆盖 PATH | 未在线访问 / 未核验 |
44
+ | <a id="win-5"></a>WIN-5 | Microsoft Learn | [Powercfg command-line options](https://learn.microsoft.com/windows-hardware/design/device-experiences/powercfg-command-line-options) | 休眠与电源配置是功能取舍,不是默认性能优化 | 未在线访问 / 未核验 |
45
+ | <a id="win-6"></a>WIN-6 | Microsoft Learn | [Manage WSL disk space](https://learn.microsoft.com/windows/wsl/disk-space) | WSL 虚拟磁盘空间与宿主缓存不同,禁止直接删除 ext4.vhdx | 未在线访问 / 未核验 |
46
+ | <a id="mac-1"></a>MAC-1 | Apple | [Free up storage space on Mac](https://support.apple.com/guide/mac-help/free-up-storage-space-mh17179/mac) | 系统存储管理、可清理与可回收空间概念 | 未在线访问 / 未核验 |
47
+ | <a id="mac-2"></a>MAC-2 | Apple | [Uninstall apps on Mac](https://support.apple.com/guide/mac-help/uninstall-apps-mh35835/mac) | 应用卸载入口、官方卸载器与个人数据 | 未在线访问 / 未核验 |
48
+ | <a id="mac-3"></a>MAC-3 | Apple | [Manage login items on Mac](https://support.apple.com/guide/mac-help/manage-login-items-open-automatically-mh15189/mac) | 登录/后台项目状态,不只看 LaunchAgents 文件 | 未在线访问 / 未核验 |
49
+ | <a id="brw-1"></a>BRW-1 | Homebrew | [Manpage](https://docs.brew.sh/Manpage) | cleanup、autoremove、uninstall、cask zap 的版本与破坏性差异 | 未在线访问 / 未核验 |
50
+ | <a id="dck-1"></a>DCK-1 | Docker | [Prune unused Docker objects](https://docs.docker.com/engine/manage-resources/pruning/) | 容器卷、镜像和构建缓存不同;禁用默认 system prune --volumes | 未在线访问 / 未核验 |
51
+ | <a id="xdg-1"></a>XDG-1 | freedesktop.org | [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/) | Linux 数据、配置、缓存、状态目录语义;统一 DevRoot 是工程选择,不是替代标准 | 未在线访问 / 未核验 |
52
+ | <a id="apt-1"></a>APT-1 | Debian | [apt-get manual](https://manpages.debian.org/apt-get) | clean/autoclean/autoremove 模拟和依赖差异,按发行版版本验证 | 未在线访问 / 未核验 |
53
+
54
+ ## 引用规则
55
+
56
+ 其他参考文件使用这些 ID 指向待核验来源。真实检测报告中的路径、容量、应用清单等事实,应引用本次采集字段和时间,而非用网页作为本机事实的证据。涉及删除、数据保留、命令支持或系统优化时,本机验证不足必须停止自动操作并保留人工步骤。
57
+
58
+ `source-register.json` 是同一登记册的机器可读版本。全部 `verified=false`,禁止在没有实际查阅记录时批量改为 true。
@@ -0,0 +1,52 @@
1
+ # 安全与授权模型
2
+
3
+ ## 范围与默认行为
4
+
5
+ 默认脚本只读取本地元数据、指定的配置字段、可访问的应用和启动项,并在输出目录创建报告。它不会启动任何待检查工具,因此不存在为获得版本号而意外执行未知 shim、仓库 hook、卸载命令或 shell profile 的默认路径。不联网,不自动安装依赖,不请求管理员权限。
6
+
7
+ 所谓全面,是“明确列出每个检查类别及其覆盖缺口”,不是无条件递归整盘。项目根需明确授权;其他用户、外接卷、网络文件系统、WSL 客体、容器和系统受保护区域不属于默认完整覆盖。检测到容器/SSH/WSL 信号时,必须说明报告的主机边界。
8
+
9
+ ## 分类与禁止误判
10
+
11
+ | 类别 | 示例 | 默认处理 |
12
+ | --- | --- | --- |
13
+ | 可重建缓存候选 | npm `_cacache`、pip 缓存、Go build cache | 先证明路径/结构,再评估离线需求;少数情况可隔离 |
14
+ | 依赖仓库 | Maven local repository、pnpm store、Go mod cache、Cargo registry/git | 不能承诺全部可删;唯一产物、定制内容、离线构建需核实 |
15
+ | 工具/SDK 安装根 | JDK、Node 管理器、rustup、uv Python | 由管理器卸载版本;检查项目 pin、IDE、全局工具与架构 |
16
+ | 配置及状态 | `.m2/settings.xml`、Cargo Home、`.npmrc`、Docker contexts | 凭据与行为设置可能混在一起;禁止整体清空 |
17
+ | 项目产物 | `.venv`、`node_modules`、`target`、`build`、`dist` | 目录名只是线索;可能含 editable 项目、本地源码或唯一文件 |
18
+ | 个人与系统数据 | 文档、浏览器资料、密钥、数据库、驱动、共享运行库 | 保护;额外授权也必须有具体身份、影响与备份方案 |
19
+
20
+ 修改时间不是最后使用时间;名称相同不是内容重复;已卸载应用的同名文件不一定归该应用所有;“未被某一个管理器列出”不意味着无主。文件夹很大、很旧、名字叫 cache,都不是删除授权。
21
+
22
+ ## 风险与审批
23
+
24
+ R0 仅观察。R1 是可重建缓存的复核候选。R2 可能影响离线构建、应用、登录或复现。R3 涉及系统/驱动/共享组件/应用数据/备份等。P 保护。审批要绑定操作、精确对象、理由和数据选择,不接受“全部同意”“把大的都删了”作为生成通配删除命令的理由。
25
+
26
+ 自动隔离计划使用 `Q-...` ID,24 小时有效。`approve` 仅接受真实计划中的不重复 ID;`apply` 需要同一计划字节的 SHA-256、同主机、确认 token 和工具关闭声明。修改计划后旧审批失效。代理不得替用户自行审批。
27
+
28
+ SHA-256 不是数字签名;同一账户内有权限修改计划和审批的人仍可以修改它们。元数据快照不读取内容,不能识别恶意保留大小和时间戳的内容篡改。本实现不是对抗恶意同权限进程或内核/文件系统攻击的安全产品。
29
+
30
+ ## 自动隔离的硬边界
31
+
32
+ 只允许默认位置、结构已识别的 npm `_cacache`、pip cache 和 Go build cache。默认路径不是用户环境变量任意指定的目录。全树扫描需完整,没有链接、联接、重解析点、云占位、跨设备子项、特殊文件或硬链接;全部已观察到的修改时间达到阈值。未知目录布局不自动放宽规则。
33
+
34
+ 执行前和每次重命名前重新测量并比较根身份及摘要。只在同一文件系统内 `rename` 到 `~/.speculo-hygiene/quarantine/`,没有复制后删除、递归删除或永久清除功能。隔离不释放空间,可能使后续构建重新下载缓存。使用原生清理命令释放空间属于另一个独立确认阶段。
35
+
36
+ 相关应用、IDE、daemon、安装器和构建必须关闭;脚本无法跨平台证明不存在使用该缓存的进程。`--tools-closed` 只是用户声明。重命名后的漂移会停止后续操作并记录,不在未知状态下自动覆盖回滚。
37
+
38
+ ## 日志、失败与恢复
39
+
40
+ 执行先写 receipt 再改路径;每步记录 pending/prepared/moved 等状态。遇错停止后续动作,之前已移动的内容保留。恢复会核对主机、固定目标路径和快照,不覆盖重新生成的原目录,也不做隐式合并。崩溃后可以依据 prepared 状态和源/目标是否存在进行保守恢复;真实断电与文件系统持久性仍依赖操作系统,模拟异常测试不是断电可靠性证明。
41
+
42
+ `operation.lock` 防止本工作并发操作,不是所有包管理器共享的锁。存在旧锁时先检查 receipt、PID 和实际进程,确认没有活动操作后人工处理;禁止无条件删锁重试。
43
+
44
+ 永久删除、原生卸载、系统维护的回滚不属于隔离恢复保证。必须在这些操作前独立备份并说明不可逆边界。
45
+
46
+ ## 路径、隐私与性能限制
47
+
48
+ 不跟随已识别的符号链接/目录联接/重解析点;不读取标记为离线/云占位的文件,不主动水合。不能普遍识别所有 bind mount、macOS firmlink、同设备映射或远程挂载;不得据此宣称“绝不触达任何网络文件系统”。扫描预算是协作式截止;单个内核元数据调用阻塞时不能保证及时中断。
49
+
50
+ 大小基于已读取的元数据。按设备和 inode 去重已测量硬链接/重叠路径,但 APFS/其他克隆、稀疏、压缩、远程文件标识和文件仍被进程持有都会影响真实释放量。
51
+
52
+ 报告中的当前 home 替换为 `~` 并不完全匿名:项目名、软件名、其他账户路径等仍可能敏感。私密计划和 receipt 保存绝对路径。POSIX 新建文件使用 0600、专用目录使用 0700;Windows 继承父目录 ACL,不声称已建立专用 DACL。已有输出目录权限不会被擅自重写。
@@ -0,0 +1,47 @@
1
+ # Windows 专项检查与清理
2
+
3
+ **适用状态:命令和系统能力须在真实 Windows 版本上核实。** 本包未在线查阅最新文档,未进行 Windows 真机验收。官方入口见 [WIN-1 至 WIN-6](00-sources.md#win-1)。原生 Windows、WSL、容器和其他账户分别检查,不跨边界直接搬动 SDK。
4
+
5
+ ## 采集与证据
6
+
7
+ 默认 Python 分支读取 HKCU/HKLM 的 Win32 卸载键(32/64 位视图)、Run 项名称、指定持久化路径变量和当前进程 PATH。只记录卸载命令是否存在,不执行或导出其完整参数。注册表清单可能重复,不能当作完整软件数据库。
8
+
9
+ 商店/Appx 应用、服务、计划任务、驱动、后台包、WSL、容器、系统恢复点和其他用户状态未由默认脚本完整采集。需进一步检查时,在可信且已授权的 PowerShell 中使用本机支持的原生命令,仅提取必要字段。不要为了应用盘点调用 `Win32_Product` 或相关 WMI 查询;它不是本工作的检测接口。查软件身份时交叉核对“已安装的应用”、发行商与原始安装器。[WIN-3](00-sources.md#win-3)
10
+
11
+ ## 清理矩阵
12
+
13
+ | 对象 | 检查要点 | 建议处理 | 风险与禁止项 |
14
+ | --- | --- | --- | --- |
15
+ | 用户 Temp、CrashDumps、WER | 所有者、进程、时间、体积、是否正在写入 | 优先设置里的临时文件/存储清理;日志按需保留 | 不按扩展名全删,安装中的临时目录保留 |
16
+ | 回收站 | 是否含待恢复文件、其他卷 | 用户单独确认后清空对应范围 | 不把“回收站”视为默认授权 |
17
+ | 下载目录安装包/压缩包 | 已安装版本、离线安装需求、许可证/校验文件 | 列候选,确认原件与备份后处理 | 时间久不代表不用;不删除文档与项目压缩包 |
18
+ | Windows.old / 更新回退材料 | 当前是否需要系统回退、升级后验证是否完成 | 用系统存储清理入口 | 会影响回退能力;不硬编码保留天数,不直接删目录 |
19
+ | WinSxS / 组件存储 | 先使用原生分析和系统维护 | 仅通过受支持 DISM/计划维护 | 禁止资源管理器/脚本直接删除;默认禁止 ResetBase |
20
+ | `C:\Windows\Installer` | MSI 修复/更新/卸载关联 | 保护 | 不用“孤立 MSI 文件清理器”推断可删 |
21
+ | Delivery Optimization / 更新缓存 | 系统状态、待安装更新、重启需求 | 使用系统支持的清理入口 | 不自行停服务、取得所有权后清空组件目录 |
22
+ | 浏览器/聊天/邮件软件 | 缓存和个人资料严格分开 | 优先应用内清理 | 不清除 profile、cookie、会话、扩展、邮件库或下载证据 |
23
+ | 休眠文件 | 是否使用休眠、快速启动和当前电源需求 | 仅列为可选功能取舍 | 不是常规“优化”;不默认执行 `powercfg /h off` |
24
+ | pagefile / 内存转储 | 内存、崩溃诊断与应用需求 | 系统管理优先 | 不默认关 pagefile、不硬编码“最优值” |
25
+ | WSL `ext4.vhdx` | 发行版身份、Linux 内部空间、备份 | 在 WSL 内另跑检查;压缩按官方流程 | 禁止直接删除 vhdx 或把它当普通缓存 |
26
+ | Docker/虚拟机磁盘 | 容器卷、镜像、数据库与快照 | 用所属平台的原生检查工具 | 禁止默认 `system prune --volumes`;卷可能是唯一数据 |
27
+ | 共享运行库/驱动 | VC++、.NET、WebView2、设备与应用依赖 | 默认保留,精确核实 | 同时安装多个版本/架构可能必要,不是冗余证据 |
28
+
29
+ 系统存储入口、WinSxS 原生维护、休眠设置和 WSL 空间规则分别核验 [WIN-1](00-sources.md#win-1)、[WIN-2](00-sources.md#win-2)、[WIN-5](00-sources.md#win-5)、[WIN-6](00-sources.md#win-6)。
30
+
31
+ ## 环境路径治理
32
+
33
+ 建议 DevRoot 为 `%LOCALAPPDATA%\Dev`,按 data/cache/config/bin/tmp 分层。这个建议仅管理用户自己的工具状态,不搬动 Program Files、Windows、Scoop/winget/MSI 管理的应用安装树,也不复制一套 JDK 到新路径后直接删除原安装器记录。
34
+
35
+ 当前进程变量、用户持久化变量和机器变量不是同一个状态。分别备份变量名、原值、注册表类型和 PATH 顺序,保留 `%变量%` 的原始展开语义。不通过 `setx PATH "%PATH%;..."` 或类似拼接覆盖 PATH;只修改已经定位的来源与条目,避免把展开后的全局 PATH 复制进用户 PATH。[WIN-4](00-sources.md#win-4)
36
+
37
+ nvm-windows 和 POSIX nvm 是不同工具;NVM_SYMLINK 是解析入口,不是任意可删除目录。fnm 的会话路径不必作为永久目录统一。PowerShell、cmd、Git Bash、IDE 和服务账户的环境分别验证。WSL Linux 工具应位于 WSL 的合理文件系统,不与 Windows 二进制、大小写规则和 ABI 混用。[NVM-1](00-sources.md#nvm-1)、[NVW-1](00-sources.md#nvw-1)、[FNM-1](00-sources.md#fnm-1)
38
+
39
+ ## 软件彻底卸载
40
+
41
+ 先确认精确应用 ID、发行商、版本、架构和安装范围。使用已确认的系统/官方卸载器;只有本机 winget 帮助支持、应用匹配正确时,才按精确 ID 生成 `winget uninstall --id <ID> --exact` 类计划。命令里的 ID 必须来自真实记录,不能从名称猜测。[WIN-3](00-sources.md#win-3)
42
+
43
+ 卸载完成并按需重启后,再查该应用明确归属的启动项、服务、计划任务、目录和 PATH。删除个人数据另行确认;ProgramData、AppData 中共享厂商目录不能整树清空。安装器缓存、共享运行库和驱动不随应用名称模糊匹配清理。卸载字符串来自注册表的数据,不是默认可信指令。
44
+
45
+ ## 不做的“优化”
46
+
47
+ 不关闭 Defender/更新/防火墙,不改未知注册表,不移除系统商店框架,不清理 Prefetch 或内存来制造性能提升,不删除共享 DLL,不批量禁用服务。空间回收和性能改善是不同目标;没有测量就不声称会提速。
@@ -0,0 +1,46 @@
1
+ # macOS 专项检查与清理
2
+
3
+ **适用状态:按实际 macOS、CPU 架构和工具版本核验。** 本包未在线查阅最新文档,未在真实 macOS 验收。官方入口见 [MAC-1](00-sources.md#mac-1)、[MAC-2](00-sources.md#mac-2)、[MAC-3](00-sources.md#mac-3)、[BRW-1](00-sources.md#brw-1)。
4
+
5
+ ## 默认采集
6
+
7
+ 读取 `/Applications`、`~/Applications`、`/System/Applications` 的有限深度 app bundle 元数据,以及用户/第三方 LaunchAgents、LaunchDaemons 的 Label、程序首路径和文件是否存在。系统 app 标记为系统组件。不能由 plist 文件存在与否推断实际加载状态,也不读取完整参数或环境以避免凭据泄露。
8
+
9
+ 默认不调用 launchctl、不枚举所有安装收据、不检查所有 SMAppService 登录/后台项目、不完整读取系统扩展、快照或其他用户。需要时通过系统设置和受支持工具补证据。Apple 的登录项管理不能只靠删除 LaunchAgents 文件替代。[MAC-3](00-sources.md#mac-3)
10
+
11
+ ## 清理矩阵
12
+
13
+ | 对象 | 检查与处理 | 边界 |
14
+ | --- | --- | --- |
15
+ | `~/Library/Caches` | 逐应用、确认进程关闭,优先应用/工具原生命令 | 禁止 `rm -rf ~/Library/Caches/*`;缓存可能影响离线工作与会话 |
16
+ | `~/Library/Logs` | 检查时间、诊断/合规需求,保留近期故障证据 | 不把全部日志视为垃圾,不动系统审计 |
17
+ | Saved Application State | 区分窗口恢复、未完成任务和应用数据 | 用户确认后逐应用处理,非默认清空 |
18
+ | Downloads 安装 DMG/PKG/ZIP | 验证来源、已安装状态、备份与离线需求 | 不因文件老或大就删除 |
19
+ | `.Trash` | 是否需要恢复、外置卷垃圾篓 | 清空需单独确认 |
20
+ | Application Support / Containers / Group Containers | 应用身份、沙盒、共享组件、个人资料 | 不是缓存;禁止按应用名模糊匹配整树删除 |
21
+ | Homebrew 下载缓存/旧版本 | 核实本机 `brew` 来源和帮助;先看支持的预览方式 | 不先执行自动更新;`autoremove` 需检查依赖;`--zap` 可能涉及数据 |
22
+ | Xcode DerivedData | 指定工程、索引/构建代价、后台进程 | 清理后需重建;不与 Archives 混为一谈 |
23
+ | Xcode Archives / dSYM | 发布、崩溃符号化和回溯需求 | 可能是唯一发布证据,默认保护 |
24
+ | Simulator runtimes/devices | Xcode/项目版本和测试设备依赖 | 通过 Xcode/受支持 simctl 管理,不直接删 CoreSimulator 整树 |
25
+ | iOS 设备备份、Photos、邮件库 | 备份/恢复需求与个人数据 | 默认保护,存储大不表示冗余 |
26
+ | Time Machine / APFS 快照 | 备份、回滚、可回收空间与卷关系 | 不把快照显示大小直接相加;仅明确授权后按官方方式处理 |
27
+ | Docker Desktop / 虚拟机盘 | 卷、数据库和镜像身份 | 不删除整个磁盘映像释放空间,不默认 prune volumes |
28
+ | `/System`、`/usr`、SIP 保护内容 | 系统管理 | 不关闭 SIP、不取得权限强删、不使用所谓系统瘦身脚本 |
29
+
30
+ 存储空间由系统管理和 APFS 特性共同影响,Finder、磁盘工具和普通文件逻辑大小可能不是同一口径。隔离缓存不释放空间;清理后测量同一卷的可用空间变化并记录其他并发活动,不能将差值全归因于某一个动作。[MAC-1](00-sources.md#mac-1)
31
+
32
+ ## Apple Silicon、Intel 与工具管理器
33
+
34
+ `/opt/homebrew` 和 `/usr/local` 的存在可作为 Homebrew/架构排查线索,但不能据此自动删除其中一个。Rosetta、Intel 插件、旧项目或特定 SDK 可能仍依赖另一套工具。需要真实二进制架构、PATH、项目配置和进程证据后才提出退出计划。
35
+
36
+ 建议用户态 DevRoot 为 `~/Developer/.tooling`。统一的是自己管理的数据位置,不迁移 Homebrew Cellar/Caskroom、系统 JavaFramework 或安装器管理的目录。macOS `~/Library/Caches` 是常见缓存位置,改到统一 DevRoot 是可配置组织选择,不声称性能或系统兼容性更好。[BRW-1](00-sources.md#brw-1)
37
+
38
+ zsh 的 `.zshenv`、`.zprofile`、`.zshrc` 与 GUI 应用环境的加载方式不同。只维护经确认的单一配置入口,验证登录 shell、交互 shell、IDE 和 launchd;不要把交互命令、大量 PATH 追加或管理器初始化盲目写入所有文件。
39
+
40
+ ## 软件彻底卸载
41
+
42
+ 确认 bundle ID、版本、架构、安装来源和是否有官方卸载器。需要后台服务/系统扩展的产品优先官方卸载流程,不能仅拖走 `.app` 就宣称已彻底卸载。Homebrew 管理的 app 按对应 cask 的实际规则处理,不能先删除 bundle 再假定收据/服务已清理。[MAC-2](00-sources.md#mac-2)、[BRW-1](00-sources.md#brw-1)
43
+
44
+ 卸载后再核验已加载后台项、登录项、明确归属的 preferences、Application Support、Containers、Group Containers、缓存和日志。应用配置与个人资料的保留选择单独确认;厂商共用组件和容器不随单一应用删除。`pkgutil --forget` 类操作是收据管理,不可当作卸载文件的等价替代。不要自动使用广泛的 cask `--zap` 规则。
45
+
46
+ 不建议通过 `purge`、清空缓存或禁用安全功能声称普遍提速。优化必须与可测量的实际问题对应。
@@ -0,0 +1,13 @@
1
+ # Linux 与 WSL 补充分支
2
+
3
+ 本工作的主要系统专项是 Windows/macOS。Linux 脚本只提供通用开发环境、配置锚点、缓存、项目和下载资料盘点;没有完整系统包管理器、journal、systemd、容器或所有用户软件清单。明确记录这些缺口,不伪装成发行版级完整清理。
4
+
5
+ 建议按 XDG 的配置、数据、缓存和状态语义组织路径。统一 DevRoot 可设为 `~/.local/share/dev`,但这是工程选择,不应无条件替换发行版与系统服务规定的路径。系统 Python、`/usr`、`/lib`、`/etc`、包数据库、内核和 initramfs 默认保护。[XDG-1](00-sources.md#xdg-1)
6
+
7
+ apt/dnf/pacman 等按当前发行版帮助选择原生命令。缓存清理与删除孤立包不同;先做可用的模拟/列表检查,核对手动安装标记和依赖。不要自动执行 autoremove、删除旧内核或清空包数据库;没有支持的预览方法时必须明确说明。[APT-1](00-sources.md#apt-1)
8
+
9
+ journal 清理要核实诊断、审计和保留期,不能为了空间默认丢弃日志。Docker/Podman volumes、数据库、Kubernetes 数据、虚拟机磁盘和 systemd 用户服务默认保护,不能用 `system prune --volumes` 一次性代替身份检查。[DCK-1](00-sources.md#dck-1)
10
+
11
+ WSL 报告只代表该发行版。宿主 Windows PATH 注入、Windows 可执行文件、`/mnt/c`、Linux 原生 SDK 和虚拟磁盘是不同层级;项目和缓存是否位于宿主挂载卷须记录。释放 Linux 文件与缩小宿主 vhdx 不是同一个动作,后者按 Microsoft 的当前指导另行确认。[WIN-6](00-sources.md#win-6)
12
+
13
+ 原生 Linux 验收应包含 shell/IDE 环境、真实文件系统的链接/挂载、系统包依赖和实际构建;本包 Linux 测试只证明隔离 fixture 的脚本行为。
@@ -0,0 +1,83 @@
1
+ # 开发工具链:盘点、归一化与原生清理
2
+
3
+ 所有命令与目录都需要按本机 OS、体系结构、工具主版本及安装来源核实。这里的官方资料链接是**待核验入口**,交付时未在线读取;不得称为已验证的最新支持矩阵。默认检测脚本不执行下述命令,也不以默认路径作为最终生效配置证明。
4
+
5
+ ## 先区分四个层级
6
+
7
+ 运行时/版本管理器管理 JDK、Node、Go SDK、Rust toolchain、Python 等;依赖管理器处理项目的第三方包;缓存保存可重建内容;配置与状态决定解析、凭据和用户安装工具。一个目录可能包含多个层级,不能因为安装工具名称里有“包管理”就将其根目录划为缓存。
8
+
9
+ 推荐每个生态只有一个明确的主解析入口,但不强制所有语言使用同一个管理器。已有 mise/asdf 可以作为统一层候选,前提是平台、插件、受管工具和项目 pin 已被核实;JDK/Node/Go 的统一层可以和官方 rustup、uv 共存。不能让两个管理器同时争夺同一组 shims、默认版本或持久化变量。[MIS-1](00-sources.md#mis-1)、[ASD-1](00-sources.md#asd-1)、[RUS-2](00-sources.md#rus-2)、[UV-2](00-sources.md#uv-2)
10
+
11
+ ## 本机证据等级
12
+
13
+ | 等级 | 含义 | 允许结论 |
14
+ | --- | --- | --- |
15
+ | 默认线索 | 已知常见目录 | “此路径值得检查”;不能说工具实际在用 |
16
+ | 存在证据 | 文件/目录或 PATH 命中存在 | “此位置存在”;不能证明版本或主用入口 |
17
+ | 配置声明 | 环境、允许的配置字段、项目 pin | “该来源声明了此值”;不能忽略优先级 |
18
+ | 原生查询 | 已授权、可信二进制实际执行的选定查询结果 | 标明时间、版本、shell/项目/IDE 范围及会话覆盖 |
19
+ | 工作负载验证 | 真实项目/工具运行通过 | 仅说明被测项目和范围,不推广到所有项目 |
20
+
21
+ CLI 参数、项目配置、用户配置、系统配置、当前进程环境、wrapper 和 IDE 可能同时影响结果。不要用一条 `which` 或 `where` 代替全部解析调查。对未知二进制,先核对来源而不是立即运行 `--version`。
22
+
23
+ ## Java / Maven / Gradle
24
+
25
+ 需要盘点 JDK 版本、架构、安装来源、JAVA_HOME、java/javac PATH 顺序、IDE JDK、Maven/Gradle wrapper、项目编译/运行约束及 toolchain 配置。多个 JDK 不一定冗余,尤其是长期支持版本、Android/IDE、不同架构或构建兼容性要求。
26
+
27
+ Maven 本地仓库通常可由 settings 的 `localRepository` 或调用参数覆盖。`~/.m2/repository` 只是默认线索;IDE、`-Dmaven.repo.local`、项目 `.mvn`、wrapper、全局/用户 settings 都可能改变结果。`mvn install` 形成的本地未发布产物可能没有远程可重建来源,**Maven 本地仓库不列入整体自动清理**。[MAV-1](00-sources.md#mav-1)、[MAV-2](00-sources.md#mav-2)
28
+
29
+ 建议映射:`DevRoot/data/maven/repository`;保留 settings 的受支持配置锚点,合并一个 `localRepository` 字段,而不是用示例 XML 覆盖完整 settings。保护 servers、mirrors、profiles、代理与认证。不要假设 `MAVEN_USER_HOME` 或相同变量对所有 Maven 主版本都存在或覆盖相同范围。
30
+
31
+ Gradle User Home 包含配置、wrapper 分发、daemon 状态与缓存等。先确认 GRADLE_USER_HOME、项目 `.gradle`、daemon 和 IDE 关系;使用本机支持的停止/清理方式。不要整树清空 `.gradle` 以达到“归一化”。[GRD-1](00-sources.md#grd-1)
32
+
33
+ 已确认可信后可考虑 `java -version`、`javac -version`、`mvn -version`;项目 wrapper 不作为默认版本探测入口。查询 Maven 有效配置可能解析插件、触网或暴露认证信息,不默认运行 `help:effective-settings` 并保存完整输出。JAVA_HOME 应由选中的 JDK/管理器稳定解析,不同时让多个 profile 反复改写。
34
+
35
+ ## Node / npm / pnpm
36
+
37
+ 盘点 node/npm/npx/pnpm/Corepack 的全部 PATH 命中,管理器 nvm、nvm-windows、fnm、Volta、mise/asdf 的根与 shims,项目 `packageManager`、Node pin 以及 lockfile。Corepack 是否存在、是否受系统安装器管理及本机支持什么版本,需要实际确认;不假设任意 Node 都默认附带它。
38
+
39
+ `PNPM_HOME` 是可执行入口相关目录,不等于 pnpm 内容 store;项目 `node_modules/.pnpm` 与全局内容 store 也不同。用经验证的 `pnpm store path` 确定实际 store,再看本机支持的配置入口。多个 store 可能来自 pnpm 主版本、不同卷或不同配置,不是目录冗余证明。[PNP-1](00-sources.md#pnp-1)、[PNP-2](00-sources.md#pnp-2)
40
+
41
+ 统一建议:npm 缓存 `DevRoot/cache/npm`;pnpm 可执行入口 `DevRoot/bin/pnpm`;store 可用 `DevRoot/cache/pnpm-store`,但项目跨卷时应评估硬链接与复制开销。可以采用“各卷相同组织规则”,不必为了物理单根目录牺牲文件系统行为。
42
+
43
+ npm `prefix` 和 Node 版本管理器可能存在冲突,不能同时强制全局 prefix 和保留每版本全局包而不验证。不要设置 NODE_PATH 来掩盖模块解析问题,不移动现有全局包目录后假设 shim、原生扩展和 Node ABI 仍可用。[NPM-2](00-sources.md#npm-2)、[NVM-1](00-sources.md#nvm-1)、[VOL-1](00-sources.md#vol-1)
44
+
45
+ 可信环境中可核验的候选查询包括 `node --version`、`npm --version`、`npm config get cache`、`npm config get prefix`、`pnpm --version`、`pnpm store path`。先确认 shim 不会自动下载指定版本或执行未知插件。若本地帮助支持,`npm cache verify`、pnpm 的 store 状态命令可用于进一步检查;不要把会修复/更新状态的命令称为绝对只读。
46
+
47
+ 真正清理时优先供应商支持的原生命令,例如按本机帮助审核的 pnpm store prune 或 npm cache clean;`--force`、离线安装损失与重新下载需求必须单独解释和确认。本脚本只可能隔离默认 `_cacache`,不会清空整个 `.npm`、pnpm store 或 node_modules。[NPM-1](00-sources.md#npm-1)、[PNP-1](00-sources.md#pnp-1)
48
+
49
+ ## Go
50
+
51
+ 分别确认 GOPATH、GOBIN、GOCACHE、GOMODCACHE、GOROOT、GOENV,以及项目 go/toolchain 指令和 GOTOOLCHAIN。GOPATH 可能是多个路径,可能包含源码;GOBIN 有用户安装的工具;GOMODCACHE 与构建缓存不是同一个目录。一般不手动设置 GOROOT,由实际选择的工具链决定。[GO-1](00-sources.md#go-1)、[GO-2](00-sources.md#go-2)
52
+
53
+ 建议映射:`GOPATH=DevRoot/data/go`、`GOBIN=DevRoot/bin/go`、`GOCACHE=DevRoot/cache/go-build`、`GOMODCACHE=DevRoot/cache/go-mod`。这是待执行方案,不是直接复制命令;必须先检查现有 GOPATH/src、工具、持久化 go env 设置和项目约束。
54
+
55
+ 可信二进制查询可使用 `go version` 和只列指定键的 `go env GOPATH GOBIN GOCACHE GOMODCACHE GOROOT GOENV`。为避免自动选择/下载工具链,可在记录原值后按本机支持设置会话 `GOTOOLCHAIN=local` 并在报告标明这一覆盖;不执行无范围限制的完整环境导出。
56
+
57
+ `go env -w` 与 shell/Windows 持久化变量是不同来源。选择明确的权威入口,备份旧值;不要同时设置两套然后用新终端的结果猜优先级。原生 `go clean -cache` 和 `go clean -modcache` 风险不同,后者可能损害离线复现,应独立审批。不得把 `~/go` 整体删除。[GO-1](00-sources.md#go-1)
58
+
59
+ ## Rust / Cargo / rustup
60
+
61
+ Cargo Home 包含已安装二进制、配置、认证、registry 和 Git 数据;Rustup Home 包含受管 toolchain。它们都不是整目录可清空的缓存。[RUS-1](00-sources.md#rus-1)、[RUS-2](00-sources.md#rus-2)
62
+
63
+ 建议 `CARGO_HOME=DevRoot/data/cargo`、`RUSTUP_HOME=DevRoot/data/rustup`,但迁移必须保全 credentials/config、cargo install 工具、toolchain override、项目 rust-toolchain 文件、自定义目标与本地链接 toolchain。管理器创建的 shim 和环境初始化按官方流程重建,不能随意剪切两个 Home 后宣布完成。
64
+
65
+ 可信查询可参考 `rustup show`、`rustup toolchain list`、`rustup override list`、`cargo --version`、`rustc --version`。结果仅在实际执行、版本适用、没有未知 wrapper 时记录为核实。是否可卸载 toolchain,要查项目 pin、target 和已安装工具依赖,不只看当前 default。
66
+
67
+ 项目 `target` 只有在确认为可重建构建产物、不是自定义源码/共享目录、没有运行中的构建后,才考虑项目级 `cargo clean`。该命令不代表应清理整个 Cargo Home。不同 Cargo 版本的缓存回收能力不能凭记忆强制调用。[RUS-3](00-sources.md#rus-3)
68
+
69
+ ## uv / Python / pip / pipx
70
+
71
+ 区分 uv 自身可执行文件、下载缓存、受管 Python、工具环境、工具 bin、项目 `.venv`、pip 缓存和系统 Python。uv 可能由独立安装器、系统包管理器、pip、pipx 或其他工具安装;先查实际来源,不能叠加另一种安装方式再清掉旧目录。
72
+
73
+ 建议 `UV_CACHE_DIR=DevRoot/cache/uv`、`UV_PYTHON_INSTALL_DIR=DevRoot/data/uv/python`、`UV_TOOL_DIR=DevRoot/data/uv/tools`、`UV_TOOL_BIN_DIR=DevRoot/bin/uv`。这些变量是否受本机版本支持需要当前帮助/文档核验。自定义安装目录、项目级配置和平台默认值优先于脚本的常见路径假设。[UV-2](00-sources.md#uv-2)、[UV-3](00-sources.md#uv-3)
74
+
75
+ 可按本机帮助核验 uv 的 cache dir、tool dir、Python 安装目录查询与 pip cache dir/info。只取允许路径和版本字段,不导出带私有源 URL 或凭据的完整配置、freeze/lock/环境数据。
76
+
77
+ `.venv` 可能包含绝对路径、editable 安装、本地包和指向旧解释器的入口,不能保证可重定位。迁移项目或解释器应根据 lockfile 和已保全的本地依赖重建环境,先验证再处理旧环境;不能把整个 venv 当下载缓存。[PY-1](00-sources.md#py-1)
78
+
79
+ uv cache clean/prune、pip cache purge 应由本机支持的原生命令完成,关闭相关工具、解释离线影响后再授权。即使官方工具有自己的缓存并发安全保证,也不能扩展为“手工移动所有目录同样安全”。因此脚本不自动隔离 uv cache,只为少数结构可识别的默认 pip cache 提供可选隔离。[UV-1](00-sources.md#uv-1)、[PIP-1](00-sources.md#pip-1)
80
+
81
+ ## 完成判定
82
+
83
+ 每个生态至少要有:当前解析证据、权威配置来源、目标路径、保留项、受影响项目、验证与回滚记录。迁移后重开终端/IDE,验证真实构建或测试;有网络/下载的验证另行确认。旧路径只在依赖确认完成且用户再次授权后清理,不用“应该没有问题”替代证据。