1. 配置不是参数文件,而是“插件树描述”
DSH 启动时不是硬编码 new ToolRegistry(); new SessionStore()。它把 profile 中有序 bundle、profile patch、home patch、命令行 overlay 合成配置条目,再由 Cordis Loader 挂载。
2. Profile 与 Bundle
Profile 是用户/部署级组合;Bundle 是可分发的配置层。官方 web 与 headless 作为模板。最底层通常是 base,往上再叠 UI 或一次性运行器。
empty entries
+ dsh-base bundle
+ profile-specific bundle(s)
+ profile cordis.patch.yml
+ $DSH_HOME/cordis.patch.yml
+ --patch overlay
= final plugin tree
3. Patch 的设计价值
运维或用户想换模型 provider、关闭某工具、换 persistence backend,不需要 fork 源码,只 patch 对应配置 row。--dump-config 的价值就是把“机器实际启动的树”展开给你看。
4. Boot 失败为什么要整体回滚
启动过程中可能已有部分插件注册了 service/listener。若某后续插件失败而不 dispose,进程会留下半初始化状态。app-boot 的关键职责之一就是让构建过程具有事务式失败语义。