发布 v0.5.2:证书、SSH 与 WebSocket 稳定性修复及双语操作结果校正 - #42
Merged
massif-01 merged 9 commits intoSep 28, 2026
Merged
Conversation
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.
修改内容
本 PR 汇总证书/HTTPS、自动化/SSH/日志、WebUI 提示语及 WebSocket 设备端采集与生命周期修复,版本升级为 0.5.2。重点修正“接口已受理却显示操作成功”“旧异步结果覆盖新状态”“保存/停止失败被忽略”等问题,并补充生产函数及浏览器回归。
中文 Release 正文:docs/releases/v0.5.2.md。发布条件与验证:docs/releases/v0.5.2-validation.md。
最新增量:真机 ssh_poll 栈溢出修复与验收
当前提交
dc880ea。SSH 登录欢迎输出后曾发生ssh_pollstack overflow 并重启。本次只将 poller 的 PSRAM 栈预算从4096改为8192 bytes,并以vTaskDeleteWithCaps配对原xTaskCreateWithCaps;输出缓冲、优先级、operation、协议与硬件保护不变。单实例额外栈预算4096 bytes。voltprot --debug通知进入活动 SSH:无假本地提示符,下一次真实键盘输入仍为 ssh_input,远端 echo 返回正确;Ctrl+\ 收到关闭终态后恢复本地输入。页面离开/重入及任务回收通过。调试按原30秒上限自动结束,未触发实际低压/关机;未在8–10秒内提前关闭的过程差异已记录。完整修复与验收记录、提交前审查、最终真机网络证据、最终设备状态与资源校验。
以下各基础章节的“待实机验收/未操作设备”描述属于对应历史提交,当前已补验范围以上文为准。长期压力、真实低压保护、TLS/旧配置升级等未覆盖事项仍不因本次 SSH 验收通过而自动关闭。此更新未合并、未打 tag、未发布;新 HEAD CI 需单独检查。
本地化基础:Web Terminal 固定版本依赖
本地化基础提交
3a19128。xterm 5.3.0 与 xterm-addon-fit 0.8.0 从原 CDN 发行资源固定到设备 WebUI;保留两个独立 MIT LICENSE。loader 只请求同源 vendor 路径,使用现有 TS_ASSET_VERSION;无 CDN fallback 或构建下载。经用户确认,将超过现有 SPIFFS 32 字节路径限制的 addon/许可证缩短为 fit.min.js / LICENSE-fit,不改文件内容、CMake 或文件系统格式。修复与全部命令/边界、来源与 SHA256、最终产物/容量证据、离线网络记录、提交前核对。未改版本、发布工作流;不合并或发布 Release。
J1 基础:电源告警保持终端输入归属
J1 基础提交
633bb94,在8ad39a9上追加。电源告警在活动 SSH、连接中、断开中或恢复中仅另起一行显示,不再伪造本地tianshan>提示符。只有终端存活、连接与 WebSocket 就绪且处于本地可交互状态时,才沿用原来的输入缓冲和光标恢复。告警不改变会话状态、不发送请求,不向远端发送重绘或额外输入;原告警文本、颜色、翻译和倒计时筛选保持不变。生产修改限于
handlePowerEvent()和既有静态资源缓存标识;未修改后端、控制层、输入路由、协议、硬件保护、版本或发布流程。0x215120,分区约 31% 剩余。缓存标识、gzip、优化资源及重生成 SPIFFS 与实际 www.bin 一致性通过。审查材料:J1 修复与验收记录、提交前审查、完整反例与测试证据、本次 diff。
v3 基础:SSH 请求、会话与前端后续操作的端到端契约
v3 基础提交
8ad39a9,在568b871上追加。修复不支持信号/非法参数/可恢复控制失败被解释成 SSH 终态的问题:有效 SSH 保持输入路由,不输出本地提示符、不自动接管或重发;真正的通道故障仍通过原 operation 关闭、前序输出结算和唯一终态收尾。启动拒绝只影响对应尝试。审查入口:
控制归属与取消契约(保留的基础)
Shell 输入、断开、信号、resize 统一根据实际请求连接的完整 peer,在操作锁内校验归属并取得原引用;连接关闭和清理也按原 peer 处理。Exec 取消按 exact 非零 ID 先登记原操作意图,再协作中止;意图贯穿准备、密钥读取、创建、连接、认证和执行,取消与提交资格同锁决定先后。USER/TIMEOUT/MATCH 保持分离,观察失败和服务停止不自动取消远端业务。
历史证据:V1/V2 控制契约、G1/G2 生命周期、F1/F2 投递与保护配额。这些是历史基线,v3 基础与本次 J1 的验证范围分别列明,不互相替代。
v3 本地验证(历史基线)
同一最终输入哈希已执行并保留退出码:
run_host.sh、run_operation.sh、run_operation_adapter.sh、run_control.sh、run_reviewer.sh、run_f1_f2.sh:有效历史回归保持,包括停止重试、资源耗尽、身份隔离、逐目标结算与公平推进。统一入口:
IDF_PATH=/path/to/esp-idf python3 tests/ws_subscriptions/run_project_v3.py,浏览器加--browser。反例重放replay_project_baseline.py返回 0 表示旧缺陷被确认,不是修复通过;缺依赖或编译失败不算反例。目标 GCC 测得 Shell 对象 1076 → 1080 字节,WebUI Shell context 20 → 20;相同正常创建/写入/不支持信号/关闭路径的项目分配次数不增加。单函数栈帧记录不代表完整调用链峰值或设备栈水位。
兼容性、剩余风险与验收边界
/ws独立认证/主题授权缺口不在本轮范围,定向发送不代表完成安全验收。升级前备份配置,不承诺配置写入后无条件降级。当前本地门槛不代替合并批准或实机验收。新增 C/跨层套件尚未接入 CI;现有 CI 运行 WebUI 回归和固件构建,只看新 head 的结果,不沿用上一提交绿灯。
发布边界
本次追加没有改版本号、发布工作流、硬件保护、SSH 匹配规则、布局或公开协议。PR 不发布正式 Release,不自行合并。
保留既有流程:组织 main 合并后,固件构建和 WebUI 回归成功,核对版本与中文 Release 正文后自动发布 v0.5.2;同版本已存在则跳过,不覆盖正式 Release。