2026-05-07 学习日志
今日主题
- XDG 规范与 macOS 目录映射
- XDG DATA 与 STATE 边界
- macOS /private 软链接设计原理
- macOS 与 XDG 规范
- Claude Code 配置系统架构
- Spring Cloud Refresh Scope 机制
- Superpowers 技能流水线
新增认知
XDG 规范与 macOS 目录映射
- macOS 的 ~/Library 相当于 XDG 规范中 ~/.config + ~/.local/share + ~/.cache 的集合,只是 macOS 不遵循 XDG 规范。
- XDG 全称 X Desktop Group,是 freedesktop.org 的前身,制定 Linux 桌面目录标准。规范名和变量前缀保留了旧称。
- macOS 输入法列表中删除按钮灰色时,直接删除 /Library/Input Methods/ 下的源文件再重启即可卸载。
XDG DATA 与 STATE 边界
- XDG_DATA_HOME 存用户资产(丢了有损失),XDG_STATE_HOME 存运行痕迹(丢了应用可自动重建)。
- 判断 DATA 还是 STATE 的核心标准:删除后用户会不会觉得'我的东西没了'——会则是 DATA,不会则是 STATE。
- XDG_STATE_HOME 是 2021 年才正式加入规范的新目录,很多老项目尚未迁移,状态文件仍散落在 ~/.config 或 ~/.local/share 中。
macOS /private 软链接设计原理
- macOS Catalina 之后根目录 / 本身是只读系统卷(APFS Read-Only System Volume),不是 /private 只读。
- /etc /tmp /var 软链接到 /private 是为了在只读根卷下保持 UNIX 兼容——工具硬编码了这些路径,苹果不能改。
- 不能直接把 /etc 做成数据卷上的目录,因为数据卷挂载在 /System/Volumes/Data 是独立挂载点,软链接是最简单干净的方案。
macOS 与 XDG 规范
- macOS 默认不设置 XDG 环境变量(XDG_CONFIG_HOME 等),但许多 CLI 工具仍按规范回退到 ~/.config 等默认路径。
- macOS 原生应用和系统工具使用 ~/Library/Application Support、~/Library/Caches、~/Library/Preferences,不遵循 XDG 规范。
- XDG 规范的本质是提供跨平台配置路径约定,未设置环境变量时有确定的默认值回退机制。
Claude Code 配置系统架构
- Claude Code 有两套配置文件系统:config.ts 管理 ~/.claude.json(扁平单级),settings.ts 管理 .claude/settings.json(分层合并:local > project > user),前者是早期版本,后者是后来引入的项目级分层机制,老字段未迁移导致职责重叠。
- 判断 Claude Code 终端是否从 IDE 内部启动的机制:通过 isSupportedTerminal() 检测进程关键词(VS Code/Code Helper/Cursor Helper/JetBrains 等),支持 lockfile 机制、PID 祖先链校验、WSL 路径转换。
- Claude Code 源码在 ~/Agent/open-claudecode/,基于 npm 包 source map 逆向还原,版本 2.1.88,可用于分析 Claude Code 行为和配置机制。
Spring Cloud Refresh Scope 机制
- RefreshScope 是 Spring Cloud 的特殊作用域,通过内部缓存 Bean 实例实现运行时销毁重建,无需重启整个应用上下文。
- ConfigurationPropertiesBeans 作为 BeanPostProcessor 会收集所有 @ConfigurationProperties Bean,但刻意跳过 refresh scope 的 Bean,避免与 RefreshScope 的生命周期管理重复。
- 配置刷新流程:ContextRefresher 先重建 Environment 合并新配置,再调用 RefreshScope.refreshAll() 清除缓存并标记旧实例为 destroyed,下次 getBean 时才重新创建。
- 父子上下文中 ConfigurationPropertiesBeans 能合并父上下文已收集的 beans,保证子上下文也能看到父上下文的配置 Bean。
- 之前 jasypt 加密导致 profile 不生效的根因与 RefreshScope 相关:refresh scope 代理的 Bean 初始化时机和属性绑定顺序不同于普通 Bean。
Superpowers 技能流水线
- brainstorming 是 9 步完整流程:Explore context → Offer visual companion → Ask questions → Propose approaches → Present design → Write design doc → Spec self-review → User review → Transition to writing-plans。
- 写 spec 没有独立 skill,是 brainstorming 流程的第 6 步产出物,路径为 docs/superpowers/specs/YYYY-MM-DD--design.md。
- Superpowers 的完整流水线是:brainstorming(想法→spec)→ writing-plans(spec→实施计划)→ executing-plans(执行计划)。每一步的终端状态都是调用下一个 skill。