跳到主要内容
版本:Next

从 Shine 1.x 升级

Shine 2.0 已是当前稳定版。它引入了更严格的生命周期安全与恢复边界;从既有 1.x 安装升级前, 请先阅读下列兼容性变化。

安装稳定版 2.0

在 macOS 或 Linux 上安装最新稳定版:

curl -fsSL https://github.com/biulight/shine/releases/latest/download/install.sh | sh

在 Windows PowerShell 中:

irm https://github.com/biulight/shine/releases/latest/download/install.ps1 | iex

也可以在 Rust 1.88 或更高版本下从 crates.io 安装:

cargo install shine-cli

已有 Shine 安装可以显式切换到 stable 通道:

shine self upgrade --channel stable

shine self upgrade --channel preview 会改为跟随持续覆盖的 preview 构建,而不是稳定版。

在变更前审阅 Plan

安装、升级、卸载、generator 刷新、artifact 和受管 Sys 操作现在都会显示绑定状态快照的 Plan。交互式确认默认为 No。审阅其中的步骤、权限和 blocker 后再确认,或在有人值守的 自动化中使用 --yes

shine app upgrade <CATEGORY>
shine app upgrade <CATEGORY> --yes

--yes 只跳过确认提示,不会跳过 Plan 展示、权限检查,也不会跳过 mutation 前基于最新 快照的再次校验。

重新建立外部代码信任

1.x 中宽泛的 allow_app_hooksallow_sys_code 已停用:它们会被忽略,并在下次保存配置 时移除。Shine 不会将其自动转换成 grant。外部 App、Shell 和 Sys 可执行 target 需要按 target 授权,授权绑定 source layer、代码摘要、capability 和声明的精确权限:

shine trust inspect <TARGET>
shine trust grant <TARGET>
shine trust list

外部代码或所请求权限发生变化后,旧 grant 会失效,必须重新审阅。

Generator 与环境变化

只读的 status 和 info 命令默认不再执行 App generator;仅在明确需要运行 generator 代码 时使用 --run-generators。生命周期命令只计算所选操作需要的 generator,并在 Plan 中显示 权限。

hook 和 generator 的环境已收窄到声明的输入。每个必需的环境来源还必须列入 target 的 permission declaration;未声明的值不会从父进程继承。Plan 和信任记录永远不会包含 secret 明文。

Sys profile 与状态迁移

shine upgrade 不再隐式改变 Sys profile 的启用状态,请显式管理:

shine sys profile status
shine sys profile enable
shine sys profile disable

先检查旧 runtime 和 environment 状态,再应用迁移:

shine state migrate --dry-run
shine state migrate

旧 App、Shell 和 Sys manifest 仍可读取。只有相关 mutation 成功后,Shine 才会把 manifest 更新到当前 schema。没有 receipt 的既有 1.8 Shell launcher 可直接生成卸载 Plan 并卸载, 无需先重新安装。被用户修改或不属于 Shine 的 launcher 和用户文件会保留并报告,不会覆盖。

恢复中断的操作

journaled mutation 中断后,后续写操作会暂停,直到恢复 Plan 得到审阅。请使用对应生命周期 的命令:

shine app recover
shine shell recover
shine sys recover

恢复只会还原或移除指纹仍匹配的资源。destination、backup 或 rollback 文件发生变化时, 恢复会被阻止,并保留这些内容供人工检查。

更新外部 Preset

首次升级配置前,先审阅当前激活的 1.x external source 与 overlay:

shine preset migrate --dry-run
shine preset migrate
# 审阅同一来源后用于自动化:
shine preset migrate --yes

也可以传入 Preset 仓库、类别目录或 shine.toml。该命令只改写安全的 shine.toml metadata, 逐文件显示 diff,确认默认是 No;写入前会校验候选内容并创建完整的私有备份集。它绝不会改动 payload、脚本、环境值、运行状态或 trust grant。Git 管理的 overlay 是只读缓存:请对上游 checkout 显式执行路径迁移,在上游提交后再 pull。

opaque App/Shell/Sys 代码的权限与 Sys v1 dispatcher 必须人工改写。按照报告中的 target-local 位置补全。文本报告会为可写 manifest 解析实际路径,并给出可直接复制执行的 preset validate 和当前平台 preset plan 命令。Git 管理的 overlay 仍是只读镜像,因此报告会指向上游 checkout, 不会建议直接编辑镜像路径。

trust enrollment 只适用于外部 App hook/generator/artifact 代码和 Sys bootstrap/profile 代码。 验证通过后,运行报告给出的 shine trust inspect app/<CATEGORY>shine trust inspect sys/<ITEM>;只有接受所显示的权限范围后才执行 grant。Shell 命令通过 [files.permissions] 声明和 security Plan 审阅,不是合法的 trust inspect/grant target。

shine update 会显示简洁的 Preset compatibility 摘要,并继续完成可执行的配置检查和 Shine release 检查,最后再因 blocker 返回非零。最终错误只给出一次 shine preset migrate --dry-run 入口;该命令再按 manifest 分组显示详细修复步骤。 shine upgrade 会在任何生命周期 Plan 或 mutation 前执行同一 preflight;使用 --pull 时则在 拉取并重新加载后检查,不兼容时不会产生部分升级。

外部 Preset 必须为每个可执行 target 声明 permission schema v1。缺失或无效声明属于 blocker,不会被解释为隐式宽泛授权。作者应在分发前运行静态和 fixture 检查:

shine preset schema
shine preset validate <PATH>
shine preset lint <PATH> --deny-warnings
shine preset test <CATEGORY>
shine preset pack <CATEGORY> --output <FILE>

请在 Shine issue tracker 反馈 RC 兼容问题,附上 渲染后的 Plan 和平台信息,但不要包含 secret 或私有文件内容。