# Design ## Boundary 本任务增加机器级 Dever 管理层。它拥有稳定入口、版本目录、项目版本分派、更新事务和共享缓存服务;版本化编译器继续拥有源码检查、生成和运行语义。项目仍通过现有 CLI 合同进入编译器。 ## Directory Contract 发行安装器按平台选择机器级根目录,但根内布局一致: ```text / bin/ dever stable launcher deverd cache/build service state/ active-version install.lock versions/ / dever-core manifest.json runtime/ cache/ native/ downloads/ staging/ ``` `bin/dever` 是机器上唯一公开入口。`versions/*`、`state/*` 与缓存目录不加入 PATH,也不要求用户直接操作。目录根由安装器写入 launcher 自身的安装位置,运行时不读取环境变量。 ## Command Flow 1. launcher 解析命令和项目根,不读取 Dever 源码。 2. 对项目命令只解析 `config/setting.json` 的 `dever.version`;存在时精确选择,否则读取机器 `active-version`。 3. launcher 校验版本 manifest 和核心可执行文件身份,然后把原参数分派给版本核心。 4. 核心完成现有 check/run/build 流程;需要原生产物时通过本机受保护 IPC 请求 `deverd`。 5. `deverd` 根据已安装版本和完整构建输入自行计算缓存键、编译或恢复产物,再将结果返回请求用户,客户端不能指定缓存文件路径。 `config/setting.json` 增加可选配置: ```json { "dever": { "version": "0.1.0" } } ``` runtime 配置解析器接受并忽略已经由 launcher 消费的 `dever` 段,确保同一配置可以同时用于 `run` 和独立构建产物;构建产物不使用该字段选择自身 runtime。 ## Ownership - `dever-cli`:稳定 launcher 命令合同、项目版本读取和版本核心分派。 - 独立 machine manager 模块:安装、更新、切换、卸载、签名验证和原子状态变更;不把这些分散进每个命令分支。 - `dever-runtime::config`:只增加严格的 `dever.version` 配置合同,不承担安装或版本选择。 - `dever-core::native::build`:把默认缓存请求交给共享服务;保留显式隔离缓存入口供测试使用。 - cache service:唯一可写共享缓存的进程,负责密码学键、编译、恢复、并发发布、租约和清理。 - 平台 adapter:只封装全局路径、权限提升、服务管理和 IPC 差异;上层状态机和版本规则只有一套。 ## Install And Update Transaction 下载先进入 `cache/downloads`,验证发行 manifest 签名、包摘要、平台和版本后解包到 `cache/staging`。核心自检成功后原子发布到 `versions/`,最后原子更新 `active-version`。任一步失败都删除 staging 并保留旧版本。卸载同样持有 `install.lock`,不能删除当前版本或正在服务请求的版本。 初次安装由签名的系统安装器建立全局入口、机器服务、权限和初始版本;之后统一由 `dever install/update/use/uninstall` 管理。需要管理员权限时使用平台标准提权流程,不保存凭据。 ## Cache Security And Cleanup - `deverd` 使用专用系统身份,缓存目录只允许该身份写入。 - 本地 IPC 使用操作系统凭据识别调用者;请求只包含规范化构建输入,不接受任意读写路径。 - 缓存键使用 SHA-256 等密码学摘要;命中前复核 manifest 与产物摘要。 - 客户端只有提交完整相同输入才能取得同一产物,服务不提供缓存目录列表或其他项目索引。 - 运行中的条目持有租约。清理只删除无租约的 staging、损坏条目和按策略选出的旧条目,并使用原子删除/替换。 - `cache status` 输出容量、条目数和版本占用,不输出项目源码、路径或用户信息。 ## Failure Contract 全局入口、活动版本状态、项目锁定、签名、版本 manifest、IPC 或缓存完整性任一验证失败时返回明确错误。不得静默切换版本、使用用户 PATH 中的编译器、改写项目配置或执行未验证产物。 ## Compatibility 开发态 `deverc` 保持为私有仓库入口直到正式发行链完成。正式 `dever` 不读取开发仓库 `target/native-artifacts`。已有项目无需新增配置;只有需要固定版本的项目才增加 `dever.version`。 ## Deferred Complexity 本任务不重复实现父发行任务的原生后端、目标包生产和发布基础设施。安装管理层必须以父任务提供的签名发行包为输入;在发行包合同完成前可以实现和测试本地 fixture,但不能宣称公开安装链已完成。