# 架构与不变量 ```mermaid flowchart LR A[原生目录和原生事件] --> B[只读来源适配器] B --> C[DSH 插件投影] C --> D[Runtime Map UI] E[两个 Skill] --> F[鉴权工具与保存队列] F --> G[DSH 画布存储] G --> D D --> H[返回原生应用] ``` 目录后台 `backend/server` 负责来源发现、登记与导航代理;DSH Host `src/index.mjs` 负责受保护路由、画布存储、外部状态观察和 Skill 工具;Client 负责渲染及交互。独立后台随插件按需启动,前后端可分别维护。 ## 不能被新功能破坏的契约 1. 原生应用是会话与执行状态的真源;Map 不能另造任务账本,不按标题/时间猜状态。 2. 全局仅一份节点坐标和关系。命名画布限定成员与视图,折叠各自记忆;选中集合跨画布保留。 3. 所有画布修改走同一保存队列和版本检查;Skill 通过 preview/apply/receipt/read 工作,不直接覆盖 JSON。 4. 跨画布共享节点整批移动只应用一次;一次撤销还原整批。并发冲突重读后计算,不覆盖其他编辑。 5. 原生组织只读;目录更新不能改变成员、坐标、连线或原生会话。 6. 后台辅助会话默认不进入普通目录/注意力入口。身份以原生 ID、来源及父子证据为准,不靠 Guardian 等标题判断。 7. 状态观察失效时降级未知;已证实的未查看结果与正在运行的时效分开。 8. 画布删除不删除节点对应的聊天;未知写入结果先核对回执,同一请求 ID 不盲目重放。 ## 保存边界 | 数据 | 保存责任 | | --- | --- | | 原生会话、项目、运行与已读证据 | 原生应用,只读采集 | | 外部登记、别名、历史目录关系 | 本地目录后台的 `data/ui-metadata.json` | | 当前共享图、画布成员、坐标、用户关系及视图 | DSH `runtime_map_layout_v2` 存储域 | | 地图查看回执 | 独立外部状态存储域 | | 临时状态、读日志游标 | 状态服务,不存进布局 | | 本机端口、令牌、服务控制 | 用户数据目录,禁止发布 | 目录后台保留早期登记接口作为兼容层;公开版不生成早期私人 seed,真实画布只经 DSH 画布工具更新。后台附带的静态页只是服务提示,实际 UI 是 DSH 插件;不把旧 standalone 前端当第二产品发布。