feat(console): 设置页「待重启」提示——暴露“配置已保存但未重启” - #80
Open
Windsander wants to merge 1 commit into
Open
Windsander wants to merge 1 commit into
Windsander wants to merge 1 commit into
Conversation
守护(mebular serve)只在启动时读取一次 config.json,运行期没有热加载;
设置页保存后磁盘已变,但当前实例仍按上次启动的快照工作,用户误以为
「配置无法生效」。真实案例:config 22:12 保存 network/join=true,进程
21:30 启动,settings 仍为 false/false。
- admin.mjs:buildSettings 新增 pendingRestart,按 curated 白名单(对齐
serve.mjs CONFIG_PATCH_SPECS)对比当前磁盘 config.json 与启动快照,元素
形如 { path, file, running };空数组=未设置归一为 null;受环境变量优先
的路径跳过并列入 pendingRestartEnvOverrides(不报错)。新增 restart
元信息(serviceHeartbeat / serviceManaged)供 UI 选择重启命令。
- console.js:设置弹窗内持久「待重启」提示(中文标签 + 已配置/实际 +
可复制重启命令 + 根因说明 + 环境变量优先说明);设置入口徽标与「运行
状态」区标注「待重启 N 项」;保留保存 toast。
- verify-console.mjs(E1):新增 pendingRestart 断言(含刚改键、元素
形状、重启后清空);顺带让只读降级用例改用临时端口,避免与本机真实
实例抢 7331。
- verify-console-ui.mjs:页面内 fetch+CSRF 改 sync.antiEntropy.intervalMs,
断言出现「待重启」及该项,改回后确认清空。
证据:npm test / npm run lint / check:cleanliness / check:docs /
verify-console / verify-console-ui 全绿。
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
问题
控制台设置页保存配置后,只弹一次 toast,没有任何持久提示。用户看到字段「已开启」、而「运行状态」仍是「未启用」,容易误以为「配置无法生效」。
真实案例:
config.json在 22:12 保存network.enabled=true/joinService.enabled=true,而 serve 进程 21:30 就已启动;/admin/api/settings仍返回network.enabled=false/join.enabled=false。字段显示已开启、运行状态显示未启用,二者长期不一致,且没有任何解释。根因
mebular serve)只在启动时读取一次config.json(createMebular),运行期没有热加载。config.json(state.rawConfig),而「实际运行状态」读的是启动快照。修复
后端
packages/mcp/src/admin.mjs(buildSettings):pendingRestart:按 curated 白名单(与serve.mjs的CONFIG_PATCH_SPECS对齐)对比当前磁盘 config.json 与本次启动快照,列出不一致的重启类配置项,元素形如{ path, file, running }(JSON 安全值,未设置为null)。null,如sync.namespaces/listen),避免默认值被误报。MEBULAR_PUSH_ON_WRITE/MEBULAR_NETWORK_ENABLED/MEBULAR_SEMANTIC_ENABLED)时,磁盘值重启也不会被采纳——这类路径不计入pendingRestart,改列到pendingRestartEnvOverrides,不报错。mcp.*以启动快照为基准,--port 0的实际端口由系统分配,不代表磁盘值未生效,避免误报。restart元信息:serviceHeartbeat(读取<home>/service.heartbeat)与serviceManaged(launchd/systemd/计划任务注入的MEBULAR_SERVICE_KIND/MEBULAR_SERVICE_SHA),供前端选择重启命令文案。前端
packages/console/console.js+index.html+console.css:已配置 / 实际),给出可复制重启命令(托管服务 →mebular service restart;普通启动 →nohup mebular serve … &),并附根因说明:「守护只在启动时读取配置;保存后当前实例仍按上次启动的配置工作,重启后生效。」;环境变量优先时以环境变量为准。回归
packages/console/scripts/verify-console.mjs(E1):新增pendingRestart断言——保存后命中刚改的network.enabled/joinService.enabled/sync.antiEntropy.intervalMs,元素含file/running;独立 home 重启用例断言「全新为空 → 保存后命中 → 重启后清空」。packages/console/scripts/verify-console-ui.mjs:页面内fetch+ CSRF(document.cookie的mebular_csrf)POST/admin/api/config改sync.antiEntropy.intervalMs,刷新后断言出现「待重启」且含该项与入口徽标;改回/删除后确认pendingRestart清空。7331导致误失败。证据(全绿)
影响面
pendingRestart/pendingRestartEnvOverrides/restart),向后兼容,不改动既有字段语义与写端点行为。packages/fleet、CI workflow、根package.json;未新增依赖/脚本。pendingRestart仅覆盖serve.mjscurated 白名单(可经控制台保存的重启类配置);身份/存储/加密等手工编辑项不在内。